diff --git a/helper_scripts/fixcerts b/helper_scripts/fixcerts
new file mode 100644
index 0000000000000000000000000000000000000000..9136d1e7155a01c292218bf7c579f28e826302f2
--- /dev/null
+++ b/helper_scripts/fixcerts
@@ -0,0 +1,151 @@
+ #!/bin/bash
+#####################################################################################
+#                                                                                   #
+# Syntax: fixcerts DOMAIN                                                           #
+#                                                                                   #
+# Use: Extend Letsencrypt SSl certificates for commonly grouped services such as    #
+#       Apache,Postfix,Dovecot using Certbot. Useful for keeping all client         #
+#       applications referencing the same virtual domain name, such as auto-config  #
+#       email clients on phones, i.e. mailuser@mydomain.TLD smtp.mydomain.TLD       #
+#       imaps.mydomain.TLD instead of mailuser@mydomain.TLD mail.ISPmaildomain.TLD  #
+#       Also useful when sending mail through services like Gmail that will         #
+#       validate sender through a negotiated TLS encrypted connection.              #
+#                                                                                   #
+#       Ex: sh fixcerts myhosteddomain.com                                          #
+#                                                                                   #
+# Prerequisites:                                                                    #
+#   - A Letsencrypt certificate for the DOMAIN must already exist                   #
+#   - A seperate certificate each for Dovecot and Postfix were previously generated #
+#   - All new host names to add MUST  already exist in DNS at least as a CNAME      #
+#   - Edit the Dovecot/Postfix conf to use the alternate certificate                #
+#   - Set the variable wr_file to a directory that certbot can read and write from  #
+#   - Set the dom_cert=,dv_cert=,pf_cert=,dv_file=, and pf_file= variables          #
+#                                                                                   #
+# In my case, I ran:                                                                #
+#   certbot certonly -webroot /usr/local/ispconfig/interface/acme -d dc.hrst.xyz    #
+#   certbot certonly -webroot /usr/local/ispconfig/interface/acme -d pf.hrst.xyz    #
+#   to create the separate Dovecot and Postscript certificates, then edited and     #
+#   ran the script to extend those certificate, once per hosted domain              #
+#                                                                                   #
+# If you use only one alternate certifcate for both mail services, set both dv_file #
+#     and pf_file to the same file name and set one of  _cert files=""  and         #
+#     use the other. If you don't wish to add to a particular certificate, set the  #
+#     variable ="", such as dom_cert                                                #
+# TODO: Pre-validate desired additions as already existing in DNS                   #
+#       Generate SRV Records and add to DNS to autoconfig clients                   #
+#                                                                                   #
+# Author: tad.hasse@gmail.com                                                       #
+#                                                                                   #
+#####################################################################################
+
+#bail out on error
+set -e
+
+# Hostnames to add to the main domain certificate
+dom_cert="webmail"
+
+# Hostnames to add to the Dovecot domain certificate
+dv_cert="pop3s imap"
+
+# Hostnames to add to the Postfix domain certificate
+pf_cert="mail smtp smtps"
+
+# Name of the certificate file that handles Dovecot
+dv_file="dc.hrst.xyz"
+
+# Name of the certificate file that handles Postfix
+pf_file="pf.hrst.xyz"
+
+# Writeable webroot for certbot (I use ISPConfig,
+wr_file="/usr/local/ispconfig/interface/acme"
+
+new_cert=""
+nanobot=""
+affected_services=""
+
+if [ -z "$1" ]                           # Is parameter #1 zero length?
+   then
+     echo "-No DOMAIN specified"          # Or no parameter passed.
+     exit 1
+   fi
+
+#live_check='/etc/letsencrypt/live/'$1
+if [[ ! -d '/etc/letsencrypt/live/'$1 ]]; then
+    echo "- DOMAIN certificate for \"$1\" not found -"
+    exit 1
+   fi
+
+if [[ ! -d '/etc/letsencrypt/live/'${dv_file} ]]; then
+    echo "- Dovecot/postoffice certificate" ${dv_file}" for \"$1\" not found -"
+    exit 1
+   fi
+
+if [[ ! -d '/etc/letsencrypt/live/'${pf_file} ]]; then
+    echo "- Postfix/mail certificate" ${pf_file}" for \"$1\" not found -"
+    exit 1
+   fi
+
+# Have certbot generate its current certificate list for use as input
+certbot certificates >~/certfile
+
+# Extend base domain certificate which typically only contains the domain.TLD and www.domain.TLD
+if [[ ! -z "${dom_cert}" ]]; then
+    echo
+    new_cert=$(echo $dom_cert| sed -e "s/ /.$1 /g" -e 's/ / -d /g' -e "s/$/.$1 /g" -e 's/^/-d /g')
+    echo "Adding" ${new_cert} " to "$1
+    nanobot=$(grep -A1 "Certificate Name: "$1 certfile |awk -F': ' '{ {getline}; $1=""; print }'|sed  's/ / -d /g')
+    doit_cert=$(echo "certbot certonly --webroot -w ${wr_file}${nanobot} ${new_cert}")
+    ${doit_cert}
+    affected_services=${affected_services}+"A"
+else
+    echo "Domain Certificate unaffected"
+  fi
+
+# Extend the Dovecot certificate
+if [[ ! -z "${dv_cert}" ]]; then
+    echo
+    new_cert=$(echo $dv_cert| sed -e "s/ /.$1 /g" -e 's/ / -d /g' -e "s/$/.$1 /g" -e 's/^/-d /g')
+    echo "Adding" ${new_cert} " to "${dv_file}
+    nanobot=$(grep -A1 "Certificate Name: "${dv_file} certfile |awk -F': ' '{ {getline}; $1=""; print }'|sed  's/ / -d /g')
+    doit_cert=$(echo "certbot certonly --webroot -w ${wr_file}${nanobot} ${new_cert}")
+    ${doit_cert}
+    affected_services=${affected_services}+"D"
+else
+    echo "Dovecot Certificate unaffected"
+  fi
+
+# Extend the Postscript certificate
+if [[ ! -z "{$pf_cert}" ]]; then
+    echo
+    new_cert=$(echo $pf_cert| sed -e "s/ /.$1 /g" -e 's/ / -d /g' -e "s/$/.$1 /g" -e 's/^/-d /g')
+    echo "Adding" ${new_cert} " to " ${pf_file}
+    nanobot=$(grep -A1 "Certificate Name: "${pf_file} certfile |awk -F': ' '{ {getline}; $1=""; print }'|sed  's/ / -d /g')
+    doit_cert=$(echo "certbot certonly --webroot -w ${wr_file}${nanobot} ${new_cert}")
+    ${doit_cert}
+    affected_services=${affected_services}+"P"
+else
+    echo "Postfix Certificate unaffected"
+  fi
+
+  if [[ $affected_services == *"A"* ]]; then
+     echo "Remember to restart the httpd service"
+   fi
+  if [[ $affected_services == *"D"* ]]; then
+    echo "Remember to restart the dovecot/postoffice service"
+   fi
+  if [[ $affected_services == *"P"* ]]; then
+    echo "Remember to restart the postfix/sendmail  service"
+   fi
+
+echo
+echo
+echo "Add the following SRV records to DNS for client setup for "$1
+  if [[ $affected_services == *"D"* ]]; then
+    echo "_imaps._tcp."$1 "SRV 3600  4 60 993 imaps"
+    echo "_pop3s._tcp."$1 "SRV 3600  6 60 995 pop3s"
+    echo "_imap._tcp."$1 " SRV 3600  8 60 143 imap"
+  fi
+if [[ $affected_services == *"P"* ]]; then
+    echo "_smtps._tcp."$1 "SRV 3600  8 60 465 smtps"
+    echo "_smtp._tcp."$1 " SRV 3600 10 60 587 smtp"
+  fi
\ No newline at end of file
diff --git a/install/dist/conf/centos70.conf.php b/install/dist/conf/centos70.conf.php
index a40e88ed70e50d7d0bdffaa6a4235b1b96d0fe48..0465e5618a0a33e6e4dc27813b237356c275d090 100644
--- a/install/dist/conf/centos70.conf.php
+++ b/install/dist/conf/centos70.conf.php
@@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavisd';
 $conf['amavis']['init_script'] = 'amavisd';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd@amavisd';
diff --git a/install/dist/conf/centos72.conf.php b/install/dist/conf/centos72.conf.php
index e7ab6030b7210051697de71425724ceaac4a1119..221cc5d7c40cbaf72a014f61bdb2bb2947f646e8 100644
--- a/install/dist/conf/centos72.conf.php
+++ b/install/dist/conf/centos72.conf.php
@@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavisd';
 $conf['amavis']['init_script'] = 'amavisd';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd@amavisd';
diff --git a/install/dist/conf/debian100.conf.php b/install/dist/conf/debian100.conf.php
new file mode 100644
index 0000000000000000000000000000000000000000..28d82b80794fad567dec6720a890596bd4838bcb
--- /dev/null
+++ b/install/dist/conf/debian100.conf.php
@@ -0,0 +1,234 @@
+<?php
+
+/*
+Copyright (c) 2016, Till Brehm, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+//***  Debian 10 default settings
+
+//* Main
+$conf['language'] = 'en';
+$conf['distname'] = 'debian100';
+$conf['hostname'] = 'server1.domain.tld'; // Full hostname
+$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
+$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
+$conf['server_id'] = 1;
+$conf['init_scripts'] = '/etc/init.d';
+$conf['runlevel'] = '/etc';
+$conf['shells'] = '/etc/shells';
+$conf['pam'] = '/etc/pam.d';
+
+//* Services provided by this server, this selection will be overridden by the expert mode
+$conf['services']['mail'] = true;
+$conf['services']['web'] = true;
+$conf['services']['dns'] = true;
+$conf['services']['file'] = true;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = true;
+$conf['services']['proxy'] = false;
+$conf['services']['firewall'] = false;
+
+//* MySQL
+$conf['mysql']['installed'] = false; // will be detected automatically during installation
+$conf['mysql']['init_script'] = 'mysql';
+$conf['mysql']['host'] = 'localhost';
+$conf['mysql']['ip'] = '127.0.0.1';
+$conf['mysql']['port'] = '3306';
+$conf['mysql']['database'] = 'dbispconfig';
+$conf['mysql']['admin_user'] = 'root';
+$conf['mysql']['admin_password'] = '';
+$conf['mysql']['charset'] = 'utf8';
+$conf['mysql']['ispconfig_user'] = 'ispconfig';
+$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
+$conf['mysql']['master_slave_setup'] = 'n';
+$conf['mysql']['master_host'] = '';
+$conf['mysql']['master_database'] = 'dbispconfig';
+$conf['mysql']['master_admin_user'] = 'root';
+$conf['mysql']['master_admin_password'] = '';
+$conf['mysql']['master_ispconfig_user'] = '';
+$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
+
+//* Apache
+$conf['apache']['installed'] = false; // will be detected automatically during installation
+$conf['apache']['user'] = 'www-data';
+$conf['apache']['group'] = 'www-data';
+$conf['apache']['init_script'] = 'apache2';
+$conf['apache']['version'] = '2.4';
+$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
+$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
+$conf['apache']['vhost_port'] = '8080';
+$conf['apache']['php_ini_path_apache'] = '/etc/php/7.3/apache2/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.3/cgi/php.ini';
+
+//* Website base settings
+$conf['web']['website_basedir'] = '/var/www';
+$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
+$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
+
+//* Apps base settings
+$conf['web']['apps_vhost_ip'] = '_default_';
+$conf['web']['apps_vhost_port'] = '8081';
+$conf['web']['apps_vhost_servername'] = '';
+$conf['web']['apps_vhost_user'] = 'ispapps';
+$conf['web']['apps_vhost_group'] = 'ispapps';
+
+//* Fastcgi
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.3/cgi/';
+$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
+$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
+
+//* Postfix
+$conf['postfix']['installed'] = false; // will be detected automatically during installation
+$conf['postfix']['config_dir'] = '/etc/postfix';
+$conf['postfix']['init_script'] = 'postfix';
+$conf['postfix']['user'] = 'postfix';
+$conf['postfix']['group'] = 'postfix';
+$conf['postfix']['vmail_userid'] = '5000';
+$conf['postfix']['vmail_username'] = 'vmail';
+$conf['postfix']['vmail_groupid'] = '5000';
+$conf['postfix']['vmail_groupname'] = 'vmail';
+$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
+
+//* Mailman
+$conf['mailman']['installed'] = false; // will be detected automatically during installation
+$conf['mailman']['config_dir'] = '/etc/mailman';
+$conf['mailman']['init_script'] = 'mailman';
+
+//* mlmmj
+$conf['mlmmj']['installed'] = false; // will be detected automatically during installation
+$conf['mlmmj']['config_dir'] = '/etc/mlmmj';
+
+//* Getmail
+$conf['getmail']['installed'] = false; // will be detected automatically during installation
+$conf['getmail']['config_dir'] = '/etc/getmail';
+$conf['getmail']['program'] = '/usr/bin/getmail';
+
+//* Courier
+$conf['courier']['installed'] = false; // will be detected automatically during installation
+$conf['courier']['config_dir'] = '/etc/courier';
+$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
+$conf['courier']['courier-imap'] = 'courier-imap';
+$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
+$conf['courier']['courier-pop'] = 'courier-pop';
+$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
+
+//* Dovecot
+$conf['dovecot']['installed'] = false; // will be detected automatically during installation
+$conf['dovecot']['config_dir'] = '/etc/dovecot';
+$conf['dovecot']['init_script'] = 'dovecot';
+
+//* SASL
+$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
+$conf['saslauthd']['config'] = '/etc/default/saslauthd';
+$conf['saslauthd']['init_script'] = 'saslauthd';
+
+//* Amavisd
+$conf['amavis']['installed'] = false; // will be detected automatically during installation
+$conf['amavis']['config_dir'] = '/etc/amavis';
+$conf['amavis']['init_script'] = 'amavis';
+
+//* ClamAV
+$conf['clamav']['installed'] = false; // will be detected automatically during installation
+$conf['clamav']['init_script'] = 'clamav-daemon';
+
+//* Pureftpd
+$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
+$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
+$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
+
+//* MyDNS
+$conf['mydns']['installed'] = false; // will be detected automatically during installation
+$conf['mydns']['config_dir'] = '/etc';
+$conf['mydns']['init_script'] = 'mydns';
+
+//* PowerDNS
+$conf['powerdns']['installed'] = false; // will be detected automatically during installation
+$conf['powerdns']['database'] = 'powerdns';
+$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
+$conf['powerdns']['init_script'] = 'pdns';
+
+//* BIND DNS Server
+$conf['bind']['installed'] = false; // will be detected automatically during installation
+$conf['bind']['bind_user'] = 'root';
+$conf['bind']['bind_group'] = 'bind';
+$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
+$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
+$conf['bind']['init_script'] = 'bind9';
+
+//* Jailkit
+$conf['jailkit']['installed'] = false; // will be detected automatically during installation
+$conf['jailkit']['config_dir'] = '/etc/jailkit';
+$conf['jailkit']['jk_init'] = 'jk_init.ini';
+$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
+$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch';
+$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
+
+//* Squid
+$conf['squid']['installed'] = false; // will be detected automatically during installation
+$conf['squid']['config_dir'] = '/etc/squid';
+$conf['squid']['init_script'] = 'squid';
+
+//* Nginx
+$conf['nginx']['installed'] = false; // will be detected automatically during installation
+$conf['nginx']['user'] = 'www-data';
+$conf['nginx']['group'] = 'www-data';
+$conf['nginx']['config_dir'] = '/etc/nginx';
+$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
+$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
+$conf['nginx']['init_script'] = 'nginx';
+$conf['nginx']['vhost_port'] = '8080';
+$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
+$conf['nginx']['php_fpm_init_script'] = 'php7.3-fpm';
+$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.3/fpm/php.ini';
+$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.3/fpm/pool.d';
+$conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.3-fpm';
+
+//* OpenVZ
+$conf['openvz']['installed'] = false;
+
+//*Bastille-Firwall
+$conf['bastille']['installed'] = false;
+$conf['bastille']['config_dir'] = '/etc/Bastille';
+
+//* vlogger
+$conf['vlogger']['config_dir'] = '/etc';
+
+//* cron
+$conf['cron']['init_script'] = 'cron';
+$conf['cron']['crontab_dir'] = '/etc/cron.d';
+$conf['cron']['wget'] = '/usr/bin/wget';
+
+//* Metronome XMPP
+$conf['xmpp']['installed'] = false;
+$conf['xmpp']['init_script'] = 'metronome';
+
+
+?>
diff --git a/install/dist/conf/debian40.conf.php b/install/dist/conf/debian40.conf.php
index 613c828d14906474fbda3a3b475508e5b8b2f997..c04a54e998e5224e6d061937527184e18b27cc34 100644
--- a/install/dist/conf/debian40.conf.php
+++ b/install/dist/conf/debian40.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/debian60.conf.php b/install/dist/conf/debian60.conf.php
index 2c26dcb9cbb26ae89f1126ce15440471485b028a..e7c8f59845f5cf4b957c5c5fc791f61990ce493f 100644
--- a/install/dist/conf/debian60.conf.php
+++ b/install/dist/conf/debian60.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/debian90.conf.php b/install/dist/conf/debian90.conf.php
index cdaf7aa9a0f1bba39ea7d0ec367e0c0f36d9a4f0..13fd2306543450d27d88f72319388f3ffe07abd8 100644
--- a/install/dist/conf/debian90.conf.php
+++ b/install/dist/conf/debian90.conf.php
@@ -153,6 +153,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/debiantesting.conf.php b/install/dist/conf/debiantesting.conf.php
index 92787bf428c441fdfae359ce967b6a813e42cd53..6ea9112dff854e87e39fac2c521d48cecf5fe840 100644
--- a/install/dist/conf/debiantesting.conf.php
+++ b/install/dist/conf/debiantesting.conf.php
@@ -28,11 +28,11 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
-//***  Ubuntu 16.04 default settings
+//***  Debian Testing default settings
 
 //* Main
 $conf['language'] = 'en';
-$conf['distname'] = 'ubuntu1604';
+$conf['distname'] = 'debian100';
 $conf['hostname'] = 'server1.domain.tld'; // Full hostname
 $conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
 $conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
@@ -83,8 +83,8 @@ $conf['apache']['version'] = '2.4';
 $conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
 $conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
 $conf['apache']['vhost_port'] = '8080';
-$conf['apache']['php_ini_path_apache'] = '/etc/php/7.0/apache2/php.ini';
-$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.0/cgi/php.ini';
+$conf['apache']['php_ini_path_apache'] = '/etc/php/7.3/apache2/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.3/cgi/php.ini';
 
 //* Website base settings
 $conf['web']['website_basedir'] = '/var/www';
@@ -99,7 +99,7 @@ $conf['web']['apps_vhost_user'] = 'ispapps';
 $conf['web']['apps_vhost_group'] = 'ispapps';
 
 //* Fastcgi
-$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.0/cgi/';
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.3/cgi/';
 $conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
 $conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
 
@@ -120,6 +120,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during
 $conf['mailman']['config_dir'] = '/etc/mailman';
 $conf['mailman']['init_script'] = 'mailman';
 
+//* mlmmj
+$conf['mlmmj']['installed'] = false; // will be detected automatically during installation
+$conf['mlmmj']['config_dir'] = '/etc/mlmmj';
+
 //* Getmail
 $conf['getmail']['installed'] = false; // will be detected automatically during installation
 $conf['getmail']['config_dir'] = '/etc/getmail';
@@ -149,6 +153,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
@@ -201,11 +210,11 @@ $conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
 $conf['nginx']['init_script'] = 'nginx';
 $conf['nginx']['vhost_port'] = '8080';
 $conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
-$conf['nginx']['php_fpm_init_script'] = 'php7.0-fpm';
-$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.0/fpm/php.ini';
-$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.0/fpm/pool.d';
+$conf['nginx']['php_fpm_init_script'] = 'php7.3-fpm';
+$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.3/fpm/php.ini';
+$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.3/fpm/pool.d';
 $conf['nginx']['php_fpm_start_port'] = 9010;
-$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.0-fpm';
+$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.3-fpm';
 
 //* OpenVZ
 $conf['openvz']['installed'] = false;
diff --git a/install/dist/conf/fedora9.conf.php b/install/dist/conf/fedora9.conf.php
index 80539a78593827e76bb7828ee684833f557b9dd7..19c9a4f6259600499d493c66718cf64bb7ff0a13 100644
--- a/install/dist/conf/fedora9.conf.php
+++ b/install/dist/conf/fedora9.conf.php
@@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavisd';
 $conf['amavis']['init_script'] = 'amavisd';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd.amavisd';
diff --git a/install/dist/conf/gentoo.conf.php b/install/dist/conf/gentoo.conf.php
index 2955cfa71dd391743f705449ea6849428005a367..24c7d0633e0b5b62db4004f329e83d503fb66aad 100644
--- a/install/dist/conf/gentoo.conf.php
+++ b/install/dist/conf/gentoo.conf.php
@@ -162,6 +162,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_file'] = '/etc/amavisd.conf';
 $conf['amavis']['init_script'] = 'amavisd';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd';
diff --git a/install/dist/conf/opensuse112.conf.php b/install/dist/conf/opensuse112.conf.php
index fa0504652e9e75d908186507a6c69c67c271f4b9..378320a144eb645262d39e645a1e994d7d2823d7 100644
--- a/install/dist/conf/opensuse112.conf.php
+++ b/install/dist/conf/opensuse112.conf.php
@@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamd';
diff --git a/install/dist/conf/ubuntu1604.conf.php b/install/dist/conf/ubuntu1604.conf.php
index 9ac56de3f871479033df0a742554ed6e905a3d39..0d3fe23bada198df3c9aae42b6cb42784973a6c1 100644
--- a/install/dist/conf/ubuntu1604.conf.php
+++ b/install/dist/conf/ubuntu1604.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/ubuntu1710.conf.php b/install/dist/conf/ubuntu1710.conf.php
index 0c87005910a61f8625735be1a6a130eaaee0cd54..0730f8f2d533c712ee78173ebb28b3fed477c514 100644
--- a/install/dist/conf/ubuntu1710.conf.php
+++ b/install/dist/conf/ubuntu1710.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
diff --git a/install/dist/conf/ubuntu1804.conf.php b/install/dist/conf/ubuntu1804.conf.php
index 15cdb1c5ebbb74c45ab1f1df2f1c5caf8a008464..2a09f787db46f5abf8fc7d2e15e4804dfe9d3222 100644
--- a/install/dist/conf/ubuntu1804.conf.php
+++ b/install/dist/conf/ubuntu1804.conf.php
@@ -149,6 +149,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i
 $conf['amavis']['config_dir'] = '/etc/amavis';
 $conf['amavis']['init_script'] = 'amavis';
 
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
 //* ClamAV
 $conf['clamav']['installed'] = false; // will be detected automatically during installation
 $conf['clamav']['init_script'] = 'clamav-daemon';
@@ -227,4 +232,4 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
-?>
\ No newline at end of file
+?>
diff --git a/install/dist/lib/centos_base.lib.php b/install/dist/lib/centos_base.lib.php
index 8e6741fd693ec22c06fa1e1a38a54b1af1c5e4cf..0fe988439d8098c255bf216489ab6e0053d99e2e 100644
--- a/install/dist/lib/centos_base.lib.php
+++ b/install/dist/lib/centos_base.lib.php
@@ -111,6 +111,25 @@ class installer_centos extends installer_dist {
 
 		removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
 		replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
+		
+		// get shell-group for amavis
+		$amavis_group=exec('grep -o "^amavis:\|^vscan:" /etc/group');
+		if(!empty($amavis_group)) {
+			$amavis_group=rtrim($amavis_group, ":");
+		}
+		// get shell-user for amavis
+		$amavis_user=exec('grep -o "^amavis:\|^vscan:" /etc/passwd');
+		if(!empty($amavis_user)) {
+			$amavis_user=rtrim($amavis_user, ":");
+		}
+		
+		// Create the director for DKIM-Keys
+		if(!is_dir('/var/lib/amavis')) mkdir('/var/lib/amavis', 0750, true);
+		if(!empty($amavis_user)) exec('chown '.$amavis_user.' /var/lib/amavis');
+		if(!empty($amavis_group)) exec('chgrp '.$amavis_group.' /var/lib/amavis');
+		if(!is_dir('/var/lib/amavis/dkim')) mkdir('/var/lib/amavis/dkim', 0750);
+		if(!empty($amavis_user)) exec('chown -R '.$amavis_user.' /var/lib/amavis/dkim');
+		if(!empty($amavis_group)) exec('chgrp -R '.$amavis_group.' /var/lib/amavis/dkim');
 
 
 	}
diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index 0cd71165684f7baf9a6cf4db29c74eab8938f47a..cc234f132e1fb4a66f4d7e5a1b13866617f4bd88 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -68,7 +68,6 @@ class installer extends installer_base {
 		}
 
 		//* Reconfigure postfix to use dovecot authentication
-		// Adding the amavisd commands to the postfix configuration
 		$postconf_commands = array (
 			'dovecot_destination_recipient_limit = 1',
 			'virtual_transport = '.$virtual_transport,
@@ -116,6 +115,38 @@ class installer extends installer_base {
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
 			}
+			if(version_compare($dovecot_version,2.3) >= 0) {
+				// Remove deprecated setting(s)
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+				
+				// Check if we have a dhparams file and if not, create it
+				if(!file_exists('/etc/dovecot/dh.pem')) {
+					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
+					if(file_exists('/var/lib/dovecot/ssl-parameters.dat')) {
+						// convert existing ssl parameters file
+						$command = 'dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					} else {
+						/*
+						   Create a new dhparams file. We use 2048 bit only as it simply takes too long
+						   on smaller systems to generate a 4096 bit dh file (> 30 minutes). If you need
+						   a 4096 bit file, create it manually before you install ISPConfig
+						*/
+						$command = 'openssl dhparam -out /etc/dovecot/dh.pem 2048';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					}
+				}
+				//remove #2.3+ comment
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('#2.3+','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+				
+			} else {
+				// remove settings which are not supported in Dovecot < 2.3
+				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
+				removeLine($config_dir.'/'.$configfile, 'ssl_dh =');
+			}
 		} else {
 			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian6_dovecot.conf.master')) {
 				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian6_dovecot.conf.master', $config_dir.'/'.$configfile);
diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index f1d57f9c83fdb12327395262570c061feaca865b..3af8746908c796967f118a82f83dffda675667f2 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -401,7 +401,6 @@ class installer_dist extends installer_base {
 		}
 
 		//* Reconfigure postfix to use dovecot authentication
-		// Adding the amavisd commands to the postfix configuration
 		$postconf_commands = array (
 			'dovecot_destination_recipient_limit = 1',
 			'virtual_transport = '.$virtual_transport,
@@ -450,6 +449,38 @@ class installer_dist extends installer_base {
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
 			}
+			if(version_compare($dovecot_version,2.3) >= 0) {
+				// Remove deprecated setting(s)
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+				
+				// Check if we have a dhparams file and if not, create it
+				if(!file_exists('/etc/dovecot/dh.pem')) {
+					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
+					if(file_exists('/var/lib/dovecot/ssl-parameters.dat')) {
+						// convert existing ssl parameters file
+						$command = 'dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					} else {
+						/*
+						   Create a new dhparams file. We use 2048 bit only as it simply takes too long
+						   on smaller systems to generate a 4096 bit dh file (> 30 minutes). If you need
+						   a 4096 bit file, create it manually before you install ISPConfig
+						*/
+						$command = 'openssl dhparam -out /etc/dovecot/dh.pem 2048';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					}
+				}
+				//remove #2.3+ comment
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('#2.3+','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+				
+			} else {
+				// remove settings which are not supported in Dovecot < 2.3
+				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
+				removeLine($config_dir.'/'.$configfile, 'ssl_dh =');
+			}
 			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
 			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = webmaster@localhost', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
 		} else {
@@ -1253,11 +1284,11 @@ class installer_dist extends installer_base {
 			$content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
 
 			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-				$content = str_replace('{ssl_on}', ' on', $content);
+				$content = str_replace('{ssl_on}', 'ssl', $content);
 				$content = str_replace('{ssl_comment}', '', $content);
 				$content = str_replace('{fastcgi_ssl}', 'on', $content);
 			} else {
-				$content = str_replace('{ssl_on}', ' off', $content);
+				$content = str_replace('{ssl_on}', '', $content);
 				$content = str_replace('{ssl_comment}', '#', $content);
 				$content = str_replace('{fastcgi_ssl}', 'off', $content);
 			}
diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index af692b16896abdc8d4c6c1107cce3429d59e6003..5bb0d9df1966347d54e9dd1b39d62dc462977560 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -785,7 +785,7 @@ class installer extends installer_base
 			$content = str_replace('{cgi_socket}', $cgi_socket, $content);
 			
 			// SSL in apps vhost is off by default. Might change later.
-			$content = str_replace('{ssl_on}', 'off', $content);
+			$content = str_replace('{ssl_on}', 'ssl', $content);
 			$content = str_replace('{ssl_comment}', '#', $content);
 			
 			wf($vhost_conf_dir.'/apps.vhost', $content);
@@ -1139,11 +1139,11 @@ class installer extends installer_base
 			$content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
 
 			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-				$content = str_replace('{ssl_on}', ' on', $content);
+				$content = str_replace('{ssl_on}', 'ssl', $content);
 				$content = str_replace('{ssl_comment}', '', $content);
 				$content = str_replace('{fastcgi_ssl}', 'on', $content);
 			} else {
-				$content = str_replace('{ssl_on}', ' off', $content);
+				$content = str_replace('{ssl_on}', '', $content);
 				$content = str_replace('{ssl_comment}', '#', $content);
 				$content = str_replace('{fastcgi_ssl}', 'off', $content);
 			}
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 6856317f934a3cac1451373bd7613071754558e1..21cfd9f2bad9d929e280f9abd5d091444131bff7 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -1264,11 +1264,11 @@ class installer_dist extends installer_base {
 			$content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
 
 			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-				$content = str_replace('{ssl_on}', ' on', $content);
+				$content = str_replace('{ssl_on}', 'ssl', $content);
 				$content = str_replace('{ssl_comment}', '', $content);
 				$content = str_replace('{fastcgi_ssl}', 'on', $content);
 			} else {
-				$content = str_replace('{ssl_on}', ' off', $content);
+				$content = str_replace('{ssl_on}', '', $content);
 				$content = str_replace('{ssl_comment}', '#', $content);
 				$content = str_replace('{fastcgi_ssl}', 'off', $content);
 			}
diff --git a/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master b/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master
index 5e1c8ebba6fe2616b76196ffa8a5155dd374c014..7e42c8a362b86f9255fbd46aa16c3a546b727a34 100644
--- a/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master
+++ b/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master
@@ -67,7 +67,7 @@ $final_spam_destiny = D_DISCARD;
 $final_banned_destiny = D_BOUNCE;
 $final_bad_header_destiny = D_PASS;
 
-# Default settings, we st this very high to not filter aut emails accidently
+# Default settings, we set this very high to not filter out emails accidentally
 $sa_spam_subject_tag = '***SPAM*** ';
 $sa_tag_level_deflt  = 20.0;  # add spam info headers if at, or above that level
 $sa_tag2_level_deflt = 60.0; # add 'spam detected' headers at that level
diff --git a/install/install.php b/install/install.php
index a324669867fc1a06bbf8c5acb76f76bc3ed87ef3..9dff3facf2e71a085e1cbc0994eb7cc8e967957b 100644
--- a/install/install.php
+++ b/install/install.php
@@ -385,7 +385,14 @@ if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Mail
 			$inst->configure_amavis();
 		}
 
-		//* Configure Getmail
+		//* Configure Rspamd
+		$force = @($conf['rspamd']['installed']) ? true : $inst->force_configure_app('Rspamd', ($install_mode == 'expert'));
+		if($force) {
+			swriteln('Configuring Rspamd');
+			$inst->configure_rspamd();
+		}
+
+//* Configure Getmail
 		$force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', ($install_mode == 'expert'));
 		if($force) {
 			swriteln('Configuring Getmail');
@@ -538,20 +545,6 @@ $install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] ==
 if($install_mode == 'standard' || strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') {
 	swriteln('Installing ISPConfig');
 
-	//** We want to check if the server is a module or cgi based php enabled server
-	//** TODO: Don't always ask for this somehow ?
-	/*
-	$fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no');
-
-	if($fast_cgi == 'yes') {
-		$alias = $inst->free_query('Script Alias', '/php/');
-		$path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin');
-		$conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path);
-	} else {
-		$conf['apache']['vhost_cgi_alias'] = "";
-	}
-	*/
-
 	//** Customise the port ISPConfig runs on
 	$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
 	$temp_admin_password = str_shuffle(bin2hex(openssl_random_pseudo_bytes(4)));
@@ -602,6 +595,7 @@ if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') s
 if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
 if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
 if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
+if($conf['rspamd']['installed'] == true && $conf['rspamd']['init_script'] != '') system($inst->getinitcommand($conf['rspamd']['init_script'], 'restart'));
 if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
 if($conf['courier']['installed'] == true){
 	if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
diff --git a/install/lib/classes/tpl.inc.php b/install/lib/classes/tpl.inc.php
index 73ff19230b6b95f83e8e32d26b86f1e8f243fec8..5bd8ded1f8818f2e1bb8b6d473d479facc1a0db0 100644
--- a/install/lib/classes/tpl.inc.php
+++ b/install/lib/classes/tpl.inc.php
@@ -357,147 +357,6 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-		/**
-		 * [** EXPERIMENTAL **]
-		 * Function to create a loop from a Db result resource link.
-		 * @param string $loopname to commit loop. If not set, will use last loopname set using newLoop()
-		 * @param string $result link to a Db result resource
-		 * @param string $db_type, type of db that the result resource belongs to.
-		 * @return boolean true/false
-		 * @access public
-		 */
-		public function setDbLoop($loopname, $result, $db_type = 'MYSQL')
-		{
-			/*
-			$db_type = strtoupper($db_type);
-            if (!in_array($db_type, $this->allowed_loop_dbs)) {
-                vlibTemplateError::raiseError('VT_WARNING_INVALID_LOOP_DB', WARNING, $db_type);
-                return false;
-            }
-
-            $loop_arr = array();
-            // TODO: Are all these necessary as were onyl using mysql and possible postgres ? - pedro
-            switch ($db_type) {
-
-                case 'MYSQL':
-                    if (get_resource_type($result) != 'mysql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = mysql_fetch_assoc($result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'POSTGRESQL':
-                    if (get_resource_type($result) != 'pgsql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-
-                    $nr = (function_exists('pg_num_rows')) ? pg_num_rows($result) : pg_numrows($result);
-
-                    for ($i=0; $i < $nr; $i++) {
-                        $loop_arr[] = pg_fetch_array($result, $i, PGSQL_ASSOC);
-                    }
-                    break;
-
-                case 'INFORMIX':
-                    if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = ifx_fetch_row($result, 'NEXT')) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'INTERBASE':
-                    if (get_resource_type($result) != 'interbase result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = ibase_fetch_row($result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'INGRES':
-                    if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = ingres_fetch_array(INGRES_ASSOC, $result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'MSSQL':
-                    if (get_resource_type($result) != 'mssql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = mssql_fetch_array($result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'MSQL':
-                    if (get_resource_type($result) != 'msql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while($r = msql_fetch_array($result, MSQL_ASSOC)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'OCI8':
-                    if (get_resource_type($result) != 'oci8 statement') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while(OCIFetchInto($result, &$r, OCI_ASSOC+OCI_RETURN_LOBS)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'ORACLE':
-                    if (get_resource_type($result) != 'oracle Cursor') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while(ora_fetch_into($result, &$r, ORA_FETCHINTO_ASSOC)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'OVRIMOS':
-                    if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-                    while(ovrimos_fetch_into($result, &$r, 'NEXT')) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-
-                case 'SYBASE':
-                    if (get_resource_type($result) != 'sybase-db result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
-                        return false;
-                    }
-
-                    while($r = sybase_fetch_array($result)) {
-                        $loop_arr[] = $r;
-                    }
-                    break;
-            }
-            $this->setLoop($loopname, $loop_arr);
-            return true;
-			*/
-		}
-
 		/**
 		 * Sets the name for the curent loop in the 3 step loop process.
 		 * @param string $name string to define loop name
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 9e2afe76c4d6a524165e7d263231086064a07b58..1e49e025ca0360944a5ba6bd0bd12f5a7543dc4f 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -186,7 +186,7 @@ function get_distname() {
 				break;
 			default:
 				$relname = "UNKNOWN";
-				$distconfid = 'ubuntu1604';
+				$distconfid = 'ubuntu1804';
 			}
 			$distver = $ver.$lts." ".$relname;
 			swriteln("Operating System: ".$distname.' '.$distver."\n");
@@ -214,19 +214,26 @@ function get_distname() {
 			$distid = 'debian60';
 			$distbaseid = 'debian';
 			swriteln("Operating System: Debian 7.0 (Wheezy/Sid) or compatible\n");
-		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '8') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') {
+		} elseif(substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') {
 			$distname = 'Debian';
 			$distver = 'Jessie';
 			$distid = 'debian60';
 			$distbaseid = 'debian';
 			swriteln("Operating System: Debian 8.0 (Jessie) or compatible\n");
-		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '9') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '9') {
+		} elseif(substr(trim(file_get_contents('/etc/debian_version')),0,1) == '9') {
 			$distname = 'Debian';
 			$distver = 'Stretch';
 			$distconfid = 'debian90';
 			$distid = 'debian60';
 			$distbaseid = 'debian';
 			swriteln("Operating System: Debian 9.0 (Stretch) or compatible\n");
+		} elseif(substr(trim(file_get_contents('/etc/debian_version')),0,2) == '10') {
+			$distname = 'Debian';
+			$distver = 'Buster';
+			$distconfid = 'debian100';
+			$distid = 'debian60';
+			$distbaseid = 'debian';
+			swriteln("Operating System: Debian 10.0 (Buster) or compatible\n");
 		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) {
 			$distname = 'Debian';
 			$distver = 'Testing';
@@ -238,7 +245,7 @@ function get_distname() {
 			$distname = 'Debian';
 			$distver = 'Unknown';
 			$distid = 'debian60';
-			$distconfid = 'debian90';
+			$distconfid = 'debian100';
 			$distbaseid = 'debian';
 			swriteln("Operating System: Debian or compatible, unknown version.\n");
 		}
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 10cfbaf9654bb5f8e31652069f5a01eb97a7dbc3..513858ca687065a51e9be208bea37e744fb0cab3 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -163,6 +163,7 @@ class installer_base {
 		if(is_installed('dovecot')) $conf['dovecot']['installed'] = true;
 		if(is_installed('saslauthd')) $conf['saslauthd']['installed'] = true;
 		if(is_installed('amavisd-new') || is_installed('amavisd')) $conf['amavis']['installed'] = true;
+		if(is_installed('rspamd')) $conf['rspamd']['installed'] = true;
 		if(is_installed('clamdscan')) $conf['clamav']['installed'] = true;
 		if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true;
 		if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true;
@@ -288,11 +289,15 @@ class installer_base {
 		$this->db->query("DROP USER ?@?", $conf['mysql']['ispconfig_user'], $from_host);
 		$this->db->query("DROP DATABASE IF EXISTS ?", $conf['mysql']['database']);
 
-		//* Create the ISPConfig database user in the local database
-		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON ?? TO ?@? IDENTIFIED BY ?';
-		if(!$this->db->query($query, $conf['mysql']['database'] . ".*", $conf['mysql']['ispconfig_user'], $from_host, $conf['mysql']['ispconfig_password'])) {
+		//* Create the ISPConfig database user and grant permissions in the local database
+		$query = 'CREATE USER ?@? IDENTIFIED BY ?';
+		if(!$this->db->query($query, $conf['mysql']['ispconfig_user'], $from_host, $conf['mysql']['ispconfig_password'])) {
 			$this->error('Unable to create database user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
 		}
+		$query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON ?? TO ?@?';
+		if(!$this->db->query($query, $conf['mysql']['database'] . ".*", $conf['mysql']['ispconfig_user'], $from_host)) {
+			$this->error('Unable to grant databse permissions to user: '.$conf['mysql']['ispconfig_user'].' Error: '.$this->db->errorMessage);
+		}
 
 		//* Set the database name in the DB library
 		$this->db->setDBName($conf['mysql']['database']);
@@ -321,6 +326,8 @@ class installer_base {
 		$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
 		$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
 		$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
+		$tpl_ini_array['mail']['content_filter'] = @($conf['rspamd']['installed']) ? 'rspamd' : 'amavisd';
+		$tpl_ini_array['mail']['rspamd_available'] = @($conf['rspamd']['installed']) ? 'y' : 'n';
 		$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
 		$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
 		$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
@@ -1046,7 +1053,7 @@ class installer_base {
 		$regex = "/^maildrop   unix.*pipe flags=DRhu user=vmail argv=\\/usr\\/bin\\/maildrop -d ".$cf['vmail_username']." \\$\{extension} \\$\{recipient} \\$\{user} \\$\{nexthop} \\$\{sender}/";
 		$configfile = $config_dir.'/master.cf';
 		if($this->get_postfix_service('maildrop', 'unix')) {
-			exec ("postconf -M maildrop.unix &> /dev/null", $out, $ret);
+			exec ("postconf -M maildrop.unix 2> /dev/null", $out, $ret);
 			$change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true;
 		} else {
 			$change_maildrop_flags = @(preg_match($regex, $configfile))?false:true;
@@ -1297,6 +1304,38 @@ class installer_base {
 				file_put_contents($config_dir.'/'.$configfile,$content);
 				unset($content);
 			}
+			if(version_compare($dovecot_version,2.3) >= 0) {
+				// Remove deprecated setting(s)
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+				
+				// Check if we have a dhparams file and if not, create it
+				if(!file_exists('/etc/dovecot/dh.pem')) {
+					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
+					if(file_exists('/var/lib/dovecot/ssl-parameters.dat')) {
+						// convert existing ssl parameters file
+						$command = 'dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					} else {
+						/*
+						   Create a new dhparams file. We use 2048 bit only as it simply takes too long
+						   on smaller systems to generate a 4096 bit dh file (> 30 minutes). If you need
+						   a 4096 bit file, create it manually before you install ISPConfig
+						*/
+						$command = 'openssl dhparam -out /etc/dovecot/dh.pem 2048';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					}
+				}
+				//remove #2.3+ comment
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('#2.3+','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+				
+			} else {
+				// remove settings which are not supported in Dovecot < 2.3
+				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
+				removeLine($config_dir.'/'.$configfile, 'ssl_dh =');
+			}
 		}
 
 		//* dovecot-lmtpd
@@ -1422,6 +1461,193 @@ class installer_base {
 
 	}
 
+	public function configure_rspamd() {
+		global $conf;
+		
+		//* These postconf commands will be executed on installation and update
+		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
+		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
+		unset($server_ini_rec);
+		
+		$mail_config = $server_ini_array['mail'];
+		if($mail_config['content_filter'] === 'rspamd') {
+			exec("postconf -X 'receive_override_options'");
+			exec("postconf -X 'content_filter'");
+
+			exec("postconf -e 'smtpd_milters = inet:localhost:11332'");
+			exec("postconf -e 'non_smtpd_milters = inet:localhost:11332'");
+			exec("postconf -e 'milter_protocol = 6'");
+			exec("postconf -e 'milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}'");
+			exec("postconf -e 'milter_default_action = accept'");
+
+			exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
+
+			$new_options = array();
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+			foreach ($options as $value) {
+				if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
+					$new_options[] = $value;
+				}
+			}
+			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+			
+		}
+
+		if(is_user('_rspamd') && is_group('amavis')) {
+			exec("usermod -G amavis _rspamd");
+		} elseif(is_user('rspamd') && is_group('amavis')) {
+			exec("usermod -G amavis rspamd");
+		}
+				
+		if(!is_dir('/etc/rspamd/local.d/')){
+			mkdir('/etc/rspamd/local.d/', 0755, true);
+		}
+
+		if(!is_dir('/etc/rspamd/override.d/')){
+			mkdir('/etc/rspamd/override.d/', 0755, true);
+		}
+		
+		if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
+			$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+		}
+		$dkim_domains = $this->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM ?? WHERE `dkim` = ? ORDER BY `domain` ASC', $conf['mysql']['database'] . '.mail_domain', 'y');
+		$fpp = fopen('/etc/rspamd/local.d/dkim_domains.map', 'w');
+		$fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w');
+		foreach($dkim_domains as $dkim_domain) {
+			fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n");
+			fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector'] . "\n");
+		}
+		fclose($fpp);
+		fclose($fps);
+		unset($dkim_domains);
+
+		$tpl = new tpl();
+		$tpl->newTemplate('rspamd_users.conf.master');
+
+		$whitelist_ips = array();
+		$ips = $this->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']);
+		if(is_array($ips) && !empty($ips)){
+			foreach($ips as $ip){
+				$whitelist_ips[] = array('ip' => $ip['ip_address']);
+			}
+		}
+		$tpl->setLoop('whitelist_ips', $whitelist_ips);
+		wf('/etc/rspamd/local.d/users.conf', $tpl->grab());
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_groups.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_groups.conf.master /etc/rspamd/local.d/groups.conf');
+		} else {
+			exec('cp tpl/rspamd_groups.conf.master /etc/rspamd/local.d/groups.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_antivirus.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_antivirus.conf.master /etc/rspamd/local.d/antivirus.conf');
+		} else {
+			exec('cp tpl/rspamd_antivirus.conf.master /etc/rspamd/local.d/antivirus.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_classifier-bayes.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_classifier-bayes.conf.master /etc/rspamd/local.d/classifier-bayes.conf');
+		} else {
+			exec('cp tpl/rspamd_classifier-bayes.conf.master /etc/rspamd/local.d/classifier-bayes.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_greylist.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_greylist.conf.master /etc/rspamd/local.d/greylist.conf');
+		} else {
+			exec('cp tpl/rspamd_greylist.conf.master /etc/rspamd/local.d/greylist.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_symbols_antivirus.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_symbols_antivirus.conf.master /etc/rspamd/local.d/antivirus_group.conf');
+		} else {
+			exec('cp tpl/rspamd_symbols_antivirus.conf.master /etc/rspamd/local.d/antivirus_group.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_rbl.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_rbl.conf.master /etc/rspamd/override.d/rbl_group.conf');
+		} else {
+			exec('cp tpl/rspamd_override_rbl.conf.master /etc/rspamd/override.d/rbl_group.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_surbl.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_surbl.conf.master /etc/rspamd/override.d/surbl_group.conf');
+		} else {
+			exec('cp tpl/rspamd_override_surbl.conf.master /etc/rspamd/override.d/surbl_group.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_mx_check.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_mx_check.conf.master /etc/rspamd/local.d/mx_check.conf');
+		} else {
+			exec('cp tpl/rspamd_mx_check.conf.master /etc/rspamd/local.d/mx_check.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_redis.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_redis.conf.master /etc/rspamd/local.d/redis.conf');
+		} else {
+			exec('cp tpl/rspamd_redis.conf.master /etc/rspamd/local.d/redis.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_milter_headers.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_milter_headers.conf.master /etc/rspamd/local.d/milter_headers.conf');
+		} else {
+			exec('cp tpl/rspamd_milter_headers.conf.master /etc/rspamd/local.d/milter_headers.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_options.inc.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_options.inc.master /etc/rspamd/local.d/options.inc');
+		} else {
+			exec('cp tpl/rspamd_options.inc.master /etc/rspamd/local.d/options.inc');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural.conf.master /etc/rspamd/local.d/neural.conf');
+		} else {
+			exec('cp tpl/rspamd_neural.conf.master /etc/rspamd/local.d/neural.conf');
+		}
+
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural_group.conf.master')) {
+			exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural_group.conf.master /etc/rspamd/local.d/neural_group.conf');
+		} else {
+			exec('cp tpl/rspamd_neural_group.conf.master /etc/rspamd/local.d/neural_group.conf');
+		}
+
+		$tpl = new tpl();
+		$tpl->newTemplate('rspamd_dkim_signing.conf.master');
+		$tpl->setVar('dkim_path', $mail_config['dkim_path']);
+		wf('/etc/rspamd/local.d/dkim_signing.conf', $tpl->grab());
+
+		exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/override.d/*');
+		
+		$command = 'usermod -a -G amavis _rspamd';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+			
+		if(strpos(rf('/etc/rspamd/rspamd.conf'), '.include "$LOCAL_CONFDIR/local.d/users.conf"') === false){
+			af('/etc/rspamd/rspamd.conf', '.include "$LOCAL_CONFDIR/local.d/users.conf"');
+		}
+		
+		if(!isset($mail_config['rspamd_password']) || !$mail_config['rspamd_password']) {
+			$mail_config['rspamd_password'] = str_shuffle(bin2hex(openssl_random_pseudo_bytes(12)));
+			
+			$server_ini_array['mail']['rspamd_password'] = $mail_config['rspamd_password'];
+		}
+
+		$server_ini_array['mail']['rspamd_available'] = 'y';
+		$server_ini_string = array_to_ini($server_ini_array);
+		if($this->dbmaster != $this->db) {
+			$this->dbmaster->query('UPDATE `server` SET `config` = ? WHERE `server_id` = ?', $server_ini_string, $conf['server_id']);
+		}
+		$this->db->query('UPDATE `server` SET `config` = ? WHERE `server_id` = ?', $server_ini_string, $conf['server_id']);
+		unset($server_ini_array);
+		unset($server_ini_string);
+		
+		$tpl = new tpl();
+		$tpl->newTemplate('rspamd_worker-controller.inc.master');
+		$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
+		wf('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());
+		chmod('/etc/rspamd/local.d/worker-controller.inc', 0644);
+	}
+
 	public function configure_spamassassin() {
 		global $conf;
 
@@ -2033,7 +2259,10 @@ class installer_base {
 				$tpl->setVar('logging','yes');
 			}
 
-
+			if($conf['rspamd']['installed'] == true) {
+				$tpl->setVar('use_rspamd', 'yes');
+			}
+			
 			// comment out the listen directive if port is 80 or 443
 			if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) {
 				$tpl->setVar('vhost_port_listen','#');
@@ -2047,8 +2276,8 @@ class installer_base {
 			//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
 			//* and create the symlink
 			if(@is_link($vhost_conf_enabled_dir.'/apps.vhost')) unlink($vhost_conf_enabled_dir.'/apps.vhost');
-			if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost')) {
-				symlink($vhost_conf_dir.'/apps.vhost', $vhost_conf_enabled_dir.'/000-apps.vhost');
+			if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost') && @is_file($vhost_conf_dir.'/apps.vhost')) {
+				@symlink($vhost_conf_dir.'/apps.vhost', $vhost_conf_enabled_dir.'/000-apps.vhost');
 			}
 
 			if(!is_file($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter')) {
@@ -2101,6 +2330,12 @@ class installer_base {
 				$apps_vhost_ip = $conf['web']['apps_vhost_ip'].':';
 			}
 
+			if($conf['rspamd']['installed'] == true) {
+				$content = str_replace('{use_rspamd}', '', $content);
+			} else {
+				$content = str_replace('{use_rspamd}', '# ', $content);
+			}
+			
 			$socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
 			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
 			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
@@ -2120,6 +2355,7 @@ class installer_base {
 				|| file_exists('/var/run/php/php7.1-fpm.sock')
 				|| file_exists('/var/run/php/php7.2-fpm.sock')
 				|| file_exists('/var/run/php/php7.3-fpm.sock')
+				|| file_exists('/var/run/php/php7.4-fpm.sock')
 			){
 				$use_tcp = '#';
 				$use_socket = '';
@@ -2131,13 +2367,15 @@ class installer_base {
 			$content = str_replace('{use_socket}', $use_socket, $content);
 			
 			// SSL in apps vhost is off by default. Might change later.
-			$content = str_replace('{ssl_on}', 'off', $content);
+			$content = str_replace('{ssl_on}', '', $content);
 			$content = str_replace('{ssl_comment}', '#', $content);
 			
 			// Fix socket path on PHP 7 systems
 			if(file_exists('/var/run/php/php7.0-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.1-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.2-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.2-fpm.sock', $content);
+			if(file_exists('/var/run/php/php7.3-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.3-fpm.sock', $content);
+			if(file_exists('/var/run/php/php7.4-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.4-fpm.sock', $content);
 
 			wf($vhost_conf_dir.'/apps.vhost', $content);
 
@@ -2564,11 +2802,11 @@ class installer_base {
 			$content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
 
 			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-				$content = str_replace('{ssl_on}', 'on', $content);
+				$content = str_replace('{ssl_on}', 'ssl', $content);
 				$content = str_replace('{ssl_comment}', '', $content);
 				$content = str_replace('{fastcgi_ssl}', 'on', $content);
 			} else {
-				$content = str_replace('{ssl_on}', 'off', $content);
+				$content = str_replace('{ssl_on}', '', $content);
 				$content = str_replace('{ssl_comment}', '#', $content);
 				$content = str_replace('{fastcgi_ssl}', 'off', $content);
 			}
diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php
index 3406b760b0565049562acbfb06200e05ec7f8cc8..4dcb31cff128ddcc5c6f3bd81a4526de13eb5253 100644
--- a/install/lib/update.lib.php
+++ b/install/lib/update.lib.php
@@ -103,7 +103,7 @@ function checkDbHealth() {
 	$notok = array();
 
 	echo "Checking ISPConfig database .. ";
-	exec("mysqlcheck -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." -P ".escapeshellarg($conf['mysql']['port'])." -r ".escapeshellarg($conf["mysql"]["database"]), $result);
+	exec("mysqlcheck -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." -P ".escapeshellarg($conf['mysql']['port'])." --auto-repair ".escapeshellarg($conf["mysql"]["database"]), $result);
 	for( $i=0; $i<sizeof($result);$i++) {
 		if ( substr($result[$i], -2) != "OK" ) {
 			$notok[] = $result[$i];
@@ -335,6 +335,9 @@ function updateDbAndIni() {
 	$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
 	$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
 	$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
+	// do not switch to rspamd automatically!
+	// $tpl_ini_array['mail']['content_filter'] = @($conf['rspamd']['installed']) ? 'rspamd' : 'amavisd';
+	$tpl_ini_array['mail']['rspamd_available'] = @($conf['rspamd']['installed']) ? 'y' : 'n';
 	$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
 	$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
 	$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
diff --git a/install/patches/upd_0088.php b/install/patches/upd_0088.php
new file mode 100644
index 0000000000000000000000000000000000000000..47a10f6080436ea840b1096bbe8d9722ba99d79e
--- /dev/null
+++ b/install/patches/upd_0088.php
@@ -0,0 +1,47 @@
+<?php
+
+if(!defined('INSTALLER_RUN')) die('Patch update file access violation.');
+
+/*
+	Example installer patch update class. the classname must match
+	the php and the sql patch update filename. The php patches are
+	only executed when a corresponding sql patch exists.
+*/
+
+class upd_0088 extends installer_patch_update {
+
+	public function onAfterSQL() {
+		global $inst;
+		
+		// delete all the files that were deleted on previous updates
+		$delete = array(
+			'interface/web/mail/templates/spamfilter_taglevel_edit.htm',
+			'interface/web/mail/templates/spamfilter_quarantine_edit.htm',
+			'interface/web/mail/templates/spamfilter_other_edit.htm',
+		);
+		
+		$curpath = dirname(dirname(realpath(dirname(__FILE__))));
+		
+		$c = 0;
+		$del_all = false;
+		foreach($delete as $file) {
+			if(strpos($file, '..') !== false) continue; // security!
+			
+			if($del_all == false) {
+				$answer = $inst->simple_query('Delete obsolete file ' . $file . '?', array('y', 'n', 'a', 'all', 'none'), 'y');
+				if($answer == 'n') continue;
+				elseif($answer == 'a' || $answer == 'all') $del_all = true;
+				elseif($answer == 'none') break;
+			}
+			if(@is_file('/usr/local/ispconfig/' . $file) && !@is_file($curpath . '/' . $file)) {
+				// be sure this is not a file contained in installation!
+				@unlink('/usr/local/ispconfig/' . $file);
+				ilog('Deleted obsolete file /usr/local/ispconfig/' . $file);
+				$c++;
+			}
+		}
+		ilog($c . 'obsolete files deleted.');
+	}
+}
+
+?>
diff --git a/install/sql/incremental/upd_0002.sql b/install/sql/incremental/upd_0002.sql
index e71e11182641408728d78c38a27114ae0e794905..7802dfa160665ab536a22734754d39bb2646b9b0 100644
--- a/install/sql/incremental/upd_0002.sql
+++ b/install/sql/incremental/upd_0002.sql
@@ -5,4 +5,4 @@ CREATE TABLE IF NOT EXISTS `sys_session` (
   `session_data` longtext,
   PRIMARY KEY  (`session_id`),
   KEY `last_updated` (`last_updated`)
-) ENGINE=MyISAM;
\ No newline at end of file
+);
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0004.sql b/install/sql/incremental/upd_0004.sql
index 3bba2461a6c6aacff17bddeb3a02fe4aa1f0c75c..6153fc7732807e1b98bd06b35f47ee2a39099bc3 100644
--- a/install/sql/incremental/upd_0004.sql
+++ b/install/sql/incremental/upd_0004.sql
@@ -11,7 +11,7 @@ CREATE TABLE `help_faq_sections` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hfs_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1;
+) AUTO_INCREMENT=1;
 
 INSERT INTO `help_faq_sections` VALUES (1,'General',0,NULL,NULL,NULL,NULL,NULL);
 
@@ -27,7 +27,7 @@ CREATE TABLE `help_faq` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hf_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1;
+) AUTO_INCREMENT=1;
 
 INSERT INTO `help_faq` VALUES (1,1,0,'I\'d like to know ...','Yes, of course.',1,1,'riud','riud','r');
 
diff --git a/install/sql/incremental/upd_0007.sql b/install/sql/incremental/upd_0007.sql
index cea38132291576f418117da7517f31147f106b8d..0cdf99e2bcb92a29603d5e50bbaa18e60fe156ed 100644
--- a/install/sql/incremental/upd_0007.sql
+++ b/install/sql/incremental/upd_0007.sql
@@ -14,6 +14,6 @@ CREATE TABLE IF NOT EXISTS `mail_mailinglist` (
   `email` varchar(255) NOT NULL,
   `password` varchar(255) NOT NULL,
   PRIMARY KEY  (`mailinglist_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=1;
+) AUTO_INCREMENT=1;
 
 DROP TABLE `mail_mailman_domain`;
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0009.sql b/install/sql/incremental/upd_0009.sql
index 5be069c735bdfc2730be651087cb5b0549dbab90..43262d65b9063a5d3c5bc197cbb11fad1219a226 100644
--- a/install/sql/incremental/upd_0009.sql
+++ b/install/sql/incremental/upd_0009.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `proxy_reverse` (
   `rewrite_url_dst` varchar(100) NOT NULL,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`rewrite_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
 
 CREATE TABLE IF NOT EXISTS `firewall_filter` (
@@ -38,7 +38,7 @@ CREATE TABLE IF NOT EXISTS `firewall_filter` (
   `active` enum('n','y') NOT NULL default 'y',
   `client_id` int(11) NOT NULL,
   PRIMARY KEY  (`firewall_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `firewall_forward` (
   `firewall_id` int(11) unsigned NOT NULL auto_increment,
@@ -59,7 +59,7 @@ CREATE TABLE IF NOT EXISTS `firewall_forward` (
   `active` enum('n','y') NOT NULL default 'y',
   `client_id` int(11) NOT NULL,
   PRIMARY KEY  (`firewall_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
 
 alter table `server` add column `proxy_server` tinyint(1) not null after `vserver_server`;
 alter table `server` add column `firewall_server` tinyint(1) not null after `proxy_server`;
diff --git a/install/sql/incremental/upd_0012.sql b/install/sql/incremental/upd_0012.sql
index 2ba957f8d9c9d9e39bb5f8dde0c0d82fff5c110b..1fd355160c84eb0fcd77a0f1bcf76d3c5521ba1f 100644
--- a/install/sql/incremental/upd_0012.sql
+++ b/install/sql/incremental/upd_0012.sql
@@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS `openvz_ip` (
   `vm_id` int(11) NOT NULL DEFAULT '0',
   `reserved` varchar(255) NOT NULL DEFAULT 'n',
   PRIMARY KEY (`ip_address_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_ip`
@@ -40,7 +40,7 @@ CREATE TABLE IF NOT EXISTS `openvz_ostemplate` (
   `active` varchar(255) NOT NULL DEFAULT 'y',
   `description` text,
   PRIMARY KEY (`ostemplate_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_ostemplate`
@@ -100,7 +100,7 @@ CREATE TABLE IF NOT EXISTS `openvz_template` (
   `create_dns` varchar(1) NOT NULL DEFAULT 'n',
   `capability` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`template_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_template`
@@ -119,7 +119,7 @@ CREATE TABLE IF NOT EXISTS `openvz_traffic` (
   `traffic_date` date NOT NULL,
   `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY (`veid`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
 
 --
 -- Dumping data for table `openvz_traffic`
@@ -164,7 +164,7 @@ CREATE TABLE IF NOT EXISTS `openvz_vm` (
   `capability` text NOT NULL,
   `config` mediumtext NOT NULL,
   PRIMARY KEY (`vm_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_vm`
diff --git a/install/sql/incremental/upd_0013.sql b/install/sql/incremental/upd_0013.sql
index 9b43d336163a51873bb05c1e5a80cfa7b5e93197..bc38241bb4fc5880e7416816509e8b6cba3d993f 100644
--- a/install/sql/incremental/upd_0013.sql
+++ b/install/sql/incremental/upd_0013.sql
@@ -16,5 +16,5 @@ CREATE TABLE `iptables` (
   `target` varchar(10) DEFAULT NULL COMMENT 'ACCEPT DROP REJECT LOG',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`iptables_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
diff --git a/install/sql/incremental/upd_0019.sql b/install/sql/incremental/upd_0019.sql
index 60c464cea71cbd8cb9b2eb70bccb991a2602291d..1bd990c5d01dfbc8b94863d84cdd501b613fd05e 100644
--- a/install/sql/incremental/upd_0019.sql
+++ b/install/sql/incremental/upd_0019.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `help_faq` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hf_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 CREATE TABLE IF NOT EXISTS `help_faq_sections` (
   `hfs_id` int(11) NOT NULL AUTO_INCREMENT,
@@ -22,7 +22,7 @@ CREATE TABLE IF NOT EXISTS `help_faq_sections` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hfs_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 CREATE TABLE IF NOT EXISTS `web_folder` (
   `web_folder_id` bigint(20) NOT NULL AUTO_INCREMENT,
@@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS `web_folder` (
   `path` varchar(255) DEFAULT NULL,
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`web_folder_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 CREATE TABLE IF NOT EXISTS `web_folder_user` (
   `web_folder_user_id` bigint(20) NOT NULL AUTO_INCREMENT,
@@ -50,7 +50,7 @@ CREATE TABLE IF NOT EXISTS `web_folder_user` (
   `password` varchar(255) DEFAULT NULL,
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`web_folder_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 DROP TABLE `mail_greylist`;
 DROP TABLE `firewall_filter`;
diff --git a/install/sql/incremental/upd_0028.sql b/install/sql/incremental/upd_0028.sql
index 0020cdd9ac04235b4e5965560563be251e1cdd8d..67023de06730777b7566de54d1d541b58a6659c3 100644
--- a/install/sql/incremental/upd_0028.sql
+++ b/install/sql/incremental/upd_0028.sql
@@ -9,4 +9,4 @@ CREATE TABLE `web_backup` (
   `tstamp` int(10) unsigned NOT NULL,
   `filename` varchar(255) NOT NULL,
   PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/install/sql/incremental/upd_0031.sql b/install/sql/incremental/upd_0031.sql
index 0fb25a5d407b0bd7d3bc43bfdfd0ac80c0119db4..7ebdef95c05bc48214ab8a19546b14bc8f8e7bd2 100644
--- a/install/sql/incremental/upd_0031.sql
+++ b/install/sql/incremental/upd_0031.sql
@@ -14,5 +14,5 @@ CREATE TABLE `server_php` (
   `php_fpm_ini_dir` varchar(255) DEFAULT NULL,
   `php_fpm_pool_dir` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`server_php_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 ALTER TABLE `web_domain` ADD `fastcgi_php_version` VARCHAR( 255 ) NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0033.sql b/install/sql/incremental/upd_0033.sql
index d4b3c0d6a229e3308336da9cd0b9655e92c25e46..5d2b93cdba847a52b21ca36235c273a27740c47b 100644
--- a/install/sql/incremental/upd_0033.sql
+++ b/install/sql/incremental/upd_0033.sql
@@ -10,4 +10,4 @@ CREATE TABLE IF NOT EXISTS `client_circle` (
   `description` text,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY (`circle_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
\ No newline at end of file
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0034.sql b/install/sql/incremental/upd_0034.sql
index 8ae098c011b910d190db6dc74d8df7a5f616abf2..85e49f70bb6e0999852fbebb9cb6a53b17ef8be6 100644
--- a/install/sql/incremental/upd_0034.sql
+++ b/install/sql/incremental/upd_0034.sql
@@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS `aps_instances` (
   `package_id` int(4) NOT NULL,
   `instance_status` int(4) NOT NULL,
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -31,7 +31,7 @@ CREATE TABLE IF NOT EXISTS `aps_instances_settings` (
   `name` varchar(255) NOT NULL,
   `value` text NOT NULL,
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -49,7 +49,7 @@ CREATE TABLE IF NOT EXISTS `aps_packages` (
   `package_url` TEXT NOT NULL,
   `package_status` int(1) NOT NULL DEFAULT '2',
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -63,7 +63,7 @@ CREATE TABLE IF NOT EXISTS `aps_settings` (
   `value` text NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `name` (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
diff --git a/install/sql/incremental/upd_0035.sql b/install/sql/incremental/upd_0035.sql
index 5f8031c514a4adfeb4ab25bc374f9fa6a1e63113..1a453e5875660e90a432a39cb8a8bcb6dc764f0d 100644
--- a/install/sql/incremental/upd_0035.sql
+++ b/install/sql/incremental/upd_0035.sql
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `sys_theme` (
   `username` varchar(64) NOT NULL,
   `logo_url` varchar(255) NOT NULL,
   PRIMARY KEY (`var_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
diff --git a/install/sql/incremental/upd_0039.sql b/install/sql/incremental/upd_0039.sql
index af8a5afc5af10f7a2f6a7f81ca5936fc7376e655..b090db4f741ba657cfd3a3978488f062b4d504e1 100644
--- a/install/sql/incremental/upd_0039.sql
+++ b/install/sql/incremental/upd_0039.sql
@@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS `web_database_user` (
   `database_user` varchar(64) DEFAULT NULL,
   `database_password` varchar(64) DEFAULT NULL,
   PRIMARY KEY (`database_user_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
diff --git a/install/sql/incremental/upd_0040.sql b/install/sql/incremental/upd_0040.sql
index b39e8f11ffb6cb0a542cc115f5d4494e17573b64..f572a6e73befcb9d2be7acd994744e3e6233bd3c 100644
--- a/install/sql/incremental/upd_0040.sql
+++ b/install/sql/incremental/upd_0040.sql
@@ -21,4 +21,4 @@ CREATE TABLE IF NOT EXISTS `directive_snippets` (
   `snippet` mediumtext,
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`directive_snippets_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/install/sql/incremental/upd_0050.sql b/install/sql/incremental/upd_0050.sql
index bc31868a7006584e77465fd1de51167db04a82dc..0ce01b9b4579158de88943b9aa7a88258b3ce578 100644
--- a/install/sql/incremental/upd_0050.sql
+++ b/install/sql/incremental/upd_0050.sql
@@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS `dns_slave` (
   PRIMARY KEY  (`id`),
   KEY `origin` (`origin`),
   KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `dns_slave` DROP INDEX `origin`;
 ALTER TABLE `dns_slave` ADD CONSTRAINT `slave` UNIQUE (`origin`,`server_id`);
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0056.sql b/install/sql/incremental/upd_0056.sql
index c7cb5285cec66cbe19fa2c507668a09cf4aebb6d..d9e1e022896afd63f76b297788dbd2219feb2214 100644
--- a/install/sql/incremental/upd_0056.sql
+++ b/install/sql/incremental/upd_0056.sql
@@ -4,7 +4,7 @@ CREATE TABLE `client_template_assigned` (
   `client_template_id` int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY (`assigned_template_id`),
   KEY `client_id` (`client_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `client` ADD `gender` enum('','m','f') NOT NULL DEFAULT '' AFTER `company_id`,
   ADD `locked` enum('n','y') NOT NULL DEFAULT 'n' AFTER `created_at`,
diff --git a/install/sql/incremental/upd_0057.sql b/install/sql/incremental/upd_0057.sql
index b8452fe6e9fddcbc9df31450f3791cad9367449f..01b2c58de018d19a9585a581f2fb024254de42e0 100644
--- a/install/sql/incremental/upd_0057.sql
+++ b/install/sql/incremental/upd_0057.sql
@@ -4,4 +4,4 @@ CREATE TABLE IF NOT EXISTS `sys_cron` (
   `next_run` datetime NULL DEFAULT NULL,
   `running` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
   PRIMARY KEY (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
diff --git a/install/sql/incremental/upd_0062.sql b/install/sql/incremental/upd_0062.sql
index cee5ff93cc3b28873f8e7ac83b9f68de8314cd58..039a0bd005f5321f1e55cb61fa10fb9898f56af8 100644
--- a/install/sql/incremental/upd_0062.sql
+++ b/install/sql/incremental/upd_0062.sql
@@ -8,7 +8,7 @@ CREATE TABLE `mail_backup` (
   `filename` varchar(255) NOT NULL,
   `filesize` VARCHAR(10) NOT NULL,
   PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `mail_user` ADD `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none';
 ALTER TABLE `mail_user` ADD `backup_copies` INT NOT NULL DEFAULT '1';
diff --git a/install/sql/incremental/upd_0063.sql b/install/sql/incremental/upd_0063.sql
index fc2534ac2435aef808c2b32115f746cbf1a01191..08e2f04f93c51e8d304ebf7d48e1ce402961ba98 100644
--- a/install/sql/incremental/upd_0063.sql
+++ b/install/sql/incremental/upd_0063.sql
@@ -12,7 +12,7 @@ CREATE TABLE `client_message_template` (
   `subject` varchar(255) DEFAULT NULL,
   `message` text,
   PRIMARY KEY (`client_message_template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 ALTER TABLE  `spamfilter_policy` ADD  `policyd_quota_in` int(11) NOT NULL DEFAULT  '-1',
 ADD  `policyd_quota_in_period` int(11) NOT NULL DEFAULT  '24',
 ADD  `policyd_quota_out` int(11) NOT NULL DEFAULT  '-1',
diff --git a/install/sql/incremental/upd_0075.sql b/install/sql/incremental/upd_0075.sql
index acca4e6ac801dbe3442119a9658d83c506762fc9..ce1bacf2d13dcca908b855aeda08cb6bf6d57f96 100644
--- a/install/sql/incremental/upd_0075.sql
+++ b/install/sql/incremental/upd_0075.sql
@@ -77,4 +77,4 @@ CREATE TABLE IF NOT EXISTS `dns_slave` (
   PRIMARY KEY  (`id`),
   UNIQUE KEY `slave` (`origin`,`server_id`),
   KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/install/sql/incremental/upd_0081.sql b/install/sql/incremental/upd_0081.sql
index 69236784c7455db0be4671022c74cac942c22405..d24ce19ce941d32a39be18ad74dce80233511e9e 100644
--- a/install/sql/incremental/upd_0081.sql
+++ b/install/sql/incremental/upd_0081.sql
@@ -126,7 +126,7 @@ CREATE TABLE `xmpp_domain` (
   PRIMARY KEY  (`domain_id`),
   KEY `server_id` (`server_id`,`domain`),
   KEY `domain_active` (`domain`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Table structure for table  `xmpp_user`
@@ -146,7 +146,7 @@ CREATE TABLE `xmpp_user` (
   PRIMARY KEY  (`xmppuser_id`),
   KEY `server_id` (`server_id`,`jid`),
   KEY `jid_active` (`jid`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -176,7 +176,7 @@ CREATE TABLE `server_ip_map` (
   `destination_ip` varchar(35) DEFAULT '',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`server_ip_map_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `web_domain` ADD COLUMN `rewrite_to_https` ENUM('y','n') NOT NULL DEFAULT 'n' AFTER `seo_redirect`;
 
@@ -199,7 +199,7 @@ CREATE TABLE `ftp_traffic` (
 	`in_bytes` bigint(32) unsigned NOT NULL,
 	`out_bytes` bigint(32) unsigned NOT NULL, 
 	UNIQUE KEY (`hostname`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 ALTER TABLE `mail_forwarding` ADD COLUMN `allow_send_as` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `active`;
 UPDATE `mail_forwarding` SET `allow_send_as` = 'y' WHERE `type` = 'alias';
diff --git a/install/sql/incremental/upd_0087.sql b/install/sql/incremental/upd_0087.sql
new file mode 100644
index 0000000000000000000000000000000000000000..4d392cc441ee746075277d78dddb08946262ab6f
--- /dev/null
+++ b/install/sql/incremental/upd_0087.sql
@@ -0,0 +1,85 @@
+ALTER TABLE `sys_datalog` ADD `session_id` varchar(64) NOT NULL DEFAULT '' AFTER `error`;
+ALTER TABLE `sys_user` CHANGE `sys_userid` `sys_userid` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Created by userid';
+ALTER TABLE `sys_user` CHANGE `sys_groupid` `sys_groupid` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Created by groupid';
+ALTER TABLE `web_domain` ADD COLUMN `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n' AFTER `php_fpm_use_socket`;
+
+CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `active` enum('N','Y') NOT NULL DEFAULT 'N',
+  `ca_name` varchar(255) NOT NULL DEFAULT '',
+  `ca_issue` varchar(255) NOT NULL DEFAULT '',
+  `ca_wildcard` enum('Y','N') NOT NULL DEFAULT 'N',
+  `ca_iodef` text NOT NULL,
+  `ca_critical` tinyint(1) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY (`ca_issue`)
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`);
+
+UPDATE `dns_ssl_ca` SET `ca_issue` = 'comodo.com' WHERE `ca_issue` = 'comodoca.com';
+DELETE FROM `dns_ssl_ca` WHERE `ca_issue` = 'geotrust.com';
+DELETE FROM `dns_ssl_ca` WHERE `ca_issue` = 'thawte.com';
+UPDATE `dns_ssl_ca` SET `ca_name` = 'Symantec / Thawte / GeoTrust' WHERE `ca_issue` = 'symantec.com';
+
+ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CAA','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
+ALTER TABLE `dns_rr` CHANGE `data` `data` TEXT NOT NULL;
+INSERT IGNORE INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `active`, `ca_name`, `ca_issue`, `ca_wildcard`, `ca_iodef`, `ca_critical`) VALUES
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'AC Camerfirma', 'camerfirma.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'ACCV', 'accv.es', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Actalis', 'actalis.it', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Amazon', 'amazon.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Asseco', 'certum.pl', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Buypass', 'buypass.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CA Disig', 'disig.sk', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CATCert', 'aoc.cat', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certinomis', 'www.certinomis.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certizen', 'hongkongpost.gov.hk', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodoca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'e-tugra', 'e-tugra.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'EDICOM', 'edicomgroup.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Firmaprofesional', 'firmaprofesional.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'FNMT', 'fnmt.es', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GlobalSign', 'globalsign.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GoDaddy', 'godaddy.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Google Trust Services', 'pki.goog', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GRCA', 'gca.nat.gov.tw', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'HARICA', 'harica.gr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'IdenTrust', 'identrust.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Kamu SM', 'kamusm.gov.tr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Microsec e-Szigno', 'e-szigno.hu', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'NetLock', 'netlock.hu', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PKIoverheid', 'www.pkioverheid.nl', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PROCERT', 'procert.net.ve', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'QuoVadis', 'quovadisglobal.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SECOM', 'secomtrust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sertifitseerimiskeskuse', 'sk.ee', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'StartCom', 'startcomca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SwissSign', 'swisssign.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec / Thawte / GeoTrust', 'symantec.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'T-Systems', 'telesec.de', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Telia', 'telia.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Trustwave', 'trustwave.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Web.com', 'web.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0);
+
+ALTER TABLE `dns_soa` CHANGE `xfer` `xfer` TEXT NULL;
+ALTER TABLE `dns_soa` CHANGE `also_notify` `also_notify` TEXT NULL;
+ALTER TABLE `dns_slave` CHANGE `xfer` `xfer` TEXT NULL;
+ALTER TABLE `firewall` CHANGE `tcp_port` `tcp_port` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
+ALTER TABLE `firewall` CHANGE `udp_port` `udp_port` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/install/sql/incremental/upd_0088.sql b/install/sql/incremental/upd_0088.sql
new file mode 100644
index 0000000000000000000000000000000000000000..5c062603f97be1e5ed81c36855a9b6e095a44af1
--- /dev/null
+++ b/install/sql/incremental/upd_0088.sql
@@ -0,0 +1,39 @@
+-- rspamd
+ALTER TABLE `spamfilter_policy` ADD `rspamd_greylisting` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `policyd_greylist`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_greylisting_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_greylisting`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_greylisting_level`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_tag_method` ENUM('add_header','rewrite_subject') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'rewrite_subject' AFTER `rspamd_spam_tag_level`;
+ALTER TABLE `spamfilter_policy` ADD `rspamd_spam_kill_level` DECIMAL(5,2) NULL DEFAULT NULL AFTER `rspamd_spam_tag_method`;
+
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 4;
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 5;
+UPDATE `spamfilter_policy` SET `rspamd_greylisting` = 'y' WHERE id = 6;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '4.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '6.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '2.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_greylisting_level` = '7.00' WHERE id = 7;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '6.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '8.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '4.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_tag_level` = '10.00' WHERE id = 7;
+
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '10.00';
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '12.00' WHERE id = 1;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 2;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '999.00' WHERE id = 3;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '8.00' WHERE id = 6;
+UPDATE `spamfilter_policy` SET `rspamd_spam_kill_level` = '20.00' WHERE id = 7;
+-- end of rspamd
+ALTER TABLE `client` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `ftp_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `shell_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `sys_user` CHANGE COLUMN `passwort` `passwort` VARCHAR(200) DEFAULT NULL;
+ALTER TABLE `webdav_user` CHANGE COLUMN `password` `password` VARCHAR(200) DEFAULT NULL;
+
+DELETE FROM sys_cron WHERE `next_run` IS NOT NULL AND `next_run` >= DATE_ADD(`last_run`, INTERVAL 30 DAY) AND `next_run` BETWEEN '2020-01-01' AND '2020-01-02';
\ No newline at end of file
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 872ebfb4652f343643d360d748f18f8e613dc0e2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -1 +0,0 @@
-ALTER TABLE `sys_datalog` ADD `session_id` varchar(64) NOT NULL DEFAULT '' AFTER `error`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index aacd2ecdb69d6a89ed673808bdb4041e03dc83a4..18b3ef57ebad6eac601268db1433e17f040b77af 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -69,7 +69,7 @@ CREATE TABLE IF NOT EXISTS `aps_instances` (
   `package_id` int(4) NOT NULL DEFAULT '0',
   `instance_status` int(4) NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -84,7 +84,7 @@ CREATE TABLE IF NOT EXISTS `aps_instances_settings` (
   `name` varchar(255) NOT NULL DEFAULT '',
   `value` text,
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -102,7 +102,7 @@ CREATE TABLE IF NOT EXISTS `aps_packages` (
   `package_url` TEXT,
   `package_status` int(1) NOT NULL DEFAULT '2',
   PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -116,7 +116,7 @@ CREATE TABLE IF NOT EXISTS `aps_settings` (
   `value` text,
   PRIMARY KEY (`id`),
   UNIQUE KEY `name` (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -128,7 +128,7 @@ CREATE TABLE `attempts_login` (
   `ip` varchar(39) NOT NULL DEFAULT '',
   `times` int(11) DEFAULT NULL,
   `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -243,7 +243,7 @@ CREATE TABLE `client` (
   `limit_openvz_vm_template_id` int(11) NOT NULL DEFAULT '0',
   `parent_client_id` int(11) unsigned NOT NULL DEFAULT '0',
   `username` varchar(64) DEFAULT NULL,
-  `password` varchar(64) DEFAULT NULL,
+  `password` varchar(200) DEFAULT NULL,
   `language` char(2) NOT NULL DEFAULT 'en',
   `usertheme` varchar(32) NOT NULL DEFAULT 'default',
   `template_master` int(11) unsigned NOT NULL DEFAULT '0',
@@ -264,7 +264,7 @@ CREATE TABLE `client` (
   `risk_score` int(10) unsigned NOT NULL DEFAULT '0',
   `activation_code` varchar(10) NOT NULL DEFAULT '',
   PRIMARY KEY (`client_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -284,7 +284,7 @@ CREATE TABLE `client_circle` (
   `description` text,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY (`circle_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -369,7 +369,7 @@ CREATE TABLE `client_template` (
   `limit_openvz_vm` int(11) NOT NULL DEFAULT '0',
   `limit_openvz_vm_template_id` int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY  (`template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -383,7 +383,7 @@ CREATE TABLE `client_template_assigned` (
   `client_template_id` int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY (`assigned_template_id`),
   KEY `client_id` (`client_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 -- --------------------------------------------------------
 
 --
@@ -402,7 +402,7 @@ CREATE TABLE `client_message_template` (
   `subject` varchar(255) DEFAULT NULL,
   `message` text,
   PRIMARY KEY (`client_message_template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Dumping data for table `invoice_message_template`
@@ -422,7 +422,7 @@ CREATE TABLE `country` (
   `numcode` smallint(6) DEFAULT NULL,
   `eu` enum('n','y') NOT NULL DEFAULT 'n',
   PRIMARY KEY (`iso`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -448,7 +448,7 @@ CREATE TABLE `cron` (
   `log` enum('n','y') NOT NULL default 'n',
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -471,14 +471,13 @@ CREATE TABLE IF NOT EXISTS `directive_snippets` (
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   `master_directive_snippets_id` int(11) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY (`directive_snippets_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
 -- 
 -- Table structure for table  `dns_rr`
 -- 
-
 CREATE TABLE `dns_rr` (
   `id` int(11) unsigned NOT NULL auto_increment,
   `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
@@ -489,7 +488,7 @@ CREATE TABLE `dns_rr` (
   `server_id` int(11) NOT NULL default '1',
   `zone` int(11) unsigned NOT NULL DEFAULT '0',
   `name` varchar(255) NOT NULL DEFAULT '',
-  `type` enum('A','AAAA','ALIAS','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') default NULL,
+  `type` enum('A','AAAA','ALIAS','CNAME','CAA','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') default NULL,
   `data` TEXT NOT NULL,
   `aux` int(11) unsigned NOT NULL default '0',
   `ttl` int(11) unsigned NOT NULL default '3600',
@@ -498,7 +497,7 @@ CREATE TABLE `dns_rr` (
   `serial` int(10) unsigned default NULL,
   PRIMARY KEY  (`id`),
   KEY `rr` (`zone`,`type`,`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -517,11 +516,85 @@ CREATE TABLE `dns_slave` (
   `origin` varchar(255) NOT NULL DEFAULT '',
   `ns` varchar(255) NOT NULL DEFAULT '',
   `active` enum('N','Y') NOT NULL DEFAULT 'N',
-  `xfer` varchar(255) NOT NULL DEFAULT '',
+  `xfer` TEXT NULL,
   PRIMARY KEY  (`id`),
   UNIQUE KEY `slave` (`origin`,`server_id`),
   KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table  `dns_ssl_ca`
+-- 
+
+CREATE TABLE IF NOT EXISTS `dns_ssl_ca` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_group` varchar(5) NOT NULL DEFAULT '',
+  `sys_perm_other` varchar(5) NOT NULL DEFAULT '',
+  `active` enum('N','Y') NOT NULL DEFAULT 'N',
+  `ca_name` varchar(255) NOT NULL DEFAULT '',
+  `ca_issue` varchar(255) NOT NULL DEFAULT '',
+  `ca_wildcard` enum('Y','N') NOT NULL DEFAULT 'N',
+  `ca_iodef` text NOT NULL,
+  `ca_critical` tinyint(1) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY (`ca_issue`)
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`);
+
+INSERT INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `active`, `ca_name`, `ca_issue`, `ca_wildcard`, `ca_iodef`, `ca_critical`) VALUES
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'AC Camerfirma', 'camerfirma.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'ACCV', 'accv.es', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Actalis', 'actalis.it', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Amazon', 'amazon.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Asseco', 'certum.pl', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Buypass', 'buypass.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CA Disig', 'disig.sk', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CATCert', 'aoc.cat', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certinomis', 'www.certinomis.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certizen', 'hongkongpost.gov.hk', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodoca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'e-tugra', 'e-tugra.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'EDICOM', 'edicomgroup.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Firmaprofesional', 'firmaprofesional.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'FNMT', 'fnmt.es', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GlobalSign', 'globalsign.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GoDaddy', 'godaddy.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Google Trust Services', 'pki.goog', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GRCA', 'gca.nat.gov.tw', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'HARICA', 'harica.gr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'IdenTrust', 'identrust.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Kamu SM', 'kamusm.gov.tr', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Microsec e-Szigno', 'e-szigno.hu', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'NetLock', 'netlock.hu', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PKIoverheid', 'www.pkioverheid.nl', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PROCERT', 'procert.net.ve', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'QuoVadis', 'quovadisglobal.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SECOM', 'secomtrust.net', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sertifitseerimiskeskuse', 'sk.ee', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'StartCom', 'startcomca.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SwissSign', 'swisssign.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec / Thawte / GeoTrust', 'symantec.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'T-Systems', 'telesec.de', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Telia', 'telia.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Trustwave', 'trustwave.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Web.com', 'web.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0),
+(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0);
 
 -- --------------------------------------------------------
 
@@ -547,8 +620,8 @@ CREATE TABLE `dns_soa` (
   `minimum` int(11) unsigned NOT NULL default '3600',
   `ttl` int(11) unsigned NOT NULL default '3600',
   `active` enum('N','Y') NOT NULL DEFAULT 'N',
-  `xfer` varchar(255) NOT NULL DEFAULT '',
-  `also_notify` varchar(255) default NULL,
+  `xfer` TEXT NULL,
+  `also_notify` TEXT NULL,
   `update_acl` varchar(255) default NULL,
   `dnssec_initialized` ENUM('Y','N') NOT NULL DEFAULT 'N',
   `dnssec_wanted` ENUM('Y','N') NOT NULL DEFAULT 'N',
@@ -557,7 +630,7 @@ CREATE TABLE `dns_soa` (
   PRIMARY KEY  (`id`),
   UNIQUE KEY `origin` (`origin`),
   KEY `active` (`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -577,7 +650,7 @@ CREATE TABLE `dns_template` (
   `template` text,
   `visible` enum('N','Y') NOT NULL default 'Y',
   PRIMARY KEY  (`template_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Table structure for table  `domain`
@@ -593,7 +666,7 @@ CREATE TABLE `domain` (
   `domain` varchar(255) NOT NULL default '',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `domain` (`domain`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -609,11 +682,11 @@ CREATE TABLE `firewall` (
   `sys_perm_group` varchar(5) default NULL,
   `sys_perm_other` varchar(5) default NULL,
   `server_id` int(11) unsigned NOT NULL default '0',
-  `tcp_port` varchar(255) default NULL,
-  `udp_port` varchar(255) default NULL,
+  `tcp_port` text,
+  `udp_port` text,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`firewall_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -632,7 +705,7 @@ CREATE TABLE `ftp_user` (
   `parent_domain_id` int(11) unsigned NOT NULL default '0',
   `username` varchar(64) default NULL,
   `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) default NULL,
+  `password` varchar(200) default NULL,
   `quota_size` bigint(20) NOT NULL default '-1',
   `active` enum('n','y') NOT NULL default 'y',
   `uid` varchar(64) default NULL,
@@ -651,7 +724,7 @@ CREATE TABLE `ftp_user` (
   KEY `server_id` (`server_id`),
   KEY `username` (`username`),
   KEY `quota_files` (`quota_files`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -665,7 +738,7 @@ CREATE TABLE `ftp_traffic` (
   `in_bytes` bigint(32) unsigned NOT NULL,
   `out_bytes` bigint(32) unsigned NOT NULL,
   UNIQUE KEY (`hostname`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -685,7 +758,7 @@ CREATE TABLE `help_faq` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hf_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -703,7 +776,7 @@ CREATE TABLE `help_faq_sections` (
   `sys_perm_group` varchar(5) DEFAULT NULL,
   `sys_perm_other` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`hfs_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -724,7 +797,7 @@ CREATE TABLE `iptables` (
   `target` varchar(10) DEFAULT NULL COMMENT 'ACCEPT DROP REJECT LOG',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`iptables_id`)
-) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+) AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
 -- --------------------------------------------------------
 
@@ -746,7 +819,7 @@ CREATE TABLE `mail_access` (
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`access_id`),
   KEY `server_id` (`server_id`,`source`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -764,7 +837,7 @@ CREATE TABLE `mail_backup` (
   `filename` varchar(255) NOT NULL DEFAULT '',
   `filesize` VARCHAR(20) NOT NULL DEFAULT '',
   PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -786,7 +859,7 @@ CREATE TABLE `mail_content_filter` (
   `action` varchar(255) default NULL,
   `active` varchar(255) NOT NULL default 'y',
   PRIMARY KEY  (`content_filter_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -811,7 +884,7 @@ CREATE TABLE `mail_domain` (
   PRIMARY KEY  (`domain_id`),
   KEY `server_id` (`server_id`,`domain`),
   KEY `domain_active` (`domain`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -836,7 +909,7 @@ CREATE TABLE `mail_forwarding` (
   PRIMARY KEY  (`forwarding_id`),
   KEY `server_id` (`server_id`,`source`),
   KEY `type` (`type`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -861,7 +934,7 @@ CREATE TABLE `mail_get` (
   `destination` varchar(255) default NULL,
   `active` varchar(255) NOT NULL default 'y',
   PRIMARY KEY  (`mailget_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -882,7 +955,7 @@ CREATE TABLE `mail_mailinglist` (
   `email` varchar(255) NOT NULL DEFAULT '',
   `password` varchar(255) NOT NULL DEFAULT '',
   PRIMARY KEY  (`mailinglist_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -902,7 +975,7 @@ CREATE TABLE IF NOT EXISTS `mail_relay_recipient` (
   `access` varchar(255) NOT NULL DEFAULT 'OK',
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`relay_recipient_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -917,7 +990,7 @@ CREATE TABLE `mail_traffic` (
   `traffic` bigint(20) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY  (`traffic_id`),
   KEY `mailuser_id` (`mailuser_id`,`month`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -940,7 +1013,7 @@ CREATE TABLE `mail_transport` (
   PRIMARY KEY  (`transport_id`),
   KEY `server_id` (`server_id`,`transport`),
   KEY `server_id_2` (`server_id`,`domain`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -993,7 +1066,7 @@ CREATE TABLE `mail_user` (
   PRIMARY KEY  (`mailuser_id`),
   KEY `server_id` (`server_id`,`email`),
   KEY `email_access` (`email`,`access`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1017,7 +1090,7 @@ CREATE TABLE `mail_user_filter` (
   `target` varchar(255) default NULL,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`filter_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1032,7 +1105,7 @@ CREATE TABLE `monitor_data` (
   `data` mediumtext,
   `state` enum('no_state','unknown','ok','info','warning','critical','error') NOT NULL DEFAULT 'unknown',
   PRIMARY KEY (`server_id`,`type`,`created`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -1053,7 +1126,7 @@ CREATE TABLE IF NOT EXISTS `openvz_ip` (
   `reserved` varchar(255) NOT NULL DEFAULT 'n',
   `additional` varchar(255) NOT NULL DEFAULT 'n',
   PRIMARY KEY (`ip_address_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_ip`
@@ -1079,7 +1152,7 @@ CREATE TABLE IF NOT EXISTS `openvz_ostemplate` (
   `active` varchar(255) NOT NULL DEFAULT 'y',
   `description` text,
   PRIMARY KEY (`ostemplate_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_ostemplate`
@@ -1142,7 +1215,7 @@ CREATE TABLE IF NOT EXISTS `openvz_template` (
   `iptables` varchar(255) DEFAULT NULL,
   `custom` text,
   PRIMARY KEY (`template_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_template`
@@ -1161,7 +1234,7 @@ CREATE TABLE IF NOT EXISTS `openvz_traffic` (
   `traffic_date` date NULL DEFAULT NULL,
   `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
   UNIQUE KEY (`veid`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
 
 --
 -- Dumping data for table `openvz_traffic`
@@ -1210,7 +1283,7 @@ CREATE TABLE IF NOT EXISTS `openvz_vm` (
   `config` mediumtext,
   `custom` text,
   PRIMARY KEY (`vm_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
+)  DEFAULT CHARSET=utf8 ;
 
 --
 -- Dumping data for table `openvz_vm`
@@ -1229,7 +1302,7 @@ CREATE TABLE `remote_session` (
   `client_login` tinyint(1) unsigned NOT NULL default '0',
   `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY  (`remote_session`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -1250,7 +1323,7 @@ CREATE TABLE `remote_user` (
   `remote_ips` TEXT,
   `remote_functions` text,
   PRIMARY KEY  (`remote_userid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1281,7 +1354,7 @@ CREATE TABLE `server` (
   `dbversion` int(11) unsigned NOT NULL default '1',
   `active` tinyint(1) NOT NULL default '1',
   PRIMARY KEY  (`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1303,7 +1376,7 @@ CREATE TABLE `server_ip` (
   `virtualhost` enum('n','y') NOT NULL default 'y',
   `virtualhost_port` varchar(255) default '80,443',
   PRIMARY KEY  (`server_ip_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1323,7 +1396,7 @@ CREATE TABLE `server_ip_map` (
   `destination_ip` varchar(35) DEFAULT '',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`server_ip_map_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1348,7 +1421,7 @@ CREATE TABLE `server_php` (
   `php_fpm_pool_dir` varchar(255) DEFAULT NULL,
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   PRIMARY KEY (`server_php_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1367,7 +1440,7 @@ CREATE TABLE `shell_user` (
   `parent_domain_id` int(11) unsigned NOT NULL default '0',
   `username` varchar(64) default NULL,
   `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) default NULL,
+  `password` varchar(200) default NULL,
   `quota_size` bigint(20) NOT NULL default '-1',
   `active` enum('n','y') NOT NULL default 'y',
   `puser` varchar(255) default NULL,
@@ -1377,7 +1450,7 @@ CREATE TABLE `shell_user` (
   `chroot` varchar(255) NOT NULL DEFAULT '',
   `ssh_rsa` text,
   PRIMARY KEY  (`shell_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1400,7 +1473,7 @@ CREATE TABLE `software_package` (
   `package_config` text,
   PRIMARY KEY  (`package_id`),
   UNIQUE KEY `package_name` (`package_name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1421,7 +1494,7 @@ CREATE TABLE `software_repo` (
   `repo_password` varchar(64) default NULL,
   `active` enum('n','y') NOT NULL default 'y',
   PRIMARY KEY  (`software_repo_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1443,7 +1516,7 @@ CREATE TABLE `software_update` (
   `v4` tinyint(1) NOT NULL default '0',
   `type` enum('full','update') NOT NULL default 'full',
   PRIMARY KEY  (`software_update_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1459,7 +1532,7 @@ CREATE TABLE `software_update_inst` (
   `status` enum('none','installing','installed','deleting','deleted','failed') NOT NULL default 'none',
   PRIMARY KEY  (`software_update_inst_id`),
   UNIQUE KEY `software_update_id` (`software_update_id`,`package_name`,`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1516,8 +1589,13 @@ CREATE TABLE `spamfilter_policy` (
   `policyd_quota_out` int(11) NOT NULL DEFAULT  '-1',
   `policyd_quota_out_period` int(11) NOT NULL DEFAULT  '24',
   `policyd_greylist` ENUM(  'Y',  'N' ) NOT NULL DEFAULT  'N',
+  `rspamd_greylisting` enum('n','y') NOT NULL DEFAULT 'n',
+  `rspamd_spam_greylisting_level` decimal(5,2) DEFAULT NULL,
+  `rspamd_spam_tag_level` decimal(5,2) DEFAULT NULL,
+  `rspamd_spam_tag_method` enum('add_header','rewrite_subject') NOT NULL DEFAULT 'rewrite_subject',
+  `rspamd_spam_kill_level` decimal(5,2) DEFAULT NULL,
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1540,7 +1618,7 @@ CREATE TABLE `spamfilter_users` (
   `local` varchar(1) default NULL,
   PRIMARY KEY  (`id`),
   UNIQUE KEY `email` (`email`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1562,7 +1640,7 @@ CREATE TABLE `spamfilter_wblist` (
   `priority` tinyint(3) unsigned NOT NULL DEFAULT '0',
   `active` enum('y','n') NOT NULL default 'y',
   PRIMARY KEY  (`wblist_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1583,7 +1661,7 @@ CREATE TABLE `support_message` (
   `message` text default NULL,
   `tstamp` int(11) NOT NULL default '0',
   PRIMARY KEY  (`support_message_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1596,7 +1674,7 @@ CREATE TABLE `sys_config` (
   `name` varchar(64) NOT NULL DEFAULT '',
   `value` varchar(255) NOT NULL DEFAULT '',
   PRIMARY KEY (`group`, `name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
 
 
 -- --------------------------------------------------------
@@ -1611,7 +1689,7 @@ CREATE TABLE IF NOT EXISTS `sys_cron` (
   `next_run` datetime NULL DEFAULT NULL,
   `running` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
   PRIMARY KEY (`name`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+) DEFAULT CHARSET=utf8;
 
 
 -- --------------------------------------------------------
@@ -1634,7 +1712,7 @@ CREATE TABLE `sys_datalog` (
   `session_id` varchar(64) NOT NULL DEFAULT '',
   PRIMARY KEY  (`datalog_id`),
   KEY `server_id` (`server_id`,`status`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1658,7 +1736,7 @@ CREATE TABLE `sys_dbsync` (
   `last_datalog_id` int(11) unsigned NOT NULL default '0',
   PRIMARY KEY  (`id`),
   KEY `last_datalog_id` (`last_datalog_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1678,7 +1756,7 @@ CREATE TABLE `sys_filesync` (
   `wput_options` varchar(255) NOT NULL default '--timestamping --reupload --dont-continue',
   `active` tinyint(1) NOT NULL default '1',
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1692,7 +1770,7 @@ CREATE TABLE `sys_group` (
   `description` text,
   `client_id` int(11) unsigned NOT NULL default '0',
   PRIMARY KEY  (`groupid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1706,7 +1784,7 @@ CREATE TABLE `sys_ini` (
   `default_logo` text NOT NULL,
   `custom_logo` text NOT NULL,
   PRIMARY KEY  (`sysini_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1722,7 +1800,7 @@ CREATE TABLE `sys_log` (
   `tstamp` int(11) unsigned NOT NULL DEFAULT '0',
   `message` text,
   PRIMARY KEY  (`syslog_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1740,7 +1818,7 @@ CREATE TABLE `sys_remoteaction` (
   `response` mediumtext,
   PRIMARY KEY (`action_id`),
   KEY `server_id` (`server_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1756,7 +1834,7 @@ CREATE TABLE `sys_session` (
   `session_data` longtext,
   PRIMARY KEY (`session_id`),
   KEY `last_updated` (`last_updated`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -1775,7 +1853,7 @@ CREATE TABLE IF NOT EXISTS `sys_theme` (
   `username` varchar(64) NOT NULL DEFAULT '',
   `logo_url` varchar(255) NOT NULL DEFAULT '',
   PRIMARY KEY (`var_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -1785,13 +1863,13 @@ CREATE TABLE IF NOT EXISTS `sys_theme` (
 
 CREATE TABLE `sys_user` (
   `userid` int(11) unsigned NOT NULL auto_increment,
-  `sys_userid` int(11) unsigned NOT NULL default '1',
-  `sys_groupid` int(11) unsigned NOT NULL default '1',
+  `sys_userid` int(11) unsigned NOT NULL default '1' COMMENT 'Created by userid',
+  `sys_groupid` int(11) unsigned NOT NULL default '1' COMMENT 'Created by groupid',
   `sys_perm_user` varchar(5) NOT NULL default 'riud',
   `sys_perm_group` varchar(5) NOT NULL default 'riud',
   `sys_perm_other` varchar(5) NOT NULL default '',
   `username` varchar(64) NOT NULL default '',
-  `passwort` varchar(64) NOT NULL default '',
+  `passwort` varchar(200) NOT NULL default '',
   `modules` varchar(255) NOT NULL default '',
   `startmodule` varchar(255) NOT NULL default '',
   `app_theme` varchar(32) NOT NULL default 'default',
@@ -1807,7 +1885,7 @@ CREATE TABLE `sys_user` (
   `lost_password_hash` VARCHAR(50) NOT NULL default '',
   `lost_password_reqtime` DATETIME NULL default NULL,
   PRIMARY KEY  (`userid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1826,11 +1904,11 @@ CREATE TABLE `webdav_user` (
   `parent_domain_id` int(11) unsigned NOT NULL DEFAULT '0',
   `username` varchar(64) DEFAULT NULL,
   `username_prefix` varchar(50) NOT NULL default '',
-  `password` varchar(64) DEFAULT NULL,
+  `password` varchar(200) DEFAULT NULL,
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   `dir` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`webdav_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1848,7 +1926,7 @@ CREATE TABLE `web_backup` (
   `filename` varchar(255) NOT NULL DEFAULT '',
   `filesize` VARCHAR(20) NOT NULL DEFAULT '',
   PRIMARY KEY (`backup_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1882,7 +1960,7 @@ CREATE TABLE `web_database` (
   PRIMARY KEY (`database_id`),
   KEY `database_user_id` (`database_user_id`),
   KEY `database_ro_user_id` (`database_ro_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1903,7 +1981,7 @@ CREATE TABLE IF NOT EXISTS `web_database_user` (
   `database_password` varchar(64) DEFAULT NULL,
   `database_password_mongo` varchar(32) DEFAULT NULL,
   PRIMARY KEY (`database_user_id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+)  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -1965,6 +2043,7 @@ CREATE TABLE `web_domain` (
   `apache_directives` mediumtext,
   `nginx_directives` mediumtext,
   `php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'y',
+  `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n',
   `pm` enum('static','dynamic','ondemand') NOT NULL DEFAULT 'dynamic',
   `pm_max_children` int(11) NOT NULL DEFAULT '10',
   `pm_start_servers` int(11) NOT NULL DEFAULT '2',
@@ -1994,7 +2073,7 @@ CREATE TABLE `web_domain` (
   `log_retention` int(11) NOT NULL DEFAULT '10',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -2014,7 +2093,7 @@ CREATE TABLE IF NOT EXISTS `web_folder` (
   `path` varchar(255) DEFAULT NULL,
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`web_folder_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Dumping data for table `web_folder`
@@ -2040,7 +2119,7 @@ CREATE TABLE IF NOT EXISTS `web_folder_user` (
   `password` varchar(255) DEFAULT NULL,
   `active` varchar(255) NOT NULL DEFAULT 'y',
   PRIMARY KEY (`web_folder_user_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 --
 -- Dumping data for table `web_folder_user`
@@ -2057,7 +2136,7 @@ CREATE TABLE `web_traffic` (
   `traffic_date` date NULL DEFAULT NULL,
   `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
   UNIQUE KEY  (`hostname`,`traffic_date`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
+) DEFAULT CHARSET=utf8 ;
 
 -- --------------------------------------------------------
 
@@ -2116,7 +2195,7 @@ CREATE TABLE `xmpp_domain` (
   PRIMARY KEY  (`domain_id`),
   KEY `server_id` (`server_id`,`domain`),
   KEY `domain_active` (`domain`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -2138,7 +2217,7 @@ CREATE TABLE `xmpp_user` (
   PRIMARY KEY  (`xmppuser_id`),
   KEY `server_id` (`server_id`,`jid`),
   KEY `jid_active` (`jid`,`active`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -2443,13 +2522,13 @@ INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `s
 -- Dumping data for table `spamfilter_policy`
 -- 
 
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '');
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '', 'n', 6.00, 8.00, 'rewrite_subject', 12.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 2.00, 4.00, 'rewrite_subject', 8.00);
+INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 7.00, 10.00, 'rewrite_subject', 20.00);
 
 -- --------------------------------------------------------
 
diff --git a/install/tpl/amavisd_user_config.master b/install/tpl/amavisd_user_config.master
index 8663f07498f187fa1d25d501e73bff43f5964714..344ea9a152de0ab43982c83b18b6bb7e99525d6c 100644
--- a/install/tpl/amavisd_user_config.master
+++ b/install/tpl/amavisd_user_config.master
@@ -49,7 +49,7 @@ $final_spam_destiny = D_DISCARD;
 $final_banned_destiny = D_BOUNCE;
 $final_bad_header_destiny = D_PASS;
 
-# Default settings, we st this very high to not filter aut emails accidently
+# Default settings, we set this very high to not filter out emails accidentally
 $sa_spam_subject_tag = '***SPAM*** ';
 $sa_tag_level_deflt  = 20.0;  # add spam info headers if at, or above that level
 $sa_tag2_level_deflt = 60.0; # add 'spam detected' headers at that level
@@ -83,7 +83,6 @@ $notify_method = 'smtp:127.0.0.1:*';
 $interface_policy{'10026'} = 'ORIGINATING';
 $policy_bank{'ORIGINATING'} = {
   originating => 1,
-  smtpd_discard_ehlo_keywords => ['8BITMIME'],
 };
 
 # IP-Addresses for internal networks => load policy MYNETS
diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index ee1b693097a200505f42c7a7da3313b134d016b9..9cccf8d38ed0e3f6adf7466396803a2856c886cb 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -19,6 +19,12 @@
 	RequestHeader unset Proxy early
   </IfModule>
   
+  {tmpl_if name="enable_spdy" op="==" value="y"}
+  <IfModule spdy_module>
+	SpdyEnabled on
+  </IfModule>
+  {/tmpl_if}
+
   <IfModule mod_php5.c>
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     AddType application/x-httpd-php .php
@@ -68,6 +74,18 @@
     </Directory>
   </IfModule>
 
+{tmpl_if name="use_rspamd"}
+  <Location /rspamd>
+        Order allow,deny
+        Allow from all
+  </Location>
+  RewriteEngine On
+  RewriteRule ^/rspamd$ /rspamd/ [R,L]
+  RewriteRule ^/rspamd/(.*) http://127.0.0.1:11334/$1 [P]
+{/tmpl_if}
+
+
+
 </VirtualHost>
 
 
diff --git a/install/tpl/apache_ispconfig.vhost.master b/install/tpl/apache_ispconfig.vhost.master
index 55135299f18b17a09c1ca86d2a80add3ac296595..d8c56de22d1163ee7e148192dbd71680f5e4a7d7 100644
--- a/install/tpl/apache_ispconfig.vhost.master
+++ b/install/tpl/apache_ispconfig.vhost.master
@@ -89,11 +89,11 @@ NameVirtualHost *:<tmpl_var name="vhost_port">
 
   <IfModule mod_headers.c>
     # ISPConfig 3.1 currently requires unsafe-line for both scripts and styles, as well as unsafe-eval
-    Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'; upgrade-insecure-requests"
+    <tmpl_var name="ssl_comment">Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'; upgrade-insecure-requests"
     Header set X-Content-Type-Options: nosniff
     Header set X-Frame-Options: SAMEORIGIN
     Header set X-XSS-Protection: "1; mode=block"
-    Header always edit Set-Cookie (.*) "$1; HTTPOnly; Secure"
+    <tmpl_var name="ssl_comment">Header always edit Set-Cookie (.*) "$1; HTTPOnly; Secure"
     <IfVersion >= 2.4.7>
         Header setifempty Strict-Transport-Security "max-age=15768000"
     </IfVersion>
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index db6e0bfbe2ea115d12cb8760095e7da73ed937c6..777280f044eb6739965d602f7c19122d636b3f86 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -6,7 +6,9 @@ log_timestamp = "%Y-%m-%d %H:%M:%S "
 mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
+ssl_dh = </etc/dovecot/dh.pem
 ssl_protocols = !SSLv2 !SSLv3
+ssl_min_protocol = TLSv1
 mail_max_userip_connections = 100
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
@@ -66,3 +68,18 @@ protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
 }
+
+#2.3+ service stats {
+#2.3+     unix_listener stats-reader {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ 
+#2.3+     unix_listener stats-writer {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ }
+
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index 8fdaf44eeb7bc156eb27c43dc113dd182bb21616..cfe3bd018297a88206ca6f2a8854cbb26aae7c55 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -64,4 +64,19 @@ protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
 }
+
 mail_plugins = $mail_plugins quota
+
+#2.3+ service stats {
+#2.3+     unix_listener stats-reader {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ 
+#2.3+     unix_listener stats-writer {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ }
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index c14af1d44d505dbcdf15a00d2e2b471c80a6f3d6..1ba39a30d49c231b3d30b1c0f32ca51aff51b63f 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -61,4 +61,19 @@ protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
 }
+
 mail_plugins = $mail_plugins quota
+
+#2.3+ service stats {
+#2.3+     unix_listener stats-reader {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ 
+#2.3+     unix_listener stats-writer {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ }
diff --git a/install/tpl/mysql-virtual_policy_greylist.cf.master b/install/tpl/mysql-virtual_policy_greylist.cf.master
index fd6fded819745ebfcf47fd490ddd727b49be0315..55378b29cae4ebbe59815fedfed235c61632a4a1 100644
--- a/install/tpl/mysql-virtual_policy_greylist.cf.master
+++ b/install/tpl/mysql-virtual_policy_greylist.cf.master
@@ -1,5 +1,10 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-query = SELECT 'greylisting' FROM (SELECT greylisting, source AS email FROM mail_forwarding WHERE server_id = {server_id} UNION SELECT greylisting, email FROM mail_user WHERE server_id = {server_id}) addresses WHERE addresses.email='%s' AND addresses.greylisting='y' UNION SELECT 'greylisting' FROM `mail_forwarding` f CROSS JOIN `mail_user` u ON u.email = f.destination WHERE f.type = 'catchall' AND u.greylisting = 'y' AND u.server_id = {server_id} AND f.source = '@%s'
-hosts = {mysql_server_ip}
\ No newline at end of file
+query = SELECT 'greylisting' FROM
+  (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' 
+  UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' 
+  UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1) as rules 
+  WHERE rules.greylisting = 'y'
+
+hosts = {mysql_server_ip}
diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master
index e1bb6d1849d40e2eb3681ac807c98860f07f6c1c..871dff8c57dddff8f6a45193345928e90c1dcb4a 100644
--- a/install/tpl/nginx_apps.vhost.master
+++ b/install/tpl/nginx_apps.vhost.master
@@ -1,7 +1,7 @@
 server {
-        listen {apps_vhost_port};
-        listen [::]:{apps_vhost_port} ipv6only=on;
-        ssl {ssl_on};
+        listen {apps_vhost_port} {ssl_on};
+        listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on;
+
         {ssl_comment}ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
         {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt;
         {ssl_comment}ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key;
@@ -208,4 +208,28 @@ server {
                alias /var/lib/mailman/archives/public;
                autoindex on;
         }
+
+        {use_rspamd}location /rspamd/ {
+                {use_rspamd}proxy_pass http://127.0.0.1:11334/;
+                {use_rspamd}rewrite ^//(.*) /$1;
+                {use_rspamd}proxy_set_header X-Forwarded-Proto $scheme;
+                {use_rspamd}proxy_set_header Host $host;
+                {use_rspamd}proxy_set_header X-Real-IP $remote_addr;
+                {use_rspamd}proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+                {use_rspamd}proxy_pass_header Authorization;
+                {use_rspamd}client_max_body_size 0;
+                {use_rspamd}client_body_buffer_size 1m;
+                {use_rspamd}proxy_intercept_errors on;
+                {use_rspamd}proxy_buffering on;
+                {use_rspamd}proxy_buffer_size 128k;
+                {use_rspamd}proxy_buffers 256 16k;
+                {use_rspamd}proxy_busy_buffers_size 256k;
+                {use_rspamd}proxy_temp_file_write_size 256k;
+                {use_rspamd}proxy_max_temp_file_size 0;
+                {use_rspamd}proxy_read_timeout 300;
+                {use_rspamd}
+                {use_rspamd}location ~* ^/rspamd/(.+\.(jpg|jpeg|gif|css|png|js|ico|html?|xml|txt))$ {
+                       {use_rspamd}alias /usr/share/rspamd/www/$1;
+                {use_rspamd}}
+        {use_rspamd}}
 }
diff --git a/install/tpl/nginx_ispconfig.vhost.master b/install/tpl/nginx_ispconfig.vhost.master
index 3c8bf5dbaf749f4fca8ba08a44fa8ebe4404a8d3..aad670e97a8a74d022eb3c0c11927c559bd858d6 100644
--- a/install/tpl/nginx_ispconfig.vhost.master
+++ b/install/tpl/nginx_ispconfig.vhost.master
@@ -1,7 +1,7 @@
 server {
-        listen {vhost_port};
-        listen [::]:{vhost_port} ipv6only=on;
-		ssl {ssl_on};
+        listen {vhost_port} {ssl_on};
+        listen [::]:{vhost_port} {ssl_on} ipv6only=on;
+		
 		{ssl_comment}ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
         {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt;
         {ssl_comment}ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key;
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index f28c1095d2792989b09e64e3fa3f403c2adca09c..f615cf335494ef1307706d9a3a1a55adf6228218 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -60,4 +60,19 @@ protocol lmtp {
   postmaster_address = webmaster@localhost
   mail_plugins = quota sieve
 }
+
 mail_plugins = $mail_plugins quota
+
+#2.3+ service stats {
+#2.3+     unix_listener stats-reader {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ 
+#2.3+     unix_listener stats-writer {
+#2.3+         user = vmail
+#2.3+         group = vmail
+#2.3+         mode = 0660
+#2.3+     }
+#2.3+ }
diff --git a/install/tpl/rspamd_antivirus.conf.master b/install/tpl/rspamd_antivirus.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..f88d81ac7ce94c881087b93e0d08bc2f1849f429
--- /dev/null
+++ b/install/tpl/rspamd_antivirus.conf.master
@@ -0,0 +1,30 @@
+clamav {
+    # If set force this action if any virus is found (default unset: no action is forced)
+    #action = "reject";
+    # if `true` only messages with non-image attachments will be checked (default true)
+    scan_mime_parts = true;
+    # If `max_size` is set, messages > n bytes in size are not scanned
+    #max_size = 20000000;
+    # symbol to add (add it to metric if you want non-zero weight)
+    symbol = "CLAM_VIRUS";
+    # type of scanner: "clamav", "fprot", "sophos" or "savapi"
+    type = "clamav";
+    # For "savapi" you must also specify the following variable
+    #product_id = 12345;
+    # You can enable logging for clean messages
+    #log_clean = true;
+    # servers to query (if port is unspecified, scanner-specific default is used)
+    # can be specified multiple times to pool servers
+    # can be set to a path to a unix socket
+    # Enable this in local.d/antivirus.conf
+    #servers = "127.0.0.1:3310";
+    servers = "/var/run/clamav/clamd.ctl";
+    # if `patterns` is specified virus name will be matched against provided regexes and the related
+    # symbol will be yielded if a match is found. If no match is found, default symbol is yielded.
+    patterns {
+      # symbol_name = "pattern";
+      JUST_EICAR = "^Eicar-Test-Signature$";
+    }
+    # `whitelist` points to a map of IP addresses. Mail from these addresses is not scanned.
+    whitelist = "/etc/rspamd/antivirus.wl";
+}
\ No newline at end of file
diff --git a/install/tpl/rspamd_classifier-bayes.conf.master b/install/tpl/rspamd_classifier-bayes.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..1688d57e217673cdfa50ff36c31f4beb782aae70
--- /dev/null
+++ b/install/tpl/rspamd_classifier-bayes.conf.master
@@ -0,0 +1,3 @@
+autolearn = [-0.01, 5.00];
+per_user = true;
+per_language = true;
\ No newline at end of file
diff --git a/install/tpl/rspamd_dkim_signing.conf.master b/install/tpl/rspamd_dkim_signing.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..ed9abe40eebb060bc0a2eeec1da55074dc4eeaf7
--- /dev/null
+++ b/install/tpl/rspamd_dkim_signing.conf.master
@@ -0,0 +1,3 @@
+try_fallback = false;
+path_map = "/etc/rspamd/local.d/dkim_domains.map";
+selector_map = "/etc/rspamd/local.d/dkim_selectors.map";
\ No newline at end of file
diff --git a/install/tpl/rspamd_greylist.conf.master b/install/tpl/rspamd_greylist.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..74ea715a22cc6fa76671fd47a3f1bf89cfe92d49
--- /dev/null
+++ b/install/tpl/rspamd_greylist.conf.master
@@ -0,0 +1 @@
+servers = "127.0.0.1:6379";
\ No newline at end of file
diff --git a/install/tpl/rspamd_groups.conf.master b/install/tpl/rspamd_groups.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..62a986533abb66fe28203358f0d6ef5854f9e0e6
--- /dev/null
+++ b/install/tpl/rspamd_groups.conf.master
@@ -0,0 +1,4 @@
+group "antivirus" {
+    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/antivirus_group.conf"
+    .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/antivirus_group.conf"
+}
diff --git a/install/tpl/rspamd_milter_headers.conf.master b/install/tpl/rspamd_milter_headers.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..d399bbf4ecc37e39ff900260a4884335767e9957
--- /dev/null
+++ b/install/tpl/rspamd_milter_headers.conf.master
@@ -0,0 +1,2 @@
+use = ["x-spamd-bar", "x-spam-level", "authentication-results"];
+authenticated_headers = ["authentication-results"];
\ No newline at end of file
diff --git a/install/tpl/rspamd_mx_check.conf.master b/install/tpl/rspamd_mx_check.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..0a628f9c8382ee1f0def03883c91b91d7701e625
--- /dev/null
+++ b/install/tpl/rspamd_mx_check.conf.master
@@ -0,0 +1,9 @@
+enabled = true;
+servers = "localhost";
+key_prefix = "rmx";
+symbol_bad_mx = "MX_INVALID";
+symbol_no_mx = "MX_MISSING";
+symbol_good_mx = "MX_GOOD";
+expire = 86400;
+expire_novalid = 7200;
+greylist_invalid = false;
\ No newline at end of file
diff --git a/install/tpl/rspamd_neural.conf.master b/install/tpl/rspamd_neural.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..76f8a6d34479f05dfb638d736fdb5c975b31a7a0
--- /dev/null
+++ b/install/tpl/rspamd_neural.conf.master
@@ -0,0 +1,31 @@
+servers = 127.0.0.1:6379;
+enabled = true;
+
+rules {
+  "LONG" {
+    train {
+      max_trains = 5000;
+      max_usages = 200;
+      max_iterations = 25;
+      learning_rate = 0.01,
+      spam_score = 10;
+      ham_score = -2;
+    }
+    symbol_spam = "NEURAL_SPAM_LONG";
+    symbol_ham = "NEURAL_HAM_LONG";
+    ann_expire = 100d;
+  }
+  "SHORT" {
+    train {
+      max_trains = 100;
+      max_usages = 2;
+      max_iterations = 25;
+      learning_rate = 0.01,
+      spam_score = 10;
+      ham_score = -2;
+    }
+    symbol_spam = "NEURAL_SPAM_SHORT";
+    symbol_ham = "NEURAL_HAM_SHORT";
+    ann_expire = 1d;
+  }
+}
\ No newline at end of file
diff --git a/install/tpl/rspamd_neural_group.conf.master b/install/tpl/rspamd_neural_group.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..5aabdefaff0599b633b5589eb80c6c85f7e4692f
--- /dev/null
+++ b/install/tpl/rspamd_neural_group.conf.master
@@ -0,0 +1,18 @@
+symbols = {
+  "NEURAL_SPAM_LONG" {
+    weight = 1.0; # sample weight
+    description = "Neural network spam (long)";
+  }
+  "NEURAL_HAM_LONG" {
+    weight = -2.0; # sample weight
+    description = "Neural network ham (long)";
+  }
+  "NEURAL_SPAM_SHORT" {
+    weight = 0.5; # sample weight
+    description = "Neural network spam (short)";
+  }
+  "NEURAL_HAM_SHORT" {
+    weight = -1.0; # sample weight
+    description = "Neural network ham (short)";
+  }
+}
diff --git a/install/tpl/rspamd_options.inc.master b/install/tpl/rspamd_options.inc.master
new file mode 100644
index 0000000000000000000000000000000000000000..69e40365b7dc653b046b6e3cb3ff0539936a816e
--- /dev/null
+++ b/install/tpl/rspamd_options.inc.master
@@ -0,0 +1,5 @@
+local_addrs = "127.0.0.0/8, ::1";
+
+dns {
+	nameserver = ["127.0.0.1:53:10"];
+}
diff --git a/install/tpl/rspamd_override_rbl.conf.master b/install/tpl/rspamd_override_rbl.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..310e722832376f6e049fc2e1ac4c4179a3c3259e
--- /dev/null
+++ b/install/tpl/rspamd_override_rbl.conf.master
@@ -0,0 +1,53 @@
+# RBL
+symbols = {
+	"RBL_SENDERSCORE" {
+		weight = 4.0;
+		description = "From address is listed in senderscore.com BL";
+	}
+	"RBL_SPAMHAUS_SBL" {
+		weight = 2.0;
+		description = "From address is listed in zen sbl";
+	}
+	"RBL_SPAMHAUS_CSS" {
+	  weight = 2.0;
+	  description = "From address is listed in zen css";
+	}
+	"RBL_SPAMHAUS_XBL" {
+	  weight = 4.0;
+	  description = "From address is listed in zen xbl";
+	}
+	"RBL_SPAMHAUS_XBL_ANY" {
+	  weight = 4.0;
+	  description = "From or receive address is listed in zen xbl (any list)";
+	}
+	"RBL_SPAMHAUS_PBL" {
+	  weight = 2.0;
+	  description = "From address is listed in zen pbl (ISP list)";
+	}
+	"RBL_SPAMHAUS_DROP" {
+	  weight = 7.0;
+	  description = "From address is listed in zen drop bl";
+	}
+	"RECEIVED_SPAMHAUS_XBL" {
+	  weight = 3.0;
+	  description = "Received address is listed in zen xbl";
+	  one_shot = true;
+	}
+	"RBL_MAILSPIKE_WORST" {
+	  weight = 2.0;
+	  description = "From address is listed in RBL - worst possible reputation";
+	}
+	"RBL_MAILSPIKE_VERYBAD" {
+	  weight = 1.5;
+	  description = "From address is listed in RBL - very bad reputation";
+	}
+	"RBL_MAILSPIKE_BAD" {
+	  weight = 1.0;
+	  description = "From address is listed in RBL - bad reputation";
+	}
+	"RBL_SEM" {
+	  weight = 1.0;
+	  description = "Address is listed in Spameatingmonkey RBL";
+	}
+	# /RBL
+}
diff --git a/install/tpl/rspamd_override_surbl.conf.master b/install/tpl/rspamd_override_surbl.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..30676a46fde75e4e4d21bf3e5cc1e6aabc4e749d
--- /dev/null
+++ b/install/tpl/rspamd_override_surbl.conf.master
@@ -0,0 +1,108 @@
+symbols = {
+	# SURBL
+	"PH_SURBL_MULTI" {
+	  weight = 5.5;
+	  description = "SURBL: Phishing sites";
+	}
+	"MW_SURBL_MULTI" {
+	  weight = 5.5;
+	  description = "SURBL: Malware sites";
+	}
+	"ABUSE_SURBL" {
+	  weight = 5.5;
+	  description = "SURBL: ABUSE";
+	}
+	"CRACKED_SURBL" {
+	  weight = 4.0;
+	  description = "SURBL: cracked site";
+	}
+	"RAMBLER_URIBL" {
+	  weight = 4.5;
+	  description = "Rambler uribl";
+	  one_shot = true;
+	}
+	"RAMBLER_EMAILBL" {
+	  weight = 9.5;
+	  description = "Rambler emailbl";
+	  one_shot = true;
+	}
+	"MSBL_EBL" {
+	  weight = 7.5;
+	  description = "MSBL emailbl";
+	  one_shot = true;
+	}
+	"SEM_URIBL" {
+	  weight = 3.5;
+	  description = "Spameatingmonkey uribl";
+	}
+	"SEM_URIBL_FRESH15" {
+	  weight = 3.0;
+	  description = "Spameatingmonkey uribl. Domains registered in the last 15 days (.AERO,.BIZ,.COM,.INFO,.NAME,.NET,.PRO,.SK,.TEL,.US)";
+	}
+	"DBL" {
+	  weight = 0.0;
+	  description = "DBL unknown result";
+	}
+	"DBL_SPAM" {
+	  weight = 6.5;
+	  description = "DBL uribl spam";
+	}
+	"DBL_PHISH" {
+	  weight = 6.5;
+	  description = "DBL uribl phishing";
+	}
+	"DBL_MALWARE" {
+	  weight = 6.5;
+	  description = "DBL uribl malware";
+	}
+	"DBL_BOTNET" {
+	  weight = 5.5;
+	  description = "DBL uribl botnet C&C domain";
+	}
+	"DBL_ABUSE" {
+	  weight = 6.5;
+	  description = "DBL uribl abused legit spam";
+	}
+	"DBL_ABUSE_REDIR" {
+	  weight = 1.5;
+	  description = "DBL uribl abused spammed redirector domain";
+	}
+	"DBL_ABUSE_PHISH" {
+	  weight = 7.5;
+	  description = "DBL uribl abused legit phish";
+	}
+	"DBL_ABUSE_MALWARE" {
+	  weight = 7.5;
+	  description = "DBL uribl abused legit malware";
+	}
+	"DBL_ABUSE_BOTNET" {
+	  weight = 5.5;
+	  description = "DBL uribl abused legit botnet C&C";
+	}
+	"URIBL_BLACK" {
+	  weight = 7.5;
+	  description = "uribl.com black url";
+	}
+	"URIBL_RED" {
+	  weight = 3.5;
+	  description = "uribl.com red url";
+	}
+	"URIBL_GREY" {
+	  weight = 1.5;
+	  description = "uribl.com grey url";
+	  one_shot = true;
+	}
+	"URIBL_SBL" {
+	  weight = 6.5;
+	  description = "Spamhaus SBL URIBL";
+	}
+	"URIBL_SBL_CSS" {
+	  weight = 6.5;
+	  description = "Spamhaus SBL CSS URIBL";
+	}
+	"RBL_SARBL_BAD" {
+	  weight = 2.5;
+	  description = "A domain listed in the mail is blacklisted in SARBL";
+	}
+	# /SURBL
+}
diff --git a/install/tpl/rspamd_redis.conf.master b/install/tpl/rspamd_redis.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..b908af9f5ebe0e23293797e234eb9dd455838a01
--- /dev/null
+++ b/install/tpl/rspamd_redis.conf.master
@@ -0,0 +1 @@
+servers = "127.0.0.1";
\ No newline at end of file
diff --git a/install/tpl/rspamd_symbols_antivirus.conf.master b/install/tpl/rspamd_symbols_antivirus.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..8c2d93d89eeacf816ad870f5bab97a7d406cc143
--- /dev/null
+++ b/install/tpl/rspamd_symbols_antivirus.conf.master
@@ -0,0 +1,15 @@
+subject = "***SPAM*** %s";
+symbols = {
+	"CLAM_VIRUS" {
+		weight = 50;
+		description = "Clamav has found a virus.";
+	}
+	"JUST_EICAR" {
+		weight = 50;
+		description = "Clamav has found a virus.";
+	}
+	"R_DUMMY" {
+		weight = 0.0;
+		description = "Dummy symbol";
+	}
+}
\ No newline at end of file
diff --git a/install/tpl/rspamd_users.conf.master b/install/tpl/rspamd_users.conf.master
new file mode 120000
index 0000000000000000000000000000000000000000..3aa7af31851003f5b742ab52de226af706cf7466
--- /dev/null
+++ b/install/tpl/rspamd_users.conf.master
@@ -0,0 +1 @@
+../../server/conf/rspamd_users.conf.master
\ No newline at end of file
diff --git a/install/tpl/rspamd_users.inc.conf.master b/install/tpl/rspamd_users.inc.conf.master
new file mode 120000
index 0000000000000000000000000000000000000000..30bb52fd8e22d629bca9e28459d4d04e44e08ea0
--- /dev/null
+++ b/install/tpl/rspamd_users.inc.conf.master
@@ -0,0 +1 @@
+../../server/conf/rspamd_users.inc.conf.master
\ No newline at end of file
diff --git a/install/tpl/rspamd_wblist.inc.conf.master b/install/tpl/rspamd_wblist.inc.conf.master
new file mode 120000
index 0000000000000000000000000000000000000000..1ab3744b99aa456982f0a360377797543aeca60f
--- /dev/null
+++ b/install/tpl/rspamd_wblist.inc.conf.master
@@ -0,0 +1 @@
+../../server/conf/rspamd_wblist.inc.conf.master
\ No newline at end of file
diff --git a/install/tpl/rspamd_worker-controller.inc.master b/install/tpl/rspamd_worker-controller.inc.master
new file mode 120000
index 0000000000000000000000000000000000000000..dae19323690f604babdb0682108b49f420476fb7
--- /dev/null
+++ b/install/tpl/rspamd_worker-controller.inc.master
@@ -0,0 +1 @@
+../../server/conf/rspamd_worker-controller.inc.master
\ No newline at end of file
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 079d6344885c06bd75a389ce38fe4580f8f0c46a..36f157d8e6ef80a5e4029b2c9ac6963e35bc3d60 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -38,6 +38,8 @@ homedir_path=/var/vmail
 maildir_format=maildir
 dkim_path=/var/lib/amavis/dkim
 dkim_strength=1024
+content_filter=amavis
+rspamd_password=
 pop3_imap_daemon=courier
 mail_filter_syntax=maildrop
 mailuser_uid=5000
@@ -116,6 +118,7 @@ overquota_db_notify_admin=y
 overquota_db_notify_client=y
 overquota_notify_onok=n
 logging=yes
+php_fpm_reload_mode=reload
 
 [dns]
 bind_user=root
@@ -140,6 +143,7 @@ jailkit_chroot_home=/home/[username]
 jailkit_chroot_app_sections=basicshell editors extendedshell netutils ssh sftp scp groups jk_lsh
 jailkit_chroot_app_programs=/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch /usr/bin/which /usr/lib/x86_64-linux-gnu/libmemcached.so.11 /usr/lib/x86_64-linux-gnu/libmemcachedutil.so.2 /usr/lib/x86_64-linux-gnu/libMagickWand-6.Q16.so.2 /opt/php-5.6.8/bin/php /opt/php-5.6.8/include /opt/php-5.6.8/lib
 jailkit_chroot_cron_programs=/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php
+jailkit_chroot_authorized_keys_template=/root/.ssh/authorized_keys
 
 [vlogger]
 config_dir=/etc
diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index 42a003b9c1179f236ca2e843470bd457d158e5c7..c916a6254792bb55369f825a462ad9e40b22f997 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -33,6 +33,7 @@ vhost_aliasdomains=n
 client_username_web_check_disabled=n
 backups_include_into_web_quota=n
 reseller_can_use_options=n
+web_php_options=no,fast-cgi,mod,php-fpm
 
 
 [tools]
diff --git a/install/update.php b/install/update.php
index 62e8d5ef4a73f4a18fd32d58108146c3cec25eee..11570aa666ece7bd14c272c521f6c29af2c27536 100644
--- a/install/update.php
+++ b/install/update.php
@@ -59,6 +59,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 error_reporting(E_ALL|E_STRICT);
 
 define('INSTALLER_RUN', true);
+define('INSTALLER_UPDATE', true);
 
 //** The banner on the command line
 echo "\n\n".str_repeat('-', 80)."\n";
@@ -292,6 +293,22 @@ if($conf['mysql']['master_slave_setup'] == 'y') {
 */
 checkDbHealth();
 
+
+/*
+ * Check command line mysql login
+ */
+if( !empty($conf["mysql"]["admin_password"]) ) {
+	$cmd = "mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." --force -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." -P ".escapeshellarg($conf['mysql']['port'])." -D ".escapeshellarg($conf['mysql']['database'])." -e ". escapeshellarg('SHOW DATABASES');
+} else {
+	$cmd = "mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." --force -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -P ".escapeshellarg($conf['mysql']['port'])." -D ".escapeshellarg($conf['mysql']['database'])." -e ". escapeshellarg('SHOW DATABASES');
+}
+$retval = 0;
+$retout = array();
+exec($cmd, $retout, $retval);
+if($retval != 0) {
+	die("Unable to call mysql command line with credentials from mysql_clientdb.conf\n");
+}
+
 /*
  *  dump the new Database and reconfigure the server.ini
  */
@@ -396,6 +413,12 @@ if($reconfigure_services_answer == 'yes' || $reconfigure_services_answer == 'sel
 			$inst->configure_amavis();
 		}
 
+		//** Configure Rspamd
+		if($conf['rspamd']['installed'] == true && $inst->reconfigure_app('Rspamd', $reconfigure_services_answer)) {
+			swriteln('Configuring Rspamd');
+			$inst->configure_rspamd();
+		}
+
 		//** Configure Getmail
 		if ($inst->reconfigure_app('Getmail', $reconfigure_services_answer)) {
 			swriteln('Configuring Getmail');
@@ -531,6 +554,7 @@ if($reconfigure_services_answer == 'yes') {
 		if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
 		if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
 		if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
+		if($conf['rspamd']['installed'] == true && $conf['rspamd']['init_script'] != '') system($inst->getinitcommand($conf['rspamd']['init_script'], 'restart'));
 		if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
 		if($conf['courier']['installed'] == true){
 			if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index 7af764f92b8b1855dd84a4f7a635907e250c40d1..e341a57943cc65d364cdd7296030fab76dd2c8da 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -68,20 +68,32 @@ class app {
 				$this->db = false;
 			}
 		}
+		$this->uses('functions'); // we need this before all others!
+		$this->uses('auth,plugin,ini_parser,getconf');
+		
+	}
 
+	public function __get($prop) {
+		if(property_exists($this, $prop)) return $this->{$prop};
+		
+		$this->uses($prop);
+		if(property_exists($this, $prop)) return $this->{$prop};
+		else trigger_error('Undefined property ' . $prop . ' of class app', E_USER_WARNING);
+	}
+	
+	public function __destruct() {
+		session_write_close();
+	}
+	
+	public function initialize_session() {
 		//* Start the session
 		if($this->_conf['start_session'] == true) {
-
+			session_name('ISPCSESS');
 			$this->uses('session');
 			$sess_timeout = $this->conf('interface', 'session_timeout');
-			$cookie_domain = (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']);
-			
-			// Workaround for Nginx servers
-			if($cookie_domain == '_') {
-				$tmp = explode(':',$_SERVER["HTTP_HOST"]);
-				$cookie_domain = $tmp[0];
-				unset($tmp);
-			}
+			$cookie_domain = $this->get_cookie_domain();
+			$this->log("cookie_domain is ".$cookie_domain,0);
+			$cookie_domain = '';
 			$cookie_secure = ($_SERVER["HTTPS"] == 'on')?true:false;
 			if($sess_timeout) {
 				/* check if user wants to stay logged in */
@@ -122,23 +134,8 @@ class app {
 			if(empty($_SESSION['s']['language'])) $_SESSION['s']['language'] = $conf['language'];
 		}
 
-		$this->uses('functions'); // we need this before all others!
-		$this->uses('auth,plugin,ini_parser,getconf');
-		
-	}
-
-	public function __get($prop) {
-		if(property_exists($this, $prop)) return $this->{$prop};
-		
-		$this->uses($prop);
-		if(property_exists($this, $prop)) return $this->{$prop};
-		else return null;
 	}
 	
-	public function __destruct() {
-		session_write_close();
-	}
-
 	public function uses($classes) {
 		$cl = explode(',', $classes);
 		if(is_array($cl)) {
@@ -251,7 +248,7 @@ class app {
 			}
 			$this->_language_inc = 1;
 		}
-		if(isset($this->_wb[$text]) && $this->wb[$text] !== '') {
+		if(isset($this->_wb[$text]) && $this->_wb[$text] !== '') {
 			$text = $this->_wb[$text];
 		} else {
 			if($this->_conf['debug_language']) {
@@ -336,12 +333,52 @@ class app {
 		$this->tpl->setVar('globalsearch_noresults_limit_txt', $this->lng('globalsearch_noresults_limit_txt'));
 		$this->tpl->setVar('globalsearch_searchfield_watermark_txt', $this->lng('globalsearch_searchfield_watermark_txt'));
 	}
+	
+	private function get_cookie_domain() {
+		$sec_config = $this->getconf->get_security_config('permissions');
+		$proxy_panel_allowed = $sec_config['reverse_proxy_panel_allowed'];
+		if ($proxy_panel_allowed == 'all') {
+			return '';
+		}
+		/*
+		 * See ticket #5238: It should be ensured, that _SERVER_NAME is always set.
+		 * Otherwise the security improvement doesn't work with nginx. If this is done,
+		 * the check for HTTP_HOST and workaround for nginx is obsolete.
+		 */
+		$cookie_domain = (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']);
+		// Workaround for Nginx servers
+		if($cookie_domain == '_') {
+			$tmp = explode(':',$_SERVER["HTTP_HOST"]);
+			$cookie_domain = $tmp[0];
+			unset($tmp);
+		}
+		if($proxy_panel_allowed == 'sites') {
+			$forwarded_host = (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : null );
+			if($forwarded_host !== null && $forwarded_host !== $cookie_domain) {
+				// Just check for complete domain name and not auto subdomains
+				$sql = "SELECT domain_id from web_domain where domain = '$forwarded_host'";
+				$recs = $this->db->queryOneRecord($sql);
+				if($recs !== null) {
+					$cookie_domain = $forwarded_host;
+				}
+				unset($forwarded_host);
+			}
+		}
+		
+		return $cookie_domain;
+	}
 
 } // end class
 
 //** Initialize application (app) object
 //* possible future =  new app($conf);
 $app = new app();
+/* 
+   split session creation out of constructor is IMHO better.
+   otherwise we have some circular references to global $app like in
+   getconfig property of App - RA
+*/
+$app->initialize_session();
 
 // load and enable PHP Intrusion Detection System (PHPIDS)
 $ids_security_config = $app->getconf->get_security_config('ids');
diff --git a/interface/lib/classes/aps_guicontroller.inc.php b/interface/lib/classes/aps_guicontroller.inc.php
index 80e011f4af4664256355015e0f63e92ac88e32b1..8a764a9c5c776618156be1023cdb5ca2a9f4f590 100644
--- a/interface/lib/classes/aps_guicontroller.inc.php
+++ b/interface/lib/classes/aps_guicontroller.inc.php
@@ -249,6 +249,15 @@ class ApsGUIController extends ApsBase
 			$settings['main_database_host'] = 'localhost';
 			$mysql_db_remote_access = 'n';
 			$mysql_db_remote_ips = '';
+
+			// If we are dealing with chrooted PHP-FPM, use a network connection instead because the MySQL socket file
+			// does not exist within the chroot.
+			$php_fpm_chroot = $app->db->queryOneRecord("SELECT php_fpm_chroot FROM web_domain WHERE domain_id = ?", $websrv['domain_id']);
+			if ($php_fpm_chroot['php_fpm_chroot'] === 'y') {
+				$settings['main_database_host'] = '127.0.0.1';
+				$mysql_db_remote_access = 'y';
+				$mysql_db_remote_ips = '127.0.0.1';
+			}
 		} else {
 			//* get the default database server of the client
 			$client = $app->db->queryOneRecord("SELECT default_dbserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $websrv['sys_groupid']);
@@ -558,6 +567,16 @@ class ApsGUIController extends ApsBase
 		}
 		else $error[] = $app->lng('error_main_domain');
 
+		if(isset($postinput['admin_password']))
+		{
+			$app->uses('validate_password');
+
+			$passwordError = $app->validate_password->password_check('', $postinput['admin_password'], '');
+			if ($passwordError) {
+				$error[] = $passwordError;
+			}
+		}
+
 		// Main location (not obligatory but must be supplied)
 		if(isset($postinput['main_location']))
 		{
diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 6658c4c116366177ca09aefb891885cf0ae7dfa2..2075c7b90d10aaf8f14cc4648bf75a727f14ebb7 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -231,12 +231,27 @@ class auth {
 		if($charset != 'UTF-8') {
 			$cleartext_password = mb_convert_encoding($cleartext_password, $charset, 'UTF-8');
 		}
-		$salt="$1$";
-		$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-		for ($n=0;$n<8;$n++) {
-			$salt.=$base64_alphabet[mt_rand(0, 63)];
+		
+		if(defined('CRYPT_SHA512') && CRYPT_SHA512 == 1) {
+			$salt = '$6$rounds=5000$';
+			$salt_length = 16;
+		} elseif(defined('CRYPT_SHA256') && CRYPT_SHA256 == 1) {
+			$salt = '$5$rounds=5000$';
+			$salt_length = 16;
+		} else {
+			$salt = '$1$';
+			$salt_length = 12;
+		}
+		
+		if(function_exists('openssl_random_pseudo_bytes')) {
+			$salt .= substr(bin2hex(openssl_random_pseudo_bytes($salt_length)), 0, $salt_length);
+		} else {
+			$base64_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./';
+			for($n = 0; $n < $salt_length; $n++) {
+				$salt .= $base64_alphabet[mt_rand(0, 63)];
+			}
 		}
-		$salt.="$";
+		$salt .= "$";
 		return crypt($cleartext_password, $salt);
 	}
 	
@@ -253,16 +268,27 @@ class auth {
 		return array('csrf_id' => $_csrf_id,'csrf_key' => $_csrf_key);
 	}
 	
-	public function csrf_token_check() {
+	public function csrf_token_check($method = 'POST') {
 		global $app;
 		
-		if(isset($_POST) && is_array($_POST)) {
+		if($method == 'POST') {
+			$input_vars = $_POST;
+		} elseif ($method == 'GET') {
+			$input_vars = $_GET;
+		} else {
+			$app->error('Unknown CSRF verification method.');
+		}
+		
+		//print_r($input_vars);
+		//die(print_r($_SESSION['_csrf']));
+		
+		if(isset($input_vars) && is_array($input_vars)) {
 			$_csrf_valid = false;
-			if(isset($_POST['_csrf_id']) && isset($_POST['_csrf_key'])) {
-				$_csrf_id = trim($_POST['_csrf_id']);
-				$_csrf_key = trim($_POST['_csrf_key']);
+			if(isset($input_vars['_csrf_id']) && isset($input_vars['_csrf_key'])) {
+				$_csrf_id = trim($input_vars['_csrf_id']);
+				$_csrf_key = trim($input_vars['_csrf_key']);
 				if(isset($_SESSION['_csrf']) && isset($_SESSION['_csrf'][$_csrf_id]) && isset($_SESSION['_csrf_timeout']) && isset($_SESSION['_csrf_timeout'][$_csrf_id])) {
-					if($_SESSION['_csrf'][$_csrf_id] === $_csrf_key && $_SESSION['_csrf_timeout'] >= time()) $_csrf_valid = true;
+					if($_SESSION['_csrf'][$_csrf_id] === $_csrf_key && $_SESSION['_csrf_timeout'][$_csrf_id] >= time()) $_csrf_valid = true;
 				}
 			}
 			if($_csrf_valid !== true) {
diff --git a/interface/lib/classes/custom_datasource.inc.php b/interface/lib/classes/custom_datasource.inc.php
index 484d0fa055afbc32843039811e2622763239d6ab..c50d5850278483e6841e8eae202a99d6c4f7a7f1 100644
--- a/interface/lib/classes/custom_datasource.inc.php
+++ b/interface/lib/classes/custom_datasource.inc.php
@@ -72,7 +72,7 @@ class custom_datasource {
 			$client = $app->db->queryOneRecord("SELECT default_slave_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			$sql = "SELECT server_id,server_name FROM server WHERE server_id = ?";
 		} else {
-			$sql = "SELECT server_id,server_name FROM server WHERE dns_server = 1 ORDER BY server_name AND mirror_server_id = 0";
+			$sql = "SELECT server_id,server_name FROM server WHERE dns_server = 1 AND mirror_server_id = 0 ORDER BY server_name";
 		}
 		$records = $app->db->queryAllRecords($sql, $client['default_slave_dnsserver']);
 		$records_new = array();
diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index c4764cb5558539bed8e990b4418798ef24833d77..9c7269e568624cb7ae2f696929130ad1817b9e63 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -272,7 +272,7 @@ class db
 				if(!is_object($this->_iConnId)) {
 					$this->_iConnId = mysqli_init();
 				}
-				if(!mysqli_real_connect($this->_isConnId, $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) {
+				if(!mysqli_real_connect($this->_iConnId, $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) {
 					if(mysqli_connect_errno() == '111') {
 						// server is not available
 						if($try > 9) {
@@ -514,16 +514,16 @@ class db
 	public function escape($sString) {
 		global $app;
 		if(!is_string($sString) && !is_numeric($sString)) {
-			$app->log('NON-String given in escape function! (' . gettype($sString) . ')', LOGLEVEL_INFO);
+			$app->log('NON-String given in escape function! (' . gettype($sString) . ')', LOGLEVEL_DEBUG);
 			//$sAddMsg = getDebugBacktrace();
-			$app->log($sAddMsg, LOGLEVEL_DEBUG);
+			//$app->log($sAddMsg, LOGLEVEL_DEBUG);
 			$sString = '';
 		}
 
 		$cur_encoding = mb_detect_encoding($sString);
 		if($cur_encoding != "UTF-8") {
 			if($cur_encoding != 'ASCII') {
-				if(is_object($app) && method_exists($app, 'log')) $app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_INFO);
+				if(is_object($app) && method_exists($app, 'log')) $app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_DEBUG);
 				if($cur_encoding) $sString = mb_convert_encoding($sString, 'UTF-8', $cur_encoding);
 				else $sString = mb_convert_encoding($sString, 'UTF-8');
 			}
@@ -709,7 +709,7 @@ class db
 
 		if($diff_num > 0) {
 			$diffstr = serialize($diffrec_full);
-			if(isset($_SESSION)) {
+			if(!empty($_SESSION['s']['user']['username'])) {
 				$username = $_SESSION['s']['user']['username'];
 			} else {
 				$username = 'admin';
diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index 28ab9ce384da1aad506f2bd7468caa40b0aec7d1..03e331f0f14c22db8632e191e9e6a5346401b693 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -451,9 +451,9 @@ class functions {
 		if(file_exists($id_rsa_file)) unset($id_rsa_file);
 		if(file_exists($id_rsa_pub_file)) unset($id_rsa_pub_file);
 		if(!file_exists($id_rsa_file) && !file_exists($id_rsa_pub_file)) {
-			exec('ssh-keygen -t rsa -C '.$username.'-rsa-key-'.time().' -f '.$id_rsa_file.' -N ""');
+			$app->system->exec_safe('ssh-keygen -t rsa -C ? -f ? -N ""', $username.'-rsa-key-'.time(), $id_rsa_file);
 			$app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", @file_get_contents($id_rsa_file), @file_get_contents($id_rsa_pub_file), $client_id);
-			exec('rm -f '.$id_rsa_file.' '.$id_rsa_pub_file);
+			$app->system->exec_safe('rm -f ? ?', $id_rsa_file, $id_rsa_pub_file);
 		} else {
 			$app->log("Failed to create SSH keypair for ".$username, LOGLEVEL_WARN);
 		}
diff --git a/interface/lib/classes/ispcmail.inc.php b/interface/lib/classes/ispcmail.inc.php
index b818e1e44a6732db717bee6560001a6ebba9ef35..522fd1a71b6f0e6bf4beebbff0c9e2ba4a06aac7 100644
--- a/interface/lib/classes/ispcmail.inc.php
+++ b/interface/lib/classes/ispcmail.inc.php
@@ -599,10 +599,16 @@ class ispcmail {
 			fputs($this->_smtp_conn, 'STARTTLS' . $this->_crlf);
 			fgets($this->_smtp_conn, 515);
 			
+			$crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
+
+			if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
+				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
+				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
+			}
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_host', false);
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'verify_peer', false);
 			stream_context_set_option($this->_smtp_conn, 'ssl', 'allow_self_signed', true);
-			stream_socket_enable_crypto($this->_smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
+			stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method);
 		}
 
 		//AUTH LOGIN
diff --git a/interface/lib/classes/listform_actions.inc.php b/interface/lib/classes/listform_actions.inc.php
index a13c3fdb739691b6f49f494a1d0de15f1aa406a6..4a463fe01508e196363ed1095a5d41654398164f 100644
--- a/interface/lib/classes/listform_actions.inc.php
+++ b/interface/lib/classes/listform_actions.inc.php
@@ -129,13 +129,19 @@ class listform_actions {
 
 		// Getting Datasets from DB
 		$records = $app->db->queryAllRecords($this->getQueryString($php_sort));
+		
+		$csrf_token = $app->auth->csrf_token_get($app->listform->listDef['name']);
+		$_csrf_id = $csrf_token['csrf_id'];
+		$_csrf_key = $csrf_token['csrf_key'];
 
 		$this->DataRowColor = "#FFFFFF";
 		$records_new = array();
 		if(is_array($records)) {
 			$this->idx_key = $app->listform->listDef["table_idx"];
-			foreach($records as $rec) {
-				$records_new[] = $this->prepareDataRow($rec);
+			foreach($records as $key => $rec) {
+				$records_new[$key] = $this->prepareDataRow($rec);
+				$records_new[$key]['csrf_id'] = $_csrf_id;
+				$records_new[$key]['csrf_key'] = $_csrf_key;
 			}
 		}
 
@@ -264,7 +270,7 @@ class listform_actions {
 		foreach($limits as $key => $val){
 			$options .= '<option value="'.$key.'" '.(isset($_SESSION['search']['limit']) &&  $_SESSION['search']['limit'] == $key ? 'selected="selected"':'' ).(!isset($_SESSION['search']['limit']) && $key == '15' ? 'selected="selected"':'').'>'.$val.'</option>';
 		}
-		$app->tpl->setVar('search_limit', '<select name="search_limit" class="search_limit">'.$options.'</select>');
+		$app->tpl->setVar('search_limit', '<select name="search_limit" class="search_limit" style="width: 60px;">'.$options.'</select>');
 
 		$app->tpl->setVar('toolsarea_head_txt', $app->lng('toolsarea_head_txt'));
 		$app->tpl->setVar($app->listform->wordbook);
diff --git a/interface/lib/classes/plugin_listview.inc.php b/interface/lib/classes/plugin_listview.inc.php
index bd0aa0e160105701a956f69780c95daa6b18dc2a..ced308b2e5a23f57bd1962d7a5e5df9337fac7b6 100644
--- a/interface/lib/classes/plugin_listview.inc.php
+++ b/interface/lib/classes/plugin_listview.inc.php
@@ -123,6 +123,10 @@ class plugin_listview extends plugin_base {
 		$lng_file = "lib/lang/".$app->functions->check_language($_SESSION["s"]["language"])."_".$app->listform->listDef['name']."_list.lng";
 		include $lng_file;
 		$listTpl->setVar($wb);
+		
+		$csrf_token = $app->auth->csrf_token_get($app->listform->listDef['name']);
+		$_csrf_id = $csrf_token['csrf_id'];
+		$_csrf_key = $csrf_token['csrf_key'];
 
 
 		// Get the data
@@ -157,6 +161,10 @@ class plugin_listview extends plugin_base {
 				// The variable "id" contains always the index field
 				$rec["id"] = $rec[$idx_key];
 				$rec["delete_confirmation"] = $wb['delete_confirmation'];
+				
+				// CSRF Token
+				$rec["csrf_id"] = $_csrf_id;
+				$rec["csrf_key"] = $_csrf_key;
 
 				$records_new[] = $rec;
 			}
diff --git a/interface/lib/classes/plugin_system_config_dns_ca.inc.php b/interface/lib/classes/plugin_system_config_dns_ca.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..d9a99496550d82e92e1663c0c383401edf3d45e8
--- /dev/null
+++ b/interface/lib/classes/plugin_system_config_dns_ca.inc.php
@@ -0,0 +1,91 @@
+<?php
+
+/*
+Copyright (c) 2017, Florian Schaal, schaal @it UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class plugin_system_config_dns_ca extends plugin_base {
+
+	var $module;
+	var $form;
+	var $tab;
+	var $record_id;
+	var $formdef;
+	var $options;
+	var $error = '';
+
+	function onShow() {
+		global $app;
+
+		$pluginTpl = new tpl;
+		$pluginTpl->newTemplate('templates/system_config_dns_ca_edit.htm');
+		include 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'_system_config.lng';
+		$pluginTpl->setVar($wb);
+		$ca_id = $app->functions->intval($_GET['id']);
+		if(isset($_GET['action']) && ($_GET['action'] == 'edit') && $ca_id > 0) {
+			$pluginTpl->setVar('edit_record', 1);
+			$rec = $app->db->queryOneRecord("SELECT * FROM dns_ssl_ca WHERE id = ?", $ca_id);
+			$pluginTpl->setVar('id', $rec['id']);
+			$pluginTpl->setVar('ca_name', $rec['ca_name']);
+			$pluginTpl->setVar('ca_issue', $rec['ca_issue']);
+			$pluginTpl->setVar('ca_wildcard', $rec['ca_wildcard']);
+			$pluginTpl->setVar('ca_critical', $rec['ca_critical']);
+			$pluginTpl->setVar('ca_iodef', $rec['ca_iodef']);
+			$pluginTpl->setVar('active', $rec['active']);
+		} elseif(isset($_GET['action']) && ($_GET['action'] == 'save') && $ca_id > 0) {
+			$pluginTpl->setVar('edit_record', 0);
+			$pluginTpl->setVar('id', $ca_id);
+			$pluginTpl->setVar('ca_name', $app->functions->htmlentities($_POST['ca_name']));
+			$pluginTpl->setVar('ca_issue', $app->functions->htmlentities($_POST['ca_issue']));
+			$pluginTpl->setVar('ca_wildcard', $app->functions->htmlentities($_POST['ca_wildcard']));
+			$pluginTpl->setVar('ca_critical', $app->functions->htmlentities($_POST['ca_critical']));
+			$pluginTpl->setVar('ca_iodef', $app->functions->htmlentities($_POST['ca_iodef']));
+			$pluginTpl->setVar('active', $app->functions->htmlentities($_POST['active']));
+		} else {
+			$pluginTpl->setVar('edit_record', 0);
+		}
+
+		return $pluginTpl->grab();
+
+	}
+
+	function onUpdate() {
+		global $app;
+
+		$ca_id = $app->functions->intval($_GET['id']);
+		if(isset($_GET['action']) && $_GET['action'] == 'save') {
+			if($ca_id > 0) {
+				$app->db->query("UPDATE dns_ssl_ca SET ca_name = ?, ca_issue = ?, ca_wildcard = ?, ca_iodef = ?, active = ? WHERE id = ?", $_POST['ca_name'], $_POST['ca_issue'], $_POST['ca_wildcard'], $_POST['ca_iodef'], $_POST['active'], $ca_id);
+			} else {
+				$app->db->query("INSERT INTO (sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, ca_name, ca_issue, ca_wildcard, ca_iodef, active) VALUES(1, 1, 'riud', 'riud', '', ?, ?, ?, ?, ?", $_POST['ca_name'], $_POST['ca_issue'], $_POST['ca_wildcard'], $_POST['ca_iodef'], $_POST['active']);
+			}
+		}
+	}
+
+}
+
+?>
diff --git a/interface/lib/classes/plugin_system_config_dns_ca_list.inc.php b/interface/lib/classes/plugin_system_config_dns_ca_list.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b82c06043bcb4942b9d03ad394675d9339690d1
--- /dev/null
+++ b/interface/lib/classes/plugin_system_config_dns_ca_list.inc.php
@@ -0,0 +1,81 @@
+<?php
+
+/*
+Copyright (c) 2017, Florian Schaal, schaal @it UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class plugin_system_config_dns_ca_list extends plugin_base {
+
+	var $module;
+	var $form;
+	var $tab;
+	var $record_id;
+	var $formdef;
+	var $options;
+
+	function onShow() {
+		global $app;
+
+		$listTpl = new tpl;
+		$listTpl->newTemplate('templates/system_config_dns_ca_list.htm');
+
+		//* Loading language file
+		$lng_file = 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'_system_config.lng';
+		include $lng_file;
+		$listTpl->setVar($wb);
+		if($_SESSION['s']['user']['typ'] == 'admin') {
+			if(isset($_GET['action'])) { 
+				$ca_id = $app->functions->intval($_GET['id']);
+				if($_GET['action'] == 'delete' && $ca_id > 0) {
+					$app->db->query("DELETE FROM dns_ssl_ca WHERE id = ?",  $ca_id);
+				}
+			}
+		}
+
+		if(isset($_GET['action']) && $_GET['action'] == 'edit' && $_GET['id'] > 0) $listTpl->setVar('edit_record', 1);
+
+		// Getting Datasets from DB
+		$ca_records = $app->db->queryAllRecords("SELECT * FROM dns_ssl_ca ORDER BY ca_name ASC");
+		$records=array();
+		if(is_array($ca_records) && count($ca_records) > 0) {
+			foreach($ca_records as $ca) {
+				$rec['ca_id'] = $ca['id'];
+				$rec['name'] = $ca['ca_name'];
+				$rec['active'] = $ca['active'];
+				$records[] = $rec;
+				unset($rec);
+			}
+			$listTpl->setLoop('ca_records', @$records);
+		} 
+		$listTpl->setVar('parent_id', $this->form->id);
+
+		return $listTpl->grab();
+	}
+
+}
+
+?>
diff --git a/interface/lib/classes/remote.d/aps.inc.php b/interface/lib/classes/remote.d/aps.inc.php
index 50dda4825577555eac85e0ca56891b866db1352f..c2f8789ed132f94d53d3b67168df2cb3cbc0ec22 100644
--- a/interface/lib/classes/remote.d/aps.inc.php
+++ b/interface/lib/classes/remote.d/aps.inc.php
@@ -43,8 +43,7 @@ class remoting_aps extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		
-		require_once '../../../lib/config.inc.php';
+
 		$app->load('aps_crawler');
 		
 		$aps = new ApsCrawler($app, true); // true = Interface mode, false = Server mode
@@ -238,6 +237,9 @@ class remoting_aps extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
+		
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadUserProfile(0);
 	
 		$app->load('aps_guicontroller');
 		$gui = new ApsGUIController($app);
diff --git a/interface/lib/classes/remote.d/client.inc.php b/interface/lib/classes/remote.d/client.inc.php
index b91909c9d3cf85aca4353217b293d09d4bebe65f..e07e227e60626c3dca9fdc4c4a078fee28db195c 100644
--- a/interface/lib/classes/remote.d/client.inc.php
+++ b/interface/lib/classes/remote.d/client.inc.php
@@ -604,11 +604,9 @@ class remoting_client extends remoting {
 			if($user) {
 				$saved_password = stripslashes($user['password']);
 
-				if(substr($saved_password, 0, 3) == '$1$') {
-					//* The password is crypt-md5 encrypted
-					$salt = '$1$'.substr($saved_password, 3, 8).'$';
-
-					if(crypt(stripslashes($password), $salt) != $saved_password) {
+				if(preg_match('/^\$[156]\$/', $saved_password)) {
+					//* The password is crypt encrypted
+					if(crypt(stripslashes($password), $saved_password) !== $saved_password) {
 						$user = false;
 					}
 				} else {
@@ -636,11 +634,9 @@ class remoting_client extends remoting {
 			if($user) {
 				$saved_password = stripslashes($user['passwort']);
 
-				if(substr($saved_password, 0, 3) == '$1$') {
+				if(preg_match('/^\$[156]\$/', $saved_password)) {
 					//* The password is crypt-md5 encrypted
-					$salt = '$1$'.substr($saved_password, 3, 8).'$';
-
-					if(crypt(stripslashes($password), $salt) != $saved_password) {
+					if(crypt(stripslashes($password), $saved_password) != $saved_password) {
 						$user = false;
 					}
 				} else {
diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index faae06dc2e2f456baa496966dc134cad78a3edd8..434af6a98364c134e993575281a2a5e7fcfde481 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -42,8 +42,7 @@ class remoting_dns extends remoting {
 	// DNS Function --------------------------------------------------------------------------------------------------
 
 	//* Create Zone with Template
-	public function dns_templatezone_add($session_id, $client_id, $template_id, $domain, $ip, $ns1, $ns2, $email)
-	{
+	public function dns_templatezone_add($session_id, $client_id, $template_id, $domain, $ip, $ns1, $ns2, $email) {
 		global $app, $conf;
 		if(!$this->checkPerm($session_id, 'dns_templatezone_add')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
@@ -57,7 +56,9 @@ class remoting_dns extends remoting {
 		$tform_def_file = "../../web/dns/form/dns_soa.tform.php";
 		$app->uses('tform');
 		$app->tform->loadFormDef($tform_def_file);
-		$app->uses('tpl,validate_dns');
+		$app->uses('tpl,validate_dns,remoting_lib');
+		
+		$app->remoting_lib->loadUserProfile($client_id);
 
 		//* replace template placeholders
 		$tpl_content = $template_record['template'];
@@ -114,6 +115,7 @@ class remoting_dns extends remoting {
 		if($vars['expire'] == '') $error .= $app->lng('error_expire_empty').'<br />';
 		if($vars['minimum'] == '') $error .= $app->lng('error_minimum_empty').'<br />';
 		if($vars['ttl'] == '') $error .= $app->lng('error_ttl_empty').'<br />';
+		if(!isset($vars['xfer'])) $vars['xfer'] = '';
 
 		if($error == '') {
 			// Insert the soa record
@@ -184,8 +186,7 @@ class remoting_dns extends remoting {
 
 
 	//* Get record details
-	public function dns_zone_get($session_id, $primary_id)
-	{
+	public function dns_zone_get($session_id, $primary_id) {
 		global $app;
 
 		if(!$this->checkPerm($session_id, 'dns_zone_get')) {
@@ -198,8 +199,7 @@ class remoting_dns extends remoting {
 	}
 	
 	//* Get slave zone details
-	public function dns_slave_get($session_id, $primary_id)
-	{
+	public function dns_slave_get($session_id, $primary_id) {
 		global $app;
 
 		if(!$this->checkPerm($session_id, 'dns_zone_get')) {
@@ -213,8 +213,7 @@ class remoting_dns extends remoting {
 
 	
 	//* Add a slave zone
-    public function dns_slave_add($session_id, $client_id, $params)
-    {
+    public function dns_slave_add($session_id, $client_id, $params) {
 		if(!$this->checkPerm($session_id, 'dns_zone_add')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
@@ -223,8 +222,7 @@ class remoting_dns extends remoting {
     }
 	
 	//* Update a slave zone
-	public function dns_slave_update($session_id, $client_id, $primary_id, $params)
-	{
+	public function dns_slave_update($session_id, $client_id, $primary_id, $params) {
 		if(!$this->checkPerm($session_id, 'dns_zone_update')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
@@ -234,8 +232,7 @@ class remoting_dns extends remoting {
 	}
 
     //* Delete a slave zone
-    public function dns_slave_delete($session_id, $primary_id)
-    {
+    public function dns_slave_delete($session_id, $primary_id) {
 		if(!$this->checkPerm($session_id, 'dns_zone_delete')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
@@ -244,8 +241,7 @@ class remoting_dns extends remoting {
     }
 
 	//* Get record id by origin
-	public function dns_zone_get_id($session_id, $origin)
-	{
+	public function dns_zone_get_id($session_id, $origin) {
 		global $app;
 
 		if(!$this->checkPerm($session_id, 'dns_zone_get_id')) {
@@ -268,8 +264,7 @@ class remoting_dns extends remoting {
 	}
 
 	//* Add a record
-	public function dns_zone_add($session_id, $client_id, $params)
-	{
+	public function dns_zone_add($session_id, $client_id, $params) {
 		if(!$this->checkPerm($session_id, 'dns_zone_add')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
@@ -278,8 +273,7 @@ class remoting_dns extends remoting {
 	}
 
 	//* Update a record
-	public function dns_zone_update($session_id, $client_id, $primary_id, $params)
-	{
+	public function dns_zone_update($session_id, $client_id, $primary_id, $params) {
 		if(!$this->checkPerm($session_id, 'dns_zone_update')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
@@ -289,8 +283,7 @@ class remoting_dns extends remoting {
 	}
 
 	//* Delete a record
-	public function dns_zone_delete($session_id, $primary_id)
-	{
+	public function dns_zone_delete($session_id, $primary_id) {
 		if(!$this->checkPerm($session_id, 'dns_zone_delete')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
@@ -301,563 +294,312 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
-	//* Get record details
-	public function dns_aaaa_get($session_id, $primary_id)
-	{
+	private function dns_rr_get($session_id, $primary_id, $rr_type = 'A') {
 		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_aaaa_get')) {
+	
+		$rr_type = strtolower($rr_type);
+		if(!preg_match('/^[a-z]+$/', $rr_type)) {
+			throw new SoapFault('permission denied', 'Invalid rr type');
+		}
+		
+		if(!$this->checkPerm($session_id, 'dns_' . $rr_type . '_get')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
 		}
 		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_aaaa.tform.php');
+		$app->remoting_lib->loadFormDef('../dns/form/dns_' . $rr_type . '.tform.php');
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
-
+	
 	//* Add a record
-	public function dns_aaaa_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_aaaa_add')) {
+	private function dns_rr_add($session_id, $client_id, $params, $update_serial=false, $rr_type = 'A') {
+		$rr_type = strtolower($rr_type);
+		if(!preg_match('/^[a-z]+$/', $rr_type)) {
+			throw new SoapFault('permission denied', 'Invalid rr type');
+		}
+		
+		if(!$this->checkPerm($session_id, 'dns_' . $rr_type . '_add')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
 		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_aaaa.tform.php', $client_id, $params);
+		if($update_serial) {
+			$this->increase_serial($session_id, $client_id, $params);
+		}
+		return $this->insertQuery('../dns/form/dns_' . $rr_type . '.tform.php', $client_id, $params);
 	}
 
 	//* Update a record
-	public function dns_aaaa_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_aaaa_update')) {
+	private function dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial=false, $rr_type = 'A') {
+		$rr_type = strtolower($rr_type);
+		if(!preg_match('/^[a-z]+$/', $rr_type)) {
+			throw new SoapFault('permission denied', 'Invalid rr type');
+		}
+		
+		if(!$this->checkPerm($session_id, 'dns_' . $rr_type . '_update')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->updateQuery('../dns/form/dns_aaaa.tform.php', $client_id, $primary_id, $params);
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
+		$affected_rows = $this->updateQuery('../dns/form/dns_' . $rr_type . '.tform.php', $client_id, $primary_id, $params);
+		if($update_serial) {
+			$this->increase_serial($session_id, $client_id, $params);
+		}
 		return $affected_rows;
 	}
-
+	
 	//* Delete a record
-	public function dns_aaaa_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_aaaa_delete')) {
+	private function dns_rr_delete($session_id, $primary_id, $update_serial=false, $rr_type = 'A') {
+		$rr_type = strtolower($rr_type);
+		if(!preg_match('/^[a-z]+$/', $rr_type)) {
+			throw new SoapFault('permission denied', 'Invalid rr type');
+		}
+		if(!$this->checkPerm($session_id, 'dns_' . $rr_type . '_delete')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
 		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_aaaa.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
+		if($update_serial) {
+			$this->increase_serial($session_id, 0, array('dns_rr_id' => $primary_id));
+		}
+		$affected_rows = $this->deleteQuery('../dns/form/dns_' . $rr_type . '.tform.php', $primary_id);
 		return $affected_rows;
 	}
+	
+	// ----------------------------------------------------------------------------------------------------------------
+	
+	//* Get record details
+	public function dns_aaaa_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'AAAA');
+	}
+
+	//* Add a record
+	public function dns_aaaa_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'AAAA');
+	}
+
+	//* Update a record
+	public function dns_aaaa_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'AAAA');
+	}
+
+	//* Delete a record
+	public function dns_aaaa_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'AAAA');
+	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_a_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_a_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_a.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_a_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'A');
 	}
 
 	//* Add a record
-	public function dns_a_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_a_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_a.tform.php', $client_id, $params);
+	public function dns_a_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'A');
 	}
 
 	//* Update a record
-	public function dns_a_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_a_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_a.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_a_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'A');
 	}
 
 	//* Delete a record
-	public function dns_a_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_a_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_a.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_a_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'A');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_alias_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_alias_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_alias.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_alias_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'ALIAS');
 	}
 
 	//* Add a record
-	public function dns_alias_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_alias_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_alias.tform.php', $client_id, $params);
+	public function dns_alias_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'ALIAS');
 	}
 
 	//* Update a record
-	public function dns_alias_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_alias_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_alias.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_alias_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'ALIAS');
 	}
 
 	//* Delete a record
-	public function dns_alias_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_alias_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_alias.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_alias_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'ALIAS');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_cname_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_cname_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_cname.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_cname_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'CNAME');
 	}
 
 	//* Add a record
-	public function dns_cname_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_cname_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_cname.tform.php', $client_id, $params);
+	public function dns_cname_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'CNAME');
 	}
 
 	//* Update a record
-	public function dns_cname_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_cname_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_cname.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_cname_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'CNAME');
 	}
 
 	//* Delete a record
-	public function dns_cname_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_cname_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_cname.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_cname_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'CNAME');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_hinfo_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_hinfo_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_hinfo.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_hinfo_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'HINFO');
 	}
 
 	//* Add a record
-	public function dns_hinfo_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_hinfo_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_hinfo.tform.php', $client_id, $params);
+	public function dns_hinfo_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'HINFO');
 	}
 
 	//* Update a record
-	public function dns_hinfo_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_hinfo_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_hinfo.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_hinfo_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'HINFO');
 	}
 
 	//* Delete a record
-	public function dns_hinfo_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_hinfo_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_hinfo.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_hinfo_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'HINFO');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_mx_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_mx_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_mx.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_mx_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'MX');
 	}
 
 	//* Add a record
-	public function dns_mx_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_mx_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_mx.tform.php', $client_id, $params);
+	public function dns_mx_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'MX');
 	}
 
 	//* Update a record
-	public function dns_mx_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_mx_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_mx.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_mx_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'MX');
 	}
 
 	//* Delete a record
-	public function dns_mx_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_mx_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_mx.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_mx_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'MX');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_ns_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_ns_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_ns.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_ns_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'NS');
 	}
 
 	//* Add a record
-	public function dns_ns_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_ns_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_ns.tform.php', $client_id, $params);
+	public function dns_ns_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'NS');
 	}
 
 	//* Update a record
-	public function dns_ns_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_ns_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_ns.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_ns_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'NS');
 	}
 
 	//* Delete a record
-	public function dns_ns_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_ns_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_ns.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_ns_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'NS');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_ptr_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_ptr_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_ptr.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_ptr_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'PTR');
 	}
 
 	//* Add a record
-	public function dns_ptr_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_ptr_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_ptr.tform.php', $client_id, $params);
+	public function dns_ptr_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'PTR');
 	}
 
 	//* Update a record
-	public function dns_ptr_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_ptr_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_ptr.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_ptr_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'PTR');
 	}
 
 	//* Delete a record
-	public function dns_ptr_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_ptr_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_ptr.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_ptr_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'PTR');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_rp_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_rp_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_rp.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_rp_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'RP');
 	}
 
 	//* Add a record
-	public function dns_rp_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_rp_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_rp.tform.php', $client_id, $params);
+	public function dns_rp_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'RP');
 	}
 
 	//* Update a record
-	public function dns_rp_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_rp_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_rp.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_rp_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'RP');
 	}
 
 	//* Delete a record
-	public function dns_rp_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_rp_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_rp.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_rp_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'RP');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_srv_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_srv_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_srv.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_srv_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'SRV');
 	}
 
 	//* Add a record
-	public function dns_srv_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_srv_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_srv.tform.php', $client_id, $params);
+	public function dns_srv_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'SRV');
 	}
 
 	//* Update a record
-	public function dns_srv_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_srv_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_srv.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_srv_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'SRV');
 	}
 
 	//* Delete a record
-	public function dns_srv_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_srv_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_srv.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_srv_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'SRV');
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------
 
 	//* Get record details
-	public function dns_txt_get($session_id, $primary_id)
-	{
-		global $app;
-
-		if(!$this->checkPerm($session_id, 'dns_txt_get')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$app->uses('remoting_lib');
-		$app->remoting_lib->loadFormDef('../dns/form/dns_txt.tform.php');
-		return $app->remoting_lib->getDataRecord($primary_id);
+	public function dns_txt_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'TXT');
 	}
 
 	//* Add a record
-	public function dns_txt_add($session_id, $client_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_txt_add')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		return $this->insertQuery('../dns/form/dns_txt.tform.php', $client_id, $params);
+	public function dns_txt_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'TXT');
 	}
 
 	//* Update a record
-	public function dns_txt_update($session_id, $client_id, $primary_id, $params, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_txt_update')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		if($update_serial) $this->increase_serial($session_id, $client_id, $params);
-		$affected_rows = $this->updateQuery('../dns/form/dns_txt.tform.php', $client_id, $primary_id, $params);
-		return $affected_rows;
+	public function dns_txt_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'TXT');
 	}
 
 	//* Delete a record
-	public function dns_txt_delete($session_id, $primary_id, $update_serial=false)
-	{
-		if(!$this->checkPerm($session_id, 'dns_txt_delete')) {
-			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
-		}
-		$affected_rows = $this->deleteQuery('../dns/form/dns_txt.tform.php', $primary_id);
-		if($update_serial) $this->increase_serial($session_id, $client_id, array('dns_rr_id' => $primary_id));
-		return $affected_rows;
+	public function dns_txt_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'TXT');
 	}
 
 	/**
@@ -957,5 +699,3 @@ class remoting_dns extends remoting {
 		$this->dns_zone_update($session_id, $client_id, $soa['id'], $soa);
 	}
 }
-
-?>
diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php
index bda7e861ed429f1c9c985c3dcf6d180aef843281..477743dfc3f52c839765ee8180e805c67f66a857 100644
--- a/interface/lib/classes/remote.d/mail.inc.php
+++ b/interface/lib/classes/remote.d/mail.inc.php
@@ -710,7 +710,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* czarna lista e-mail
+	//* Add a new spamfilter blacklist
 	public function mail_spamfilter_blacklist_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_spamfilter_blacklist_add'))
@@ -810,7 +810,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* polityki filtrów spamu e-mail
+	//* Add a spam policy
 	public function mail_policy_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_policy_add'))
@@ -860,7 +860,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* fetchmail
+	//* Add fetchmail
 	public function mail_fetchmail_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_fetchmail_add'))
@@ -960,7 +960,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* wpisy białej listy
+	//* Add blacklist
 	public function mail_blacklist_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_blacklist_add'))
@@ -1010,7 +1010,7 @@ class remoting_mail extends remoting {
 		return $app->remoting_lib->getDataRecord($primary_id);
 	}
 
-	//* wpisy filtrow e-mail
+	//* Add mail filter
 	public function mail_filter_add($session_id, $client_id, $params)
 	{
 		if (!$this->checkPerm($session_id, 'mail_filter_add'))
diff --git a/interface/lib/classes/remote.d/monitor.inc.php b/interface/lib/classes/remote.d/monitor.inc.php
index d3689b94caaa0e40ea65b3b906950ab114f9688f..3df681f9ba2f0202a3e2d350e938bd1f8e6ae2e1 100644
--- a/interface/lib/classes/remote.d/monitor.inc.php
+++ b/interface/lib/classes/remote.d/monitor.inc.php
@@ -39,7 +39,6 @@ class remoting_monitor extends remoting {
 
 		if(!$this->checkPerm($session_id, 'monitor_jobqueue_count')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
-			return false;
 		}
 		
 		$server_id = intval($server_id);
@@ -48,7 +47,7 @@ class remoting_monitor extends remoting {
 			$servers = $app->db->queryAllRecords("SELECT server_id, updated FROM server");
 			$sql = 'SELECT count(datalog_id) as jobqueue_count FROM sys_datalog WHERE ';
 			foreach($servers as $sv) {
-				$sql .= " (datalog_id > ".$sv['updated']." AND server_id = ".$sv['server_id'].") OR ";
+				$sql .= " (datalog_id > ".$sv['updated']." AND server_id IN (0,".$sv['server_id'].")) OR ";
 			}
 			$sql = substr($sql, 0, -4);
 			$tmp = $app->db->queryOneRecord($sql);
@@ -56,7 +55,7 @@ class remoting_monitor extends remoting {
 			
 		} else {
 			$server = $app->db->queryOneRecord("SELECT updated FROM server WHERE server_id = ?",$server_id);
-			$tmp = $app->db->queryOneRecord('SELECT count(datalog_id) as jobqueue_count FROM sys_datalog WHERE datalog_id > ?',$server['updated']);
+			$tmp = $app->db->queryOneRecord('SELECT count(datalog_id) as jobqueue_count FROM sys_datalog WHERE datalog_id > ? AND server_id IN ?',$server['updated'], array(0, $server_id));
 			return $tmp['jobqueue_count'];
 		}
 	}
diff --git a/interface/lib/classes/remote.d/server.inc.php b/interface/lib/classes/remote.d/server.inc.php
index 4962cb4c59e0a35575fcf4562c11322ae32fd07c..77649d1bb4c9385dc26cbfffdc175d79ffb026b0 100644
--- a/interface/lib/classes/remote.d/server.inc.php
+++ b/interface/lib/classes/remote.d/server.inc.php
@@ -288,6 +288,4 @@ class remoting_server extends remoting {
 			return false;
 		}
 	}
-}
-
-?>
+}
\ No newline at end of file
diff --git a/interface/lib/classes/remote.d/sites.inc.php b/interface/lib/classes/remote.d/sites.inc.php
index a2f15d6f9d4f73c5bcd67c21ca407c20dfde052c..59c2e371f34f89a7d25714e610cc7a252b761980 100644
--- a/interface/lib/classes/remote.d/sites.inc.php
+++ b/interface/lib/classes/remote.d/sites.inc.php
@@ -1017,6 +1017,56 @@ class remoting_sites extends remoting {
 		return $app->quota_lib->get_databasequota_data($client_id, false);
 	}
 	
+	// ----------------------------------------------------------------------------------------------------------
+
+	//* Get record details
+	public function sites_webdav_user_get($session_id, $primary_id)
+	{
+		global $app;
+
+		if(!$this->checkPerm($session_id, 'sites_webdav_user_get')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$app->uses('remoting_lib');
+		$app->remoting_lib->loadFormDef('../sites/form/webdav_user.tform.php');
+		return $app->remoting_lib->getDataRecord($primary_id);
+	}
+
+	//* Add a record
+	public function sites_webdav_user_add($session_id, $client_id, $params)
+	{
+		if(!$this->checkPerm($session_id, 'sites_webdav_user_add')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		return $this->insertQuery('../sites/form/webdav_user.tform.php', $client_id, $params);
+	}
+
+	//* Update a record
+	public function sites_webdav_user_update($session_id, $client_id, $primary_id, $params)
+	{
+		if(!$this->checkPerm($session_id, 'sites_webdav_user_update')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+		$affected_rows = $this->updateQuery('../sites/form/webdav_user.tform.php', $client_id, $primary_id, $params);
+		return $affected_rows;
+	}
+
+	//* Delete a record
+	public function sites_webdav_user_delete($session_id, $primary_id)
+	{
+		global $app;
+		if(!$this->checkPerm($session_id, 'sites_webdav_user_delete')) {
+			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
+			return false;
+		}
+
+		$affected_rows = $this->deleteQuery('../sites/form/webdav_user.tform.php', $primary_id);
+		return $affected_rows;
+	}
+	
 	
 }
 
diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php
index 6e551355a690536aa8e938395c110476914ceb3d..e1fc1ada863f1cdc02c89a68dafe6f703096dee9 100644
--- a/interface/lib/classes/remoting.inc.php
+++ b/interface/lib/classes/remoting.inc.php
@@ -99,28 +99,22 @@ class remoting {
 			if($user) {
 				$saved_password = stripslashes($user['passwort']);
 
-				if(substr($saved_password, 0, 3) == '$1$') {
+				if(preg_match('/^\$[156]\$/', $saved_password)) {
 					//* The password is crypt-md5 encrypted
-					$salt = '$1$'.substr($saved_password, 3, 8).'$';
-
-					if(crypt(stripslashes($password), $salt) != $saved_password) {
+					if(crypt(stripslashes($password), $saved_password) != $saved_password) {
 						throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.');
-						return false;
 					}
 				} else {
 					//* The password is md5 encrypted
 					if(md5($password) != $saved_password) {
 						throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.');
-						return false;
 					}
 				}
 			} else {
 				throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.');
-				return false;
 			}
 			if($user['active'] != 1) {
 				throw new SoapFault('client_login_failed', 'The login failed. User is blocked.');
-				return false;
 			}
 
 			// now we need the client data
diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index cef9424a75d61203e57060fb8aee39eb85a14435..0be2b6b1e9a7c774601c95caf94b5ad12f9282d3 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -31,6 +31,8 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 class system {
 
 	var $client_service = null;
+	private $_last_exec_out = null;
+	private $_last_exec_retcode = null;
 
 	public function has_service($userid, $service) {
 		global $app;
@@ -52,8 +54,48 @@ class system {
 			return false;
 		}
 	}
-} //* End Class
-
-?>
-
 
+	public function last_exec_out() {
+		return $this->_last_exec_out;
+	}
+	
+	public function last_exec_retcode() {
+		return $this->_last_exec_retcode;
+	}
+	
+	public function exec_safe($cmd) {
+		$arg_count = func_num_args();
+		if($arg_count != substr_count($cmd, '?') + 1) {
+			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
+			return false;
+		}
+		if($arg_count > 1) {
+			$args = func_get_args();
+			array_shift($args);
+			
+			$pos = 0;
+			$a = 0;
+			foreach($args as $value) {
+				$a++;
+				
+				$pos = strpos($cmd, '?', $pos);
+				if($pos === false) {
+					break;
+				}
+				$value = escapeshellarg($value);
+				$cmd = substr_replace($cmd, $value, $pos, 1);
+				$pos += strlen($value);
+			}
+		}
+		
+		$this->_last_exec_out = null;
+		$this->_last_exec_retcode = null;
+		return exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
+	}
+	
+	public function system_safe($cmd) {
+		call_user_func_array(array($this, 'exec_safe'), func_get_args());
+		return implode("\n", $this->_last_exec_out);
+	}	
+	
+} //* End Class
diff --git a/interface/lib/classes/tform_actions.inc.php b/interface/lib/classes/tform_actions.inc.php
index f277c51274f3e8e4f9c5f03814f07367c7a8fcf2..d83ec0d3d78a89bebedb1e1011158ed22aae7b5c 100644
--- a/interface/lib/classes/tform_actions.inc.php
+++ b/interface/lib/classes/tform_actions.inc.php
@@ -297,6 +297,9 @@ class tform_actions {
 	 */
 	function onDelete() {
 		global $app, $conf, $list_def_file, $tform_def_file;
+		
+		// Check CSRF Token
+		$app->auth->csrf_token_check('GET');
 
 		include_once $list_def_file;
 
diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php
index 36de1371ab25fabe07d908f431ce8bb9016a8833..e6174d2da763556a2a3f94f8ad4ccb57fba3cbbd 100644
--- a/interface/lib/classes/tform_base.inc.php
+++ b/interface/lib/classes/tform_base.inc.php
@@ -336,69 +336,84 @@ class tform_base {
 	}
 
 	//* If the parameter 'valuelimit' is set
-	function applyValueLimit($limit, $values) {
+	function applyValueLimit($limit, $values, $current_value = '') {
 
 		global $app;
+		
+		// we mas have multiple limits, therefore we explode by ; first
+		// Example: "system:sites:web_php_options;client:web_php_options"
+		$limits = explode(';',$limit);
+		
+		
+		foreach($limits as $limit) {
 
-		$limit_parts = explode(':', $limit);
+			$limit_parts = explode(':', $limit);
 
-		//* values are limited to a comma separated list
-		if($limit_parts[0] == 'list') {
-			$allowed = explode(',', $limit_parts[1]);
-		}
-
-		//* values are limited to a field in the client settings
-		if($limit_parts[0] == 'client') {
-			if($_SESSION["s"]["user"]["typ"] == 'admin') {
-				return $values;
-			} else {
-				$client_group_id = $_SESSION["s"]["user"]["default_group"];
-				$client = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
-				$allowed = explode(',', $client['lm']);
+			//* values are limited to a comma separated list
+			if($limit_parts[0] == 'list') {
+				$allowed = explode(',', $limit_parts[1]);
 			}
-		}
 
-		//* values are limited to a field in the reseller settings
-		if($limit_parts[0] == 'reseller') {
-			if($_SESSION["s"]["user"]["typ"] == 'admin') {
-				return $values;
-			} else {
-				//* Get the limits of the client that is currently logged in
-				$client_group_id = $_SESSION["s"]["user"]["default_group"];
-				$client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
-				//echo "SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
-				//* If the client belongs to a reseller, we will check against the reseller Limit too
-				if($client['parent_client_id'] != 0) {
-
-					//* first we need to know the groups of this reseller
-					$tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ?", $client['parent_client_id']);
-					$reseller_groups = $tmp["groups"];
-					$reseller_userid = $tmp["userid"];
-
-					// Get the limits of the reseller of the logged in client
-					$client_group_id = $_SESSION["s"]["user"]["default_group"];
-					$reseller = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM client WHERE client_id = ?", $client['parent_client_id']);
-					$allowed = explode(',', $reseller['lm']);
-				} else {
+			//* values are limited to a field in the client settings
+			if($limit_parts[0] == 'client') {
+				if($_SESSION["s"]["user"]["typ"] == 'admin') {
 					return $values;
+				} else {
+					$client_group_id = $_SESSION["s"]["user"]["default_group"];
+					$client = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+					$allowed = explode(',', $client['lm']);
 				}
-			} // end if admin
-		} // end if reseller
-
-		//* values are limited to a field in the system settings
-		if($limit_parts[0] == 'system') {
-			$app->uses('getconf');
-			$tmp_conf = $app->getconf->get_global_config($limit_parts[1]);
-			$tmp_key = $limit_parts[2];
-			$allowed = $tmp_conf[$tmp_key];
-		}
+			}
+
+			//* values are limited to a field in the reseller settings
+			if($limit_parts[0] == 'reseller') {
+				if($_SESSION["s"]["user"]["typ"] == 'admin') {
+					return $values;
+				} else {
+					//* Get the limits of the client that is currently logged in
+					$client_group_id = $_SESSION["s"]["user"]["default_group"];
+					$client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+					//echo "SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
+					//* If the client belongs to a reseller, we will check against the reseller Limit too
+					if($client['parent_client_id'] != 0) {
+
+						//* first we need to know the groups of this reseller
+						$tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ?", $client['parent_client_id']);
+						$reseller_groups = $tmp["groups"];
+						$reseller_userid = $tmp["userid"];
+
+						// Get the limits of the reseller of the logged in client
+						$client_group_id = $_SESSION["s"]["user"]["default_group"];
+						$reseller = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM client WHERE client_id = ?", $client['parent_client_id']);
+						$allowed = explode(',', $reseller['lm']);
+					} else {
+						return $values;
+					}
+				} // end if admin
+			} // end if reseller
+
+			//* values are limited to a field in the system settings
+			if($limit_parts[0] == 'system') {
+				$app->uses('getconf');
+				$tmp_conf = $app->getconf->get_global_config($limit_parts[1]);
+				$tmp_key = $limit_parts[2];
+				$allowed = $allowed = explode(',',$tmp_conf[$tmp_key]);
+			}
+			
+			// add the current value to the allowed array
+			$allowed[] = $current_value;
+
+			// remove all values that are not allowed
+			$values_new = array();
+			foreach($values as $key => $val) {
+				if(in_array($key, $allowed)) $values_new[$key] = $val;
+			}
+
+			$values = $values_new;
 
-		$values_new = array();
-		foreach($values as $key => $val) {
-			if(in_array($key, $allowed)) $values_new[$key] = $val;
 		}
 
-		return $values_new;
+		return $values;
 	}
 
 
@@ -464,7 +479,7 @@ class tform_base {
 
 					// If a limitation for the values is set
 					if(isset($field['valuelimit']) && is_array($field["value"])) {
-						$field["value"] = $this->applyValueLimit($field['valuelimit'], $field["value"]);
+						$field["value"] = $this->applyValueLimit($field['valuelimit'], $field["value"], $val);
 					}
 
 					switch ($field['formtype']) {
@@ -599,7 +614,7 @@ class tform_base {
 
 				// If a limitation for the values is set
 				if(isset($field['valuelimit']) && is_array($field["value"])) {
-					$field["value"] = $this->applyValueLimit($field['valuelimit'], $field["value"]);
+					$field["value"] = $this->applyValueLimit($field['valuelimit'], $field["value"], $field['default']);
 				}
 
 				switch ($field['formtype']) {
diff --git a/interface/lib/classes/validate_autoresponder.inc.php b/interface/lib/classes/validate_autoresponder.inc.php
index 8fefa33b301ad707c3eca7ada45591122f979a6d..25db68bdd97226ea9be48d3e93c1e064b676666f 100755
--- a/interface/lib/classes/validate_autoresponder.inc.php
+++ b/interface/lib/classes/validate_autoresponder.inc.php
@@ -53,8 +53,8 @@ class validate_autoresponder extends validate_datetime
 		
 		// Parse date
 		$datetimeformat = (isset($app->remoting_lib) ? $app->remoting_lib->datetimeformat : $app->tform->datetimeformat);
-		$start_date_array = date_parse_from_format($datetimeformat,$start_date);
-		$end_date_array = date_parse_from_format($datetimeformat,$field_value);
+		$start_date_array = date_parse_from_format($datetimeformat, $start_date);
+		$end_date_array = date_parse_from_format($datetimeformat, $field_value);
 		
 		//calculate timestamps
 		$start_date_tstamp = mktime($start_date_array['hour'], $start_date_array['minute'], $start_date_array['second'], $start_date_array['month'], $start_date_array['day'], $start_date_array['year']);
diff --git a/interface/lib/classes/validate_dkim.inc.php b/interface/lib/classes/validate_dkim.inc.php
index 443fe76d7ff7d2012c1c10db90198bfc1024a52e..3fbc28a0a1928809fab86c49b0cdb3117a1f81a4 100644
--- a/interface/lib/classes/validate_dkim.inc.php
+++ b/interface/lib/classes/validate_dkim.inc.php
@@ -49,10 +49,13 @@ class validate_dkim {
 	 * Validator function for private DKIM-Key
 	 */
 	function check_private_key($field_name, $field_value, $validator) {
+		global $app;
+		
 		$dkim_enabled=$_POST['dkim'];
 		if ($dkim_enabled == 'y') {
 			if (empty($field_value)) return $this->get_error($validator['errmsg']);
-			exec('echo '.escapeshellarg($field_value).'|openssl rsa -check', $output, $result);
+			$app->system->exec_safe('echo ?|openssl rsa -check', $field_value);
+			$result = $app->system->last_exec_retcode();
 			if($result != 0) return $this->get_error($validator['errmsg']);
 		}
 	}
diff --git a/interface/lib/lang/br.lng b/interface/lib/lang/br.lng
index 7db654bd05b2ecd8cccdddc501d0f0a7bb56d5e1..60a0dcf9109eab72c233cbf2be1309f1bf0679b1 100644
--- a/interface/lib/lang/br.lng
+++ b/interface/lib/lang/br.lng
@@ -1,45 +1,48 @@
 <?php
-$wb['conf_format_dateshort'] = 'd/m/Y';
+$wb['conf_format_dateshort'] = 'd-m-Y';
+$wb['conf_format_dateshort_human_readable'] = 'dd-mm-yyyy';
 $wb['conf_format_datelong'] = 'l dS de F Y';
 $wb['conf_format_timeshort'] = 'H:i';
 $wb['conf_format_timelong'] = 'H:i:s';
-$wb['conf_format_datetime'] = 'd/m/Y H:i';
+$wb['conf_format_datetime'] = 'd-m-Y H:i';
 $wb['number_format_decimals'] = '4';
 $wb['number_format_decimals_client'] = '2';
 $wb['number_format_dec_point'] = '.';
 $wb['number_format_thousands_sep'] = '.';
 $wb['error_301'] = 'Módulo não permitido para o usuário atual.';
-$wb['error_302'] = 'Módulo é inválido.';
-$wb['error_1001'] = 'Usuário ou senha em branco!';
-$wb['error_1002'] = 'Usuário ou senha incorretos!';
-$wb['error_1003'] = 'Usuário inativo!';
-$wb['delete_confirmation'] = 'Tem certeza de que deseja remover este registro?';
-$wb['error_no_view_permission'] = 'Você não tem permissão para visualizar este registro ou o mesmo não existe!';
+$wb['error_302'] = 'Módulo inválido.';
+$wb['error_1001'] = 'Usuário e/ou senha está em branco!';
+$wb['error_1002'] = 'Usuário e/ou senha incorretos!';
+$wb['error_1003'] = 'Usuário desabilitado!';
+$wb['delete_confirmation'] = 'Você tem certeza que deseja remover o registro?';
+$wb['error_no_view_permission'] = 'Você não tem permissão para visualizar este registro ou o registro não existe!';
 $wb['error_no_delete_permission'] = 'Você não tem permissão para remover este registro!';
 $wb['page_txt'] = 'Página';
 $wb['page_of_txt'] = 'de';
-$wb['page_next_txt'] = 'Próximo';
-$wb['page_back_txt'] = 'Voltar';
+$wb['page_and_txt'] = 'e';
+$wb['page_next_txt'] = 'Próxima';
+$wb['page_back_txt'] = 'Anterior';
 $wb['delete_txt'] = 'Remover';
 $wb['filter_txt'] = 'Filtrar';
 $wb['add_new_record_txt'] = 'Adicionar novo registro';
 $wb['btn_save_txt'] = 'Salvar';
-$wb['btn_cancel_txt'] = 'Voltar';
-$wb['toolsarea_head_txt'] = 'Extras';
-$wb['page_and_txt'] = 'e';
+$wb['btn_cancel_txt'] = 'Cancelar';
 $wb['top_menu_system'] = 'Sistema';
 $wb['top_menu_client'] = 'Clientes';
-$wb['top_menu_email'] = 'e-Mails';
+$wb['top_menu_email'] = 'e-Mail';
 $wb['top_menu_monitor'] = 'Monitor';
 $wb['top_menu_sites'] = 'Sites';
 $wb['top_menu_dns'] = 'DNS';
-$wb['top_menu_tools'] = 'Extras';
+$wb['top_menu_tools'] = 'Ferramentas';
 $wb['top_menu_help'] = 'Ajuda';
-$wb['top_menu_billing'] = 'Faturas';
+$wb['top_menu_billing'] = 'Faturamento';
+$wb['top_menu_mailuser'] = 'Contas de e-mail';
 $wb['top_menu_domain'] = 'Domínios';
 $wb['top_menu_dashboard'] = 'Início';
-$wb['latest_news_txt'] = 'Últimas notícias';
 $wb['top_menu_vm'] = 'VPS';
+$wb['toolsarea_head_txt'] = 'Ferramentas';
+$wb['latest_news_txt'] = 'Novidades';
+$wb['logout_txt'] = 'Sair';
 $wb['daynamesmin_su'] = 'Do';
 $wb['daynamesmin_mo'] = 'Se';
 $wb['daynamesmin_tu'] = 'Te';
@@ -68,27 +71,24 @@ $wb['monthnamesshort_nov'] = 'Nov';
 $wb['monthnamesshort_dec'] = 'Dez';
 $wb['datepicker_nextText'] = 'Próximo';
 $wb['datepicker_prevText'] = 'Anterior';
-$wb['logout_txt'] = 'Sair';
-$wb['conf_format_dateshort_human_readable'] = 'dd-mm-aaaa';
-$wb['submit_confirmation'] = 'Você tem certeza que gostaria de executar esta ação?';
-$wb['top_menu_mailuser'] = 'e-Mails';
+$wb['submit_confirmation'] = 'Você tem certeza que deseja realizar esta ação?';
 $wb['globalsearch_resultslimit_of_txt'] = 'de';
 $wb['globalsearch_resultslimit_results_txt'] = 'resultados';
 $wb['globalsearch_noresults_text_txt'] = 'Sem resultados.';
 $wb['globalsearch_noresults_limit_txt'] = '0 resultados';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Pesquisar';
 $wb['globalsearch_suggestions_text_txt'] = 'Sugestões';
-$wb['global_tabchange_warning_txt'] = 'As alterações efetuadas nesta aba terão efeito após você pressionar OK. Se cancelar, as alterações serão descartadas.';
-$wb['global_tabchange_discard_txt'] = 'Você não salvou as alterações nesta aba. As alterações serão descartadas se continuar.';
-$wb['datalog_changes_txt'] = 'As seguintes alterações ainda não foram realizadas em todos os servidores.';
-$wb['datalog_changes_end_txt'] = 'Gravar as atualizações pode demorar alguns minutos. Por favor, seja paciente.';
+$wb['global_tabchange_warning_txt'] = 'Para alterar dados nesta aba clique OK. Cancelar descarta todas as alterações.';
+$wb['global_tabchange_discard_txt'] = 'Você não salvou as alterações nesta aba. Todas as alterações serão descartadas caso prossiga.';
+$wb['datalog_changes_txt'] = 'As alterações ainda não propagaram em todos os servidores:';
+$wb['datalog_changes_end_txt'] = 'Gravar alterações pode levar alguns minutos. Por favor, seja paciente.';
 $wb['datalog_status_i_web_database'] = 'Adicionar novo banco de dados';
 $wb['datalog_status_u_web_database'] = 'Atualizar banco de dados';
 $wb['datalog_status_d_web_database'] = 'Remover banco de dados';
-$wb['datalog_status_i_web_database_user'] = 'Adicionar usuário do banco de dados';
-$wb['datalog_status_u_web_database_user'] = 'Atualizar usuário do banco de dados';
-$wb['datalog_status_d_web_database_user'] = 'Remover usuário do banco de dados';
-$wb['datalog_status_i_web_domain'] = 'Adicionar novo site';
+$wb['datalog_status_i_web_database_user'] = 'Adicionar novo usuário de banco de dados';
+$wb['datalog_status_u_web_database_user'] = 'Atualizar usuário de banco de dados';
+$wb['datalog_status_d_web_database_user'] = 'Remover usuário de banco de dados';
+$wb['datalog_status_i_web_domain'] = 'Adicionar site';
 $wb['datalog_status_u_web_domain'] = 'Atualizar site';
 $wb['datalog_status_d_web_domain'] = 'Remover site';
 $wb['datalog_status_i_ftp_user'] = 'Adicionar usuário ftp';
@@ -100,9 +100,12 @@ $wb['datalog_status_d_mail_domain'] = 'Remover domínio de e-mail';
 $wb['datalog_status_i_mail_user'] = 'Adicionar conta de e-mail';
 $wb['datalog_status_u_mail_user'] = 'Atualizar conta de e-mail';
 $wb['datalog_status_d_mail_user'] = 'Remover conta de e-mail';
-$wb['datalog_status_i_mail_forwarding'] = 'Adicionar encaminhamento de e-mail';
-$wb['datalog_status_u_mail_forwarding'] = 'Atualizar encaminhamento de e-mail';
-$wb['datalog_status_d_mail_forwarding'] = 'Remover encaminhamento de e-mail';
+$wb['datalog_status_i_spamfilter_users'] = 'Adicionar filtros anti-spam';
+$wb['datalog_status_u_spamfilter_users'] = 'Atualizar filtros anti-spam';
+$wb['datalog_status_d_spamfilter_users'] = 'Remover filtros anti-spam';
+$wb['datalog_status_i_mail_forwarding'] = 'Adicionar endereço de e-mail';
+$wb['datalog_status_u_mail_forwarding'] = 'Atualizar endereço de e-mail';
+$wb['datalog_status_d_mail_forwarding'] = 'Remover endereço de e-mail';
 $wb['datalog_status_i_dns_rr'] = 'Adicionar registro dns';
 $wb['datalog_status_u_dns_rr'] = 'Atualizar registro dns';
 $wb['datalog_status_d_dns_rr'] = 'Remover registro dns';
@@ -112,50 +115,47 @@ $wb['datalog_status_d_dns_soa'] = 'Remover zona dns';
 $wb['datalog_status_i_cron'] = 'Adicionar tarefa no cron';
 $wb['datalog_status_u_cron'] = 'Atualizar tarefa no cron';
 $wb['datalog_status_d_cron'] = 'Remover tarefa no cron';
-$wb['datalog_status_i_mail_get'] = 'Adicionar conta de busca de e-mails';
-$wb['datalog_status_u_mail_get'] = 'Atualizar conta de busca de e-mails';
-$wb['datalog_status_d_mail_get'] = 'Remover conta de busca de e-mails';
+$wb['datalog_status_i_mail_get'] = 'Adicionar conta de busca de e-mail';
+$wb['datalog_status_u_mail_get'] = 'Atualizar conta de busca de e-mail';
+$wb['datalog_status_d_mail_get'] = 'Remover conta de busca de e-mail';
 $wb['datalog_status_i_mail_mailinglist'] = 'Adicionar lista de e-mails';
 $wb['datalog_status_u_mail_mailinglist'] = 'Atualizar lista de e-mails';
 $wb['datalog_status_d_mail_mailinglist'] = 'Remover lista de e-mails';
-$wb['datalog_status_i_shell_user'] = 'Adicionar usuário shell';
-$wb['datalog_status_u_shell_user'] = 'Atualizar usuário shell';
-$wb['datalog_status_d_shell_user'] = 'Remover usuário shell';
+$wb['datalog_status_i_shell_user'] = 'Adicionar usuário do shell';
+$wb['datalog_status_u_shell_user'] = 'Atualizar usuário do shell';
+$wb['datalog_status_d_shell_user'] = 'Remover usuário do shell';
 $wb['datalog_status_i_web_folder'] = 'Adicionar pasta protegida';
 $wb['datalog_status_u_web_folder'] = 'Atualizar pasta protegida';
 $wb['datalog_status_d_web_folder'] = 'Remover pasta protegida';
 $wb['datalog_status_i_web_folder_user'] = 'Adicionar usuário de pasta protegida';
 $wb['datalog_status_u_web_folder_user'] = 'Atualizar usuário de pasta protegida';
 $wb['datalog_status_d_web_folder_user'] = 'Remover usuário de pasta protegida';
-$wb['datalog_status_i_spamfilter_users'] = 'Adicionar configurações de filtro anti-spam';
-$wb['datalog_status_u_spamfilter_users'] = 'Atualizar configurações de filtro anti-spam';
-$wb['datalog_status_d_spamfilter_users'] = 'Remover configurações de filtro anti-spam';
+$wb['datalog_status_i_xmpp_domain'] = 'Adicionar domínio xmpp';
+$wb['datalog_status_u_xmpp_domain'] = 'Atualizar domínio xmpp';
+$wb['datalog_status_d_xmpp_domain'] = 'Remover domínio xmpp';
+$wb['datalog_status_i_xmpp_user'] = 'Adicionar usuário xmpp';
+$wb['datalog_status_u_xmpp_user'] = 'Atualizar usuário xmpp';
+$wb['datalog_status_d_xmpp_user'] = 'Remover usuário xmpp';
+$wb['err_csrf_attempt_blocked'] = 'Tentativa de CSRF bloqueada.';
 $wb['login_as_txt'] = 'Acessar como';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
 $wb['no_destination_perm'] = 'Você não tem permissão para este destino.';
-$wb['client_you_are_locked'] = 'Você não tem permissão para alterar quaisquer configurações.';
+$wb['client_you_are_locked'] = 'Você não tem permissão para alterar nenhuma configuração.';
 $wb['gender_m_txt'] = 'Sr.';
 $wb['gender_f_txt'] = 'Sra.';
 $wb['client_cannot_be_deleted_because_of_billing_module_txt'] = 'Este cliente possui registros no módulo de faturamento, portanto não pode ser removido.';
 $wb['yes_txt'] = 'Sim';
 $wb['no_txt'] = 'Não';
+$wb['None'] = 'Nenhum';
 $wb['strength_1'] = 'Fraca';
 $wb['strength_2'] = 'Razoável';
 $wb['strength_3'] = 'Boa';
 $wb['strength_4'] = 'Forte';
 $wb['strength_5'] = 'Muito Forte';
-$wb['weak_password_txt'] = 'A senha escolhida não corresponde às diretrizes de segurança. São necessários no mínimo {chars} caracteres e dificuldade {strength}.';
-$wb['weak_password_length_txt'] = 'A senha escolhida não corresponde às diretrizes de segurança. São necessários no mínimo {chars} caracteres.';
-$wb['security_check1_txt'] = 'Verifique se há permissão de segurança:';
-$wb['security_check2_txt'] = 'falha';
-$wb['err_csrf_attempt_blocked'] = 'CSRF temporariamente bloqueado.';
+$wb['weak_password_txt'] = 'A senha configurada não obedece as diretivas de segurança. A senha deve possuir ao menos {chars} caracteres e ao menos um caractere maiúsculoe um caractere especial e dificuldade "{strength}".';
+$wb['weak_password_length_txt'] = 'A senha configurada não obedece as diretivas de segurança. A senha deve possuir ao menos {chars} de comprimento.';
+$wb['security_check1_txt'] = 'Verifique as permissões de segurança:';
+$wb['security_check2_txt'] = 'falhou.';
 $wb['select_directive_snippet_txt'] = 'Diretiva de trechos de código';
 $wb['select_master_directive_snippet_txt'] = 'Diretiva mestre de trechos de código';
-$wb['None'] = 'Nenhum';
-$wb['datalog_status_i_xmpp_domain'] = 'Adicionar domínio XMPP';
-$wb['datalog_status_u_xmpp_domain'] = 'Atualizar domínio XMPP';
-$wb['datalog_status_d_xmpp_domain'] = 'Remover domínio XMPP';
-$wb['datalog_status_i_xmpp_user'] = 'Adicionar usuário XMPP';
-$wb['datalog_status_u_xmpp_user'] = 'Atualizar usuário XMPP';
-$wb['datalog_status_d_xmpp_user'] = 'Remover usuário XMPP';
 ?>
diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng
index 6bd61dd6d970c365f39c0445af0224c9033d928b..eeb0819292eac0260fbfdc5121b8c5a252640a73 100644
--- a/interface/lib/lang/cz.lng
+++ b/interface/lib/lang/cz.lng
@@ -33,7 +33,7 @@ $wb['top_menu_monitor'] = 'Monitor';
 $wb['top_menu_sites'] = 'Stránky';
 $wb['top_menu_dns'] = 'DNS';
 $wb['top_menu_tools'] = 'Nástroje';
-$wb['top_menu_help'] = 'Pomoc';
+$wb['top_menu_help'] = 'Podpora';
 $wb['toolsarea_head_txt'] = 'Nástroje';
 $wb['top_menu_billing'] = 'Fakturace';
 $wb['top_menu_domain'] = 'Doména';
diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng
index 115bc890bb97fb7536a4960bc705b0e05d37a46c..cf4491ad5d963701364a3f3005ca24a36b0d695a 100644
--- a/interface/lib/lang/tr.lng
+++ b/interface/lib/lang/tr.lng
@@ -36,10 +36,10 @@ $wb['top_menu_dns'] = 'DNS';
 $wb['top_menu_tools'] = 'Araçlar';
 $wb['top_menu_help'] = 'Yardım';
 $wb['top_menu_billing'] = 'Faturalama';
-$wb['top_menu_mailuser'] = 'Posta Kullanıcısı';
+$wb['top_menu_mailuser'] = 'E-posta Kullanıcısı';
 $wb['top_menu_domain'] = 'Alan Adları';
 $wb['top_menu_dashboard'] = 'Açılış';
-$wb['top_menu_vm'] = 'SSunucu';
+$wb['top_menu_vm'] = 'sSunucu';
 $wb['toolsarea_head_txt'] = 'Araçlar';
 $wb['latest_news_txt'] = 'Haberler';
 $wb['logout_txt'] = 'Oturumu Kapat';
@@ -74,65 +74,72 @@ $wb['datepicker_prevText'] = 'Önceki';
 $wb['submit_confirmation'] = 'Bu iÅŸlemi yapmak istiyor musunuz?';
 $wb['globalsearch_resultslimit_of_txt'] = '/';
 $wb['globalsearch_resultslimit_results_txt'] = 'sonuç';
-$wb['globalsearch_noresults_text_txt'] = 'Sonuç yok.';
+$wb['globalsearch_noresults_text_txt'] = 'Uygun bir sonuç bulunamadı.';
 $wb['globalsearch_noresults_limit_txt'] = '0 sonuç';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Arama';
 $wb['globalsearch_suggestions_text_txt'] = 'Öneriler';
-$wb['global_tabchange_warning_txt'] = 'Bu sekmedeki değişiklikler Tamam düğmesine tıklandığında kaydedilir. İptal düğmesine tıklandığında yoksayılır.';
-$wb['global_tabchange_discard_txt'] = 'Bu sekmede kaydedilmemiş değişiklikler var. Devam ederseniz değişiklikler yoksayılacak.';
+$wb['global_tabchange_warning_txt'] = 'Bu sekmedeki değişiklikler Tamam düğmesine tıklandığında kaydedilir. İptal düğmesine tıklandığında yok sayılır.';
+$wb['global_tabchange_discard_txt'] = 'Bu sekmede kaydedilmemiş değişiklikler var. Devam ederseniz değişiklikler yok sayılacak.';
+
 $wb['datalog_changes_txt'] = 'Şu değişiklikler henüz tüm sunuculara dağıtılmadı:';
 $wb['datalog_changes_end_txt'] = 'Güncellemelerin kaydedilmesi bir dakika kadar sürecek. Lütfen bekleyin.';
-$wb['datalog_status_i_web_database'] = 'Veritabanı ekle';
-$wb['datalog_status_u_web_database'] = 'Veritabanını güncelle';
-$wb['datalog_status_d_web_database'] = 'Veritabanını sil';
-$wb['datalog_status_i_web_database_user'] = 'Veritabanı kullanıcısı ekle';
-$wb['datalog_status_u_web_database_user'] = 'Veritabanı kullanıcısını güncelle';
-$wb['datalog_status_d_web_database_user'] = 'Veritabanı kullanıcısını sil';
-$wb['datalog_status_i_web_domain'] = 'Web sitesi ekle';
-$wb['datalog_status_u_web_domain'] = 'Web sitesi ayarlarını güncelle';
-$wb['datalog_status_d_web_domain'] = 'Web sitesini sil';
-$wb['datalog_status_i_ftp_user'] = 'FTP kullanıcısı ekle';
-$wb['datalog_status_u_ftp_user'] = 'FTP kullanıcısını güncelle';
-$wb['datalog_status_d_ftp_user'] = 'FTP kullanıcısını sil';
-$wb['datalog_status_i_mail_domain'] = 'E-posta alan adı ekle';
-$wb['datalog_status_u_mail_domain'] = 'E-posta alan adını güncelle';
-$wb['datalog_status_d_mail_domain'] = 'E-posta alan adını sil';
-$wb['datalog_status_i_mail_user'] = 'E-posta kullanıcısı ekle';
-$wb['datalog_status_u_mail_user'] = 'E-posta kullanıcısını güncelle';
-$wb['datalog_status_d_mail_user'] = 'E-posta kullanıcısını sil';
-$wb['datalog_status_i_spamfilter_users'] = 'Spam süzgeci ayarları ekle';
-$wb['datalog_status_u_spamfilter_users'] = 'Spam süzgeci ayarlarını güncelle';
-$wb['datalog_status_d_spamfilter_users'] = 'Spam süzgeci ayarlarını sil';
-$wb['datalog_status_i_mail_forwarding'] = 'E-posta adresi ekle';
-$wb['datalog_status_u_mail_forwarding'] = 'E-posta adresini güncelle';
-$wb['datalog_status_d_mail_forwarding'] = 'E-posta adresini sil';
-$wb['datalog_status_i_dns_rr'] = 'DNS kaydı ekle';
-$wb['datalog_status_u_dns_rr'] = 'DNS kaydını güncelle';
-$wb['datalog_status_d_dns_rr'] = 'DNS kaydını sil';
-$wb['datalog_status_i_dns_soa'] = 'DNS bölgesi ekle';
-$wb['datalog_status_u_dns_soa'] = 'DNS bölgesini güncelle';
-$wb['datalog_status_d_dns_soa'] = 'DNS bölgesini sil';
-$wb['datalog_status_i_cron'] = 'Zamanlanmış görev ekle';
-$wb['datalog_status_u_cron'] = 'Zamanlanmış görevi güncelle';
-$wb['datalog_status_d_cron'] = 'Zamanlanmış görevi sil';
-$wb['datalog_status_i_mail_get'] = 'E-posta alma hesabı ekle';
-$wb['datalog_status_u_mail_get'] = 'E-posta alma hesabını güncelle';
-$wb['datalog_status_d_mail_get'] = 'E-posta alma hesabını sil';
-$wb['datalog_status_i_mail_mailinglist'] = 'E-posta listesi ekle';
-$wb['datalog_status_u_mail_mailinglist'] = 'E-posta listesini güncelle';
-$wb['datalog_status_d_mail_mailinglist'] = 'E-posta listesini sil';
-$wb['datalog_status_i_shell_user'] = 'Kabuk kullanıcısı ekle';
-$wb['datalog_status_u_shell_user'] = 'Kabuk kullanıcısını güncelle';
-$wb['datalog_status_d_shell_user'] = 'Kabuk kullanıcısını sil';
-$wb['datalog_status_i_web_folder'] = 'Klasör koruması ekle';
-$wb['datalog_status_u_web_folder'] = 'Klasör korumasını güncelle';
-$wb['datalog_status_d_web_folder'] = 'Klasör korumasını sil';
-$wb['datalog_status_i_web_folder_user'] = 'Klasör koruma kullanıcısı ekle';
-$wb['datalog_status_u_web_folder_user'] = 'Klasör koruma kullanıcısını güncelle';
-$wb['datalog_status_d_web_folder_user'] = 'Klasör koruma kullanıcısını sil';
+$wb['datalog_status_i_web_database'] = 'Veritabanı Ekle';
+$wb['datalog_status_u_web_database'] = 'Veritabanını Güncelle';
+$wb['datalog_status_d_web_database'] = 'Veritabanını Sil';
+$wb['datalog_status_i_web_database_user'] = 'Veritabanı Kullanıcısı Ekle';
+$wb['datalog_status_u_web_database_user'] = 'Veritabanı Kullanıcısını Güncelle';
+$wb['datalog_status_d_web_database_user'] = 'Veritabanı Kullanıcısını Sil';
+$wb['datalog_status_i_web_domain'] = 'Web Sitesi Ekle';
+$wb['datalog_status_u_web_domain'] = 'Web Sitesi Ayarlarını Güncelle';
+$wb['datalog_status_d_web_domain'] = 'Web Sitesini Sil';
+$wb['datalog_status_i_ftp_user'] = 'FTP Kullanıcısı Ekle';
+$wb['datalog_status_u_ftp_user'] = 'FTP Kullanıcısını Güncelle';
+$wb['datalog_status_d_ftp_user'] = 'FTP Kullanıcısını Sil';
+$wb['datalog_status_i_mail_domain'] = 'E-posta Etki Alanı Ekle';
+$wb['datalog_status_u_mail_domain'] = 'E-posta Etki Alanını Güncelle';
+$wb['datalog_status_d_mail_domain'] = 'E-posta Etki Alanını Sil';
+$wb['datalog_status_i_mail_user'] = 'E-posta Kullanıcısı Ekle';
+$wb['datalog_status_u_mail_user'] = 'E-posta Kullanıcısını Güncelle';
+$wb['datalog_status_d_mail_user'] = 'E-posta Kullanıcısını Sil';
+$wb['datalog_status_i_spamfilter_users'] = 'Spam Süzgeci Ayarları Ekle';
+$wb['datalog_status_u_spamfilter_users'] = 'Spam Süzgeci Ayarlarını Güncelle';
+$wb['datalog_status_d_spamfilter_users'] = 'Spam Süzgeci Ayarlarını Sil';
+$wb['datalog_status_i_mail_forwarding'] = 'E-posta Adresi Ekle';
+$wb['datalog_status_u_mail_forwarding'] = 'E-posta Adresini Güncelle';
+$wb['datalog_status_d_mail_forwarding'] = 'E-posta Adresini Sil';
+$wb['datalog_status_i_dns_rr'] = 'DNS Kaydı Ekle';
+$wb['datalog_status_u_dns_rr'] = 'DNS Kaydını Güncelle';
+$wb['datalog_status_d_dns_rr'] = 'DNS Kaydını Sil';
+$wb['datalog_status_i_dns_soa'] = 'DNS Bölgesi Ekle';
+$wb['datalog_status_u_dns_soa'] = 'DNS Bölgesini Güncelle';
+$wb['datalog_status_d_dns_soa'] = 'DNS Bölgesini Sil';
+$wb['datalog_status_i_cron'] = 'Zamanlanmış Görev Ekle';
+$wb['datalog_status_u_cron'] = 'Zamanlanmış Görevi Güncelle';
+$wb['datalog_status_d_cron'] = 'Zamanlanmış Görevi Sil';
+$wb['datalog_status_i_mail_get'] = 'E-posta Alma Hesabı Ekle';
+$wb['datalog_status_u_mail_get'] = 'E-posta Alma Hesabını Güncelle';
+$wb['datalog_status_d_mail_get'] = 'E-posta Alma Hesabını Sil';
+$wb['datalog_status_i_mail_mailinglist'] = 'E-posta Listesi Ekle';
+$wb['datalog_status_u_mail_mailinglist'] = 'E-posta Listesini Güncelle';
+$wb['datalog_status_d_mail_mailinglist'] = 'E-posta Listesini Sil';
+$wb['datalog_status_i_shell_user'] = 'Kabuk Kullanıcısı Ekle';
+$wb['datalog_status_u_shell_user'] = 'Kabuk Kullanıcısını Güncelle';
+$wb['datalog_status_d_shell_user'] = 'Kabuk Kullanıcısını Sil';
+$wb['datalog_status_i_web_folder'] = 'Klasör Koruması Ekle';
+$wb['datalog_status_u_web_folder'] = 'Klasör Korumasını Güncelle';
+$wb['datalog_status_d_web_folder'] = 'Klasör Korumasını Sil';
+$wb['datalog_status_i_web_folder_user'] = 'Klasör Koruma Kullanıcısı Ekle';
+$wb['datalog_status_u_web_folder_user'] = 'Klasör Koruma Kullanıcısını Güncelle';
+$wb['datalog_status_d_web_folder_user'] = 'Klasör Koruma Kullanıcısını Sil';
+$wb['datalog_status_i_xmpp_domain'] = 'XMPP etki alanı ekle';
+$wb['datalog_status_u_xmpp_domain'] = 'XMPP etki alanını düzenle';
+$wb['datalog_status_d_xmpp_domain'] = 'XMPP etki alanını sil';
+$wb['datalog_status_i_xmpp_user'] = 'XMPP kullanıcısı ekle';
+$wb['datalog_status_u_xmpp_user'] = 'XMPP kullanıcısını güncelle';
+$wb['datalog_status_d_xmpp_user'] = 'XMPP kullanıcısını sil';
 $wb['err_csrf_attempt_blocked'] = 'CSRF giriÅŸimi engellendi.';
 $wb['login_as_txt'] = 'Müşteri adıyla oturum aç';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
 $wb['no_destination_perm'] = 'Bu hedef için izniniz yok.';
 $wb['client_you_are_locked'] = 'Herhangi bir ayarı değiştirme izniniz yok.';
 $wb['gender_m_txt'] = 'Bay';
@@ -146,16 +153,10 @@ $wb['strength_2'] = 'Yeterli';
 $wb['strength_3'] = 'Ä°yi';
 $wb['strength_4'] = 'Güçlü';
 $wb['strength_5'] = 'Çok Güçlü';
-$wb['weak_password_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda ve \\"{strength}\\" güçlüğünde olmalı.';
+$wb['weak_password_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda ve "{strength}" güçlüğünde olmalı.';
 $wb['weak_password_length_txt'] = 'Yazdığınız parola güvenlik ilkesine uygun değil. Parola en az {chars} karakter uzunluğunda olmalı.';
 $wb['security_check1_txt'] = 'Güvenlik iznini denetle:';
 $wb['security_check2_txt'] = 'başarısız.';
-$wb['select_directive_snippet_txt'] = 'Directive Snippets';
-$wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets';
-$wb['datalog_status_i_xmpp_domain'] = 'Create XMPP domain';
-$wb['datalog_status_u_xmpp_domain'] = 'Update XMPP domain';
-$wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain';
-$wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
-$wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
-$wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
+$wb['select_directive_snippet_txt'] = 'Yönerge Kod Parçaları';
+$wb['select_master_directive_snippet_txt'] = 'Ana Komut Parçaları';
 ?>
diff --git a/interface/lib/plugins/mail_mail_domain_plugin.inc.php b/interface/lib/plugins/mail_mail_domain_plugin.inc.php
index e72c4aa06b2d8ce82fce9e895db40aba5f331a20..598fe74f09bb75c843b4a9a66a322e454a471957 100644
--- a/interface/lib/plugins/mail_mail_domain_plugin.inc.php
+++ b/interface/lib/plugins/mail_mail_domain_plugin.inc.php
@@ -26,6 +26,8 @@ class mail_mail_domain_plugin {
     */
 	function mail_mail_domain_edit($event_name, $page_form) {
 		global $app, $conf;
+		
+		$domain = $app->functions->idn_encode($page_form->dataRecord['domain']);
 
 		// make sure that the record belongs to the client group and not the admin group when a dmin inserts it
 		// also make sure that the user can not delete entry created by an admin
@@ -57,7 +59,7 @@ class mail_mail_domain_plugin {
 		}
 
 		//** If the domain name or owner has been changed, change the domain and owner in all mailbox records
-		if($page_form->oldDataRecord && ($page_form->oldDataRecord['domain'] != $page_form->dataRecord['domain'] ||
+		if($page_form->oldDataRecord && ($page_form->oldDataRecord['domain'] != $domain ||
 				(isset($page_form->dataRecord['client_group_id']) && $page_form->oldDataRecord['sys_groupid'] != $page_form->dataRecord['client_group_id']))) {
 			$app->uses('getconf');
 			$mail_config = $app->getconf->get_server_config($page_form->dataRecord["server_id"], 'mail');
@@ -71,9 +73,9 @@ class mail_mail_domain_plugin {
 				foreach($mailusers as $rec) {
 					// setting Maildir, Homedir, UID and GID
 					$mail_parts = explode("@", $rec['email']);
-					$maildir = str_replace("[domain]", $page_form->dataRecord['domain'], $mail_config["maildir_path"]);
+					$maildir = str_replace("[domain]", $domain, $mail_config["maildir_path"]);
 					$maildir = str_replace("[localpart]", $mail_parts[0], $maildir);
-					$email = $mail_parts[0].'@'.$page_form->dataRecord['domain'];
+					$email = $mail_parts[0].'@'.$domain;
 					$app->db->datalogUpdate('mail_user', array("maildir" => $maildir, "email" => $email, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailuser_id', $rec['mailuser_id']);
 				}
 			}
@@ -82,8 +84,8 @@ class mail_mail_domain_plugin {
 			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source LIKE ? OR destination LIKE ?", "%@" . $page_form->oldDataRecord['domain'], "%@" . $page_form->oldDataRecord['domain']);
 			if(is_array($forwardings)) {
 				foreach($forwardings as $rec) {
-					$destination = str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['destination']);
-					$source = str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['source']);
+					$destination = str_replace($page_form->oldDataRecord['domain'], $domain, $rec['destination']);
+					$source = str_replace($page_form->oldDataRecord['domain'], $domain, $rec['source']);
 					$app->db->datalogUpdate('mail_forwarding', array("source" => $source, "destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'forwarding_id', $rec['forwarding_id']);
 				}
 			}
@@ -100,20 +102,30 @@ class mail_mail_domain_plugin {
 			$mail_gets = $app->db->queryAllRecords("SELECT mailget_id, destination FROM mail_get WHERE destination LIKE ?", "%@" . $page_form->oldDataRecord['domain']);
 			if(is_array($mail_gets)) {
 				foreach($mail_gets as $rec) {
-					$destination = str_replace($page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $rec['destination']);
+					$destination = str_replace($page_form->oldDataRecord['domain'], $domain, $rec['destination']);
 					$app->db->datalogUpdate('mail_get', array("destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailget_id', $rec['mailget_id']);
 				}
 			}
 
-			if ($page_form->oldDataRecord["domain"] != $page_form->dataRecord['domain']) {
+			if ($page_form->oldDataRecord["domain"] != $domain) {
 				//* Delete the old spamfilter record
 				$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", "@" . $page_form->oldDataRecord["domain"]);
 				$app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
 				unset($tmp);
 			}
-			$app->db->query("UPDATE spamfilter_users SET email=REPLACE(email, ?, ?), sys_userid = ?, sys_groupid = ? WHERE email LIKE ?", $page_form->oldDataRecord['domain'], $page_form->dataRecord['domain'], $client_user_id, $sys_groupid, "%@" . $page_form->oldDataRecord['domain']);
+			$app->db->query("UPDATE spamfilter_users SET email=REPLACE(email, ?, ?), sys_userid = ?, sys_groupid = ? WHERE email LIKE ?", $page_form->oldDataRecord['domain'], $domain, $client_user_id, $sys_groupid, "%@" . $page_form->oldDataRecord['domain']);
 
 		} // end if domain name changed
+		
+		//* Force-update the aliases (required for spamfilter changes)
+		$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source LIKE ? OR destination LIKE ?", "%@" . $domain, "%@" . $domain);
+		
+		if(is_array($forwardings)) {
+			foreach($forwardings as $rec) {
+				$app->db->datalogUpdate('mail_forwarding', array("source" => $rec['source']), 'forwarding_id', $rec['forwarding_id'],true);
+			}
+		}
+		
 	}
 
 }
diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php
index 5afd1c004494fc96062d253d3aa8f8779e6a235b..26c0b02b83dcc646495a0056a79b20f71a72cc53 100644
--- a/interface/lib/plugins/mail_user_filter_plugin.inc.php
+++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php
@@ -55,9 +55,9 @@ class mail_user_filter_plugin {
 
 
 	/*
-		function to create the mail filter rule and insert it into the custom rules
-		field when a new mail filter is added or modified.
-	*/
+	 *	Render the mail filter rule in the desired format and insert it into the custom rules
+	 *	field when a new mail filter is added or modified.
+	 */
 	function mail_user_filter_edit($event_name, $page_form) {
 		global $app, $conf;
 
@@ -91,6 +91,9 @@ class mail_user_filter_plugin {
 
 	}
 
+	/*
+	 *	Remove the rendered filter from custom_mailfilter when a mail_user_filter is deleted
+	 */
 	function mail_user_filter_del($event_name, $page_form) {
 		global $app, $conf;
 
diff --git a/interface/lib/plugins/system_config_dns_ca_plugin.inc.php b/interface/lib/plugins/system_config_dns_ca_plugin.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..c35934e5bfa542b9d5540802100eec148306f74c
--- /dev/null
+++ b/interface/lib/plugins/system_config_dns_ca_plugin.inc.php
@@ -0,0 +1,103 @@
+<?php
+
+/*
+Copyright (c) 2017, Florian Schaal, schaal @it UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class system_config_dns_ca_plugin {
+
+	var $plugin_name = 'system_config_dns_ca_plugin';
+	var $class_name = 'system_config_dns_ca_plugin';
+
+	function onLoad() {
+		global $app;
+
+		$app->plugin->registerEvent('dns:dns_caa:on_after_update', 'system_config_dns_ca_plugin', 'caa_update');
+		$app->plugin->registerEvent('dns:dns_caa:on_after_insert', 'system_config_dns_ca_plugin', 'caa_update');
+
+		$app->plugin->registerEvent('sites:web_vhost_domain:on_after_insert', 'system_config_dns_ca_plugin', 'web_vhost_domain_edit');
+		$app->plugin->registerEvent('sites:web_vhost_domain:on_after_update', 'system_config_dns_ca_plugin', 'web_vhost_domain_edit');
+	}
+
+	function caa_update($event_name, $page_form) {
+		global $app;
+
+		if(trim($page_form->dataRecord['additional'] != '')) {
+			$rec = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE id = ?", $page_form->id);
+			unset($rec['id']);
+			$zone = $app->db->queryOneRecord("SELECT origin FROM dns_soa WHERE id = ?", $rec['zone']);
+			$host=str_replace($zone['origin'], '', $page_form->dataRecord['name']);
+			$host=rtrim($host,'.');
+			$page_form->dataRecord['additional']=str_replace($host, '', $page_form->dataRecord['additional']);
+			$additional=explode(',', $page_form->dataRecord['additional']);
+			foreach($additional as $new) {
+				if($new != '') {
+					$insert_data = $rec;
+					$insert_data['name'] = $new.'.'.$zone['origin'];
+					$app->db->datalogInsert('dns_rr', $insert_data, 'id');
+				}
+			}
+		}
+	} 
+
+	function web_vhost_domain_edit($event_name, $page_form) {
+		global $app;
+
+		if($page_form->dataRecord['ssl_letsencrypt'] == 'y') {
+			$domain = $page_form->dataRecord['domain'];
+			$subdomain = $page_form->dataRecord['subdomain'];
+			$temp=$app->db->queryAllRecords("SELECT * FROM dns_rr WHERE type = 'CAA' AND (name = ? OR name = ?) AND data like ?", $domain.'.', $subdomain.'.'.$domain.'.', '%letsencrypt%');
+			if(count($temp) == 0) {
+				$caa = $app->db->queryOneRecord("SELECT * FROM dns_ssl_ca WHERE ca_issue = 'letsencrypt.org' AND active = 'Y'");
+				$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE origin = ?", $domain.'.');
+				if(is_array($caa) && is_array($soa)) {
+					$records = array();
+					$records[] = $domain.'.';;
+					if($subdomain != '' && $subdomain != 'www') $records[] = $subdomain.'.'.$domain;
+					foreach($records as $record) {
+						$new_rr = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE name = ?", $soa['origin']);
+						unset($new_rr['id']);
+						$new_rr['type'] = 'CAA';
+						$new_rr['name'] = $record;
+						$new_rr['data'] = "0 issue \"$caa[ca_issue]\"";
+						$new_rr['ttl'] = $soa['ttl'];
+						$new_rr['active'] = 'Y';
+				        $new_rr['stamp'] = date('Y-m-d H:i:s');
+		        		$new_rr['serial'] = $app->validate_dns->increase_serial($new_rr['serial']);
+				        $app->db->datalogInsert('dns_rr', $new_rr, 'id', $new_rr['zone']);
+						$zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $new_rr['zone']);
+						$new_serial = $app->validate_dns->increase_serial($zone['serial']);
+						$app->db->datalogUpdate('dns_soa', array("serial" => $new_serial), 'id', $zone['id']);
+					}
+				}
+			}
+		}
+	}
+
+} // End class
+
+?>
diff --git a/interface/web/admin/form/directive_snippets.tform.php b/interface/web/admin/form/directive_snippets.tform.php
index 544cb8b85537df42206ea5c861f20d0050bfb69b..d451a5079594eb41fe5ba10bbdee36b90324e387 100644
--- a/interface/web/admin/form/directive_snippets.tform.php
+++ b/interface/web/admin/form/directive_snippets.tform.php
@@ -123,7 +123,7 @@ $form["tabs"]['directive_snippets'] = array (
 			'separator' => ',',
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/firewall.tform.php b/interface/web/admin/form/firewall.tform.php
index ce7d2dbd09f1c891a78a17471e18b27f9fc906e2..e136b345be40b4cc6e48d0c16d1f98d1ef48a104 100644
--- a/interface/web/admin/form/firewall.tform.php
+++ b/interface/web/admin/form/firewall.tform.php
@@ -79,7 +79,7 @@ $form["tabs"]['firewall'] = array (
 					'regex' => '/^[\s0-9\,\:]{0,255}$/',
 					'errmsg'=> 'tcp_ports_error_regex'),
 			),
-			'default' => '20,21,22,25,53,80,110,143,443,587,993,995,3306,8080,8081,10000',
+			'default' => '20,21,22,25,53,80,110,143,443,465,587,993,995,3306,8080,8081,10000',
 			'value'  => '',
 			'width'  => '30',
 			'maxlength' => '255'
@@ -103,7 +103,7 @@ $form["tabs"]['firewall'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/remote_user.tform.php b/interface/web/admin/form/remote_user.tform.php
index 895d9418a9489e95466272cb5d6e44ed17cb0b67..3b920ccb4af36588f6a7460536fcc401bd73d56c 100644
--- a/interface/web/admin/form/remote_user.tform.php
+++ b/interface/web/admin/form/remote_user.tform.php
@@ -151,7 +151,7 @@ $form["tabs"]['remote_user'] = array (
 		)
 
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/server.tform.php b/interface/web/admin/form/server.tform.php
index 95dca6c33b5cb552b29692b3c0f27f2e76924024..f205758a8dfc30017fd406c7362db06a0c958e56 100644
--- a/interface/web/admin/form/server.tform.php
+++ b/interface/web/admin/form/server.tform.php
@@ -135,7 +135,7 @@ $form["tabs"]['services'] = array (
 			'value'  => array(0 => 'No', 1 => 'Yes')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -160,7 +160,7 @@ $form["tabs"]['config'] = array (
 			'maxlength'	=> ''
 		),
 	##################################
-	# ENDE Datatable fields
+	# END Datatable fields
 	##################################
 	)
 );
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index a127430494aa9add0b29e7959e6e1414d69af929..2663cdd0e0ee38dab40e37ede0a4b5ff96c86869 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -413,7 +413,7 @@ $form["tabs"]['server'] = array(
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -466,6 +466,29 @@ $form["tabs"]['mail'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'content_filter' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'rspamd',
+			'value' => array('amavisd' => 'Amavisd', 'rspamd' => 'Rspamd')
+		),
+		'rspamd_password' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+												'type' => 'TRIM'),
+			),
+		),
+		'rspamd_available' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
 		'dkim_path' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -676,7 +699,7 @@ $form["tabs"]['mail'] = array(
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -704,7 +727,7 @@ $form["tabs"]['getmail'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1211,6 +1234,12 @@ $form["tabs"]['web'] = array(
 			'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
 			'searchable' => 2
 		),
+		'php_fpm_incron_reload' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
 		'nginx_cgi_socket' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -1370,8 +1399,16 @@ $form["tabs"]['web'] = array(
 				1 => 'y'
 			)
 		),
+		'php_fpm_reload_mode' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'reload',
+			'value' => array('reload' => 'Reload', 'restart' => 'Restart'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1461,7 +1498,7 @@ $form["tabs"]['dns'] = array(
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1578,7 +1615,7 @@ $form["tabs"]['fastcgi'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1741,7 +1778,7 @@ $form["tabs"]['jailkit'] = array(
 			'maxlength' => '1000'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1804,7 +1841,7 @@ $form["tabs"]['ufw_firewall'] = array (
 			'value'		=> array('low' => 'low', 'medium' => 'medium', 'high' => 'high')
 		)
 	##################################
-	# ENDE Datatable fields
+	# END Datatable fields
 	##################################
 	)
 );
@@ -1833,7 +1870,7 @@ $form["tabs"]['vlogger'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1891,7 +1928,7 @@ $form["tabs"]['cron'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -1935,8 +1972,14 @@ $form["tabs"]['rescue'] = array(
 			'value' => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
-?>
+
+/*$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+if(!isset($mail_config['rspamd_available']) || $mail_config['rspamd_available'] != 'y') {
+	$form['tabs']['mail']['fields']['content_filter']['default'] = 'amavisd';
+	unset($form['tabs']['mail']['fields']['content_filter']['value']['rspamd']);
+	unset($form['tabs']['mail']['fields']['rspamd_password']);
+}*/
\ No newline at end of file
diff --git a/interface/web/admin/form/server_php.tform.php b/interface/web/admin/form/server_php.tform.php
index 67e54ec6b5dacd7d085100e11dcd60d400b347be..6d443e8d50a939f5807e1ec2c9d08de382e9ba04 100644
--- a/interface/web/admin/form/server_php.tform.php
+++ b/interface/web/admin/form/server_php.tform.php
@@ -174,7 +174,7 @@ $form["tabs"]['php_fastcgi'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -230,7 +230,7 @@ $form["tabs"]['php_fpm'] = array(
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index fb2f1f72643d1d27045e8824020841cdbfffb1d0..84c586da89b2fa290a240fc47532632a47928958 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -206,7 +206,7 @@ $form["tabs"]['sites'] = array (
 			'default' => 'n',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
-                'default_remote_dbserver' => array (
+        'default_remote_dbserver' => array (
 			'datatype'  => 'TEXT',
 			'formtype'  => 'TEXT',
 			'validators'  => array (  0 => array (  'type' => 'CUSTOM',
@@ -218,9 +218,19 @@ $form["tabs"]['sites'] = array (
 			'value'   => '',
 			'width'   => '60',
 			'searchable' => 2
+        ),
+		'web_php_options' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOXARRAY',
+			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
+					'errmsg'=> 'web_php_options_notempty'),
+			),
+			'default' => '',
+			'separator' => ',',
+			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -406,7 +416,7 @@ $form["tabs"]['mail'] = array (
 			'name'  => 'default_mailserver'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -442,7 +452,7 @@ $form["tabs"]['dns'] = array (
 			'name'  => 'default_slave_dnsserver'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -472,7 +482,7 @@ $form["tabs"]['domains'] = array (
 			'value'  => ''
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -744,10 +754,26 @@ $form["tabs"]['misc'] = array (
 			'value'  => array('' => 'None', '1' => 'strength_1', '2' => 'strength_2', '3' => 'strength_3', '4' => 'strength_4', '5' => 'strength_5')
 		)
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
 
+$form['tabs']['dns_ca'] = array (
+	'title'  => 'DNS CAs',
+	'width'  => 100,
+	'template'  => 'templates/system_config_dns_ca.htm',
+	'fields'  => array (),
+	'plugins' => array (
+		'dns_ca' => array (
+			'class'   => 'plugin_system_config_dns_ca',
+			'options' => array()
+		),
+		'dns_ca_list' => array (
+			'class'   => 'plugin_system_config_dns_ca_list',
+			'options' => array()
+		)
+	)
+);
 
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/form/users.tform.php b/interface/web/admin/form/users.tform.php
index 6a23559f1273b5113bb0165a3862905b5ab3b582..be77122b103a1cae9f0f9bc9f6fa0bf86a514598 100644
--- a/interface/web/admin/form/users.tform.php
+++ b/interface/web/admin/form/users.tform.php
@@ -199,6 +199,12 @@ $form['tabs']['users'] = array (
 		'startmodule' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'startmodule_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'startmodule_regex'),
+			),
 			'regex'  => '',
 			'errmsg' => '',
 			'default' => '',
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index b7e75ffd44f11d21e65905ae2cb309e83b9ba328..bccdcc42c05cd94a624c6e6e04ad1aff5f93811a 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ar_server_php_list.lng b/interface/web/admin/lib/lang/ar_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/ar_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ar_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index 45fb0fa9e9a26d796f1b91a8697e84bbd4af64e7..0a830014d8459104d5d61eccab6720f609b1bdd6 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 37f654d5a6d3ce57b7f05fb63166ce003225842e..39531461c3cfcaceff6bc6f57570584e434bfb0e 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_php_list.lng b/interface/web/admin/lib/lang/bg_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/bg_server_php_list.lng
+++ b/interface/web/admin/lib/lang/bg_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index 2f4eb86d3c33b4dd414a8b76e97593903f11f949..130cb596aabd7c6bf2b268293d0fbb16cd12f335 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/br.lng b/interface/web/admin/lib/lang/br.lng
index c4df3fe58bcaf2acb7aa86fb208e245366be4383..b558a1510ea75b28c592710886d259ca93be5366 100644
--- a/interface/web/admin/lib/lang/br.lng
+++ b/interface/web/admin/lib/lang/br.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['1001'] = 'Usuário ou senha está em branco.';
-$wb['1002'] = 'Usuário ou senha errados.';
+$wb['error_1001'] = 'Usuário ou senha está em branco.';
+$wb['error_1002'] = 'Usuário ou senha é inválido.';
 $wb['Groups'] = 'Grupos';
-$wb['groups_description'] = 'Edição dos grupos de usuários do sistema';
+$wb['groups_description'] = 'Editar grupos e usuários do sistema.';
 $wb['Servers'] = 'Servidores';
 $wb['Config'] = 'Configuração';
 $wb['Add user'] = 'Adicionar usuário';
@@ -11,30 +11,36 @@ $wb['Add group'] = 'Adicionar grupo';
 $wb['Edit group'] = 'Editar grupo';
 $wb['Edit server'] = 'Editar servidor';
 $wb['Sync. Now'] = 'Sincronizar agora';
-$wb['DB Sync.'] = 'Sincronizar banco de dados';
-$wb['User Management'] = 'Gerenciamento de usuários';
-$wb['CP Users'] = 'Usuários do painel';
+$wb['DB Sync.'] = 'Sincronização do BD.';
+$wb['User Management'] = 'Gerência de usuário';
+$wb['CP Users'] = 'Usuários ISPConfig';
 $wb['Remote Users'] = 'Usuários remotos';
 $wb['System'] = 'Sistema';
 $wb['Server Services'] = 'Serviços do servidor';
 $wb['Services'] = 'Serviços';
 $wb['Server Config'] = 'Configuração do servidor';
-$wb['Mail'] = 'E-mails';
+$wb['Server'] = 'Servidor';
+$wb['Mail'] = 'e-Mail';
 $wb['Getmail'] = 'Getmail';
-$wb['Web'] = 'Sites';
+$wb['Web'] = 'Web';
 $wb['FastCGI'] = 'FastCGI';
 $wb['Jailkit'] = 'Jailkit';
 $wb['Rescue'] = 'Manutenção';
-$wb['Server IP addresses'] = 'Endereço IP do servidor';
+$wb['Server IP addresses'] = 'Endereços IP do servidor';
+$wb['Server IPv4 mapping'] = 'Mapeamento IPv4 do servidor';
 $wb['Additional PHP Versions'] = 'Versões adicionais do php';
+$wb['Directive Snippets'] = 'Diretiva de trechos de código';
 $wb['Firewall'] = 'Firewall';
 $wb['Interface'] = 'Interface';
 $wb['Interface Config'] = 'Configuração principal';
+$wb['Sites'] = 'Sites';
+$wb['DNS'] = 'DNS';
 $wb['Domains'] = 'Domínios';
 $wb['Misc'] = 'Diversos';
-$wb['Software'] = 'Software';
+$wb['Software'] = 'APPs e complementos';
 $wb['Repositories'] = 'Repositórios';
 $wb['Packages'] = 'Pacotes';
+$wb['Updates'] = 'Atualizações';
 $wb['Language Editor'] = 'Editor de idiomas';
 $wb['Languages'] = 'Idiomas';
 $wb['New Language'] = 'Novo idioma';
@@ -42,11 +48,6 @@ $wb['Merge'] = 'Mesclar';
 $wb['Export'] = 'Exportar';
 $wb['Import'] = 'Importar';
 $wb['Remote Actions'] = 'Ações remotas';
-$wb['Do OS-Update'] = 'Atualização do SO';
-$wb['Do ISPConfig-Update'] = 'Atualização do ISPConfig';
-$wb['Directive Snippets'] = 'Diretivas de trechos de código';
-$wb['Sites'] = 'Sites';
-$wb['DNS'] = 'DNS';
-$wb['Server'] = 'Servidor';
-$wb['Updates'] = 'Atualizações';
+$wb['Do OS-Update'] = 'Atualizar sistema operacional';
+$wb['Do ISPConfig-Update'] = 'Atualizar o ISPConfig';
 ?>
diff --git a/interface/web/admin/lib/lang/br_directive_snippets.lng b/interface/web/admin/lib/lang/br_directive_snippets.lng
index ae56153844be644104305f26eff795c5ddeb05fb..43c46c69b972189158871e363aed78e153f57121 100644
--- a/interface/web/admin/lib/lang/br_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/br_directive_snippets.lng
@@ -2,11 +2,11 @@
 $wb['Directive Snippets'] = 'Diretiva de trechos de código';
 $wb['name_txt'] = 'Nome da diretiva';
 $wb['type_txt'] = 'Tipo';
-$wb['snippet_txt'] = 'Diretiva';
+$wb['snippet_txt'] = 'Trecho de código';
 $wb['active_txt'] = 'Ativo';
-$wb['directive_snippets_name_empty'] = 'Por favor, insira um nome para a diretiva';
-$wb['directive_snippets_name_error_unique'] = 'Já existe uma diretiva de trechos de código com este nome.';
+$wb['directive_snippets_name_empty'] = 'Por favor, insira um nome para a diretiva.';
+$wb['directive_snippets_name_error_unique'] = 'Já existe uma diretiva com este nome.';
 $wb['variables_txt'] = 'Variáveis';
-$wb['customer_viewable_txt'] = 'Visualizada pelo cliente';
-$wb['required_php_snippets_txt'] = 'Diretiva obrigatória para PHP';
+$wb['customer_viewable_txt'] = 'Visualização personalizada';
+$wb['required_php_snippets_txt'] = 'Trecho de código exige php';
 ?>
diff --git a/interface/web/admin/lib/lang/br_directive_snippets_list.lng b/interface/web/admin/lib/lang/br_directive_snippets_list.lng
index 8e08580ad2c1a431ad9e14fe8dc331c81452683c..70af844dd6fe7bba21c201e79ce7c9427e0a95d6 100644
--- a/interface/web/admin/lib/lang/br_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/br_directive_snippets_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Diretivas de trechos de código';
+$wb['list_head_txt'] = 'Diretiva de trechos de código';
 $wb['active_txt'] = 'Ativo';
 $wb['name_txt'] = 'Nome da diretiva';
 $wb['type_txt'] = 'Tipo';
-$wb['add_new_record_txt'] = 'Adicionar nova diretiva';
+$wb['add_new_record_txt'] = 'Adicionar diretiva';
 $wb['customer_viewable_txt'] = 'Visível para o cliente';
 ?>
diff --git a/interface/web/admin/lib/lang/br_firewall.lng b/interface/web/admin/lib/lang/br_firewall.lng
index 0bd3cdc74f50647b023bf2f0cc5bda9eb91911e4..da0936b007ed9c79766690839374599ecd208e37 100644
--- a/interface/web/admin/lib/lang/br_firewall.lng
+++ b/interface/web/admin/lib/lang/br_firewall.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['tcp_port_txt'] = 'Portas TCP abertas';
-$wb['udp_port_txt'] = 'Portas UDP abertas';
+$wb['tcp_port_txt'] = 'Portas tcp abertas';
+$wb['udp_port_txt'] = 'Portas udp abertas';
 $wb['tcp_port_help_txt'] = 'Separado por vírgula';
 $wb['udp_port_help_txt'] = 'Separado por vírgula';
 $wb['active_txt'] = 'Ativo';
-$wb['firewall_error_unique'] = 'Já existe uma regra de firewall para este servidor!';
-$wb['tcp_ports_error_regex'] = 'Caractere não permitido para definição de porta tcp. São permitidos somente números, \':\' e \',\'.';
-$wb['udp_ports_error_regex'] = 'Caractere não permitido para definição de porta udp. São permitidos somente números, \':\' e \',\'.';
+$wb['firewall_error_unique'] = 'Já existe uma regra de firewall idêntica para este servidor.';
+$wb['tcp_ports_error_regex'] = 'Caractere não permitido para configuração de porta tcp: Caracteres permitidos são números, ":" e ",".';
+$wb['udp_ports_error_regex'] = 'Caractere não permitido para configuração de porta udp: Caracteres permitidos são números, ":" e ",".';
 ?>
diff --git a/interface/web/admin/lib/lang/br_firewall_list.lng b/interface/web/admin/lib/lang/br_firewall_list.lng
index 8ff52ee2410f4e0732f2e55ab8c4f27d6deb8f4f..94ef3aab7d61e48ec2d428211bb97357bb00072a 100644
--- a/interface/web/admin/lib/lang/br_firewall_list.lng
+++ b/interface/web/admin/lib/lang/br_firewall_list.lng
@@ -4,5 +4,5 @@ $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['tcp_port_txt'] = 'Portas tcp abertas';
 $wb['udp_port_txt'] = 'Portas udp abertas';
-$wb['add_new_record_txt'] = 'Adicionar regra de firewall';
+$wb['add_new_record_txt'] = 'Adicionar nova regra';
 ?>
diff --git a/interface/web/admin/lib/lang/br_groups.lng b/interface/web/admin/lib/lang/br_groups.lng
index 735bd864a9243321619bc99026faa376424f5b3d..22a1a5c63dda5fd91fdd9435c0c4ab51b447678f 100644
--- a/interface/web/admin/lib/lang/br_groups.lng
+++ b/interface/web/admin/lib/lang/br_groups.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['description_txt'] = 'Descrição';
 $wb['name_txt'] = 'Grupo';
-$wb['name_err'] = 'O nome do grupo deve conter de 1 a 30 caracteres!';
+$wb['name_err'] = 'O grupo deve conter no mínimo 1 e no máximo 30 caracteres.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_groups_list.lng b/interface/web/admin/lib/lang/br_groups_list.lng
index f31a85d12618761f6358e1b0cafc1d8f2a5c8a54..74a414f52d54be8206805124d1ebbae0cf54537f 100644
--- a/interface/web/admin/lib/lang/br_groups_list.lng
+++ b/interface/web/admin/lib/lang/br_groups_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Grupos de usuários do sistema';
+$wb['list_head_txt'] = 'Grupos';
 $wb['description_txt'] = 'Descrição';
 $wb['name_txt'] = 'Grupo';
-$wb['add_new_record_txt'] = 'Adicionar novo Grupo';
-$wb['warning_txt'] = '<b>AVISO:</b> Não modifique ou edite qualquer configuração de usuário aqui. Use o módulo de clientes ou revendas. Modificar ou alterar usuários e grupos aqui pode ocasionar perda de dados!';
+$wb['add_new_record_txt'] = 'Adicionar novo grupo';
+$wb['warning_txt'] = '<b>ALERTA:</b> Não editar ou alterar qualquer configuração de usuário aqui. Use o módulo de clientes e revendas para isso. Editar ou alterar usuários ou grupos aqui pode causar perda de dados!';
 ?>
diff --git a/interface/web/admin/lib/lang/br_iptables.lng b/interface/web/admin/lib/lang/br_iptables.lng
index e44fcf1e68b74fc2942adc9349ec3714af11ccd4..f899d53178891b5e0c96685bbd6c1890b247accf 100644
--- a/interface/web/admin/lib/lang/br_iptables.lng
+++ b/interface/web/admin/lib/lang/br_iptables.lng
@@ -1,13 +1,13 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['multiport_txt'] = 'Múltiplas portas';
-$wb['singleport_txt'] = 'Porta simples';
+$wb['multiport_txt'] = 'Multi-portas';
+$wb['singleport_txt'] = 'Portas simples';
 $wb['protocol_txt'] = 'Protocolo';
 $wb['table_txt'] = 'Tabela';
 $wb['target_txt'] = 'Alvo';
 $wb['state_txt'] = 'Estado';
-$wb['destination_ip_txt'] = 'Endereço IP de destino';
-$wb['source_ip_txt'] = 'Endereço IP de origem';
+$wb['destination_ip_txt'] = 'Endereço de destino';
+$wb['source_ip_txt'] = 'Endereço de origem';
 $wb['active_txt'] = 'Ativo';
-$wb['iptables_error_unique'] = 'Já existe um registro de firewall igual para este servidor.';
+$wb['iptables_error_unique'] = 'Já existe uma regra de firewall idêntica para este servidor.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_iptables_list.lng b/interface/web/admin/lib/lang/br_iptables_list.lng
index 2cd7fdfb53b4f6785098c0b4979b22ff978927d5..3326ac060aa85f4cb29484fe0337bfcefa872aa3 100644
--- a/interface/web/admin/lib/lang/br_iptables_list.lng
+++ b/interface/web/admin/lib/lang/br_iptables_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Firewall';
-$wb['add_new_rule_txt'] = 'Adicionar nova regra';
+$wb['add_new_rule_txt'] = 'Adicionar regra de firewall';
 $wb['server_id_txt'] = 'Servidor';
 $wb['multiport_txt'] = 'Multi portas';
 $wb['singleport_txt'] = 'Porta simples';
@@ -8,8 +8,8 @@ $wb['protocol_txt'] = 'Protocolo';
 $wb['table_txt'] = 'Tabela';
 $wb['target_txt'] = 'Alvo';
 $wb['state_txt'] = 'Estado';
-$wb['destination_ip_txt'] = 'Endereço IP de destino';
-$wb['source_ip_txt'] = 'Endereço IP de origem';
+$wb['destination_ip_txt'] = 'Endereço de destino';
+$wb['source_ip_txt'] = 'Endereço de origem';
 $wb['active_txt'] = 'Ativo';
-$wb['iptables_error_unique'] = 'Já existe um registro de firewall igual para este servidor.';
+$wb['iptables_error_unique'] = 'Já existe uma regra idêntica para este servidor.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_language_add.lng b/interface/web/admin/lib/lang/br_language_add.lng
index eaa080819915c12a88633cdd287bc273a138b194..f63441c55dea31b4a503f78a564a5ceb514a9cfe 100644
--- a/interface/web/admin/lib/lang/br_language_add.lng
+++ b/interface/web/admin/lib/lang/br_language_add.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['list_head_txt'] = 'Adicionar novo idioma';
-$wb['language_select_txt'] = 'Selecionar o idioma base';
+$wb['language_select_txt'] = 'Selecionar idioma base';
 $wb['language_new_txt'] = 'Novo idioma';
-$wb['language_new_hint_txt'] = '2 letras código ISO 639-1 (veja http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
+$wb['language_new_hint_txt'] = '2 caracteres ISO 639-1 para o código do idioma (veja em http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
 $wb['btn_save_txt'] = 'Adicionar novo conjunto de idiomas';
 $wb['btn_cancel_txt'] = 'Voltar';
 ?>
diff --git a/interface/web/admin/lib/lang/br_language_complete.lng b/interface/web/admin/lib/lang/br_language_complete.lng
index 84d5e3393cc5a23142c2f3cd4a00c11e9464cd7e..cb0ea2eb241110c83d7d0630f5c5166c137d3db1 100644
--- a/interface/web/admin/lib/lang/br_language_complete.lng
+++ b/interface/web/admin/lib/lang/br_language_complete.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Mesclar idioma';
+$wb['list_head_txt'] = 'Mesclar idiomas';
 $wb['list_desc_txt'] = 'Mesclar o arquivo de idioma selecionado com o arquivo de idioma principal (em inglês). <br />Isto permite completar qualquer falha de tradução, com o arquivo principal original em inglês.';
 $wb['language_select_txt'] = 'Selecionar idioma';
 $wb['btn_save_txt'] = 'Mesclar arquivos agora';
diff --git a/interface/web/admin/lib/lang/br_language_edit.lng b/interface/web/admin/lib/lang/br_language_edit.lng
index 887080b6d58f0d0d9b140df5cdb950fed1f63ee4..ed0e6bb84d57124d82ebd3cee9a2a62e1acb4762 100644
--- a/interface/web/admin/lib/lang/br_language_edit.lng
+++ b/interface/web/admin/lib/lang/br_language_edit.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Editor de idiomas';
-$wb['language_select_txt'] = 'Selecione o idioma';
+$wb['list_head_txt'] = 'Editor de arquivos de idiomas';
+$wb['language_select_txt'] = 'Selecionar idioma';
 $wb['module_txt'] = 'Módulo';
 $wb['lang_file_txt'] = 'Arquivo de idioma';
 $wb['btn_save_txt'] = 'Salvar';
diff --git a/interface/web/admin/lib/lang/br_language_export.lng b/interface/web/admin/lib/lang/br_language_export.lng
index d4846613899570de4ac7fcb7dd1bb0c4c12710ac..7d75f7b6dd90483fd3db5ccfddb4befd9953b58f 100644
--- a/interface/web/admin/lib/lang/br_language_export.lng
+++ b/interface/web/admin/lib/lang/br_language_export.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Exportar arquivos de idioma';
-$wb['language_select_txt'] = 'Selecione o idioma';
-$wb['btn_save_txt'] = 'Exportar idioma selecionado para um arquivo';
+$wb['language_select_txt'] = 'Selecionar idioma';
+$wb['btn_save_txt'] = 'Exportar arquivo de idioma selecionado';
 $wb['btn_cancel_txt'] = 'Voltar';
 ?>
diff --git a/interface/web/admin/lib/lang/br_language_import.lng b/interface/web/admin/lib/lang/br_language_import.lng
index e99756b376af951c2dafc08f22b9f078e8047d2b..99db3398125213340740f71d3a97dd7020c6bd8e 100644
--- a/interface/web/admin/lib/lang/br_language_import.lng
+++ b/interface/web/admin/lib/lang/br_language_import.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['list_head_txt'] = 'Importar arquivo de idioma';
-$wb['language_import_txt'] = 'Buscar arquivo de idioma';
+$wb['list_desc_txt'] = 'ALERTA: Não importe arquivos de idioma de origem desconhecida.';
+$wb['language_import_txt'] = 'Selecionar arquivo de idioma';
 $wb['btn_save_txt'] = 'Importar arquivo de idioma selecionado';
-$wb['language_overwrite_txt'] = 'Sobrescrever o arquivo se existir.';
+$wb['language_overwrite_txt'] = 'Sobrescrever arquivo, se existir.';
 $wb['btn_cancel_txt'] = 'Voltar';
 $wb['ignore_version_txt'] = 'Ignorar verificação da versão do ISPConfig';
-$wb['list_desc_txt'] = 'ATENÇÃO: Não importe arquivos de idioma de fontes desconhecidas.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_language_list.lng b/interface/web/admin/lib/lang/br_language_list.lng
index cd00833419a3aef6a99b87f0c0d4e668bb2576ca..37941c4472d18eda4e1ce419a55e81e6d63ae0e5 100644
--- a/interface/web/admin/lib/lang/br_language_list.lng
+++ b/interface/web/admin/lib/lang/br_language_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Editor de arquivo de idioma';
-$wb['language_select_txt'] = 'Selecione o idioma';
+$wb['list_head_txt'] = 'Editor de arquivos de idioma';
+$wb['language_select_txt'] = 'Selecionar idioma';
 $wb['module_txt'] = 'Módulo';
-$wb['lang_file_txt'] = 'Arquido de idioma';
+$wb['lang_file_txt'] = 'Arquivo de idioma';
 $wb['lang_file_date_txt'] = 'Última modificação';
 ?>
diff --git a/interface/web/admin/lib/lang/br_package_install.lng b/interface/web/admin/lib/lang/br_package_install.lng
index 5b54c3080a049d334f22d959cbb248462779963c..bbe518549aed1e40a5cf8395cbf2110b21508a9e 100644
--- a/interface/web/admin/lib/lang/br_package_install.lng
+++ b/interface/web/admin/lib/lang/br_package_install.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['repo_name_txt'] = 'Repositório';
 $wb['repo_url_txt'] = 'URL';
-$wb['repo_username_txt'] = 'Usuário (opcional)';
+$wb['repo_username_txt'] = 'Usário (opcional)';
 $wb['repo_password_txt'] = 'Senha (opcional)';
 $wb['active_txt'] = 'Ativo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_remote_action.lng b/interface/web/admin/lib/lang/br_remote_action.lng
index e06a6382b95629d8e08b4468d05bd441b86b41d5..80d3a05c53a19e767bd43ed2ea1d9cd4b3651173 100644
--- a/interface/web/admin/lib/lang/br_remote_action.lng
+++ b/interface/web/admin/lib/lang/br_remote_action.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['select_server_txt'] = 'Selecione o Servidor';
+$wb['select_server_txt'] = 'Selecionar servidor';
 $wb['btn_do_txt'] = 'Executar ação';
-$wb['do_osupdate_caption'] = 'Atualização do sistema operacional no servidor';
-$wb['do_osupdate_desc'] = 'Este comando fará um aptitude -y upgrade no servidor selecionado.<br><br><strong>UTILIZE POR SUA CONTA E RISCO!</strong>';
-$wb['do_ispcupdate_caption'] = 'Atualização do ISPConfig 3 no servidor';
-$wb['do_ispcupdate_desc'] = 'Esta ação fará uma atualização do ISPConfig3 no servidor selecionado.<br><br><strong>UTILIZE POR SUA CONTA E RISCO!</strong>';
-$wb['action_scheduled'] = 'Esta ação está agendada para execução';
+$wb['do_osupdate_caption'] = 'Atualizar sistema operacional no servidor remoto';
+$wb['do_osupdate_desc'] = 'Esta ação fará o comando \'aptitude -y upgrade\' no servidor selecionado.<br><br><strong>UTILIZE POR SUA CONTA E RISCO!</strong>';
+$wb['do_ispcupdate_caption'] = 'Atualizar ISPConfig 3 - Atualizar o servidor remoto';
+$wb['do_ispcupdate_desc'] = 'Esta ação atualizará o ISPConfig3 no servidor selecionado.<br><br><strong>UTILIZE POR SUA CONTA E RISCO!</strong>';
+$wb['action_scheduled'] = 'A ação foi agendada.';
 $wb['select_all_server'] = 'Todos os servidores';
 $wb['ispconfig_update_title'] = 'Instruções de atualização do ISPConfig';
-$wb['ispconfig_update_text'] = 'Acesse como root no shell do seu servidor e execute os seguintes comandos<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />para iniciar a atualização do ISPConfig.<br /><br /><a href=http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/ target=_blank>Clique aqui para instruções detalhadas sobre atualização</a>';
+$wb['ispconfig_update_text'] = 'Acesse com o usuário root no shell do servidor e execute o comando<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />para iniciar a atualização do ISPConfig.<br /><br /><a href=\'http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\' target=\'_blank\'>Clique aqui para instruções detalhadas</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/br_remote_user.lng b/interface/web/admin/lib/lang/br_remote_user.lng
index 95657a283d4c41f737d5915bec2529742bd6a787..fcaa6732c86aa2ce527b9ac796bd69c2f7b99d0a 100644
--- a/interface/web/admin/lib/lang/br_remote_user.lng
+++ b/interface/web/admin/lib/lang/br_remote_user.lng
@@ -1,50 +1,68 @@
 <?php
-$wb['username_txt'] = 'Nome do usuário';
+$wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['function_txt'] = 'Funções';
-$wb['username_error_unique'] = 'O nome de usuário deve ser exclusivo';
-$wb['username_error_empty'] = 'O nome de usuário não pode estar em branco';
-$wb['password_error_empty'] = 'A senha não pode estar em branco';
+$wb['username_error_unique'] = 'Nome do usuário deve ser exclusivo.';
+$wb['username_error_empty'] = 'Nome do usuário está em branco.';
+$wb['password_error_empty'] = 'Senha do usuário está em branco.';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
+$wb['Server functions'] = 'Funções de servidor';
+$wb['Record permission changes'] = 'Permissões de alteração de registros';
+$wb['Domaintool functions'] = 'Funções ferramentas de domínios';
+$wb['Quota functions'] = 'Funções de cotas';
 $wb['Mail domain functions'] = 'Funções de domínios de e-mail';
-$wb['Mail user functions'] = 'Funções de usuários de e-mail';
-$wb['Mail alias functions'] = 'Funções de apelidos de domínio de e-mail';
-$wb['Mail forward functions'] = 'Funções de encaminhamento de e-mail';
-$wb['Mail catchall functions'] = 'Funções de de contas cata tudo';
-$wb['Mail transport functions'] = 'Funções de transporte de e-mail';
-$wb['Mail whitelist functions'] = 'Funções de lista branca de e-mail';
-$wb['Mail blacklist functions'] = 'Funções de lista negra de e-mail';
-$wb['Mail spamfilter user functions'] = 'Funções de filtros anti-spam para contas de e-mail';
-$wb['Mail spamfilter policy functions'] = 'Funções de política de anti-spam para contas de e-mail';
+$wb['Mail domain alias functions'] = 'Funções de alias de domínios de e-mail';
+$wb['Mail mailinglist functions'] = 'Funções de lista de e-mails';
+$wb['Mail user functions'] = 'Funções de contas de e-mails';
+$wb['Mail alias functions'] = 'Funções de alias de e-mails';
+$wb['Mail forward functions'] = 'Funções de encaminhamento de e-mails';
+$wb['Mail relay functions'] = 'Funções de retransmissão de e-mails';
+$wb['Mail catchall functions'] = 'Funções de contas cata-tudo';
+$wb['Mail transport functions'] = 'Funções de transporte de e-mails';
+$wb['Mail whitelist functions'] = 'Funções de lista branca';
+$wb['Mail blacklist functions'] = 'Funções de lista negra';
+$wb['Mail spamfilter user functions'] = 'Funções de filtros anti-spam';
+$wb['Mail spamfilter policy functions'] = 'Funções de políticas anti-spam';
 $wb['Mail fetchmail functions'] = 'Funções de contas de busca de e-mails';
-$wb['Mail user filter functions'] = 'Funções de filtro de e-mails para contas de e-mail';
-$wb['Mail filter functions'] = 'Funções de filtros de e-mail';
+$wb['Mail spamfilter whitelist functions'] = 'Funções de lista branca de e-mails';
+$wb['Mail spamfilter blacklist functions'] = 'Funções de lista negra de e-mails';
+$wb['Mail user filter functions'] = 'Funções de filtros de e-mails para contas de e-mails';
+$wb['Mail Backup functions'] = 'Funções de backup de e-mails';
+$wb['Mail filter functions'] = 'Funções de filtros de e-mails';
+$wb['Monitor functions'] = 'Funções de monitoramento';
 $wb['Client functions'] = 'Funções de cliente';
-$wb['Sites cron functions'] = 'Funções de tarefas no cron para sites';
-$wb['Sites database functions'] = 'Funções de banco de dados para sites';
-$wb['Sites FTP-User functions'] = 'Funções de usuários ftp para sites';
-$wb['Sites Shell-User functions'] = 'Funções de usuários shell para sites';
+$wb['Sites cron functions'] = 'Funções de tarefas no cron';
+$wb['Sites database functions'] = 'Funções de banco de dados';
+$wb['Sites Protected folder functions'] = 'Funções de pastas protegidas';
+$wb['Sites FTP-User functions'] = 'Funções de usuários ftp';
+$wb['Sites Shell-User functions'] = 'Funções de usuários do shell';
 $wb['Sites Domain functions'] = 'Funções de domínios de sites';
-$wb['Sites Aliasdomain functions'] = 'Função de apelidos de domínio de sites';
-$wb['Sites Subdomain functions'] = 'Função de subdomínio de sites';
-$wb['DNS zone functions'] = 'Funções de zona dns';
+$wb['Sites Backup functions'] = 'Funções de backup de sites';
+$wb['Sites Aliasdomain functions'] = 'Funções de alias de domínios de sites';
+$wb['Sites Subdomain functions'] = 'Funções de subdomínios de sites';
+$wb['Sites APS functions'] = 'Funções de apps e complementos';
+$wb['Sites WebDAV-User functions'] = 'Funções de usuários webdav';
+$wb['DNS zone functions'] = 'Funções de zonas dns';
 $wb['DNS a functions'] = 'Funções de registro A dns';
 $wb['DNS aaaa functions'] = 'Funções de registro AAAA dns';
-$wb['DNS alias functions'] = 'Funções de registro Alias dns';
-$wb['DNS cname functions'] = 'Funções de registro CNAME dns';
-$wb['DNS hinfo functions'] = 'Funções de registro HINFO dns';
-$wb['DNS mx functions'] = 'Funções de registro MX dns';
-$wb['DNS ns functions'] = 'Funções de registro NS dns';
-$wb['DNS ptr functions'] = 'Funções de registro PTR dns';
-$wb['DNS rp functions'] = 'Funções de registro RP dns';
-$wb['DNS srv functions'] = 'Funções de registro SRV dns';
-$wb['DNS txt functions'] = 'Funções de registro TXT dns';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['remote_access_txt'] = 'Acesso remoto';
-$wb['remote_ips_txt'] = 'Endereço(s) IPs ou nome do servidor com acesso remoto (separado por vírgula ou em branco para qualquer <i>um</i>)';
-$wb['remote_user_error_ips'] = 'Ao menos um endereço IP ou nome do servidor é inválido.';
-$wb['Mail mailing list functions'] = 'Mail mailinglist functions';
+$wb['DNS alias functions'] = 'Funções de ALIAS dns';
+$wb['DNS cname functions'] = 'Funções de CNAME dns';
+$wb['DNS hinfo functions'] = 'Funções de HINFO dns';
+$wb['DNS mx functions'] = 'Funções de MX dns';
+$wb['DNS ns functions'] = 'Funções de NS dns';
+$wb['DNS ptr functions'] = 'Funções de PTR dns';
+$wb['DNS rp functions'] = 'Funções de RP dns';
+$wb['DNS srv functions'] = 'Funções de SVR dns';
+$wb['DNS txt functions'] = 'Funções de TXT dns';
+$wb['DNS ds functions'] = 'Funções de DS dns';
+$wb['DNS loc functions'] = 'Funções de LOC dns';
+$wb['DNS tlsa functions'] = 'Funções de TLSA dns';
+$wb['OpenVZ VM functions'] = 'Funções do openvz';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['remote_access_txt'] = 'Acesso Remoto';
+$wb['remote_ips_txt'] = 'Endereços IPs ou nome(s) do(s) host(s) para acesso remoto (separado por vírgula e deixar em branco para <i>qualquer um</i>)';
+$wb['remote_user_error_ips'] = 'Ao menos um endereço IP ou nome do host informado é inválido.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_remote_user_list.lng b/interface/web/admin/lib/lang/br_remote_user_list.lng
index f95d782ce6c4e83f98bfe17c95beb71abcdd4e41..0f0381a6f4a87b81abc7b6672669a835c5ea79d7 100644
--- a/interface/web/admin/lib/lang/br_remote_user_list.lng
+++ b/interface/web/admin/lib/lang/br_remote_user_list.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['list_head_txt'] = 'Usuários remotos';
-$wb['list_desc_txt'] = '';
+$wb['list_desc_txt'] = 'Usuário remoto';
 $wb['add_new_record_txt'] = 'Adicionar novo usuário';
-$wb['parent_remote_userid_txt'] = 'ID';
-$wb['username_txt'] = 'Nome do usuário';
+$wb['parent_remote_userid_txt'] = 'ID do usuário';
+$wb['username_txt'] = 'Nome';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server.lng b/interface/web/admin/lib/lang/br_server.lng
index 930b990f42f8cb1e7b98561a27708a8f3b47bc5e..a896d0b49ae377aad39c6737e51ebca246aaf1ff 100644
--- a/interface/web/admin/lib/lang/br_server.lng
+++ b/interface/web/admin/lib/lang/br_server.lng
@@ -2,15 +2,15 @@
 $wb['config_txt'] = 'Configuração';
 $wb['server_name_txt'] = 'Nome do servidor';
 $wb['mail_server_txt'] = 'Servidor de e-mails';
-$wb['web_server_txt'] = 'Servidor de páginas';
+$wb['web_server_txt'] = 'Servidor web';
 $wb['dns_server_txt'] = 'Servidor dns';
-$wb['file_server_txt'] = 'Servidor de arquivo';
+$wb['file_server_txt'] = 'Servidor ftp';
 $wb['db_server_txt'] = 'Servidor de banco de dados';
-$wb['vserver_server_txt'] = 'Servidor virtual';
-$wb['active_txt'] = 'Ativo';
-$wb['mirror_server_id_txt'] = 'É um espelho de servidor?';
-$wb['- None -'] = '- Nenhum -';
+$wb['vserver_server_txt'] = 'Servidor de virtualização';
 $wb['proxy_server_txt'] = 'Servidor proxy';
-$wb['firewall_server_txt'] = 'Servidor de firewall';
-$wb['xmpp_server_txt'] = 'Servidor XMPP';
+$wb['firewall_server_txt'] = 'Servidor firewall';
+$wb['active_txt'] = 'Ativo';
+$wb['mirror_server_id_txt'] = 'É um espelho de servidor';
+$wb['- None -'] = '-Nenhum-';
+$wb['xmpp_server_txt'] = 'Servidor xmpp';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index b016ad04c30a1f93750e29b8b0390b9d0c3cc1c5..f57a2310f23c0ceddc43495d9750377163affa7d 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -1,296 +1,303 @@
 <?php
-$wb['jailkit_chroot_home_txt'] = 'Raiz do chroot jailkit';
-$wb['jailkit_chroot_app_sections_txt'] = 'Aplicações no jailkit chroot (sessões)';
-$wb['jailkit_chroot_app_programs_txt'] = 'Aplicações no jailkit em ambiente chroot';
+$wb['ufw_enable_txt'] = 'Habilitar';
+$wb['ufw_manage_builtins_txt'] = 'Gerenciar regras embutidas';
+$wb['ufw_ipv6_txt'] = 'Habilitar IPv6';
+$wb['ufw_default_input_policy_txt'] = 'Política de entrada padrão';
+$wb['ufw_default_output_policy_txt'] = 'Política de saída padrão';
+$wb['ufw_default_forward_policy_txt'] = 'Política de encaminhamento padrão';
+$wb['ufw_default_application_policy_txt'] = 'Política de aplicações padrão';
+$wb['ufw_log_level_txt'] = 'Nível do log';
+$wb['jailkit_chroot_home_txt'] = 'Diretório em chroot do jailkit';
+$wb['jailkit_chroot_app_sections_txt'] = 'Seções de aplicações em chroot no jailkit';
+$wb['jailkit_chroot_app_programs_txt'] = 'Aplicações em chroot no jailkit';
+$wb['jailkit_chroot_cron_programs_txt'] = 'Tarefas de aplicações em chroot no jailkit';
 $wb['website_path_txt'] = 'Caminho do site';
-$wb['website_symlinks_txt'] = 'Site symlinks: links simbólicos';
-$wb['website_symlinks_rel_txt'] = 'Criar links simbólicos relativos';
-$wb['website_basedir_txt'] = 'Site basedir: Diretório base ';
-$wb['vhost_conf_dir_txt'] = 'Diretório de configuração para vhost';
-$wb['vhost_conf_enabled_dir_txt'] = 'Diretório de configuração para vhost ativo';
+$wb['website_symlinks_txt'] = 'Links simbólicos de sites';
+$wb['website_symlinks_rel_txt'] = 'Adicionar links simbólicos relativos';
+$wb['website_basedir_txt'] = 'Diretório base - site';
+$wb['website_autoalias_txt'] = 'Auto alias - site';
+$wb['website_autoalias_note_txt'] = 'Área reservada:';
+$wb['vhost_conf_dir_txt'] = 'Diretório de configuração vhost';
+$wb['vhost_conf_enabled_dir_txt'] = 'Diretório de configuração vhost habilitado';
 $wb['getmail_config_dir_txt'] = 'Diretório de configuração do getmail';
-$wb['fastcgi_starter_path_txt'] = 'FastCGI: Caminho do diretório do scritp de inicialização';
-$wb['fastcgi_starter_script_txt'] = 'FastCGI: Script de inicialização';
-$wb['fastcgi_alias_txt'] = 'FastCGI: Alias (apelido)';
-$wb['fastcgi_phpini_path_txt'] = 'FastCGI: Caminho do php.ini ';
-$wb['fastcgi_children_txt'] = 'FastCGI: Filhos';
-$wb['fastcgi_max_requests_txt'] = 'FastCGI: Limite de requisições';
-$wb['fastcgi_bin_txt'] = 'Binário do FastCGI';
+$wb['fastcgi_starter_path_txt'] = 'Caminho de inicialização do FastCGI';
+$wb['fastcgi_starter_script_txt'] = 'Script de inicialização do FastCGI';
+$wb['fastcgi_alias_txt'] = 'Alias FastCGI';
+$wb['fastcgi_phpini_path_txt'] = 'Caminho do php.ini FastCGI';
+$wb['fastcgi_children_txt'] = 'Processos filhos do FastCGI';
+$wb['fastcgi_max_requests_txt'] = 'Limite de requisições do FastCGI';
+$wb['fastcgi_bin_txt'] = 'Binário FastCGI';
 $wb['module_txt'] = 'Módulo';
-$wb['maildir_path_txt'] = 'Caminho do diretório maildir';
+$wb['maildir_path_txt'] = 'Caminho do maildir';
 $wb['maildir_format_txt'] = 'Formato do maildir';
-$wb['homedir_path_txt'] = 'Caminho do diretório home';
+$wb['homedir_path_txt'] = 'Caminho do homedir';
+$wb['dkim_path_txt'] = 'Caminho do DKIM';
 $wb['mailuser_uid_txt'] = 'UID do mailuser';
 $wb['mailuser_gid_txt'] = 'GID do mailuser';
 $wb['mailuser_name_txt'] = 'Nome do mailuser';
-$wb['mailuser_group_txt'] = 'Grupo do mailuser';
-$wb['mailbox_virtual_uidgid_maps_txt'] = 'Mapear UID Linux de sites para mailbox';
-$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'Configuração única para sites e servidor de e-mails permitida apenas em configuração de servidor individual';
-$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'UID não pode ser mapeado em uma configuração multiservidor.';
-$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Mapeamento de UID só pode ser usada com o dovecot.';
-$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Mapeamento de UID não pode ser modificada se já existirem e-mails cadastrados.';
+$wb['mailuser_group_txt'] = 'Grupo do maildir';
+$wb['mailbox_virtual_uidgid_maps_txt'] = 'Usar uid linux para sites e conta de e-mail';
+$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'Permitido apenas para configuração de servidor único.';
+$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'O uid linux não pode ser mapeado em configuração multi-servidor.';
+$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'O uid linux não pode ser usado com o dovecot.';
+$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'O uid não pode ser alterado se já existir contas de e-mail.';
 $wb['relayhost_txt'] = 'Servidor de retransmissão';
-$wb['relayhost_user_txt'] = 'Usuário do servidor de retransmissão';
-$wb['relayhost_password_txt'] = 'Senha do servidor de retransmissão';
-$wb['reject_sender_login_mismatch_txt'] = 'Rejeitar remetente e acesso com erros';
-$wb['mailbox_size_limit_txt'] = 'Limite da conta de e-mail';
-$wb['message_size_limit_txt'] = 'Limite do tamanho máximo das mensagens';
+$wb['relayhost_user_txt'] = 'Usuário de retransmissão';
+$wb['relayhost_password_txt'] = 'Senha do usuário de retransmissão';
+$wb['reject_sender_login_mismatch_txt'] = 'Rejeitar acesso com erro de usuário e/ou senha';
+$wb['mailbox_size_limit_txt'] = 'Limite do tamanho da conta de e-mail';
+$wb['message_size_limit_txt'] = 'Limite do tamanho da mensagem';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['netmask_txt'] = 'Máscara de rede';
+$wb['netmask_txt'] = 'Máscara';
 $wb['gateway_txt'] = 'Gateway';
-$wb['hostname_txt'] = 'Servidor';
-$wb['nameservers_txt'] = 'Servidores dns';
+$wb['hostname_txt'] = 'Nome do host';
+$wb['nameservers_txt'] = 'Servidor(es) dns';
 $wb['auto_network_configuration_txt'] = 'Configuração de rede';
-$wb['ip_address_error_wrong'] = 'Endereço IP inválido!';
-$wb['netmask_error_wrong'] = 'Máscara de rede inválida!';
-$wb['gateway_error_wrong'] = 'Gateway inválido!';
-$wb['hostname_error_empty'] = 'Por favor, insira o servidor.';
-$wb['nameservers_error_empty'] = 'Por favor, insira  o servidor dns.';
-$wb['jailkit_chroot_cron_programs_txt'] = 'Tarefas do cron para aplicações no Jailkit em ambiente chroot';
-$wb['config_dir_txt'] = 'Diretório de configuração';
+$wb['ip_address_error_wrong'] = 'Endereço IP com formato inválido.';
+$wb['netmask_error_wrong'] = 'Máscara de rede com formato inválido.';
+$wb['gateway_error_wrong'] = 'Gateway da rede com formado inválido.';
+$wb['hostname_error_empty'] = 'O nome do host está em branco.';
+$wb['hostname_error_regex'] = 'O nome do host é inválido.';
+$wb['nameservers_error_empty'] = 'O servidor(es) dns está em branco.';
+$wb['config_dir_txt'] = 'Diretório de configurações';
 $wb['init_script_txt'] = 'Nome do script de inicialização do cron';
-$wb['crontab_dir_txt'] = 'Caminho para tabelas de tarefas individuais no cron';
-$wb['wget_txt'] = 'Caminho para o wget';
-$wb['web_user_txt'] = 'Usuário apache';
-$wb['web_group_txt'] = 'Grupo apache';
+$wb['crontab_dir_txt'] = 'Caminho para crontabs individuais.';
+$wb['wget_txt'] = 'Caminho do binário wget';
+$wb['web_user_txt'] = 'Usuário do apache';
+$wb['web_group_txt'] = 'Grupo do apache';
 $wb['security_level_txt'] = 'Nível de segurança';
-$wb['loglevel_txt'] = 'Nível do log (Loglevel)';
-$wb['apps_vhost_port_txt'] = 'Porta para apps-vhost';
-$wb['apps_vhost_ip_txt'] = 'IP para apps-vhost';
-$wb['apps_vhost_servername_txt'] = 'Domínio para apps-vhost';
-$wb['bind_user_txt'] = 'Usuário bind';
-$wb['bind_group_txt'] = 'Grupo bind';
-$wb['bind_zonefiles_dir_txt'] = 'Diretório de arquivos de zona do bind';
+$wb['loglevel_txt'] = 'Nível do log';
+$wb['apps_vhost_port_txt'] = 'Porta dos apps-vhost';
+$wb['apps_vhost_ip_txt'] = 'IP dos apps-vhost';
+$wb['apps_vhost_servername_txt'] = 'Domínio dos apps-vhost';
+$wb['bind_user_txt'] = 'Usuário do bind';
+$wb['bind_group_txt'] = 'Grupo do bind';
+$wb['bind_zonefiles_dir_txt'] = 'Diretório de zonas';
 $wb['named_conf_path_txt'] = 'Caminho do named.conf';
 $wb['bind_user_error_empty'] = 'Usuário do bind está em branco.';
 $wb['bind_group_error_empty'] = 'Grupo do bind está em branco.';
-$wb['bind_zonefiles_dir_error_empty'] = 'Diretório de arquivos de zona está em branco.';
-$wb['named_conf_path_error_empty'] = 'Caminho do named.conf.';
+$wb['bind_zonefiles_dir_error_empty'] = 'Diretório de zonas está em branco.';
+$wb['named_conf_path_error_empty'] = 'Caminho do named.conf está em branco.';
 $wb['named_conf_local_path_error_empty'] = 'Caminho do named.conf.local está em branco.';
-$wb['mail_filter_syntax_txt'] = 'Sintaxe do mailfilter';
-$wb['pop3_imap_daemon_txt'] = 'Serviço POP3/IMAP';
-$wb['php_open_basedir_txt'] = 'Diretório PHP open_basedir';
-$wb['php_open_basedir_error_empty'] = 'Diretório PHP open_basedir está em branco.';
+$wb['mail_filter_syntax_txt'] = 'Sintaxe do filtro de e-mail';
+$wb['pop3_imap_daemon_txt'] = 'Daemon POP3/IMAP';
+$wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
+$wb['php_open_basedir_error_empty'] = 'O diretório do open_basedir PHP está em branco.';
 $wb['htaccess_allow_override_txt'] = 'Diretiva .htaccess AllowOverride';
 $wb['htaccess_allow_override_error_empty'] = 'Diretiva .htaccess AllowOverride está em branco.';
-$wb['awstats_conf_dir_txt'] = 'Diretório de configuração do awstats';
-$wb['awstats_data_dir_txt'] = 'Diretório de dados do awstats';
+$wb['awstats_conf_dir_txt'] = 'Pasta de configuração do awstats';
+$wb['awstats_data_dir_txt'] = 'Pasta de dados do awstats';
 $wb['awstats_pl_txt'] = 'Script awstats.pl';
 $wb['awstats_buildstaticpages_pl_txt'] = 'Script awstats_buildstaticpages.pl';
 $wb['backup_dir_txt'] = 'Diretório de backup';
+$wb['backup_tmp_txt'] = 'Diretório para backup temporário quando utilizado zip';
 $wb['named_conf_local_path_txt'] = 'Caminho do named.conf.local';
-$wb['php_ini_path_cgi_txt'] = 'Caminho do php.ini CGI';
-$wb['php_ini_path_apache_txt'] = 'Caminho do php.ini apache';
-$wb['check_apache_config_txt'] = 'Testar a configuração do apache ao reiniciar';
-$wb['network_config_warning_txt'] = 'A configuração de rede só está disponível para servidores Debian e Ubuntu. Não ative esta configuração se a adaptadora de rede no sistema for diferente de eth0.';
-$wb['CA_path_txt'] = 'Caminho do CA';
-$wb['CA_pass_txt'] = 'Senha do CA';
-$wb['ufw_enable_txt'] = 'Habilitar';
-$wb['ufw_manage_builtins_txt'] = 'Gerenciar regras embutidas';
-$wb['ufw_ipv6_txt'] = 'Habilitar IPv6';
-$wb['ufw_default_input_policy_txt'] = 'Política padrão para entrada';
-$wb['ufw_default_output_policy_txt'] = 'Política padrão para saída';
-$wb['ufw_default_forward_policy_txt'] = 'Política padrão para encaminhamento';
-$wb['ufw_default_application_policy_txt'] = 'Política padrão para aplicações';
-$wb['ufw_log_level_txt'] = 'Nível do log';
-$wb['fastcgi_config_syntax_txt'] = 'Sintaxe das configurações FastCGI';
-$wb['server_type_txt'] = 'Tipo de servidor';
-$wb['nginx_vhost_conf_dir_txt'] = 'Diretório de configuração do vhost nginx';
-$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Configuração do diretório do vhost nginx habilitada';
+$wb['php_ini_path_cgi_txt'] = 'Caminho do php.ini do cgi';
+$wb['php_ini_path_apache_txt'] = 'Caminho do php.ini do apache';
+$wb['check_apache_config_txt'] = 'Verificar as configurações do apache quando reiniciar';
+$wb['network_config_warning_txt'] = 'A configuração de rede está disponível apenas para servidores Debian e Ubuntu. Não habilite esta opção se a interface de rede for diferente de eth0.';
+$wb['CA_path_txt'] = 'Caminho da CA';
+$wb['CA_pass_txt'] = 'Senha da CA';
+$wb['fastcgi_config_syntax_txt'] = 'Sintaxe das configurações do FastCGI';
+$wb['backup_mode_txt'] = 'Modo do backup';
+$wb['backup_mode_userzip'] = 'Arquivos de backup com propriedade do usuário web e compactados como zip';
+$wb['backup_mode_rootgz'] = 'Todos os arquivos no diretório web com proprietário root';
+$wb['tmpdir_path_error_empty'] = 'Caminho do diretório temporário está em branco.';
+$wb['tmpdir_path_error_regex'] = 'Caminho do diretório temporário é inválido.';
+$wb['backup_time_txt'] = 'Hora do backup';
+$wb['server_type_txt'] = 'Tipo do servidor';
+$wb['nginx_vhost_conf_dir_txt'] = 'Diretório de configurações vhost do nginx';
+$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Diretório de configurações vhost do nginx habilitado';
 $wb['nginx_user_txt'] = 'Usuário nginx';
-$wb['nginx_group_txt'] = 'Grupo nginx';
-$wb['nginx_cgi_socket_txt'] = 'Soquete CGI nginx';
+$wb['nginx_group_txt'] = 'Grupo do nginx';
+$wb['nginx_cgi_socket_txt'] = 'Socket CGI do nginx';
 $wb['backup_dir_error_empty'] = 'Diretório de backup está em branco.';
 $wb['maildir_path_error_empty'] = 'Caminho do maildir está em branco.';
 $wb['homedir_path_error_empty'] = 'Caminho do homedir está em branco.';
-$wb['mailuser_uid_error_empty'] = 'UID do mailuser está em branco.';
-$wb['mailuser_gid_error_empty'] = 'GID do mailuser está em branco.';
-$wb['mailuser_name_error_empty'] = 'Nome do mailuser está em branco.';
-$wb['mailuser_group_error_empty'] = 'Grupo do mailuser está em branco.';
-$wb['getmail_config_dir_error_empty'] = 'Configuração do diretório getmail está em branco.';
-$wb['website_basedir_error_empty'] = 'Diretório padrão (basedir) do site está em branco.';
-$wb['website_path_error_empty'] = 'Caminho do diretório base (basedir) do site está em branco.';
-$wb['website_symlinks_error_empty'] = 'Links simbólicos para site está em branco.';
-$wb['vhost_conf_dir_error_empty'] = 'Configuração do diretório para vhost está em branco.';
-$wb['vhost_conf_enabled_dir_error_empty'] = 'Configuração habilitada do diretório vhost está em branco.';
-$wb['nginx_vhost_conf_dir_error_empty'] = 'Configuração do diretório vhost do nginx está em branco.';
-$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Configuração habilitada do diretório vhost do nginx está em branco.';
-$wb['apache_user_error_empty'] = 'Usuário apache está em branco.';
-$wb['apache_group_error_empty'] = 'Grupo apache está em branco.';
-$wb['nginx_user_error_empty'] = 'Usuário nginx está em branco.';
-$wb['nginx_group_error_empty'] = 'Grupo nginx está em branco.';
-$wb['php_ini_path_apache_error_empty'] = 'Caminho do php.ini apache está em branco.';
+$wb['mailuser_uid_error_empty'] = 'UID do mailuser UID está em branco.';
+$wb['mailuser_gid_error_empty'] = 'GID do mailuser GID está em branco.';
+$wb['mailuser_name_error_empty'] = 'Usuário do mailuser está em branco.';
+$wb['mailuser_group_error_empty'] = 'Grupo do mailuser Group está em branco.';
+$wb['getmail_config_dir_error_empty'] = 'Diretório de configurações do getmail está em branco.';
+$wb['website_basedir_error_empty'] = 'Diretório basedir de sites está em branco.';
+$wb['website_path_error_empty'] = 'Caminho do site está em branco.';
+$wb['website_symlinks_error_empty'] = 'Links simbólicos de site está em branco.';
+$wb['vhost_conf_dir_error_empty'] = 'Diretório de configurações do vhost está em branco.';
+$wb['vhost_conf_enabled_dir_error_empty'] = 'Diretório de configurações vhost habilitadas está em branco.';
+$wb['nginx_vhost_conf_dir_error_empty'] = 'Diretório de configurações vhost do nginx está em branco.';
+$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Diretório de configurações vhost habilitadas do nginx está em branco.';
+$wb['apache_user_error_empty'] = 'Usuário do apache está em branco.';
+$wb['apache_group_error_empty'] = 'Grupo do apache está em branco.';
+$wb['nginx_user_error_empty'] = 'Usuário do nginx está em branco.';
+$wb['nginx_group_error_empty'] = 'Grupo do nginx está em branco.';
+$wb['php_ini_path_apache_error_empty'] = 'Caminho do php.ini do apache está em branco.';
 $wb['php_ini_path_cgi_error_empty'] = 'Caminho do php.ini CGI está em branco.';
-$wb['nginx_cgi_socket_empty'] = 'Soquete do CGI nginx está em branco.';
-$wb['apps_vhost_port_error_empty'] = 'Porta de apps-vhost está em branco.';
-$wb['apps_vhost_ip_error_empty'] = 'IP para apps-vhost está em branco.';
-$wb['fastcgi_starter_path_error_empty'] = 'Caminho do programa de inicialização do FastCGI está em branco.';
+$wb['nginx_cgi_socket_empty'] = 'O socket CGI do nginx está em branco.';
+$wb['apps_vhost_port_error_empty'] = 'Portas de apps-vhost está em branco.';
+$wb['apps_vhost_ip_error_empty'] = 'IP do apps-vhost está em branco.';
+$wb['fastcgi_starter_path_error_empty'] = 'Caminho do script de inicialização do FastCGI está em branco.';
 $wb['fastcgi_starter_script_error_empty'] = 'Script de inicialização do FastCGI está em branco.';
-$wb['fastcgi_alias_error_empty'] = 'Alias (apelido) do FastCGI está em branco.';
-$wb['fastcgi_phpini_path_error_empty'] = 'Caminho do php.ini do FastCGI está em branco.';
-$wb['fastcgi_children_error_empty'] = 'Filhos do FastCGI está em branco.';
-$wb['fastcgi_max_requests_error_empty'] = 'Limite de requisições do FastCGI está em branco.';
-$wb['fastcgi_bin_error_empty'] = 'Binário do FastCGI está em branco.';
-$wb['jailkit_chroot_home_error_empty'] = 'Diretório raiz do jailkit está em branco.';
-$wb['jailkit_chroot_app_sections_error_empty'] = 'Aplicações no jailkit chroot (sessões) está em branco.';
-$wb['jailkit_chroot_app_programs_error_empty'] = 'Aplicações no jailkit em ambiente chroot está em branco.';
-$wb['jailkit_chroot_cron_programs_error_empty'] = 'Tarefas no cron de aplicações no jailkit em ambiente chroot está em branco.';
-$wb['vlogger_config_dir_error_empty'] = 'Diretório de configurações está em branco.';
-$wb['cron_init_script_error_empty'] = 'Nome do script de inicialização do cron está em branco.';
-$wb['crontab_dir_error_empty'] = 'Caminho para tabelas de tarefas individuais no cron está em branco.';
-$wb['cron_wget_error_empty'] = 'Caminho do programa wget está em branco.';
-$wb['php_fpm_init_script_txt'] = 'Script de inicialização do PHP-FPM';
-$wb['php_fpm_init_script_error_empty'] = 'Script de inicialização do PHP-FPM está em branco.';
-$wb['php_fpm_ini_path_txt'] = 'Caminho do php.ini do PHP-FPM';
-$wb['php_fpm_ini_path_error_empty'] = 'Caminho do php.ini do PHP-FPM está em branco.';
-$wb['php_fpm_pool_dir_txt'] = 'Diretório de faixas (pool) do PHP-FPM';
-$wb['php_fpm_pool_dir_error_empty'] = 'Diretório de faixas (pool) do PHP-FPM está em branco.';
-$wb['php_fpm_start_port_txt'] = 'Porta de inicialização do PHP-FPM';
-$wb['php_fpm_start_port_error_empty'] = 'Porta de inicialização do PHP-FPM está em branco.';
-$wb['php_fpm_socket_dir_txt'] = 'Diretório do soquete PHP-FPM';
-$wb['php_fpm_socket_dir_error_empty'] = 'Diretório do soquete PHP-FPM está em branco.';
-$wb['try_rescue_txt'] = 'Habilitar serviço de monitoramento e reiniciar em caso de falha';
-$wb['do_not_try_rescue_mysql_txt'] = 'Desabilitar monitoramento do MySQL';
-$wb['do_not_try_rescue_mail_txt'] = 'Desabilitar monitoramento do servidor de e-mails';
-$wb['rescue_description_txt'] = '<b>Informação:</b> Se você deseja desligar o MySQL deverá selecionar \'Desabilitar monitoramento do MySQL\' e aguardar em torno de 2 a 3 minutos...<br>se não aguardar em torno de 2 a 3 minutos, o serviço tentará reiniciar o MySQL!';
+$wb['fastcgi_alias_error_empty'] = 'Alias do FastCGI está em branco.';
+$wb['fastcgi_phpini_path_error_empty'] = 'O caminho do php.ini do FastCGI está em branco.';
+$wb['fastcgi_children_error_empty'] = 'Os processos filhos do FastCGI está em branco.';
+$wb['fastcgi_max_requests_error_empty'] = 'O limite de requisições FastCGI está em branco.';
+$wb['fastcgi_bin_error_empty'] = 'O binário do FastCGI está em branco.';
+$wb['jailkit_chroot_home_error_empty'] = 'O home em chroot do jailkit está em branco.';
+$wb['jailkit_chroot_app_sections_error_empty'] = 'Seções de aplicações no jailkit está em branco.';
+$wb['jailkit_chroot_app_programs_error_empty'] = 'Aplicações no jailkit está em branco.';
+$wb['jailkit_chroot_cron_programs_error_empty'] = 'Tarefas de aplicações no jailkit está em branco.';
+$wb['vlogger_config_dir_error_empty'] = 'Diretório de configuração está em branco.';
+$wb['cron_init_script_error_empty'] = 'Script de inicialização do cron está em branco.';
+$wb['crontab_dir_error_empty'] = 'Caminho para tarefas individuais no cron está em branco.';
+$wb['cron_wget_error_empty'] = 'Caminho do binário wget está em branco.';
+$wb['php_fpm_init_script_txt'] = 'Script de inicialização do php-fpm';
+$wb['php_fpm_init_script_error_empty'] = 'Script de inicialização do php-fpm está em branco.';
+$wb['php_fpm_ini_path_txt'] = 'Caminho do php.ini do php-fpm';
+$wb['php_fpm_ini_path_error_empty'] = 'Caminho do php.ini do php-fpm está em branco.';
+$wb['php_fpm_pool_dir_txt'] = 'Diretório de faixas do php-fpm';
+$wb['php_fpm_pool_dir_error_empty'] = 'Diretório de faixas do php-fpm está em branco.';
+$wb['php_fpm_start_port_txt'] = 'Porta do php-fpm';
+$wb['php_fpm_start_port_error_empty'] = 'Porta do php-fpm está em branco.';
+$wb['php_fpm_socket_dir_txt'] = 'Diretório do socket php-fpm';
+$wb['php_fpm_socket_dir_error_empty'] = 'O diretório do socket php-fpm está em branco.';
+$wb['try_rescue_txt'] = 'Habilitar monitoramento de reiniciar em caso de falha';
+$wb['do_not_try_rescue_httpd_txt'] = 'Desabilitar monitoramento do httpd';
+$wb['do_not_try_rescue_mongodb_txt'] = 'Desabilitar monitoramento do mongodb';
+$wb['do_not_try_rescue_mysql_txt'] = 'Desabilitar monitoramento do mysql';
+$wb['do_not_try_rescue_mail_txt'] = 'Desabilitar monitoramento de e-mail';
+$wb['rescue_description_txt'] = '<b>Informação:</b> Se o serviço mysql for desligado e estiver selecionado "Desabilitar monitoramento do mysql" aguarde entre 2 e 3 minutos sem abandonar a aba. <br>Se não aguardar o sistema de recuperação de falhas tentará reiniciar o mysql!';
 $wb['enable_sni_txt'] = 'Habilitar SNI';
-$wb['do_not_try_rescue_httpd_txt'] = 'Desabilitar monitoramento do HTTPD';
-$wb['set_folder_permissions_on_update_txt'] = 'Configurar permissões de pasta na atualização';
-$wb['add_web_users_to_sshusers_group_txt'] = 'Adicionar usuários de site (web) para grupo -sshusers-';
-$wb['connect_userid_to_webid_txt'] = 'Mapear userID Linux para webID';
-$wb['connect_userid_to_webid_start_txt'] = 'Iniciar ID para userID/webID se conectar';
-$wb['website_autoalias_txt'] = 'Auto apelido (alias) para sites';
-$wb['website_autoalias_note_txt'] = 'Área reservada:';
-$wb['backup_mode_txt'] = 'Modo do backup';
-$wb['backup_mode_userzip'] = 'Arquivos de backup com propriedade do usuário web e compactados como zip';
-$wb['backup_mode_rootgz'] = 'Todos os arquivos no diretório web com proprietário root';
-$wb['realtime_blackhole_list_txt'] = 'RBL em tempo real';
-$wb['realtime_blackhole_list_note_txt'] = '(Separar RBL\'s por vírgulas)';
+$wb['set_folder_permissions_on_update_txt'] = 'Configurar permissões de pasta quando atualizar';
+$wb['add_web_users_to_sshusers_group_txt'] = 'Adicionar novos usuários web para o grupo ssh';
+$wb['connect_userid_to_webid_txt'] = 'Conectar o UID do usuário no sistema para webID';
+$wb['connect_userid_to_webid_start_txt'] = 'Conexão do ID inicial do usuário com o webID';
+$wb['realtime_blackhole_list_txt'] = 'Lista RBL em tempo real';
+$wb['realtime_blackhole_list_note_txt'] = '(separar as RBLs com vírgulas)';
 $wb['ssl_settings_txt'] = 'Configurações SSL';
 $wb['permissions_txt'] = 'Permissões';
-$wb['php_settings_txt'] = 'Configurações PHP';
-$wb['apps_vhost_settings_txt'] = 'Configurações apps-vhost';
-$wb['awstats_settings_txt'] = 'Configurações awstats';
+$wb['php_settings_txt'] = 'Configurações php';
+$wb['apps_vhost_settings_txt'] = 'Configurações de apps vhost';
+$wb['awstats_settings_txt'] = 'Configurações do awstats';
 $wb['firewall_txt'] = 'Firewall';
-$wb['mailbox_quota_stats_txt'] = 'Estatísticas de cota das contas de e-mail';
-$wb['enable_ip_wildcard_txt'] = 'Habilitar curingas (*) para IP';
+$wb['mailbox_quota_stats_txt'] = 'Estatísticas das cotas das contas de e-mail';
+$wb['enable_ip_wildcard_txt'] = 'Habilitar curingas de IP (*)';
 $wb['web_folder_protection_txt'] = 'Tornar pastas web imutáveis (atributos estendidos)';
-$wb['overtraffic_notify_admin_txt'] = 'Enviar notificação de cota de tráfego excedida para o administrador';
-$wb['overtraffic_notify_client_txt'] = 'Enviar notificação de cota de tráfego excedida para o cliente';
-$wb['rbl_error_regex'] = 'Por favor, insira um nome de servidor válido para RBL.';
-$wb['overquota_notify_admin_txt'] = 'Enviar alertas de cota para o administrador';
-$wb['overquota_notify_client_txt'] = 'Enviar alertas de cota para o cliente';
-$wb['overquota_notify_onok_txt'] = 'Enviar mensagem de cota OK para o cliente';
-$wb['overquota_notify_freq_txt'] = 'Enviar alertas de cota a cada N dias';
-$wb['overquota_notify_freq_note_txt'] = '0 = enviar mensagem apenas uma vez, não repetir';
-$wb['admin_notify_events_txt'] = 'Enviar e-mail para o admin quando iniciando com o seguinte nível';
-$wb['no_notifications_txt'] = 'Sem Notificações';
-$wb['monit_url_txt'] = 'URL do Monit';
-$wb['monit_user_txt'] = 'Usuário do Monit';
-$wb['monit_password_txt'] = 'Senha do Monit';
-$wb['monit_url_error_regex'] = 'URL do Monit inválida.';
+$wb['overtraffic_notify_admin_txt'] = 'Enviar notificação de tráfego excedido para o administrador';
+$wb['overtraffic_notify_client_txt'] = 'Enviar notificação de tráfego excedido para o cliente';
+$wb['rbl_error_regex'] = 'Por favor, nomes de host válidos para RBLs.';
+$wb['overquota_notify_admin_txt'] = 'Enviar alerta da cota para o administrador';
+$wb['overquota_notify_client_txt'] = 'Enviar alerta da cota para o cliente';
+$wb['overquota_notify_onok_txt'] = 'Enviar mensagem da cota para o cliente';
+$wb['overquota_notify_freq_txt'] = 'Enviar alerta da cota a cada X dias';
+$wb['overquota_notify_freq_note_txt'] = '0 = enviar mensagem apenas uma vez, sem repetir';
+$wb['admin_notify_events_txt'] = 'Enviar e-mail para o administrador iniciando com o seguinte nível';
+$wb['no_notifications_txt'] = 'Sem notificações';
+$wb['monit_url_txt'] = 'URL de monitoramento do monit';
+$wb['monit_user_txt'] = 'Usuário do monit';
+$wb['monit_password_txt'] = 'Senha do monit';
+$wb['monit_url_error_regex'] = 'URL do monit é inválida';
 $wb['monit_url_note_txt'] = 'Área reservada:';
-$wb['munin_url_txt'] = 'URL do Munin';
-$wb['munin_user_txt'] = 'Usuário do Munin';
-$wb['munin_password_txt'] = 'Senha do Munin';
-$wb['munin_url_error_regex'] = 'URL do Munin inválida.';
+$wb['munin_url_txt'] = 'URL do munin';
+$wb['munin_user_txt'] = 'Usuário do munin';
+$wb['munin_password_txt'] = 'Senda do munin';
+$wb['munin_url_error_regex'] = 'URL do munin e inválida';
 $wb['munin_url_note_txt'] = 'Área reservada:';
-$wb['dkim_path_txt'] = 'Caminho do DKIM';
-$wb['backup_delete_txt'] = 'Remover backups do domínio/site';
 $wb['v6_prefix_txt'] = 'Prefixo IPv6';
-$wb['vhost_rewrite_v6_txt'] = 'Reescrever prefixo IPv6 no espelho';
-$wb['v6_prefix_length'] = 'Prefixo longo definido de acordo com IPv6';
-$wb['backup_dir_is_mount_txt'] = 'Diretório de backup está montado?';
-$wb['monitor_system_updates_txt'] = 'Verificar por atualizações Linux';
-$wb['hostname_error_regex'] = 'Nome do servidor é inválido.';
-$wb['invalid_apache_user_txt'] = 'Usuário do Apache é inválido.';
-$wb['invalid_apache_group_txt'] = 'Grupo do Apache é inválido.';
+$wb['vhost_rewrite_v6_txt'] = 'Reescrever IPv6 no espelho';
+$wb['v6_prefix_length'] = 'O prefixo é muito longo de acordo com as definições IPv6.';
+$wb['backup_dir_is_mount_txt'] = 'O diretório de backup está montando?';
+$wb['backup_dir_mount_cmd_txt'] = 'Comando mount, se o diretório não está montado';
+$wb['backup_delete_txt'] = 'Remover backups de domínios/site';
+$wb['overquota_db_notify_admin_txt'] = 'Enviar alerta da cota do banco de dados para o administrador';
+$wb['overquota_db_notify_client_txt'] = 'Enviar alerta da cota do banco de dados para o cliente';
+$wb['monitor_system_updates_txt'] = 'Verificar por atualizações do sistema';
+$wb['php_handler_txt'] = 'Manipulador padrão do php';
+$wb['php_fpm_incron_reload_txt'] = 'Instale o arquivo de disparo do incron para recarregar o php-fpm.';
+$wb['disabled_txt'] = 'Desabilitado';
+$wb['dkim_strength_txt'] = 'Dificuldade do DKIM';
+$wb['monitor_system_updates_txt'] = 'Verificar por atualizações do sistema';
+$wb['invalid_apache_user_txt'] = 'Usuário do apache é inválido.';
+$wb['invalid_apache_group_txt'] = 'Grupo do apache é inválido.';
 $wb['backup_dir_error_regex'] = 'Diretório de backup é inválido.';
-$wb['maildir_path_error_regex'] = 'Caminho do Maildir é inválido.';
-$wb['homedir_path_error_regex'] = 'Caminho do Home é inválido.';
-$wb['mailuser_name_error_regex'] = 'Nome do Mailuser é inválido.';
-$wb['mailuser_group_name_error_regex'] = 'Grupo do Mailuser é inválido.';
-$wb['mailuser_uid_error_range'] = 'A UID do Mailuser deve ser >= 2000';
-$wb['mailuser_gid_error_range'] = 'A GID do Mailuser deve ser >= 2000';
-$wb['getmail_config_dir_error_regex'] = 'Configuração do diretório do getmail inválida.';
-$wb['website_basedir_error_regex'] = 'Diretório base (basedir) para sites é inválido.';
-$wb['website_symlinks_error_regex'] = 'Links simbólicos para sites é inválido.';
-$wb['vhost_conf_dir_error_regex'] = 'Diretório de configurações para vhost é inválido.';
-$wb['vhost_conf_enabled_dir_error_regex'] = 'Diretório de configurações para vhost habilitado é inválido.';
+$wb['maildir_path_error_regex'] = 'Caminho do maildir é inválido.';
+$wb['homedir_path_error_regex'] = 'Caminho do homedir é inválido.';
+$wb['mailuser_name_error_regex'] = 'Caminho do mailuser é inválido.';
+$wb['mailuser_group_name_error_regex'] = 'Grupo do mailuser é inválido.';
+$wb['mailuser_uid_error_range'] = 'A UID do mailuser deve ser >= 2000.';
+$wb['mailuser_gid_error_range'] = 'A GID do mailuser deve ser >= 2000.';
+$wb['getmail_config_dir_error_regex'] = 'Diretório de configurações do getmail é inválido.';
+$wb['website_basedir_error_regex'] = 'Caminho do basedir para sites é inválido. Comprimento mínimo 5 caracteres.';
+$wb['website_symlinks_error_regex'] = 'Links simbólicos para site são inválidos.';
+$wb['vhost_conf_dir_error_regex'] = 'Diretório de configurações vhost é inválido.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Diretório de configuração vhost habilitado é inválido.';
 $wb['nginx_vhost_conf_dir_error_regex'] = 'Diretório de configurações do nginx é inválido.';
-$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Diretório de configurações nginx habilitado é inválido.';
-$wb['ca_path_error_regex'] = 'Caminho do CA é inválido.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Diretório de configurações do nginx habilitado é inválido.';
+$wb['ca_path_error_regex'] = 'Caminho da CA é inválido.';
 $wb['invalid_nginx_user_txt'] = 'Usuário do nginx é inválido.';
 $wb['invalid_nginx_group_txt'] = 'Grupo do nginx é inválido.';
-$wb['php_ini_path_apache_error_regex'] = 'Caminho do php.ini apache é inválido.';
-$wb['php_ini_path_cgi_error_regex'] = 'Caminho do php.ini CGI é inválido.';
-$wb['php_fpm_init_script_error_regex'] = 'Caminho do script de inicialização do PHP-FPM é inválido.';
-$wb['php_fpm_ini_path_error_regex'] = 'Caminho do php.ini PHP-FPM é inválido.';
-$wb['php_fpm_pool_dir_error_regex'] = 'Diretório de faixas (pool) PHP-FPM é inválido.';
-$wb['php_fpm_socket_dir_error_regex'] = 'Diretório do sqouete PHP-FPM é inválido.';
-$wb['php_open_basedir_error_regex'] = 'Diretório base (open_basedir) PHP é inválido.';
-$wb['awstats_data_dir_empty'] = 'Diretório de dados do awstats está em branco.';
-$wb['awstats_data_dir_error_regex'] = 'Diretório de dados do do awstats é inválido.';
-$wb['awstats_pl_empty'] = 'Configuração do script awstats.pl está em branco.';
-$wb['awstats_pl_error_regex'] = 'Caminho do script awstats.pl é inválido.';
-$wb['awstats_buildstaticpages_pl_empty'] = 'Script awstats_buildstaticpages.pl está em branco.';
-$wb['awstats_buildstaticpages_pl_error_regex'] = 'Camindho do script awstats_buildstaticpages.pl é inválido.';
-$wb['invalid_bind_user_txt'] = 'Usuário bind é inválido.';
-$wb['invalid_bind_group_txt'] = 'Grupo bind é inválido.';
-$wb['bind_zonefiles_dir_error_regex'] = 'Diretório de zonas do bind é inválido.';
-$wb['named_conf_path_error_regex'] = 'Caminho do named.conf é inválido.';
-$wb['named_conf_local_path_error_regex'] = 'Caminho do named.conf.local é inválido.';
-$wb['fastcgi_starter_path_error_regex'] = 'Caminho do scritp de inicialização FASTCGI é inválido.';
-$wb['fastcgi_starter_script_error_regex'] = 'Script de inicizalização FASTCGI é inválido.';
-$wb['fastcgi_alias_error_regex'] = 'Apelido (alias) do FASTCGI é inválido.';
-$wb['fastcgi_phpini_path_error_regex'] = 'Caminho do FASTCGI é inválido.';
-$wb['fastcgi_bin_error_regex'] = 'Binário do FASTCGI é inválido.';
-$wb['jailkit_chroot_home_error_regex'] = 'Raiz do chroot jailkit inválida.';
-$wb['jailkit_chroot_app_sections_error_regex'] = 'Aplicações no jailkit chroot (sessões) são inválidas.';
-$wb['jailkit_chroot_app_programs_error_regex'] = 'Aplicações no jailkit em ambiente chroot são inválidas.';
-$wb['jailkit_chroot_cron_programs_error_regex'] = 'Programas no cron em ambiente chroot jailkit são inválidos.';
-$wb['vlogger_config_dir_error_regex'] = 'Diretório de configuração do vlogger é inválido.';
-$wb['cron_init_script_error_regex'] = 'Script de inicialização do Cron é inválido.';
-$wb['crontab_dir_error_regex'] = 'Diretório para tabelas de tarefas individuais no cron é inválido.';
-$wb['cron_wget_error_regex'] = 'Caminho do wget para cron é inválido.';
+$wb['php_ini_path_apache_error_regex'] = 'Caminho do php.ini do apache é inválido.';
+$wb['php_ini_path_cgi_error_regex'] = 'Caminho do php.ini do cgi é inválido.';
+$wb['php_fpm_init_script_error_regex'] = 'Script de inicialização do php-fpm é inválido.';
+$wb['php_fpm_ini_path_error_regex'] = 'Caminho de inicialização do php-fpm é inválido.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Caminho do diretório de faixas do php-fpm é inválido.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Caminho do diretório de socket do php-fpm é inválido.';
+$wb['php_open_basedir_error_regex'] = 'Caminho do open_basedir do php é inválido.';
+$wb['awstats_data_dir_empty'] = 'O diretório de dados do awstats está em branco.';
+$wb['awstats_data_dir_error_regex'] = 'O diretório de dados do awstats é inválido.';
+$wb['awstats_pl_empty'] = 'A configuração do awstats.pl está em branco.';
+$wb['awstats_pl_error_regex'] = 'O caminho do awstats.pl é inválido.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'O awstats_buildstaticpages.pl está em branco';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'O caminho do awstats_buildstaticpages.pl é inválido.';
+$wb['invalid_bind_user_txt'] = 'O usuário do bind é inválido.';
+$wb['invalid_bind_group_txt'] = 'O grupo do bind é inválido.';
+$wb['bind_zonefiles_dir_error_regex'] = 'O diretório de zonas do bind é inválido.';
+$wb['named_conf_path_error_regex'] = 'O caminho do named.conf é inválido.';
+$wb['named_conf_local_path_error_regex'] = 'O caminho do named.conf.local é inválido.';
+$wb['fastcgi_starter_path_error_regex'] = 'O caminho do script de inicialização do fastcgi é inválido.';
+$wb['fastcgi_starter_script_error_regex'] = 'O script de inicialização do fastcgi é inválido.';
+$wb['fastcgi_alias_error_regex'] = 'O alias do fastcgi é inválido.';
+$wb['fastcgi_phpini_path_error_regex'] = 'O caminho do fastcgi é inválido.';
+$wb['fastcgi_bin_error_regex'] = 'O binário do fastcgi é inválido.';
+$wb['jailkit_chroot_home_error_regex'] = 'O diretório home em chroot do jailkit é inválido.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'As seções de aplicações no jaikit são inválidas.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'As aplicações em chroot no jailkit são inválidas.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'As tarefas de aplicações em chroot no jailkit são inválidas.';
+$wb['vlogger_config_dir_error_regex'] = 'Diretório de configurações do vlogger é inválido.';
+$wb['cron_init_script_error_regex'] = 'Script de inicialização do cron é inválido.';
+$wb['crontab_dir_error_regex'] = 'Diretório do cron é inválido.';
+$wb['cron_wget_error_regex'] = 'Caminho do wget no cron é inválido.';
 $wb['network_filesystem_txt'] = 'Sistema de arquivos de rede';
-$wb['disable_bind_log_txt'] = 'Desabilitar mensagens de alerta no log para bind9.';
-$wb['apps_vhost_enabled_txt'] = 'Habilitar apps-vhost';
-$wb['do_not_try_rescue_mongodb_txt'] = 'Desabilitar monitoramento do MongoDB';
-$wb['backup_dir_mount_cmd_txt'] = 'Usar o comando mount, se o diretório de backups não estiver montado';
-$wb['overquota_db_notify_admin_txt'] = 'Enviar mensagens de alerta de cota do banco de dados para o administrador';
-$wb['overquota_db_notify_client_txt'] = 'Enviar mensagens de alerta de cota do banco de dados para o cliente';
-$wb['php_handler_txt'] = 'Manipulador padrão PHP';
-$wb['disabled_txt'] = 'Desabilitado';
-$wb['dkim_strength_txt'] = 'Dificuldade do DKIM';
-$wb['php_ini_check_minutes_txt'] = 'Verificar modificações do php.ini a cada N minutos';
-$wb['php_ini_check_minutes_error_empty'] = 'Por favor, insira um valor de quantas vezes o php.ini deve ser verificado por modificações.';
-$wb['php_ini_check_minutes_info_txt'] = '0 = sem verificação';
+$wb['php_ini_check_minutes_txt'] = 'Verificar alterações no php.ini a cada X minutos';
+$wb['php_ini_check_minutes_error_empty'] = 'Por favor, insira um valor para verificação de alterações no php.ini.';
+$wb['php_ini_check_minutes_info_txt'] = '0 = sem verificações';
 $wb['enable_spdy_txt'] = 'Tornar SPDY/HTTP2 disponível';
-$wb['web_settings_txt'] = 'Servidor de páginas';
-$wb['xmpp_server_txt'] = 'Servidor XMPP';
+$wb['web_settings_txt'] = 'Servidor web';
+$wb['xmpp_server_txt'] = 'Servidor xmpp';
 $wb['xmpp_use_ipv6_txt'] = 'Usar IPv6';
-$wb['xmpp_bosh_max_inactivity_txt'] = 'O limite de tempo para falta de atividade BOSH';
-$wb['xmpp_bosh_timeout_range_wrong'] = 'Por favor, insira uma faixa de tempo - entre 15 e 360 - para verificar falta de atividade BOSH.';
-$wb['xmpp_module_saslauth'] = 'saslauth';
+$wb['xmpp_bosh_max_inactivity_txt'] = 'Tempo de inatividade do BOSH';
+$wb['xmpp_bosh_timeout_range_wrong'] = 'Por favor, insira um valor para o timeout do bosh entre 15 e 360.';
+$wb['xmpp_module_saslauth'] = 'Autenticação SASL';
 $wb['xmpp_server_admins_txt'] = 'Administradores do servidor (JIDs)';
-$wb['xmpp_modules_enabled_txt'] = 'Habilitar plugins no lado servidor (um por linha)';
+$wb['xmpp_modules_enabled_txt'] = 'Plugins habilitados no servidor (um por linha)';
 $wb['xmpp_ports_txt'] = 'Portas dos componentes';
-$wb['xmpp_port_http_txt'] = 'HTTP';
-$wb['xmpp_port_https_txt'] = 'HTTPS';
+$wb['xmpp_port_http_txt'] = 'http';
+$wb['xmpp_port_https_txt'] = 'https';
 $wb['xmpp_port_pastebin_txt'] = 'Pastebin';
 $wb['xmpp_port_bosh_txt'] = 'BOSH';
-$wb['backup_time_txt'] = 'Hora do backup';
+$wb['disable_bind_log_txt'] = 'Desabilitar mensagens de alerta do bind9';
+$wb['apps_vhost_enabled_txt'] = 'Habilitar apps-vhost';
 $wb['skip_le_check_txt'] = 'Ignorar verificação do Lets Encrypt';
-$wb['migration_mode_txt'] = 'Habilitar modo de migração do servidor';
-$wb['nginx_enable_pagespeed_txt'] = 'Makes Pagespeed available';
-$wb['backup_tmp_txt'] = 'Backup tmp directory for zip';
-$wb['tmpdir_path_error_empty'] = 'tmp-dir Path is empty.';
-$wb['tmpdir_path_error_regex'] = 'Invalid tmp-dir path.';
-$wb['logging_txt'] = 'Store website access and error logs';
-$wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
-$wb['log_retention_txt'] = 'Log retention (days)';
-$wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
-$wb['php_default_name_txt'] = 'Description Default PHP-Version';
-$wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
-?>
+$wb['migration_mode_txt'] = 'Modo migração de servidor';
+$wb['nginx_enable_pagespeed_txt'] = 'Tornar pagespeed disponível';
+$wb['logging_txt'] = 'Gravar logs de acesso e erros de sites';
+$wb['logging_desc_txt'] = 'Usar Ferramentas > Sicronizar para aplicar mudanças em sites existentes. Para o Apache, os logs de acesso e erros podem ser anonimizados. Para o nginx, apenas o log de acesso é anonimizado, o log de erros conterá endereços IP.';
+$wb['log_retention_txt'] = 'Tempo de retenção do log (dias)';
+$wb['log_retention_error_ispositive'] = 'O tempo de retenção do log deve ser um número > 0.';
+$wb['php_default_name_txt'] = 'Descrição da versão padrão do php';
+$wb['php_default_name_error_empty'] = 'A descrição da versão padrão do php está em branco.';
+$wb['error_mailbox_message_size_txt'] = 'O tamanho da cota da conta de e-mail deve ser maior ou igual o tamanho da cota de mensagens.';
+$wb['php_fpm_reload_mode_txt'] = 'Modo da recarga do php-fpm';
+$wb['content_filter_txt'] = 'Filtro de conteúdo';
+$wb['rspamd_url_txt'] = 'URL do rspamd';
+$wb['rspamd_user_txt'] = 'Usuário do rspamd';
+$wb['rspamd_password_txt'] = 'Senha do rspamd';
diff --git a/interface/web/admin/lib/lang/br_server_ip.lng b/interface/web/admin/lib/lang/br_server_ip.lng
index b92157894071b20fa27b58088fc16ff36a2b7e72..b9bbd47949189bf6a58262417a3b9fc7a333b859 100644
--- a/interface/web/admin/lib/lang/br_server_ip.lng
+++ b/interface/web/admin/lib/lang/br_server_ip.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['ip_address_txt'] = 'Endereço IP';
-$wb['virtualhost_txt'] = 'Nome do virtualHost http';
-$wb['ip_error_wrong'] = 'Endereço IP inválido!';
-$wb['ip_error_unique'] = 'O endereço IP deve ser exclusivo.';
 $wb['client_id_txt'] = 'Cliente';
 $wb['ip_type_txt'] = 'Tipo';
-$wb['virtualhost_port_txt'] = 'Portas http';
-$wb['error_port_syntax'] = 'Caracteres inválidos no campo -portas http-, insira somente números separados por vírgula. Exemplo: 80,443';
+$wb['ip_address_txt'] = 'Endereço IP';
+$wb['virtualhost_txt'] = 'Nome do vhost http';
+$wb['virtualhost_port_txt'] = 'Porta http';
+$wb['ip_error_wrong'] = 'O endereço IP é inválido.';
+$wb['ip_error_unique'] = 'O endereço IP deve ser exclusivo.';
+$wb['error_port_syntax'] = 'Caracteres inválidos para porta http, por favor, insira apenas uma porta ou separe portas por vírgula. Exemplo: 80,443.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_ip_list.lng b/interface/web/admin/lib/lang/br_server_ip_list.lng
index c7b22097bfcd560bd07903c15444079f38694915..0ae892af876a82f35308158569db43f0dab338f1 100644
--- a/interface/web/admin/lib/lang/br_server_ip_list.lng
+++ b/interface/web/admin/lib/lang/br_server_ip_list.lng
@@ -1,10 +1,10 @@
 <?php
 $wb['list_head_txt'] = 'Endereço IP';
 $wb['server_id_txt'] = 'Servidor';
+$wb['client_id_txt'] = 'Cliente';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['add_new_record_txt'] = 'Adicionar novo endereço IP';
-$wb['client_id_txt'] = 'Cliente';
-$wb['virtualhost_txt'] = 'Vhost http';
+$wb['virtualhost_txt'] = 'Virtual host http';
 $wb['virtualhost_port_txt'] = 'Portas http';
 $wb['ip_type_txt'] = 'Tipo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_ip_map.lng b/interface/web/admin/lib/lang/br_server_ip_map.lng
index 44b76482776000528b7276f111f412a5b4f36a52..81a2bb4b961b2cb771f0a1a282376442345641ce 100644
--- a/interface/web/admin/lib/lang/br_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/br_server_ip_map.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['server_id_txt'] = 'Servidor';
+$wb['server_id_txt'] = 'Servidor para mapeamento IP';
 $wb['source_txt'] = 'Endereço IP de origem';
 $wb['destination_txt'] = 'Endereço IP de destino';
 $wb['active_txt'] = 'Ativo';
-$wb['ip_error_wrong'] = 'Endereço IP é inválido.';
-$wb['destination_ip_empty'] = 'Endereço IP de destino está em branco.';
-$wb['source_ip_empty'] = 'Endereço IP de origem está em branco.';
-$wb['server_empty_error'] = 'Servidor está em branco.';
-$wb['duplicate_mapping_error'] = 'Mapeamento já existe.';
-$wb['ip_mapping_error'] = 'Endereço IP de origem não pode ser um endereço IP do servidor.';
+$wb['ip_error_wrong'] = 'O endereço IP de destino é inválido.';
+$wb['destination_ip_empty'] = 'O endereço IP de destino está em branco.';
+$wb['source_ip_empty'] = 'O endereço IP de origem está em branco.';
+$wb['server_empty_error'] = 'O servidor está em branco.';
+$wb['duplicate_mapping_error'] = 'Este mapeamento IP já existe.';
+$wb['ip_mapping_error'] = 'Endereço IP de origem não pode ser o mesmo IP do servidor para o mapeamento.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_ip_map_list.lng b/interface/web/admin/lib/lang/br_server_ip_map_list.lng
index f5682f31acd6de80d67261835d099d0e16d1183f..8cb0a1e20fda3ca0355af4112acc20ae9f1297e9 100644
--- a/interface/web/admin/lib/lang/br_server_ip_map_list.lng
+++ b/interface/web/admin/lib/lang/br_server_ip_map_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Mapeamento IPv4 - servidor web';
+$wb['list_head_txt'] = 'Mapeamento IPv4';
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_ip_txt'] = 'IP de origem';
-$wb['destination_ip_txt'] = 'IP de destino';
+$wb['source_ip_txt'] = 'Endereço de origem';
+$wb['destination_ip_txt'] = 'Endereço de destino';
 $wb['active_txt'] = 'Ativo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_list.lng b/interface/web/admin/lib/lang/br_server_list.lng
index b4a1fcafc6ce68dfd14d3bc6855394f5e289b0b6..ae3bb528105819fba1f2e301b7edfc6cda305799 100644
--- a/interface/web/admin/lib/lang/br_server_list.lng
+++ b/interface/web/admin/lib/lang/br_server_list.lng
@@ -1,14 +1,14 @@
 <?php
 $wb['list_head_txt'] = 'Servidor';
 $wb['server_name_txt'] = 'Nome';
-$wb['mail_server_txt'] = 'e-Mails';
-$wb['web_server_txt'] = 'Sites';
+$wb['mail_server_txt'] = 'E-MAIL';
+$wb['web_server_txt'] = 'SITES';
 $wb['dns_server_txt'] = 'DNS';
 $wb['file_server_txt'] = 'FTP';
 $wb['db_server_txt'] = 'BD';
 $wb['vserver_server_txt'] = 'VPS';
-$wb['add_new_record_txt'] = 'Adicionar novo servidor';
 $wb['proxy_server_txt'] = 'Proxy';
 $wb['firewall_server_txt'] = 'Firewall';
+$wb['add_new_record_txt'] = 'Adicionar novo servidor';
 $wb['xmpp_server_txt'] = 'XMPP';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_php.lng b/interface/web/admin/lib/lang/br_server_php.lng
index 459b4d9e0ccd25a92a356d622d9a6148eee1deb3..377763ce45c79b68b43b0f8e54eaadfcb2bd3c8f 100644
--- a/interface/web/admin/lib/lang/br_server_php.lng
+++ b/interface/web/admin/lib/lang/br_server_php.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_id_txt'] = 'Cliente';
-$wb['name_txt'] = 'Nome do php';
+$wb['name_txt'] = 'Nome da versão do php';
 $wb['Name'] = 'Nome';
 $wb['FastCGI Settings'] = 'Configurações FastCGI';
 $wb['PHP-FPM Settings'] = 'Configurações PHP-FPM';
 $wb['Additional PHP Versions'] = 'Versões adicionais do php';
-$wb['Form to edit additional PHP versions'] = 'Formulário de edição de versões adicionais do php';
-$wb['server_php_name_error_empty'] = 'Nome está em branco.';
-$wb['php_fastcgi_binary_txt'] = 'Caminho do binário FastCGI';
-$wb['php_fastcgi_ini_dir_txt'] = 'Caminho do diretório do php.ini';
-$wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização do PHP-FPM';
+$wb['Form to edit additional PHP versions'] = 'Editar verões adicionais do php';
+$wb['server_php_name_error_empty'] = 'O campo nome está em branco.';
+$wb['php_fastcgi_binary_txt'] = 'Caminho do binário do FastCGI';
+$wb['php_fastcgi_ini_dir_txt'] = 'Diretório do php.ini';
+$wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização do php-fpm';
 $wb['php_fpm_ini_dir_txt'] = 'Caminho do diretório do php.ini';
-$wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório de faixas (pool) do PHP-FPM';
-$wb['active_txt'] = 'Active';
+$wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório pool do php-fpm';
+$wb['active_txt'] = 'Ativo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_php_list.lng b/interface/web/admin/lib/lang/br_server_php_list.lng
index 31a2b13eb8f720c45202644a908305a77517b6f6..38ebdd3568c080c477198261230a264d9f7aeda8 100644
--- a/interface/web/admin/lib/lang/br_server_php_list.lng
+++ b/interface/web/admin/lib/lang/br_server_php_list.lng
@@ -3,5 +3,6 @@ $wb['list_head_txt'] = 'Versões adicionais do php';
 $wb['server_id_txt'] = 'Servidor';
 $wb['add_new_record_txt'] = 'Adicionar nova versão do php';
 $wb['client_id_txt'] = 'Cliente';
-$wb['name_txt'] = 'Nome da versão do php';
+$wb['name_txt'] = 'Nome da versão';
+$wb['active_txt'] = 'Ativo';
 ?>
diff --git a/interface/web/admin/lib/lang/br_software_package_list.lng b/interface/web/admin/lib/lang/br_software_package_list.lng
index 093f52bca34643b8a7b759701434421f00702150..de62e3d305978b4856ed4e0c1af72feb0f13c1bb 100644
--- a/interface/web/admin/lib/lang/br_software_package_list.lng
+++ b/interface/web/admin/lib/lang/br_software_package_list.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['list_head_txt'] = 'Pacotes de software';
+$wb['list_head_txt'] = 'Pacotes de APPs e complementos';
 $wb['installed_txt'] = 'Estado';
 $wb['package_title_txt'] = 'Pacote';
 $wb['package_description_txt'] = 'Descrição';
-$wb['action_txt'] = 'Acão';
+$wb['action_txt'] = 'Ação';
 $wb['toolsarea_head_txt'] = 'Pacotes';
 $wb['repoupdate_txt'] = 'Atualizar lista de pacotes';
-$wb['package_id_txt'] = 'ID local do app';
-$wb['no_packages_txt'] = 'Nenhum pacote disponível';
+$wb['package_id_txt'] = 'ID local do APP';
+$wb['no_packages_txt'] = 'Nenhum pacote disponível.';
 $wb['edit_txt'] = 'Editar';
 $wb['delete_txt'] = 'Remover';
 ?>
diff --git a/interface/web/admin/lib/lang/br_software_repo.lng b/interface/web/admin/lib/lang/br_software_repo.lng
index b5358501383cf6f3227f906394f2d44f7fc4fa58..dbc14e203210c50d1a1c0b32069b29aae045b217 100644
--- a/interface/web/admin/lib/lang/br_software_repo.lng
+++ b/interface/web/admin/lib/lang/br_software_repo.lng
@@ -4,5 +4,5 @@ $wb['repo_url_txt'] = 'URL';
 $wb['repo_username_txt'] = 'Usuário (opcional)';
 $wb['repo_password_txt'] = 'Senha (opcional)';
 $wb['active_txt'] = 'Ativo';
-$wb['Software Repository which may contain addons or updates'] = 'Repositório de softwares podem conter complementos ou atualizações';
+$wb['Software Repository which may contain addons or updates'] = 'Repositório de software pode conter complementos ou atualizações';
 ?>
diff --git a/interface/web/admin/lib/lang/br_software_update_list.lng b/interface/web/admin/lib/lang/br_software_update_list.lng
index 0592ca7f2622d15fd38b86821f8429e4fd715f29..0dff3a245c45d3cc985a0583f9da49dafd6545a2 100644
--- a/interface/web/admin/lib/lang/br_software_update_list.lng
+++ b/interface/web/admin/lib/lang/br_software_update_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Atualizações de programas';
-$wb['server_select_txt'] = 'Selecione o servidor';
-$wb['installed_txt'] = 'Ações';
+$wb['list_head_txt'] = 'Atualizações de Software';
+$wb['server_select_txt'] = 'Selecionar o servidor';
+$wb['installed_txt'] = 'Ação';
 $wb['update_title_txt'] = 'Atualizar';
 $wb['version_txt'] = 'Versão';
 $wb['action_txt'] = 'Ação';
-$wb['no_updates_txt'] = 'Nenhuma atualização disponível';
+$wb['no_updates_txt'] = 'Nenhuma atualização disponível.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index 02e3249d5fd2a340904e10450b6086f30868e236..98bd4c9614c6732f9df036b7884606fe4f1d40cd 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -1,58 +1,58 @@
 <?php
-$wb['system_config_desc_txt'] = '';
+$wb['system_config_desc_txt'] = 'Configurações do Sistema';
+$wb['smtp_missing_admin_mail_txt'] = 'Por favor, insira um nome e e-mail do administrador se você usar smtp para envio dos e-mails do sistema.';
+$wb['dashboard_atom_url_admin_txt'] = 'URL do Dashboard atom (admin)';
+$wb['dashboard_atom_url_reseller_txt'] = 'URL do Dashboard atom (revendas)';
+$wb['dashboard_atom_url_client_txt'] = 'URL do Dashboard atom  (clientes)';
 $wb['warning'] = 'Edite estes valores com cuidado! Não remova os prefixos em um sistema com mais de um cliente!';
-$wb['dbname_prefix_txt'] = 'Prefixo do banco de dados';
-$wb['dbuser_prefix_txt'] = 'Prefixo do usuário do banco de dados';
-$wb['shelluser_prefix_txt'] = 'Prefixo do usuário shell';
-$wb['ftpuser_prefix_txt'] = 'Prefixo do usuário ftp';
-$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo do banco de dados!';
-$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do usuário do banco de dados!';
-$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do usuário ftp!';
-$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do usuário shell!';
+$wb['tab_change_discard_txt'] = 'Descartar alterações nesta aba';
+$wb['tab_change_warning_txt'] = 'Alerta de alterações';
+$wb['tab_change_warning_note_txt'] = 'Exibir alertas de alterações nesta aba se qualquer dado for alterado pelo usuário.';
+$wb['dbname_prefix_txt'] = 'Prefixo de banco de dados';
+$wb['dbuser_prefix_txt'] = 'Prefixo de usuário de banco de dados';
+$wb['shelluser_prefix_txt'] = 'Prefixo de usuário do shell';
+$wb['webdavuser_prefix_txt'] = 'Prefixo de usuário webdav';
+$wb['ftpuser_prefix_txt'] = 'Prefixo de usuário ftp';
+$wb['vhost_subdomains_txt'] = 'Adicionar subdomínios como um site';
+$wb['vhost_subdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem subdomínios vhost no sistema!';
+$wb['vhost_aliasdomains_txt'] = 'Adicionar alias de domínio como um site';
+$wb['vhost_aliasdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem alias de domínios vhost no sistema!';
+$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo de banco de dados.';
+$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário de banco de dados.';
+$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário ftp.';
+$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário do shell.';
+$wb['webdavuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuários webdav.';
 $wb['dblist_phpmyadmin_link_txt'] = 'Link para o phpmyadmin';
+$wb['enable_custom_login_txt'] = 'Permitir nome de usuário personalizado';
 $wb['mailboxlist_webmail_link_txt'] = 'Link para o webmail';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Exibir aba de auto-resposta nos detalhes da conta de e-mail';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Exibir aba de filtro de e-mails nos detalhes da conta de e-mail';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Exibir aba de filtros personalizados de e-mail nos detalhes da conta de e-mail';
 $wb['webmail_url_txt'] = 'URL do webmail';
-$wb['phpmyadmin_url_txt'] = 'URL do phpmyadmin';
-$wb['use_domain_module_txt'] = 'Use o módulo domínios para adicionar novos domínios';
-$wb['use_domain_module_hint'] = 'Se você usar este módulo, os clientes podem selecionar apenas um dos domínios que o administrador cria para eles. Eles não podem editar o campo domínio livremente. Você deve sair e acessar novamente depois de alterar este valor para que as mudanças sejam visíveis.';
-$wb['new_domain_txt'] = 'HTML para criar um novo domínio';
-$wb['dashboard_atom_url_admin_txt'] = 'URL do Dashboard atom (admin)';
-$wb['dashboard_atom_url_reseller_txt'] = 'URL do Dashboard atom (revendas)';
-$wb['dashboard_atom_url_client_txt'] = 'URL do Dashboard atom  (clientes)';
-$wb['webdavuser_prefix_txt'] = 'Prefixo do usuário webdav';
-$wb['webdavuser_prefix_error_regex'] = 'Caractere não permitido no prefixo do usuário webdav.';
-$wb['webftp_url_txt'] = 'URL do webFTP';
-$wb['mailmailinglist_link_txt'] = 'Link para lista de e-mails';
-$wb['mailmailinglist_url_txt'] = 'URL para lista de e-mails';
-$wb['admin_mail_txt'] = 'e-Mail do administrador';
+$wb['mailmailinglist_link_txt'] = 'Link para lista de e-mails na lista de e-mails';
+$wb['mailmailinglist_url_txt'] = 'URL da lista de e-mails';
+$wb['phpmyadmin_url_txt'] = 'URL do phpMyAdmin';
+$wb['use_domain_module_txt'] = 'Use o módulo de cliente para adicionar novos domínios';
+$wb['use_domain_module_hint'] = 'Se você usar este módulo, os clientes podem selecionar apenas um dos domínios que o administrador adicionar para eles. Eles não podem editar o campo domínio livremente. Você deve sair e acessar novamente após alterar este valor para que as mudanças sejam aplicadas.';
+$wb['new_domain_txt'] = 'Código HTML para criar um novo domínio';
+$wb['webftp_url_txt'] = 'URL do FTPweb';
+$wb['admin_mail_txt'] = 'Administrador(es) de e-mails';
+$wb['monitor_key_txt'] = 'Palavras reservadas a monitorar';
 $wb['admin_name_txt'] = 'Nome do administrador';
-$wb['enable_custom_login_txt'] = 'Permite nome de acesso personalizado';
-$wb['monitor_key_txt'] = 'Monitorar palavra reservada';
 $wb['maintenance_mode_txt'] = 'Modo manutenção';
-$wb['smtp_enabled_txt'] = 'Usar SMPT para enviar e-mails do sistema';
-$wb['smtp_host_txt'] = 'Servidor SMTP';
-$wb['smtp_port_txt'] = 'Porta';
-$wb['smtp_user_txt'] = 'Usuário';
-$wb['smtp_pass_txt'] = 'Senha';
-$wb['smtp_crypt_txt'] = 'Usar criptografia SSL/TLS para conexões SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Por favor, insira um nome e e-mail do administrador se você usar smtp para envio dos e-mails do sistema.';
-$wb['tab_change_discard_txt'] = 'Descartar modificações nesta aba';
-$wb['tab_change_warning_txt'] = 'Alerta de modificações';
-$wb['tab_change_warning_note_txt'] = 'Exibir alertas de modificações nesta aba se qualquer dados for modificado pelo usuário.';
-$wb['vhost_subdomains_txt'] = 'Adicionar subdomínios vhost como site';
-$wb['vhost_subdomains_note_txt'] = 'Você não pode desabilitar esta configuração enquanto existirem subdomínios vhost no sistema!';
-$wb['vhost_aliasdomains_txt'] = 'Adicionar apelidos de domínios vhost como site';
-$wb['vhost_aliasdomains_note_txt'] = 'Você nao pode desabilitar esta configuração enquanto existirem apelidos de domínio vhost no sistema!';
-$wb['phpmyadmin_url_error_regex'] = 'URL do phpmyadmin inválida.';
-$wb['use_combobox_txt'] = 'Usar jQuery UI Combobox';
+$wb['smtp_enabled_txt'] = 'Usar SMTP para enviar e-mails do sistema';
+$wb['smtp_host_txt'] = 'Host SMTP';
+$wb['smtp_port_txt'] = 'Porta SMTP';
+$wb['smtp_user_txt'] = 'Usuário SMTP';
+$wb['smtp_pass_txt'] = 'Senha do SMTP';
+$wb['smtp_crypt_txt'] = 'Usar conexão criptografada SSL/TLS para o SMTP';
+$wb['phpmyadmin_url_error_regex'] = 'URL do phpmyadmin é inválida.';
+$wb['use_combobox_txt'] = 'Usar combobox jQuery UI';
 $wb['use_loadindicator_txt'] = 'Usar indicador de carga';
 $wb['f5_to_reload_js_txt'] = 'Se você modificar esta configuração, talvez será necessário pressionar F5 no seu navegador para recarregar as bibliotecas do JavaScript ou esvaziar o cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Desabilitar verificação da palavra reservada \'web\' para nome do usuário (não recomendado!).';
-$wb['backups_include_into_web_quota_txt'] = 'Incluir arquivos de backup na cota para site.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Exir aba autoresposta nos detalhes da conta de e-mail';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Exibir aba filtros de e-mail nos detalhes da conta de e-mail';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Exibir aba filtros de e-mail personalizados nos detalhes da conta de e-mail';
-$wb['webmail_url_error_regex'] = 'URL do webmail inválida';
+$wb['client_username_web_check_disabled_txt'] = 'Desabilitar verificação da palavra reservada "web" para o nome de usuário (não recomendado!).';
+$wb['backups_include_into_web_quota_txt'] = 'Incluir arquivos de backup na cota do site.';
+$wb['webmail_url_error_regex'] = 'URL do webmail é inválida.';
 $wb['phpmyadmin_url_note_txt'] = 'Área reservada:';
 $wb['webmail_url_note_txt'] = 'Área reservada:';
 $wb['available_dashlets_note_txt'] = 'Dashlets disponíveis:';
@@ -64,21 +64,29 @@ $wb['client_dashlets_left_txt'] = 'Restrições de dashlets para clientes';
 $wb['client_dashlets_right_txt'] = 'Permissões de dashlets para clientes';
 $wb['customer_no_template_txt'] = 'No. do gabarito do cliente';
 $wb['customer_no_template_error_regex_txt'] = 'O número do gabarito do cliente contém caracteres inválidos.';
-$wb['customer_no_start_txt'] = 'Valor inicial do código do cliente';
-$wb['customer_no_counter_txt'] = 'Contador de código do cliente';
+$wb['customer_no_start_txt'] = 'Valor inicial do código de cliente';
+$wb['customer_no_counter_txt'] = 'Contador do código de cliente';
 $wb['session_timeout_txt'] = 'Duração da sessão (minutos)';
-$wb['session_allow_endless_txt'] = 'Habilitar \"Manter-me conectado\"';
+$wb['session_allow_endless_txt'] = 'Habilitar "Manter-me conectado"';
+$wb['No'] = 'Não';
 $wb['min_password_length_txt'] = 'Comprimento mínimo da senha';
 $wb['min_password_strength_txt'] = 'Dificuldade mínima da senha';
-$wb['company_name_txt'] = 'Nome da empresa no título da página';
-$wb['reseller_can_use_options_txt'] = 'Revendas podem usar o menu sites';
-$wb['custom_login_text_txt'] = 'Texto personalizado para página de acesso';
-$wb['custom_login_link_txt'] = 'Link personalizado para página de acesso';
-$wb['login_link_error_regex'] = 'Link personalizado para acesso inválido';
 $wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
 $wb['default_webserver_txt'] = 'Servidor web padrão';
 $wb['default_dnsserver_txt'] = 'Servidor dns padrão';
 $wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
 $wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['No'] = 'Não';
+$wb['company_name_txt'] = 'Nome da empresa para título da página';
+$wb['reseller_can_use_options_txt'] = 'Revendas podem utilizar o menu sites';
+$wb['custom_login_text_txt'] = 'Texto personalizado para a página de acesso';
+$wb['custom_login_link_txt'] = 'Link personalizado para página de acesso';
+$wb['login_link_error_regex'] = 'Link personalizado para acesso inválido';
+$wb['ca_name_txt'] = 'Nome';
+$wb['ca_issue_txt'] = 'Questão';
+$wb['ca_wildcard_txt'] = 'Usar curingas';
+$wb['ca_iodef_txt'] = 'Definições de E/S';
+$wb['active_txt'] = 'Ativo';
+$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+$wb['web_php_options_txt'] = 'Manipulador do php (Somente apache)';
 ?>
diff --git a/interface/web/admin/lib/lang/br_tpl_default_admin.lng b/interface/web/admin/lib/lang/br_tpl_default_admin.lng
index 0a53752e4bb7899cb8c6ec07fd1e8b3a1a5c23da..dbad6b17668dcae270bd642a01f06dd5e91bf030 100644
--- a/interface/web/admin/lib/lang/br_tpl_default_admin.lng
+++ b/interface/web/admin/lib/lang/br_tpl_default_admin.lng
@@ -1,18 +1,18 @@
 <?php
-$wb['tpl_default_admin_head_txt'] = 'Configurações de tema global padrão';
-$wb['tpl_default_admin_desc_txt'] = '';
+$wb['tpl_default_admin_head_txt'] = 'Configurações globais do tema padrão';
+$wb['tpl_default_admin_desc_txt'] = 'Descrição';
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_id_txt'] = 'Cliente';
-$wb['name_txt'] = 'Nome do PHP';
+$wb['name_txt'] = 'Nome da versão do php';
 $wb['Name'] = 'Nome';
-$wb['FastCGI Settings'] = 'Configurações do FastCGI';
-$wb['PHP-FPM Settings'] = 'Configurações do PHP-FPM';
+$wb['FastCGI Settings'] = 'Configurações FastCGI';
+$wb['PHP-FPM Settings'] = 'Configurações PHP-FPM';
 $wb['Additional PHP Versions'] = 'Versões adicionais do php';
-$wb['Form to edit additional PHP versions'] = 'Formulário de edição de versões adicionais do php';
-$wb['server_php_name_error_empty'] = 'Nome está em branco.';
-$wb['php_fastcgi_binary_txt'] = 'Caminho do binário FastCGI';
+$wb['Form to edit additional PHP versions'] = 'Editar versões adicionais do php';
+$wb['server_php_name_error_empty'] = 'O nome está em branco.';
+$wb['php_fastcgi_binary_txt'] = 'Caminho do binário do FastCGI';
 $wb['php_fastcgi_ini_dir_txt'] = 'Caminho do diretório do php.ini';
-$wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização PHP-FPM';
-$wb['php_fpm_ini_dir_txt'] = 'Caminho do diretório php.ini';
-$wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório de faixas (pool) do PHP-FPM';
+$wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização php-fpm';
+$wb['php_fpm_ini_dir_txt'] = 'Caminho do diretório do php.ini';
+$wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório de faixas php-fpm';
 ?>
diff --git a/interface/web/admin/lib/lang/br_users.lng b/interface/web/admin/lib/lang/br_users.lng
index d16bcf1cb181b47daf13787d167c19727e7600e1..6d71a39e4c78e7ca376c2323520fb932b68cb39f 100644
--- a/interface/web/admin/lib/lang/br_users.lng
+++ b/interface/web/admin/lib/lang/br_users.lng
@@ -1,36 +1,36 @@
 <?php
 $wb['username_txt'] = 'Usuário';
-$wb['username_err'] = 'O nome do usuário é muito longo ou contém caracteres inválidos!';
-$wb['username_empty'] = 'Por favor, entre com o nome do usuário.';
-$wb['username_unique'] = 'Já existe um usuário com este nome!';
+$wb['username_err'] = 'O nome do usuário é muito longo ou contém caracteres inválidos.';
+$wb['username_empty'] = 'O nome do usuário está em branco.';
+$wb['username_unique'] = 'Já existe um usuário com este nome.';
 $wb['passwort_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['modules_txt'] = 'Módulos';
-$wb['startmodule_txt'] = 'Módulo Inicial';
+$wb['modules_txt'] = 'Módulo';
+$wb['startmodule_txt'] = 'Módulo inicial';
 $wb['app_theme_txt'] = 'Tema';
 $wb['typ_txt'] = 'Tipo';
 $wb['active_txt'] = 'Ativo';
 $wb['language_txt'] = 'Idioma';
 $wb['name_txt'] = 'Nome';
-$wb['vorname_txt'] = 'Sobrenome';
+$wb['vorname_txt'] = 'Segundo nome';
 $wb['unternehmen_txt'] = 'Empresa';
 $wb['strasse_txt'] = 'Endereço';
 $wb['ort_txt'] = 'Cidade';
 $wb['plz_txt'] = 'CEP';
 $wb['land_txt'] = 'País';
-$wb['email_txt'] = 'e-mail';
-$wb['url_txt'] = 'Site';
+$wb['email_txt'] = 'e-Mail';
+$wb['url_txt'] = 'URL';
 $wb['telefon_txt'] = 'Telefone';
 $wb['fax_txt'] = 'Fax';
 $wb['groups_txt'] = 'Grupos';
-$wb['default_group_txt'] = 'Grupo Padrão';
-$wb['startmodule_err'] = 'O módulo inicial não está contido nos módulos.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['username_error_collision'] = 'O nome do usuário não pode conter as palavras reservadas -web- ou -web- seguidas por um número.';
-$wb['client_not_admin_err'] = 'Um usuário definido como cliente não pode ser configurado com o tipo: admin (administrador).';
-$wb['lost_password_function_txt'] = 'Função reconfigurar senha perdida disponível';
-$wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
+$wb['default_group_txt'] = 'Grupo padrão';
+$wb['startmodule_err'] = 'Módulo inicial não está dentro de módulos.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['username_error_collision'] = 'O nome de usuário não pode conter a palavra "web" ou "web" seguida de um número."';
+$wb['client_not_admin_err'] = 'Um usuário que pertence a um cliente não pode ser configurado para: admin.';
+$wb['lost_password_function_txt'] = 'Função de senha esquecida disponível';
+$wb['no_user_insert'] = 'Os usuários do Painel de Controle (ISPC) do tipo -user- são adicionados e atualizados automaticamente quando você adiciona um cliente ou revenda.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_users_list.lng b/interface/web/admin/lib/lang/br_users_list.lng
index 3422f78355cf5763e27d6905f1b5713b1f46e7f7..26910186c5ef5cbc6d521fa151c9f5a70c322057 100644
--- a/interface/web/admin/lib/lang/br_users_list.lng
+++ b/interface/web/admin/lib/lang/br_users_list.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['list_head_txt'] = 'Usuários';
-$wb['username_txt'] = 'Nome do usuário';
-$wb['client_id_txt'] = 'ID do cliente';
+$wb['username_txt'] = 'Usuário';
+$wb['client_id_txt'] = 'ID do usuário';
 $wb['active_txt'] = 'Ativo';
-$wb['add_new_record_txt'] = 'Adicionar novo usuário';
-$wb['warning_txt'] = '<b>AVISO:</b> Não modifique ou edite qualquer configuração de usuário aqui. Use o módulo de clientes ou revendas. Modificar ou alterar usuários e grupos nesta aba pode ocasionar perda de dados!';
 $wb['groups_txt'] = 'Grupos';
+$wb['add_new_record_txt'] = 'Adicionar novo usuário';
+$wb['warning_txt'] = '<b>ALERTA:</b> Não editar ou alterar qualquer configuração de usuário aqui. Use o módulo de clientes e revendas para isso. Editar ou alterar usuários ou grupos aqui pode causar perda de dados!';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index a83144b33493f4cfded92981b0fbee9bafa13f03..14f0b91d3b897404ac226906c8bb9a17529a845b 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -208,6 +208,7 @@ $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['invalid_apache_user_txt'] = 'Invalid apache user.';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_server_php_list.lng b/interface/web/admin/lib/lang/ca_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/ca_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ca_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index 5809cc97b2816aca52e978689f2f7ce8176d482d..cc3c11c6c5ac86fe60180a49430fbc1963f9675e 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -81,4 +81,13 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi
 $wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
 $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
 $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 9a765635228bfeb8fe1201efb9b6e164fd1ae0be..a97d78b8eb358977b7bc1c4d6dc1c20a330d513d 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -143,7 +143,7 @@ $wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM adresář pro socket je prázdn
 $wb['try_rescue_txt'] = 'Povolit monitorování služeb a restartovat při selhání';
 $wb['do_not_try_rescue_mysql_txt'] = 'Zakázat MySQL monitorování';
 $wb['do_not_try_rescue_mail_txt'] = 'Zakázat E-mail monitorování';
-$wb['rescue_description_txt'] = '<b>Informace:</b> Pokud chcete např. vypnout MySQL službu zatrhněte políčko \"Zakázat MySQL monitorování\" změna se provede do 2-3 minut.<br>Pokud nepočkáte 2-3 minuty, monitorování nastartuje službu MySQL automaticky znovu !';
+$wb['rescue_description_txt'] = '<b>Informace:</b> Pokud chcete např. vypnout MySQL službu zatrhněte políčko \\"Zakázat MySQL monitorování\\" změna se provede do 2-3 minut.<br>Pokud nepočkáte 2-3 minuty, monitorování nastartuje službu MySQL automaticky znovu !';
 $wb['enable_sni_txt'] = 'Aktivovat SNI (Server Name Indication)';
 $wb['do_not_try_rescue_httpd_txt'] = 'Zakázat HTTPD monitorování';
 $wb['set_folder_permissions_on_update_txt'] = 'Nastavení oprávnění složky při aktualizaci';
@@ -257,6 +257,7 @@ $wb['backup_delete_txt'] = 'Odstranit zálohy pokud byla smazána doména/webov
 $wb['overquota_db_notify_admin_txt'] = 'Poslat varování o překročení nebo vyčerpání DB kvót adminovi';
 $wb['overquota_db_notify_client_txt'] = 'Poslat varování o překročení nebo vyčerpání DB kvót klientovi';
 $wb['php_handler_txt'] = 'Výchozí PHP obslužná rutina';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Vypnuto';
 $wb['php_ini_check_minutes_txt'] = 'Provádět kontrolu změny obsahu souboru php.ini každých X minut';
 $wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_php.lng b/interface/web/admin/lib/lang/cz_server_php.lng
index 615431c3559ed694eda6fb9aff9d2bb5845943cc..e3268703409b81751d095a13e1f8d8da655d2030 100644
--- a/interface/web/admin/lib/lang/cz_server_php.lng
+++ b/interface/web/admin/lib/lang/cz_server_php.lng
@@ -13,5 +13,5 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Cesta k php.ini adresáři';
 $wb['php_fpm_init_script_txt'] = 'Cesta k PHP-FPM init script';
 $wb['php_fpm_ini_dir_txt'] = 'Cesta k php.ini adresáři';
 $wb['php_fpm_pool_dir_txt'] = 'Cesta k PHP-FPM pool adresáři';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Aktivní';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_php_list.lng b/interface/web/admin/lib/lang/cz_server_php_list.lng
index 655f9a92b27fabc2b9ce22fa5828767446b7c710..abe4f750ff53f710decd2bd98b0e67460a60f091 100644
--- a/interface/web/admin/lib/lang/cz_server_php_list.lng
+++ b/interface/web/admin/lib/lang/cz_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Přidat verzi PHP';
 $wb['client_id_txt'] = 'Klient';
 $wb['name_txt'] = 'Verze PHP';
+$wb['active_txt'] = 'Aktivní';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index 930e3ebbfb6b4f56ee6f7d2a5eb8b7a8d82da21a..3660e1b689ff41613eb360826e4776321ab69700 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -77,8 +77,17 @@ $wb['default_dnsserver_txt'] = 'Výchozí DNS server';
 $wb['default_slave_dnsserver_txt'] = 'Výchozí sekundární DNS server';
 $wb['default_dbserver_txt'] = 'Výchozí databázový server';
 $wb['company_name_txt'] = 'Název společnosti v panelu (listu) webového prohlížeče';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
+$wb['reseller_can_use_options_txt'] = 'Distributor (prodejce) může použít kartu možností pro weby.';
 $wb['custom_login_text_txt'] = 'Vlastní text na přihlašovací stránce';
 $wb['custom_login_link_txt'] = 'Vlastní odkaz (URL) na přihlašovací stránce (vlastní text)';
 $wb['login_link_error_regex'] = 'Neplatný formát URL pro vlastní odkaz na přihlašovací stránce';
+$wb['ca_name_txt'] = 'Název vydavatele';
+$wb['ca_issue_txt'] = 'Doména vydavatele';
+$wb['ca_wildcard_txt'] = 'Použít Wildcard (*)';
+$wb['ca_critical_txt'] = 'Přísná kontrola';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktivní';
+$wb['btn_save_txt'] = 'Uložit';
+$wb['btn_cancel_txt'] = 'Zrušit';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 1d8109e8e17c46842994c94e5f27a9289c0c7342..960381e7c12f9b94347f66d665170145b69eab17 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -267,6 +267,7 @@ $wb['php_ini_check_minutes_txt'] = 'Prüfe php.ini alle X Minuten auf Änderunge
 $wb['php_ini_check_minutes_error_empty'] = 'Bitte geben Sie einen Wert an, wie oft die php.ini auf Änderungen geprüft werden soll.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = keine Prüfung';
 $wb['php_handler_txt'] = 'Standard-PHP-Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['enable_spdy_txt'] = 'Stellt SPDY/HTTP2 zur Verfügung';
 $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
 $wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
 $wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload Modus';
+$wb['content_filter_txt'] = 'Content-Filter';
+$wb['rspamd_url_txt'] = 'Rspamd-URL';
+$wb['rspamd_user_txt'] = 'Rspamd-Benutzer';
+$wb['rspamd_password_txt'] = 'Rspamd-Passwort';
 ?>
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 8620491ad4734f4a98ebb9271583ce5904301e97..76910e1db38f08283a060c67429355118ad643f6 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Wildcard verwenden';
+$wb['ca_critical_txt'] = 'Strikte Überprüfung';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktiv';
+$wb['btn_save_txt'] = 'Speichern';
+$wb['btn_cancel_txt'] = 'Abbrechen';
+$wb['web_php_options_txt'] = 'PHP Handler (Nur Apache)';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 26f953d5b44a654558fbf565394d1ef919c3dc5c..73e7ef1bfda82d68b86d5f03fd5f364535a9f681 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -260,6 +260,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_php_list.lng b/interface/web/admin/lib/lang/dk_server_php_list.lng
index 8dbcdd211f22835327bee276da60d7cbfeb55a0c..43fb5fe2110addd46f8c25ae2a53b5b8dca3c80e 100644
--- a/interface/web/admin/lib/lang/dk_server_php_list.lng
+++ b/interface/web/admin/lib/lang/dk_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Tilføj ny PHP version';
 $wb['client_id_txt'] = 'Kunde';
 $wb['name_txt'] = 'PHP Navn';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index 2834cacad6e2acc15a3647a0e5b44f1408e386a0..26b0fe7e78d1ba19b2799749ec357bdd17f2c71c 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -81,4 +81,13 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi
 $wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
 $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
 $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 1298ea71aed74b3eccc906d8d01e058c511a18e6..84992261bb47fbbed509e6741f9190365aa751cc 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_php_list.lng b/interface/web/admin/lib/lang/el_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/el_server_php_list.lng
+++ b/interface/web/admin/lib/lang/el_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 4dadc1290bfc36a9f31fa2a9f91bc3092e1c145d..640d6f00a9e13e73a37b2e3797b48f1300d66cda 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index fe35d1c5edd47505d124f10ecfa4904739db1ba3..0ba3638a0a06de1f9cd3e914f8a1c44ec569a2ae 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -212,6 +212,7 @@ $wb["overquota_db_notify_admin_txt"] = 'Send DB quota warnings to admin';
 $wb["overquota_db_notify_client_txt"] = 'Send DB quota warnings to client';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
 $wb['php_handler_txt'] = "Default PHP Handler";
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
@@ -295,4 +296,8 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
-?>
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 1a7d18b9e78fc58b2da382f33d34e7d534488b41..6f1acb2ae87b7b554396e2f794963cee24787d91 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -86,4 +86,13 @@ $wb["custom_login_link_txt"] = "Custom Link on Login-Page";
 $wb["login_link_error_regex"] = "Invalid Link for Custom Login";
 $wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
 $wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check'; //For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Active';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/en_users.lng b/interface/web/admin/lib/lang/en_users.lng
index 81f3742a35d3774757a17ebf57390fe4509ce9dd..931c73e8ebf6354e0196b70af94af3ed81d7708e 100644
--- a/interface/web/admin/lib/lang/en_users.lng
+++ b/interface/web/admin/lib/lang/en_users.lng
@@ -33,4 +33,8 @@ $wb['username_error_collision'] = 'The username may not be web or web plus a num
 $wb['client_not_admin_err'] = 'A user that belongs to a client can not be set to type: admin';
 $wb['lost_password_function_txt'] = 'Forgot password function is available';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
+$wb['startmodule_empty'] = 'Startmodule empty.';
+$wb['startmodule_regex'] = 'Invalid chars in Startmodule.';
+$wb['app_theme_empty'] = 'App theme empty.';
+$wb['app_theme_regex'] = 'Invalid chars in App theme.';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 5ce3381d9818e2e48843e4d720ae3e9cc80ce59a..01350367ae29fb45e74cd7702447a6d0d5e41952 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -206,6 +206,7 @@ $wb['php_fpm_socket_dir_txt'] = 'Directorio para el socket de PHP-FPM';
 $wb['php_fpm_start_port_error_empty'] = 'El puerto de inicio de PHP-FPM está vacío.';
 $wb['php_fpm_start_port_txt'] = 'Puerto de inicio de PHP-FPM';
 $wb['php_handler_txt'] = 'Controlador PHP por defecto';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['php_ini_check_minutes_error_empty'] = 'Por favor especifique un valor para definir con qué frecuencia se deberían buscar cambios en el archivo php.ini.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no comprobar';
 $wb['php_ini_check_minutes_txt'] = 'Comprobar cambios en php.ini cada X minutos';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_php_list.lng b/interface/web/admin/lib/lang/es_server_php_list.lng
index 2e6257cfac99ff0853b7d43e57d56220cafbe022..111628b7200f80898ac231b030e0ef6d353e8cd3 100755
--- a/interface/web/admin/lib/lang/es_server_php_list.lng
+++ b/interface/web/admin/lib/lang/es_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['client_id_txt'] = 'Cliente';
 $wb['list_head_txt'] = 'Versiones adicionales de PHP';
 $wb['name_txt'] = 'Versión de PHP';
 $wb['server_id_txt'] = 'Servidor';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index cc81939cb389078cf90fa8c14caea505c378829e..043c52cfddc3b983f8d53b8f0bdeae6b5fa24b8f 100755
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -81,4 +81,13 @@ $wb['webftp_url_txt'] = 'Enlace al cliente FTP por web';
 $wb['webmail_url_error_regex'] = 'Dirección del correo web inválida';
 $wb['webmail_url_note_txt'] = 'Marcador de posición:';
 $wb['webmail_url_txt'] = 'URL de correo web';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 4609ce5b13971ab55622547d74b63f16d79195cc..6caf643abe3a6a4f6df4f379a1eafae81607bdcb 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_php_list.lng b/interface/web/admin/lib/lang/fi_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/fi_server_php_list.lng
+++ b/interface/web/admin/lib/lang/fi_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index c4987d01a3addf5ca64cea624c56e8eaa7c37cfd..c0972c49d87434a1ee1425df1258c4d9d759c612 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index e31d68383ef021f763e4a927d9391dd699a1108c..25f737568867a8d8f1ddbd68c550af1c613dc673 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -259,6 +259,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_php_list.lng b/interface/web/admin/lib/lang/fr_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/fr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/fr_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 5892e3a269c698417280ce398730926011cfcda4..18f0dbbed4e3dad9d5afc722473f3158f8525633 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -81,4 +81,13 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi
 $wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
 $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
 $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index c54a67659d17845ca25ee9d8096f6daeffe965e0..faf08f4201b64d73d4f1ce505f33eca865664dcf 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -261,6 +261,7 @@ $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_php_list.lng b/interface/web/admin/lib/lang/hr_server_php_list.lng
index 8fd3db7a05dff9ccf466c4237c782b3c4eef2406..9e9c0de986aed34eae1572404516a65fd4d6b5a6 100644
--- a/interface/web/admin/lib/lang/hr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/hr_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Klijent';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index e02ae57a20a6cc5baa655e7c45cc7c38459ab1b9..a7735647b17077ee3c84639d791fb1057959f3bc 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 1ac1cd268530c5fa158474ae0782b1cd417cb19f..6347afb7da1107e5f21ebd3144be196d7b5b43f3 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_php_list.lng b/interface/web/admin/lib/lang/hu_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/hu_server_php_list.lng
+++ b/interface/web/admin/lib/lang/hu_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index d26fc5be2dc52df07d71ff65dba9b981c8d8d1ef..cee497fe19daec3e77a93771dcddd9bca237eb63 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index a4738919645c1e2f09caa36a214ff823670ecd6e..9a28dff300ade469f23a57d44590428ba6fc8ef2 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_php_list.lng b/interface/web/admin/lib/lang/id_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/id_server_php_list.lng
+++ b/interface/web/admin/lib/lang/id_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index c865dff3d81619315d566ef3ee58501485606412..344185b84db08846103736929e6a8e341aa60799 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 8c563853c7fae709166b922dfa8ee50566211523..3dc37a3c1d4664076f251417a922c7b0e2879df0 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -259,6 +259,7 @@ $wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_php_list.lng b/interface/web/admin/lib/lang/it_server_php_list.lng
index 36bfcbc40eb08347320c54322fc52dc91af0add0..296de9d0a55df5e48d11f09a5082d497ca5f7d41 100644
--- a/interface/web/admin/lib/lang/it_server_php_list.lng
+++ b/interface/web/admin/lib/lang/it_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Aggiungi una nuova versione PHP';
 $wb['client_id_txt'] = 'Cliente';
 $wb['name_txt'] = 'Nome PHP';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index bc72844ed8f48feb85b7e37ea8afdf60d2484e6b..90c971d30037df264f2e7ddd832014fee661f14c 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -83,4 +83,13 @@ $wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
 $wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
 $wb["default_remote_dbserver_txt"] = "DB remoti predefiniti";
 $wb["disable_client_remote_dbserver_txt"] = "Disabilita la configurazione dei DB Remoti per i clienti";
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 76c400728b695f4918fd9b3109b5c9672a585d37..72bef72c4b5feb545cad3dcabd18701eaa1290a3 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_php_list.lng b/interface/web/admin/lib/lang/ja_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/ja_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ja_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index fc32081d962b0c6be9e19465b4514a67d1354c9b..aa5cc6a7a3e69963e8204e22aff4ff6f2fc756e9 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 350a06ba366bf0490f350de6ac819121cd22d377..2884f304ec448dc52523bf935c1cce3c08f84e43 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_php_list.lng b/interface/web/admin/lib/lang/nl_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/nl_server_php_list.lng
+++ b/interface/web/admin/lib/lang/nl_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_software_package_list.lng b/interface/web/admin/lib/lang/nl_software_package_list.lng
index 33e66022bc33e6348d962c81aa34f4e3d4c1eb29..44aaa563ad06f472796aa96a31d9a241c9cee4fc 100644
--- a/interface/web/admin/lib/lang/nl_software_package_list.lng
+++ b/interface/web/admin/lib/lang/nl_software_package_list.lng
@@ -6,7 +6,7 @@ $wb['package_description_txt'] = 'Omschrijving';
 $wb['action_txt'] = 'Actie';
 $wb['toolsarea_head_txt'] = 'Pakketten';
 $wb['repoupdate_txt'] = 'Update pakketlijst';
-$wb['package_id_txt'] = 'locaal App-ID';
+$wb['package_id_txt'] = 'lokaal App-ID';
 $wb['no_packages_txt'] = 'No packages available';
 $wb['edit_txt'] = 'Edit';
 $wb['delete_txt'] = 'Delete';
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index 5177888bb06b645358090a945a5d1835804ec48f..44a58b7646e09c8fc06c112f3c1aa19dbeb9a7b4 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index c052b7f3731688da34e1de81818a256dcfe3ef65..29cb94e96c2ca30e8464c0edd4e9efaa4cf4336b 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_php_list.lng b/interface/web/admin/lib/lang/pl_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/pl_server_php_list.lng
+++ b/interface/web/admin/lib/lang/pl_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index cea6345e63746e2eef461e50a332438bec11df64..a809251ec1bb6d301742d7f0f2c216db7a8f2f00 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 4767022e4902fa8ea08dfcfc23ef6ed5d23c7e8c..3703c759ed1c28348fed478677debf813ae82800 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_php_list.lng b/interface/web/admin/lib/lang/pt_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/pt_server_php_list.lng
+++ b/interface/web/admin/lib/lang/pt_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index 24ff94fca278da5e3366db422e69bc1a701e7950..6fc26344c002abc772de985e3a2b835fad1d5b94 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 41b967b7355f2623481d89943b7293bc2b3785e9..32514761262ca0566d695b17ce12c943a5ef99d6 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_php_list.lng b/interface/web/admin/lib/lang/ro_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/ro_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ro_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index b258ee18707b95d94d77a287fdc7e59effd758c5..2a39a454e8cde25155f4e6cbf2c0abfd9212a692 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_firewall.lng b/interface/web/admin/lib/lang/ru_firewall.lng
index c30f26f2e89618ae52bafc636006a36d59624264..70beb30437001e94beb6109e8c518019a5d6059f 100644
--- a/interface/web/admin/lib/lang/ru_firewall.lng
+++ b/interface/web/admin/lib/lang/ru_firewall.lng
@@ -6,6 +6,6 @@ $wb['tcp_port_help_txt'] = 'Перечислить порты TCP через з
 $wb['udp_port_help_txt'] = 'Перечислить порты UDP через запятую';
 $wb['active_txt'] = 'Активно';
 $wb['firewall_error_unique'] = 'Уже есть такая запись брандмауэра для этого сервера.';
-$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \":\" и \",\"';
-$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \":\" и \",\"';
+$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
+$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 0775ab7f88f5763c17a91dc53cc012fc7475ede1..b2f0b407d67f0e5837f10401abd793c6418242b9 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -152,7 +152,7 @@ $wb['php_fpm_socket_dir_error_empty'] = 'Каталог PHP-FPM сокета п
 $wb['try_rescue_txt'] = 'Включить мониторинг службы и перезапуск при сбое';
 $wb['do_not_try_rescue_mysql_txt'] = 'Отключить мониторинг MySQL';
 $wb['do_not_try_rescue_mail_txt'] = 'Отключить мониторинг Email';
-$wb['rescue_description_txt'] = '<b>Информация:</b> Если вы хотите выключить MySQL, вы должны установить флажок \"Отключить мониторинг MySQL\" и подождать 2-3 минуты.<br>Если вы не подождёте 2-3 минуты, мониторинг будет пытаться перезапустить MySQL!';
+$wb['rescue_description_txt'] = '<b>Информация:</b> Если вы хотите выключить MySQL, вы должны установить флажок \\"Отключить мониторинг MySQL\\" и подождать 2-3 минуты.<br>Если вы не подождёте 2-3 минуты, мониторинг будет пытаться перезапустить MySQL!';
 $wb['enable_sni_txt'] = 'Включить SNI';
 $wb['do_not_try_rescue_httpd_txt'] = 'Отключить мониторинг HTTPD';
 $wb['set_folder_permissions_on_update_txt'] = 'Установить разрешения для папки на обновления';
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Выполните команду монти
 $wb['overquota_db_notify_admin_txt'] = 'Присылать предупреждения квоты DB администратору';
 $wb['overquota_db_notify_client_txt'] = 'Присылать предупреждения квоты DB клиенту';
 $wb['php_handler_txt'] = 'Обработчик PHP по умолчанию';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Отключено';
 $wb['dkim_strength_txt'] = 'Стойкость DKIM';
 $wb['php_ini_check_minutes_txt'] = 'Проверять изменения в PHP.ini файле каждые Х минут';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_php_list.lng b/interface/web/admin/lib/lang/ru_server_php_list.lng
index bb4cc308e49121f4417f9fa37f8bf525396c7473..5c84917f1595a92c227b67e6a66749da72e1e835 100644
--- a/interface/web/admin/lib/lang/ru_server_php_list.lng
+++ b/interface/web/admin/lib/lang/ru_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Сервер';
 $wb['add_new_record_txt'] = 'Добавить новую версию PHP';
 $wb['client_id_txt'] = 'ID Клиента';
 $wb['name_txt'] = 'Имя PHP';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index c1909f3ba66f2cf9fac5187d67f25722f1907807..baed497b0eb238c8e3709656bbabc5a0842711c7 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -14,7 +14,7 @@ $wb['mailboxlist_webmail_link_txt'] = 'Ссылка на веб-почту в с
 $wb['webmail_url_txt'] = 'URL веб-почты';
 $wb['phpmyadmin_url_txt'] = 'URL PHPMyAdmin';
 $wb['use_domain_module_txt'] = 'Использовать модуль домена, чтобы добавить новые домены';
-$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \"домен\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
+$wb['use_domain_module_hint'] = 'При использовании этого модуля, Ваши клиенты смогут выбрать только один из доменов, созданных для них администратором. Они не могут свободно редактировать поле \\"домен\\". Чтобы сделать эти изменения видимыми, Вы должны выйти и повторно войти в панель после изменения этого значения.';
 $wb['new_domain_txt'] = 'HTML текст, чтобы создать новый домен';
 $wb['webdavuser_prefix_txt'] = 'Префикс пользователя WebDAV';
 $wb['webdavuser_prefix_error_regex'] = 'Некорректный символ в префиксе пользователя WebDAV.';
@@ -67,7 +67,7 @@ $wb['customer_no_template_error_regex_txt'] = 'Шаблон номера Кли
 $wb['customer_no_start_txt'] = 'Начальное значение номера Клиента';
 $wb['customer_no_counter_txt'] = 'Счётчик номера Клиента';
 $wb['session_timeout_txt'] = 'Тайм-аут сессии (в минутах)';
-$wb['session_allow_endless_txt'] = 'Включить \"оставаться в системе\"';
+$wb['session_allow_endless_txt'] = 'Включить \\"оставаться в системе\\"';
 $wb['No'] = 'Нет';
 $wb['min_password_length_txt'] = 'Минимальная длина пароля';
 $wb['min_password_strength_txt'] = 'Минимальная стойкость пароля';
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Web-сервер по умолчанию';
 $wb['default_dnsserver_txt'] = 'DNS-сервер по умолчанию';
 $wb['default_slave_dnsserver_txt'] = 'Вторичный DNS-сервер по умолчанию';
 $wb['default_dbserver_txt'] = 'Сервер базы данных по умолчанию';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_users.lng b/interface/web/admin/lib/lang/ru_users.lng
index bd1b8034ff441abf1db0a52185c3e4672823b89a..63f081f91707cd8faab397f0c0679fdbe73de4ed 100644
--- a/interface/web/admin/lib/lang/ru_users.lng
+++ b/interface/web/admin/lib/lang/ru_users.lng
@@ -29,7 +29,7 @@ $wb['generate_password_txt'] = 'Создать пароль';
 $wb['repeat_password_txt'] = 'Повторить пароль';
 $wb['password_mismatch_txt'] = 'Пароли не совпадают.';
 $wb['password_match_txt'] = 'Эти пароли совпадают.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['client_not_admin_err'] = 'Пользователь, который принадлежит к клиенту не может быть установлен тип: admin';
 $wb['lost_password_function_txt'] = 'Функция восстановления пароля доступна';
 $wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 5808fb2f5e83a831b7f5970c10dce36a0211b543..1103baa4d2081d2d1b47a64f492d4c4e91418535 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/se_server_php_list.lng b/interface/web/admin/lib/lang/se_server_php_list.lng
index f5762ad3a6573b8465e7cef786a8e283d8283294..451236d1ca04167a47fa44e8ff1e0ac74cf8e9e1 100644
--- a/interface/web/admin/lib/lang/se_server_php_list.lng
+++ b/interface/web/admin/lib/lang/se_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Lägg till ny PHP-version';
 $wb['client_id_txt'] = 'Kund';
 $wb['name_txt'] = 'PHP-namn';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 285f7807e8c3f16867a4d3b2f0bfc15af7f29906..74ae16734fcf6936765dc7b6f59eab95a86a8f23 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index d5b1f92bf0e37887ba80140a57fff6d651553832..125e0b1ea22c12167a3fa6c2b3c4a297b1c65648 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -261,6 +261,7 @@ $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounte
 $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
 $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
 $wb['php_handler_txt'] = 'Default PHP Handler';
+$wb['php_fpm_incron_reload_txt'] = 'Install incron trigger file to reload PHP-FPM';
 $wb['disabled_txt'] = 'Disabled';
 $wb['dkim_strength_txt'] = 'DKIM strength';
 $wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
@@ -294,4 +295,9 @@ $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM reload mode';
+$wb['content_filter_txt'] = 'Content Filter';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd User';
+$wb['rspamd_password_txt'] = 'Rspamd Password';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_php_list.lng b/interface/web/admin/lib/lang/sk_server_php_list.lng
index b402fd1ed19978b32027a9ed16e7b44f241db93e..62cbe6168714b18ba4fca490280c30c945e09e7c 100644
--- a/interface/web/admin/lib/lang/sk_server_php_list.lng
+++ b/interface/web/admin/lib/lang/sk_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['add_new_record_txt'] = 'Add new PHP version';
 $wb['client_id_txt'] = 'Client';
 $wb['name_txt'] = 'PHP Name';
+$wb['active_txt'] = 'Active';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index be8789a80347ff34217022e783823f8f36a89719..90418e87d5562c20909e541fa9bcfcdf0fc1f0db 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -81,4 +81,13 @@ $wb['default_webserver_txt'] = 'Default Webserver';
 $wb['default_dnsserver_txt'] = 'Default DNS Server';
 $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
 $wb['default_dbserver_txt'] = 'Default Database Server';
+$wb['ca_name_txt'] = 'Name';
+$wb['ca_issue_txt'] = 'Issue';
+$wb['ca_wildcard_txt'] = 'Use Wildcard';
+$wb['ca_critical_txt'] = 'Strict Check';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = 'Aktive';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
 ?>
diff --git a/interface/web/admin/lib/lang/tr.lng b/interface/web/admin/lib/lang/tr.lng
index 23dbc45a49cbd41519ab98f4183c5bcda1136148..9b0dfc59ece09eea1096381ee14b430696594f40 100644
--- a/interface/web/admin/lib/lang/tr.lng
+++ b/interface/web/admin/lib/lang/tr.lng
@@ -1,20 +1,26 @@
 <?php
 $wb['1001'] = 'Kullanıcı adı ya da parola boş.';
 $wb['1002'] = 'Kullanıcı adı ya da parola hatalı.';
+
 $wb['Groups'] = 'Gruplar';
 $wb['groups_description'] = 'Sistem kullanıcısı gruplarını düzenleme formu.';
+
 $wb['Servers'] = 'Sunucular';
 $wb['Config'] = 'Ayarlar';
-$wb['Add user'] = 'Kullanıcı ekle';
-$wb['Edit user'] = 'Kullanıcıyı düzenle';
-$wb['Add group'] = 'Grup ekle';
-$wb['Edit group'] = 'Grubu düzenle';
-$wb['Edit server'] = 'Sunucuyu düzenle';
-$wb['Sync. Now'] = 'Åžimdi EÅŸleÅŸtir';
-$wb['DB Sync.'] = 'Veritabanı Eşleştirme';
+
+$wb['Add user'] = 'Kullanıcı Ekle';
+$wb['Edit user'] = 'Kullanıcıyı Düzenle';
+$wb['Add group'] = 'Grup Ekle';
+$wb['Edit group'] = 'Grubu Düzenle';
+$wb['Edit server'] = 'Sunucuyu Düzenle';
+
+$wb['Sync. Now'] = 'Åžimdi EÅŸitle';
+$wb['DB Sync.'] = 'Veritabanı Eşitleme';
+
 $wb['User Management'] = 'Kullanıcı Yönetimi';
 $wb['CP Users'] = 'Panel Kullanıcıları';
 $wb['Remote Users'] = 'Uzak Kullanıcılar';
+
 $wb['System'] = 'Sistem';
 $wb['Server Services'] = 'Sunucu Hizmetleri';
 $wb['Services'] = 'Hizmetler';
@@ -28,25 +34,29 @@ $wb['Jailkit'] = 'Jailkit';
 $wb['Rescue'] = 'Kurtarma';
 $wb['Server IP addresses'] = 'Sunucu IP Adresleri';
 $wb['Additional PHP Versions'] = 'Diğer PHP Sürümleri';
-$wb['Directive Snippets'] = 'Yönerge Parçacıkları';
+$wb['Directive Snippets'] = 'Yönerge Kod Parçaları';
 $wb['Firewall'] = 'Güvenlik Duvarı';
+
 $wb['Interface'] = 'Arayüz';
 $wb['Interface Config'] = 'Temel Ayarlar';
+$wb['Sites'] = 'Siteler';
+$wb['DNS'] = 'DNS';
 $wb['Domains'] = 'Alan Adları';
 $wb['Misc'] = 'Çeşitli';
+
 $wb['Software'] = 'Uygulama ve Eklentiler';
 $wb['Repositories'] = 'Depolar';
 $wb['Packages'] = 'Paketler';
 $wb['Updates'] = 'Güncellemeler';
+
 $wb['Language Editor'] = 'Dil Ä°ÅŸlemleri';
 $wb['Languages'] = 'Dil Dosyaları';
 $wb['New Language'] = 'Dil Ekleme';
 $wb['Merge'] = 'Dil BirleÅŸtirme';
 $wb['Export'] = 'Dil Ä°ndirme';
 $wb['Import'] = 'Dil Yükleme';
+
 $wb['Remote Actions'] = 'Uzak Ä°ÅŸlemler';
 $wb['Do OS-Update'] = 'İşletim Sistemi Güncelleme';
 $wb['Do ISPConfig-Update'] = 'ISPConfig Güncelleme';
-$wb['Sites'] = 'Sites';
-$wb['DNS'] = 'DNS';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_directive_snippets.lng b/interface/web/admin/lib/lang/tr_directive_snippets.lng
index f5034865282259e495dba557390156b9eaa27eb0..448d4536723307c96f69f5a704e7b9a889072536 100644
--- a/interface/web/admin/lib/lang/tr_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/tr_directive_snippets.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['Directive Snippets'] = 'Yönerge Parçacıkları';
-$wb['name_txt'] = 'Parçacık Adı';
-$wb['type_txt'] = 'Tip';
-$wb['snippet_txt'] = 'Parçacık';
+$wb['Directive Snippets'] = 'Yönerge Kod Parçaları';
+$wb['name_txt'] = 'Kod Parçası Adı';
+$wb['type_txt'] = 'Tür';
+$wb['snippet_txt'] = 'Kod Parçası';
 $wb['active_txt'] = 'Etkin';
-$wb['directive_snippets_name_empty'] = 'Parçacık adı boş olamaz.';
-$wb['directive_snippets_name_error_unique'] = 'Aynı adlı bir yönerge parçacığı zaten var.';
+$wb['directive_snippets_name_empty'] = 'Kod Parçası adı boş olamaz.';
+$wb['directive_snippets_name_error_unique'] = 'Aynı adlı bir yönerge kod parçası zaten var.';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
-$wb['customer_viewable_txt'] = 'Customer viewable';
-$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['customer_viewable_txt'] = 'Müşteri görebilir';
+$wb['required_php_snippets_txt'] = 'Gerekli PHP Parçası';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_directive_snippets_list.lng b/interface/web/admin/lib/lang/tr_directive_snippets_list.lng
index 766a194dc1556cc77e5c92c7ce162b5e2f029e65..4a1fb954a526b0100e9ba1076c9672eb92ad04e6 100644
--- a/interface/web/admin/lib/lang/tr_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/tr_directive_snippets_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Yönerge Parçacıkları';
+$wb['list_head_txt'] = 'Yönerge Kod Parçaları';
 $wb['active_txt'] = 'Etkin';
-$wb['name_txt'] = 'Parçacık Adı';
-$wb['type_txt'] = 'Tip';
-$wb['add_new_record_txt'] = 'Yönerge Parçacığı Ekle';
-$wb['customer_viewable_txt'] = 'Customer viewable';
+$wb['name_txt'] = 'Kod Parçası Adı';
+$wb['type_txt'] = 'Tür';
+$wb['add_new_record_txt'] = 'Yönerge Kod Parçası Ekle';
+$wb['customer_viewable_txt'] = 'Müşteri Görebilsin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_firewall.lng b/interface/web/admin/lib/lang/tr_firewall.lng
index a45998d4e1dc8c73104456e044b03a2eb9c21b71..9e853c7bde18718ec3a520fc070ea7604f5aa466 100644
--- a/interface/web/admin/lib/lang/tr_firewall.lng
+++ b/interface/web/admin/lib/lang/tr_firewall.lng
@@ -6,6 +6,7 @@ $wb['tcp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['active_txt'] = 'Etkin';
 $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
-$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
-$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
+$wb['active_txt'] = 'Etkin';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_groups.lng b/interface/web/admin/lib/lang/tr_groups.lng
index d41fcace9d742d6dfe6f25c578a3a85741cca543..4bf60a284bb3c5502afecb545612bc3a97c36ba8 100644
--- a/interface/web/admin/lib/lang/tr_groups.lng
+++ b/interface/web/admin/lib/lang/tr_groups.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['description_txt'] = 'Açıklama';
 $wb['name_txt'] = 'Grup';
-$wb['name_err'] = 'Grup 1-30 karakter arasında olmalı.';
+$wb['name_err'] = 'Grup 1 ile 30 karakter arasında olmalı.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_iptables.lng b/interface/web/admin/lib/lang/tr_iptables.lng
index dcec556485f843e6da8d7cc49bcce43d0304eba2..970bc23931fe71d106a754b0297b25107aad8d38 100644
--- a/interface/web/admin/lib/lang/tr_iptables.lng
+++ b/interface/web/admin/lib/lang/tr_iptables.lng
@@ -1,4 +1,5 @@
 <?php
+
 $wb['server_id_txt'] = 'Sunucu';
 $wb['multiport_txt'] = 'Çok Kapı';
 $wb['singleport_txt'] = 'Tek Kapı';
@@ -10,4 +11,5 @@ $wb['destination_ip_txt'] = 'Hedef Adresi';
 $wb['source_ip_txt'] = 'Kaynak Adresi';
 $wb['active_txt'] = 'Etkin';
 $wb['iptables_error_unique'] = 'Bu sunucu için zaten bir güvenlik duvarı kaydı var.';
+
 ?>
diff --git a/interface/web/admin/lib/lang/tr_iptables_list.lng b/interface/web/admin/lib/lang/tr_iptables_list.lng
index a884ef7f7868bfcf148e208434d975f06276eb84..ba8a1345fef4e1d4444ebdc15f29f595da6a278f 100644
--- a/interface/web/admin/lib/lang/tr_iptables_list.lng
+++ b/interface/web/admin/lib/lang/tr_iptables_list.lng
@@ -1,4 +1,5 @@
 <?php
+
 $wb['list_head_txt'] = 'IPTables';
 $wb['add_new_rule_txt'] = 'IPTables Kuralı Ekle';
 $wb['server_id_txt'] = 'Sunucu';
@@ -12,4 +13,5 @@ $wb['destination_ip_txt'] = 'Hedef Adresi';
 $wb['source_ip_txt'] = 'Kaynak Adresi';
 $wb['active_txt'] = 'Etkin';
 $wb['iptables_error_unique'] = 'Bu sunucu için zaten bir güvenlik duvarı kaydı var.';
+
 ?>
diff --git a/interface/web/admin/lib/lang/tr_language_import.lng b/interface/web/admin/lib/lang/tr_language_import.lng
index 581fcb597406e5e5971ab4d8e7356d805a946e9f..be319837ddc222fcc3e4f5054fb45ddbf23476a6 100644
--- a/interface/web/admin/lib/lang/tr_language_import.lng
+++ b/interface/web/admin/lib/lang/tr_language_import.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'Dil Paketi Yükleme';
 $wb['list_desc_txt'] = 'UYARI: Güvenilmeyen kaynaklardan aldığınız dil paketlerini yüklemeyin.';
 $wb['language_import_txt'] = 'Yüklenecek Dil Dosyası';
 $wb['btn_save_txt'] = 'Dil Paketini Yükle';
-$wb['language_overwrite_txt'] = 'Var olan dosyaları değiştir';
+$wb['language_overwrite_txt'] = 'Var Olan Dosyalar DeÄŸiÅŸtirilsin';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['ignore_version_txt'] = 'ISPConfig sürümüne bakma';
+$wb['ignore_version_txt'] = 'ISPConfig Sürümü Denetlenmesin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_login_as.lng b/interface/web/admin/lib/lang/tr_login_as.lng
new file mode 100644
index 0000000000000000000000000000000000000000..b7fc8ff987bebc4ac16d4dd8bcc614cdefbdc13c
--- /dev/null
+++ b/interface/web/admin/lib/lang/tr_login_as.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['login_1_txt'] = 'Bu kullanıcı olarak oturum açmak ister misiniz';
+$wb['login_2_txt'] = '"Geri dönmek" için oturumu kapat üzerine tıklayın.';
+$wb['btn_yes_txt'] = 'Evet, Müşteri olarak oturum aç';
+$wb['btn_back_txt'] = 'Hayır, listeye geri dön';
+$wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
+$wb['active_txt'] = 'Etkin';
+$wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
+$wb['active_txt'] = 'Etkin';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+?>
diff --git a/interface/web/admin/lib/lang/tr_remote_action.lng b/interface/web/admin/lib/lang/tr_remote_action.lng
index c067f67e88758a46f93cca37080a42849731e871..b2ed0a6da747e7f9970348375bce467099ca4165 100644
--- a/interface/web/admin/lib/lang/tr_remote_action.lng
+++ b/interface/web/admin/lib/lang/tr_remote_action.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['select_server_txt'] = 'Sunucu Seçin';
-$wb['btn_do_txt'] = 'İşlemi Başlatın';
-$wb['do_osupdate_caption'] = 'Uzak sunucudaki işletim sistemini güncelleyin';
-$wb['do_osupdate_desc'] = 'Bu işlem seçilmiş sunucuda \\"aptitude -y upgrade\\" komutunu yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SİZE AİTTİR!</strong>';
-$wb['do_ispcupdate_caption'] = 'Uzak sunucudaki ISPConfig 3 - sürümünü güncelleyin';
+$wb['btn_do_txt'] = 'Ä°ÅŸlemi BaÅŸlat';
+$wb['do_osupdate_caption'] = 'Uzak sunucudaki işletim sistemini güncelle';
+$wb['do_osupdate_desc'] = 'Bu işlem seçilmiş sunucuda  komutunu yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SİZE AİTTİR!</strong>';
+$wb['do_ispcupdate_caption'] = 'Uzak sunucudaki ISPConfig 3 - sürümünü güncelle';
 $wb['do_ispcupdate_desc'] = 'Bu işlem seçilmiş sunucuda ISPConfig3 güncellemesini yürütür.<br><br><strong>OLUŞABİLECEK RİSKLER SÜZE AİTTİR!</strong>';
 $wb['action_scheduled'] = 'İşlem yürütülmek üzere zamanlandı';
 $wb['select_all_server'] = 'Tüm Sunucularda';
 $wb['ispconfig_update_title'] = 'ISPConfig güncelleme yönergeleri';
-$wb['ispconfig_update_text'] = 'Sunucunuzda root kullanıcısı ile bir kabuk oturumu açın ve ISPConfig güncellemesini başlatmak için<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />komutunu yürütün.<br /><br /><a href=\\"http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/\\" target=\\"_blank\\">Ayrıntılı güncelleme bilgilerine bakmak için buraya tıklayın</a>';
+$wb['ispconfig_update_text'] = 'Sunucunuzda root kullanıcısı ile bir kabuk oturumu açın ve ISPConfig güncellemesini başlatmak için<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />komutunu yürütün.<br /><br /><a href= target=>Ayrıntılı güncelleme bilgilerine bakmak için buraya tıklayın</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_remote_user.lng b/interface/web/admin/lib/lang/tr_remote_user.lng
index d9e11f8308aee177653e7c8580690d98d7f29762..a713cad0d44a15f1741480fbdd6aad2062d23632 100644
--- a/interface/web/admin/lib/lang/tr_remote_user.lng
+++ b/interface/web/admin/lib/lang/tr_remote_user.lng
@@ -1,37 +1,37 @@
 <?php
-$wb['username_txt'] = 'Kullanıcı adı:';
+$wb['username_txt'] = 'Kullanıcı Adı:';
 $wb['password_txt'] = 'Parola:';
 $wb['function_txt'] = 'Ä°ÅŸlevler:';
 $wb['username_error_unique'] = 'Bu kullanıcı adı zaten var';
 $wb['username_error_empty'] = 'Kullanıcı adı boş olamaz';
 $wb['password_error_empty'] = 'Parola boÅŸ olamaz';
-$wb['password_strength_txt'] = 'Parola Güçlüğü:';
-$wb['Mail domain functions'] = 'Posta alan adı işlevleri';
-$wb['Mail mailing list functions'] = 'Posta posta listesi iÅŸlevleri';
-$wb['Mail user functions'] = 'Posta kullanıcı işlevleri';
-$wb['Mail alias functions'] = 'Posta takma ad iÅŸlevleri';
-$wb['Mail forward functions'] = 'Posta yönlendirme işlevleri';
-$wb['Mail catchall functions'] = 'Posta tümünü al işlevleri';
-$wb['Mail transport functions'] = 'Posta aktarım işlevleri';
-$wb['Mail whitelist functions'] = 'Posta beyaz liste iÅŸlevleri';
-$wb['Mail blacklist functions'] = 'Posta kara liste iÅŸlevleri';
-$wb['Mail spamfilter user functions'] = 'Posta önemsiz posta süzgeci kullanıcı işlevleri';
-$wb['Mail spamfilter policy functions'] = 'Posta önemsiz posta süzgeci kuralları işlevleri';
-$wb['Mail fetchmail functions'] = 'Posta posta alma iÅŸlevleri';
-$wb['Mail user filter functions'] = 'Posta kullanıcı ve süzgeç işlevleri';
-$wb['Mail filter functions'] = 'Posta süzgeç işlevleri';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu:';
+$wb['Mail domain functions'] = 'E-posta etki alanı işlevleri';
+$wb['Mail mailing list functions'] = 'E-posta e-posta listesi iÅŸlevleri';
+$wb['Mail user functions'] = 'E-posta kullanıcı işlevleri';
+$wb['Mail alias functions'] = 'E-posta takma ad iÅŸlevleri';
+$wb['Mail forward functions'] = 'E-posta yönlendirme işlevleri';
+$wb['Mail catchall functions'] = 'E-posta tümünü al işlevleri';
+$wb['Mail transport functions'] = 'E-posta aktarım işlevleri';
+$wb['Mail whitelist functions'] = 'E-posta beyaz liste iÅŸlevleri';
+$wb['Mail blacklist functions'] = 'E-posta kara liste iÅŸlevleri';
+$wb['Mail spamfilter user functions'] = 'E-posta önemsiz ileti süzgeci kullanıcı işlevleri';
+$wb['Mail spamfilter policy functions'] = 'E-posta önemsiz ileti süzgeci kuralları işlevleri';
+$wb['Mail fetchmail functions'] = 'E-posta e-posta alma iÅŸlevleri';
+$wb['Mail user filter functions'] = 'E-posta kullanıcı ve süzgeç işlevleri';
+$wb['Mail filter functions'] = 'E-posta süzgeç işlevleri';
 $wb['Client functions'] = 'Müşteri işlevleri';
 $wb['Sites cron functions'] = 'Sitelerin zamanlanmış görev işlevleri';
 $wb['Sites database functions'] = 'Sitelerin veritabanı işlevleri';
 $wb['Sites FTP-User functions'] = 'Sitelerin FTP kullanıcısı işlevleri';
 $wb['Sites Shell-User functions'] = 'Sitelerin kabuk kullanıcısı işlevleri';
-$wb['Sites Domain functions'] = 'Sitelerin alan adı işlevleri';
-$wb['Sites Aliasdomain functions'] = 'Sitelerin takma alan adı işlevleri';
-$wb['Sites Subdomain functions'] = 'Sitelerin alt alan adı işlevleri';
+$wb['Sites Domain functions'] = 'Sitelerin etki alanı işlevleri';
+$wb['Sites Aliasdomain functions'] = 'Sitelerin takma etki alanı işlevleri';
+$wb['Sites Subdomain functions'] = 'Sitelerin alt etki alanı işlevleri';
 $wb['DNS zone functions'] = 'DNS bölgesi işlevleri';
 $wb['DNS a functions'] = 'DNS a iÅŸlevleri';
 $wb['DNS aaaa functions'] = 'DNS aaaa iÅŸlevleri';
-$wb['DNS alias functions'] = 'DNS takma ad iÅŸlevleri';
+$wb['DNS alias functions'] = 'DNS alias iÅŸlevleri';
 $wb['DNS cname functions'] = 'DNS cname iÅŸlevleri';
 $wb['DNS hinfo functions'] = 'DNS hinfo iÅŸlevleri';
 $wb['DNS mx functions'] = 'DNS mx iÅŸlevleri';
@@ -40,11 +40,11 @@ $wb['DNS ptr functions'] = 'DNS ptr iÅŸlevleri';
 $wb['DNS rp functions'] = 'DNS rp iÅŸlevleri';
 $wb['DNS srv functions'] = 'DNS srv iÅŸlevleri';
 $wb['DNS txt functions'] = 'DNS txt iÅŸlevleri';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['remote_access_txt'] = 'Remote Access';
-$wb['remote_ips_txt'] = 'Remote Access IPs / Hostnames (separate by , and leave blank for <i>any</i>)';
-$wb['remote_user_error_ips'] = 'At least one of the entered ip addresses or hostnames is invalid.';
+$wb['remote_access_txt'] = 'Uzaktan EriÅŸim';
+$wb['remote_ips_txt'] = 'Uzaktan Erişim IP Adresleri / Sunucu Adları (, ile ayırarak yazın ve <i>tümü</i> için boş bırakın)';
+$wb['remote_user_error_ips'] = 'Yazılmış IP adresi ya da sunucu adlarından en az biri geçersiz.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server.lng b/interface/web/admin/lib/lang/tr_server.lng
index 61e0b7dd6b5791ab3cffafb1a4ecefe32b4fc646..bdc70761e1661e020a215f6c8dcfe925a2b4eaa0 100644
--- a/interface/web/admin/lib/lang/tr_server.lng
+++ b/interface/web/admin/lib/lang/tr_server.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['config_txt'] = 'Ayarlar';
 $wb['server_name_txt'] = 'Sunucu Adı';
-$wb['mail_server_txt'] = 'Posta Sunucusu';
+$wb['mail_server_txt'] = 'E-posta Sunucusu';
 $wb['web_server_txt'] = 'Web Sunucusu';
 $wb['dns_server_txt'] = 'DNS Sunucusu';
 $wb['file_server_txt'] = 'Dosya Sunucusu';
 $wb['db_server_txt'] = 'Veritabanı Sunucusu';
-$wb['vserver_server_txt'] = 'SSunucu Sunucusu';
+$wb['vserver_server_txt'] = 'sSunucu Sunucusu';
 $wb['proxy_server_txt'] = 'Vekil Sunucu';
 $wb['firewall_server_txt'] = 'Güvenlik Duvarı Sunucusu';
 $wb['active_txt'] = 'Etkin';
 $wb['mirror_server_id_txt'] = 'Sunucunun Yansısı';
 $wb['- None -'] = '- Hiçbiri -';
-$wb['xmpp_server_txt'] = 'XMPP Server';
+$wb['xmpp_server_txt'] = 'XMPP Sunucusu';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index c7be379260f85b9261dea8d2565fc138773aeaa3..3b63e881f906e277ed46c8ec13b368c4fdb98976 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -13,13 +13,13 @@ $wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chroot Uygulamaları';
 $wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit Zamanlanmış Görev chroot Uygulamaları';
 $wb['website_path_txt'] = 'Web Sitesi Yolu';
 $wb['website_symlinks_txt'] = 'Web Sitesi Sembolik Bağlantıları';
-$wb['website_symlinks_rel_txt'] = 'Sembolik Bağlantılar Bağıl Olsun';
+$wb['website_symlinks_rel_txt'] = 'Sembolik Bağlantılar Göreli Olsun';
 $wb['website_basedir_txt'] = 'Web Sitesi Klasörü';
 $wb['website_autoalias_txt'] = 'Otomatik Web Sitesi Takma Adı';
 $wb['website_autoalias_note_txt'] = 'Kodlar:';
-$wb['vhost_conf_dir_txt'] = 'SSunucu Ayar Klasörü';
-$wb['vhost_conf_enabled_dir_txt'] = 'Etkin SSunucu Ayar Klasörü';
-$wb['getmail_config_dir_txt'] = 'Getmail Ayar Klasörü';
+$wb['vhost_conf_dir_txt'] = 'Sanal Sunucu Ayarları Klasörü';
+$wb['vhost_conf_enabled_dir_txt'] = 'Etkin Sanal Sunucu Ayarları Klasörü';
+$wb['getmail_config_dir_txt'] = 'Getmail Ayarları Klasörü';
 $wb['fastcgi_starter_path_txt'] = 'FastCGI Başlatıcı Yolu';
 $wb['fastcgi_starter_script_txt'] = 'FastCGI Başlatıcı Betiği';
 $wb['fastcgi_alias_txt'] = 'FastCGI Takma Adı';
@@ -28,16 +28,24 @@ $wb['fastcgi_children_txt'] = 'FastCGI Çocuğu';
 $wb['fastcgi_max_requests_txt'] = 'FastCGI En Fazla Ä°stek';
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
 $wb['module_txt'] = 'Modül';
-$wb['maildir_path_txt'] = 'Posta Klasörü Yolu';
+$wb['maildir_path_txt'] = 'E-posta Klasörü Yolu';
+$wb['maildir_format_txt'] = 'E-posta Klasörü Biçimi';
 $wb['homedir_path_txt'] = 'Kullanıcı Klasörü Yolu';
-$wb['mailuser_uid_txt'] = 'Posta Kullanıcısı UID';
-$wb['mailuser_gid_txt'] = 'Posta Kullanıcısı GID';
-$wb['mailuser_name_txt'] = 'Posta Kullanıcısı Adı';
-$wb['mailuser_group_txt'] = 'Posta Kullanıcısı Grubu';
+$wb['dkim_path_txt'] = 'DKIM Yolu';
+$wb['mailuser_uid_txt'] = 'E-posta Kullanıcısı UID';
+$wb['mailuser_gid_txt'] = 'E-posta Kullanıcısı GID';
+$wb['mailuser_name_txt'] = 'E-posta Kullanıcısı Adı';
+$wb['mailuser_group_txt'] = 'E-posta Kullanıcısı Grubu';
+$wb['mailbox_virtual_uidgid_maps_txt'] = 'E-posta Kutusunda Web Sitesinin Linux Kullanıcı Kodu Kullanılsın';
+$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'Yalnız tek bir web ve e-posta sunucusu kurulumunda';
+$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Çoklu sunucu kurulumunda UID eşleştirilemez.';
+$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'UID eşleştirmesi yalnız dovecot ile kullanılabilir.';
+$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Daha önce oluşturulmuş e-posta kullanıcıları varsa UID eşleştirme değiştirilemez.';
 $wb['relayhost_txt'] = 'Aktarım Sunucusu';
 $wb['relayhost_user_txt'] = 'Aktarım Sunucu Kullanıcı Adı';
 $wb['relayhost_password_txt'] = 'Aktarım Sunucu Parolası';
-$wb['mailbox_size_limit_txt'] = 'Posta Kutusu Boyutu Sınırı';
+$wb['reject_sender_login_mismatch_txt'] = 'Gönderen ile Oturum Açmış Kullanıcı Eşleşmiyorsa Reddedilsin';
+$wb['mailbox_size_limit_txt'] = 'E-posta Kutusu Boyutu Sınırı';
 $wb['message_size_limit_txt'] = 'İleti Boyutu Sınırı';
 $wb['ip_address_txt'] = 'IP Adresi';
 $wb['netmask_txt'] = 'AÄŸ Maskesi';
@@ -51,69 +59,73 @@ $wb['gateway_error_wrong'] = 'Ağ geçidi biçimi geçersiz.';
 $wb['hostname_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['hostname_error_regex'] = 'Sunucu adı geçersiz.';
 $wb['nameservers_error_empty'] = 'Ad sunucusu boÅŸ olamaz.';
-$wb['config_dir_txt'] = 'Ayar Klasörü';
+$wb['config_dir_txt'] = 'Ayarlar Klasörü';
 $wb['init_script_txt'] = 'Zamanlanmış Görev Başlatma Betiğinin Adı';
 $wb['crontab_dir_txt'] = 'Bireysel Zamanlanmış Görevler Yolu';
-$wb['wget_txt'] = 'wget Yazılımının Yolu';
+$wb['wget_txt'] = 'wget Uygulamasının Yolu';
 $wb['web_user_txt'] = 'Apache Kullanıcı Adı';
 $wb['web_group_txt'] = 'Apache Grubu';
 $wb['security_level_txt'] = 'Güvenlik Düzeyi';
 $wb['loglevel_txt'] = 'Günlükleme Düzeyi';
-$wb['apps_vhost_port_txt'] = 'Apps-vhost Kapısı';
-$wb['apps_vhost_ip_txt'] = 'Apps-vhost IP Adresi';
-$wb['apps_vhost_servername_txt'] = 'Apps-vhost Alan Adı';
+$wb['apps_vhost_port_txt'] = 'Uygulama Sanal Sunucusu Kapısı';
+$wb['apps_vhost_ip_txt'] = 'Uygulama Sanal Sunucusu IP Adresi';
+$wb['apps_vhost_servername_txt'] = 'Uygulama Sanal Sunucusu Etki Alanı';
 $wb['bind_user_txt'] = 'BIND Kullanıcı Adı';
 $wb['bind_group_txt'] = 'BIND Grubu';
-$wb['bind_zonefiles_dir_txt'] = 'BIND zonefiles Klasörü';
+$wb['bind_zonefiles_dir_txt'] = 'BIND Bölge Dosyaları Klasörü';
 $wb['named_conf_path_txt'] = 'BIND named.conf Dosyası Yolu';
 $wb['bind_user_error_empty'] = 'BIND kullanıcı adı boş olamaz.';
 $wb['bind_group_error_empty'] = 'BIND grubu boÅŸ olamaz.';
-$wb['bind_zonefiles_dir_error_empty'] = 'BIND zonefiles klasörü boş olamaz.';
+$wb['bind_zonefiles_dir_error_empty'] = 'BIND bölge dosyaları klasörü boş olamaz.';
 $wb['named_conf_path_error_empty'] = 'BIND named.conf dosyası yolu boş olamaz.';
 $wb['named_conf_local_path_error_empty'] = 'BIND named.conf.local dosyasının yolu boş olamaz.';
-$wb['mail_filter_syntax_txt'] = 'Posta Süzgeci Yazımı';
+$wb['mail_filter_syntax_txt'] = 'E-posta Süzgeci Yazımı';
 $wb['pop3_imap_daemon_txt'] = 'POP3/IMAP Sunucusu';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['php_open_basedir_error_empty'] = 'PHP open_basedir boÅŸ olamaz.';
 $wb['htaccess_allow_override_txt'] = '.htaccess AllowOverride';
 $wb['htaccess_allow_override_error_empty'] = '.htaccess AllowOverride boÅŸ olamaz.';
-$wb['awstats_conf_dir_txt'] = 'Awstats Ayar Klasörü';
+$wb['awstats_conf_dir_txt'] = 'Awstats Ayarları Klasörü';
 $wb['awstats_data_dir_txt'] = 'Awstats Veri Klasörü';
 $wb['awstats_pl_txt'] = 'awstats.pl BetiÄŸi';
 $wb['awstats_buildstaticpages_pl_txt'] = 'awstats_buildstaticpages.pl BetiÄŸi';
 $wb['backup_dir_txt'] = 'Yedek Klasörü';
+$wb['backup_tmp_txt'] = 'Geçici Zip Yedek Klasörü';
 $wb['named_conf_local_path_txt'] = 'BIND named.conf.local Yolu';
 $wb['php_ini_path_cgi_txt'] = 'CGI php.ini Yolu';
 $wb['php_ini_path_apache_txt'] = 'Apache php.ini Yolu';
-$wb['check_apache_config_txt'] = 'Yeniden başlatıldığında apache ayarları denetlensin';
-$wb['network_config_warning_txt'] = 'Ağ ayarlama seçeneği yalnız Debian ve Ubuntu sunucularda kullanılabilir. Ağ arayüzünüz eth0 değil ise bu seçeneği etkinleştirmeyin.';
+$wb['check_apache_config_txt'] = 'Apache Ayarları Yeniden Başlatmalarda Denetlensin';
+$wb['network_config_warning_txt'] = 'Ağ ayarlama seçeneği yalnız Debian ve Ubuntu sunucularda kullanılabilir. Ağ arayüzü eth0 değil ise bu seçeneği etkinleştirmeyin.';
 $wb['CA_path_txt'] = 'CA Yolu';
-$wb['CA_pass_txt'] = 'CA parolası';
+$wb['CA_pass_txt'] = 'CA Parolası';
 $wb['fastcgi_config_syntax_txt'] = 'FastCGI Ayar Yazımı';
 $wb['backup_mode_txt'] = 'Yedekleme Kipi';
 $wb['backup_mode_userzip'] = 'Web kullanıcısına ait web dosyaları ZIP biçiminde yedeklensin';
 $wb['backup_mode_rootgz'] = 'Web klasöründeki tüm dosyalar root kullanıcısı olarak yedeklensin';
-$wb['server_type_txt'] = 'Sunucu Tipi';
-$wb['nginx_vhost_conf_dir_txt'] = 'Nginx Vhost ayar klasörü';
-$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Nginx Vhost etkin ayar klasörü';
+$wb['tmpdir_path_error_empty'] = 'tmp klasörü yolu boş olamaz.';
+$wb['tmpdir_path_error_regex'] = 'tmp klasörü yolu geçersiz.';
+$wb['backup_time_txt'] = 'Yedekleme Zamanı';
+$wb['server_type_txt'] = 'Sunucu Türü';
+$wb['nginx_vhost_conf_dir_txt'] = 'Nginx Sanal Sunucu Ayarları Klasörü';
+$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Etkin Nginx sanal sunucu ayarları klasörü';
 $wb['nginx_user_txt'] = 'Nginx kullanıcı adı';
 $wb['nginx_group_txt'] = 'Nginx grubu';
 $wb['nginx_cgi_socket_txt'] = 'Nginx CGI Soketi';
 $wb['backup_dir_error_empty'] = 'Yedekleme klasörü boş olamaz.';
-$wb['maildir_path_error_empty'] = 'Posta klasörü yolu boş olamaz.';
+$wb['maildir_path_error_empty'] = 'E-posta klasörü yolu boş olamaz.';
 $wb['homedir_path_error_empty'] = 'Kullanıcı klasörü yolu boş olamaz.';
-$wb['mailuser_uid_error_empty'] = 'Posta kullanıcısı UID boş olamaz.';
-$wb['mailuser_gid_error_empty'] = 'Posta kullanıcısı GID boş olamaz.';
-$wb['mailuser_name_error_empty'] = 'Posta kullanıcısı adı boş olamaz.';
-$wb['mailuser_group_error_empty'] = 'Posta kullanıcısı grubu boş olamaz.';
-$wb['getmail_config_dir_error_empty'] = 'Getmail ayar klasörü boş olamaz.';
+$wb['mailuser_uid_error_empty'] = 'E-posta kullanıcısı UID boş olamaz.';
+$wb['mailuser_gid_error_empty'] = 'E-posta kullanıcısı GID boş olamaz.';
+$wb['mailuser_name_error_empty'] = 'E-posta kullanıcısı adı boş olamaz.';
+$wb['mailuser_group_error_empty'] = 'E-posta kullanıcısı grubu boş olamaz.';
+$wb['getmail_config_dir_error_empty'] = 'Getmail ayarları klasörü boş olamaz.';
 $wb['website_basedir_error_empty'] = 'Web sitesi kök klasörü boş olamaz.';
 $wb['website_path_error_empty'] = 'Web sitesi yolu boÅŸ olamaz.';
 $wb['website_symlinks_error_empty'] = 'Web sitesi sembolik bağlantısı boş olamaz.';
-$wb['vhost_conf_dir_error_empty'] = 'Vhost ayar klasörü boş olamaz.';
-$wb['vhost_conf_enabled_dir_error_empty'] = 'Vhost etkin ayar klasörü boş olamaz.';
-$wb['nginx_vhost_conf_dir_error_empty'] = 'Nginx Vhost ayar klasörü boş olamaz.';
-$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Nginx Vhost etkin ayar klasörü boş olamaz.';
+$wb['vhost_conf_dir_error_empty'] = 'Sanal sunucu ayarları klasörü boş olamaz.';
+$wb['vhost_conf_enabled_dir_error_empty'] = 'Etkin sanal sunucu ayarları klasörü boş olamaz.';
+$wb['nginx_vhost_conf_dir_error_empty'] = 'Nginx sanal sunucu ayarları klasörü boş olamaz.';
+$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Etkin nginx sanal sunucu ayarları klasörü boş olamaz.';
 $wb['apache_user_error_empty'] = 'Apache kullanıcısı boş olamaz.';
 $wb['apache_group_error_empty'] = 'Apache grubu boÅŸ olamaz.';
 $wb['nginx_user_error_empty'] = 'Nginx kullanıcısı boş olamaz.';
@@ -121,8 +133,8 @@ $wb['nginx_group_error_empty'] = 'Nginx grubu boÅŸ olamaz.';
 $wb['php_ini_path_apache_error_empty'] = 'Apache php.ini yolu boÅŸ olamaz.';
 $wb['php_ini_path_cgi_error_empty'] = 'CGI php.ini yolu boÅŸ olamaz.';
 $wb['nginx_cgi_socket_empty'] = 'Nginx CGI soketi boÅŸ olamaz.';
-$wb['apps_vhost_port_error_empty'] = 'Apps-vhost kapısı boş olamaz.';
-$wb['apps_vhost_ip_error_empty'] = 'Apps-vhost IP adresi boÅŸ olamaz.';
+$wb['apps_vhost_port_error_empty'] = 'Uygulama sanal sunucusu kapısı boş olamaz.';
+$wb['apps_vhost_ip_error_empty'] = 'Uygulama sanal sunucusu IP adresi boÅŸ olamaz.';
 $wb['fastcgi_starter_path_error_empty'] = 'FastCGI başlatıcı yolu boş olamaz.';
 $wb['fastcgi_starter_script_error_empty'] = 'FastCGI başlatıcı betiği boş olamaz.';
 $wb['fastcgi_alias_error_empty'] = 'FastCGI takma adı boş olamaz.';
@@ -137,7 +149,7 @@ $wb['jailkit_chroot_cron_programs_error_empty'] = 'Jailkit zamanlanmış görev
 $wb['vlogger_config_dir_error_empty'] = 'Ayarlar klasörü boş olamaz.';
 $wb['cron_init_script_error_empty'] = 'Zamanlanmış görevler başlatma betiği adı boş olamaz.';
 $wb['crontab_dir_error_empty'] = 'Bireysel zamanlanmış görev yolu boş olamaz.';
-$wb['cron_wget_error_empty'] = 'wget yazılımı yolu boş olamaz.';
+$wb['cron_wget_error_empty'] = 'wget uygulaması yolu boş olamaz.';
 $wb['php_fpm_init_script_txt'] = 'PHP-FPM BaÅŸlatma BetiÄŸi';
 $wb['php_fpm_init_script_error_empty'] = 'PHP-FPM baÅŸlatma betiÄŸi boÅŸ olamaz.';
 $wb['php_fpm_ini_path_txt'] = 'PHP-FPM php.ini Yolu';
@@ -148,11 +160,12 @@ $wb['php_fpm_start_port_txt'] = 'PHP-FPM Başlangıç Kapısı';
 $wb['php_fpm_start_port_error_empty'] = 'PHP-FPM başlangıç kapısı boş olamaz.';
 $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM Soket Klasörü';
 $wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM soket klasörü boş olamaz.';
-$wb['try_rescue_txt'] = 'Hizmetler izlensin ve sorun çıktığında yeniden başlatılsın';
-$wb['do_not_try_rescue_httpd_txt'] = 'HTTPD izlenmesin';
-$wb['do_not_try_rescue_mysql_txt'] = 'MySQL izlenmesin';
-$wb['do_not_try_rescue_mail_txt'] = 'E-posta izlenmesin';
-$wb['rescue_description_txt'] = '<b>Uyarı:</b> mysql sunucusunu kapatmak istiyorsanız \\"MySQL izlenmesin\\" seçeneğini işaretleyip 2-3 dakika bekleyin.<br>2-3 dakika beklemezseniz, kurtarma işlemi mysql sunucusunu yeniden başlatmaya çalışır!';
+$wb['try_rescue_txt'] = 'Hizmetler İzlensin ve Sorun Çıktığında Yeniden Başlatılsın';
+$wb['do_not_try_rescue_httpd_txt'] = 'HTTPD Ä°zlenmesin';
+$wb['do_not_try_rescue_mongodb_txt'] = 'MongoDB Ä°zlenmesin';
+$wb['do_not_try_rescue_mysql_txt'] = 'MySQL Ä°zlenmesin';
+$wb['do_not_try_rescue_mail_txt'] = 'E-posta Ä°zlenmesin';
+$wb['rescue_description_txt'] = '<b>Uyarı:</b> mysql sunucusunu kapatmak istiyorsanız "MySQL İzlenmesin" seçeneğini etkinleştirip 2-3 dakika bekleyin.<br>2-3 dakika beklemezseniz, kurtarma işlemi mysql sunucusunu yeniden başlatmaya çalışır!';
 $wb['enable_sni_txt'] = 'SNI Kullanılsın';
 $wb['set_folder_permissions_on_update_txt'] = 'Güncellenirken klasör izinleri ayarlansın';
 $wb['add_web_users_to_sshusers_group_txt'] = 'Web kullanıcıları -sshusers- grubuna eklensin';
@@ -163,20 +176,20 @@ $wb['realtime_blackhole_list_note_txt'] = '(RBL adlarını virgül ile ayırarak
 $wb['ssl_settings_txt'] = 'SSL Ayarları';
 $wb['permissions_txt'] = 'Ä°zinler';
 $wb['php_settings_txt'] = 'PHP Ayarları';
-$wb['apps_vhost_settings_txt'] = 'Uygulama SSunucu Ayarları';
+$wb['apps_vhost_settings_txt'] = 'Uygulama Sanal Sunucu Ayarları';
 $wb['awstats_settings_txt'] = 'AWStats Ayarları';
 $wb['firewall_txt'] = 'Güvenlik Duvarı';
-$wb['mailbox_quota_stats_txt'] = 'Posta Kutusu Kota Ä°statistikleri';
-$wb['enable_ip_wildcard_txt'] = 'IP genel karakteri (*) kullanılsın';
+$wb['mailbox_quota_stats_txt'] = 'E-posta Kutusu Kota Ä°statistikleri';
+$wb['enable_ip_wildcard_txt'] = 'IP Genel Karakteri (*) Kullanılsın';
 $wb['web_folder_protection_txt'] = 'Web klasörleri ayarlanamasın (genişletilmiş öznitelikler)';
-$wb['overtraffic_notify_admin_txt'] = 'Yöneticiye aşırı trafik bildirimi gönderilsin';
-$wb['overtraffic_notify_client_txt'] = 'Müşteriye aşırı trafik bildirimi gönderilsin';
+$wb['overtraffic_notify_admin_txt'] = 'Trafik Aşımı Bildirimi Yöneticiye Gönderilsin';
+$wb['overtraffic_notify_client_txt'] = 'Trafik Aşımı Bildirimi Müşteriye Gönderilsin';
 $wb['rbl_error_regex'] = 'Lütfen geçerli RBL sunucu adları yazın.';
-$wb['overquota_notify_admin_txt'] = 'Yöneticiye kota uyarıları gönderilsin';
-$wb['overquota_notify_client_txt'] = 'Müşteriye kota uyarıları gönderilsin';
-$wb['overquota_notify_onok_txt'] = 'Müşteriye kota tamam iletisi gönderilsin';
-$wb['overquota_notify_freq_txt'] = 'Kota uyarılarının kaç günde bir gönderileceği';
-$wb['overquota_notify_freq_note_txt'] = '0 = ileti yalnız bir kez gönderilir, yinelenmez';
+$wb['overquota_notify_admin_txt'] = 'Kota Uyarıları Yöneticiye Gönderilsin';
+$wb['overquota_notify_client_txt'] = 'Kota Uyarıları Müşteriye Gönderilsin';
+$wb['overquota_notify_onok_txt'] = 'Kota Tamam İletisi Müşteriye Gönderilsin';
+$wb['overquota_notify_freq_txt'] = 'Kota Uyarısı Gönderim Sıklığı (Gün)';
+$wb['overquota_notify_freq_note_txt'] = '0 yazıldığında ileti yalnız bir kez gönderilir, yinelenmez';
 $wb['admin_notify_events_txt'] = 'Yönetici Bildirim Düzeyi';
 $wb['no_notifications_txt'] = 'Bildirim Gönderilmesin';
 $wb['monit_url_txt'] = 'Monit Adresi';
@@ -189,24 +202,35 @@ $wb['munin_user_txt'] = 'Munin Kullanıcı Adı';
 $wb['munin_password_txt'] = 'Munin Parolası';
 $wb['munin_url_error_regex'] = 'Munin adresi geçersiz';
 $wb['munin_url_note_txt'] = 'Kod:';
+$wb['v6_prefix_txt'] = 'IPv6 Ön Eki';
+$wb['vhost_rewrite_v6_txt'] = 'Yansı Üzerinde IPv6 Yeniden Yazılsın';
+$wb['v6_prefix_length'] = 'Ön ek tanımlanmış IPv6 adresine göre çok uzun ';
 $wb['backup_dir_is_mount_txt'] = 'Yedek Klasörü Takılı mı?';
+$wb['backup_dir_mount_cmd_txt'] = 'Mount komutu, yedek klasörü takılı değil ise';
+$wb['backup_delete_txt'] = 'Etki alanı ya da web sitesi silindiğinde yedekler de silinsin';
+$wb['overquota_db_notify_admin_txt'] = 'Veritabanı Kotası Bildirimleri Yöneticiye Gönderilsin';
+$wb['overquota_db_notify_client_txt'] = 'Veritabanı Kotası Bildirimleri Müşteriye Gönderilsin';
+$wb['monitor_system_updates_txt'] = 'Linux Güncellemeleri Denetlensin';
+$wb['php_handler_txt'] = 'Varsayılan PHP İşleyici';
+$wb['disabled_txt'] = 'Devre Dışı';
+$wb['dkim_strength_txt'] = 'DKIM zorluÄŸu';
 $wb['monitor_system_updates_txt'] = 'Linux Güncelleme Denetimi';
 $wb['invalid_apache_user_txt'] = 'Apache kullanıcısı geçersiz.';
 $wb['invalid_apache_group_txt'] = 'Apache grubu geçersiz.';
 $wb['backup_dir_error_regex'] = 'Yedek klasörü geçersiz.';
-$wb['maildir_path_error_regex'] = 'Posta klasörü yolu geçersiz.';
+$wb['maildir_path_error_regex'] = 'E-posta klasörü yolu geçersiz.';
 $wb['homedir_path_error_regex'] = 'Kullanıcı klasörü yolu geçersiz.';
-$wb['mailuser_name_error_regex'] = 'Posta kullanıcısı adı geçersiz.';
-$wb['mailuser_group_name_error_regex'] = 'Posta kullanıcısı grup adı geçersiz.';
-$wb['mailuser_uid_error_range'] = 'Posta kullanıcısı UID değeri >= 2000 olmalıdır';
-$wb['mailuser_gid_error_range'] = 'Posta kullanıcısı GID değeri >= 2000 olmalıdır';
-$wb['getmail_config_dir_error_regex'] = 'Getmail ayar klasörü geçersiz.';
+$wb['mailuser_name_error_regex'] = 'E-posta kullanıcısı adı geçersiz.';
+$wb['mailuser_group_name_error_regex'] = 'E-posta kullanıcısı grup adı geçersiz.';
+$wb['mailuser_uid_error_range'] = 'E-posta kullanıcısı UID değeri >= 2000 olmalıdır';
+$wb['mailuser_gid_error_range'] = 'E-posta kullanıcısı GID değeri >= 2000 olmalıdır';
+$wb['getmail_config_dir_error_regex'] = 'Getmail ayarları klasörü geçersiz.';
 $wb['website_basedir_error_regex'] = 'Web sitesi kök klasörü geçersiz.';
 $wb['website_symlinks_error_regex'] = 'Web sitesi sembolik bağlantıları geçersiz.';
-$wb['vhost_conf_dir_error_regex'] = 'Vhost ayar klasörü geçersiz.';
-$wb['vhost_conf_enabled_dir_error_regex'] = 'Etkin vhost ayar klasörü geçersiz.';
-$wb['nginx_vhost_conf_dir_error_regex'] = 'Nginx ayar klasörü geçersiz.';
-$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Etkin nginx ayar klasörü geçersiz.';
+$wb['vhost_conf_dir_error_regex'] = 'Sanal sunucu ayarları klasörü geçersiz.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Etkin sanal sunucu ayarları klasörü geçersiz.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Nginx ayarları klasörü geçersiz.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Etkin nginx ayarları klasörü geçersiz.';
 $wb['ca_path_error_regex'] = 'CA yolu geçersiz.';
 $wb['invalid_nginx_user_txt'] = 'nginx kullanıcısı geçersiz.';
 $wb['invalid_nginx_group_txt'] = 'nginx grubu geçersiz.';
@@ -225,7 +249,7 @@ $wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl boÅŸ ola
 $wb['awstats_buildstaticpages_pl_error_regex'] = 'awstats_buildstaticpages.pl yolu geçersiz.';
 $wb['invalid_bind_user_txt'] = 'BIND kullanıcısı geçersiz.';
 $wb['invalid_bind_group_txt'] = 'BIND grubu geçersiz.';
-$wb['bind_zonefiles_dir_error_regex'] = 'BIND zonefiles klasörü geçersiz.';
+$wb['bind_zonefiles_dir_error_regex'] = 'BIND bölge dosyaları klasörü geçersiz.';
 $wb['named_conf_path_error_regex'] = 'named.conf yolu geçersiz.';
 $wb['named_conf_local_path_error_regex'] = 'named.conf.local yolu geçersiz.';
 $wb['fastcgi_starter_path_error_regex'] = 'fastcgi başlatıcı yolu geçersiz.';
@@ -237,61 +261,37 @@ $wb['jailkit_chroot_home_error_regex'] = 'Jailkit chroot kök klasörü geçersi
 $wb['jailkit_chroot_app_sections_error_regex'] = 'Jailkit chroot bölümleri geçersiz.';
 $wb['jailkit_chroot_app_programs_error_regex'] = 'Jailkit chroot app uygulama yazılımları geçersiz.';
 $wb['jailkit_chroot_cron_programs_error_regex'] = 'Jailkit chroot zamanlanmış görev yazılımları geçersiz.';
-$wb['vlogger_config_dir_error_regex'] = 'Vlogger ayar klasörü geçersiz.';
+$wb['vlogger_config_dir_error_regex'] = 'Vlogger ayarları klasörü geçersiz.';
 $wb['cron_init_script_error_regex'] = 'Zamanlanmış görev başlatma betiği geçersiz.';
 $wb['crontab_dir_error_regex'] = 'Zamanlanmış görev klasörü geçersiz.';
 $wb['cron_wget_error_regex'] = 'Zamanlanmış görev wget yolu geçersiz.';
 $wb['network_filesystem_txt'] = 'AÄŸ Dosya Sistemi';
-$wb['maildir_format_txt'] = 'Maildir Format';
-$wb['dkim_path_txt'] = 'DKIM Path';
-$wb['mailbox_virtual_uidgid_maps_txt'] = 'Use Websites Linux uid for mailbox';
-$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'only in single web and mail-server-setup';
-$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid cannot be mapped in multi-server-setup.';
-$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Uid-mapping can only be used with dovecot.';
-$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Uid-mapping cannot be changed if there are already mail users.';
-$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch';
-$wb['backup_time_txt'] = 'Backup time';
-$wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
-$wb['v6_prefix_txt'] = 'IPv6 Prefix';
-$wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror';
-$wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 ';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
-$wb['backup_delete_txt'] = 'Delete backups on domain/website delete';
-$wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin';
-$wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client';
-$wb['php_handler_txt'] = 'Default PHP Handler';
-$wb['disabled_txt'] = 'Disabled';
-$wb['dkim_strength_txt'] = 'DKIM strength';
-$wb['php_ini_check_minutes_txt'] = 'Check php.ini every X minutes for changes';
-$wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
-$wb['php_ini_check_minutes_info_txt'] = '0 = no check';
-$wb['enable_spdy_txt'] = 'Makes SPDY/HTTP2 available';
-$wb['web_settings_txt'] = 'Web Server';
-$wb['xmpp_server_txt'] = 'XMPP Server';
-$wb['xmpp_use_ipv6_txt'] = 'Use IPv6';
-$wb['xmpp_bosh_max_inactivity_txt'] = 'Max. BOSH inactivity time';
-$wb['xmpp_bosh_timeout_range_wrong'] = 'Please enter a bosh timeout range between 15 - 360';
+$wb['php_ini_check_minutes_txt'] = 'Her X dakikada php.ini dosyasındaki değişiklikler denetlensin';
+$wb['php_ini_check_minutes_error_empty'] = 'php.ini dosyasındaki değişikliklerin kaç dakikada bir denetleneceğini yazın.';
+$wb['php_ini_check_minutes_info_txt'] = '0 = denetim yapılmaz';
+$wb['enable_spdy_txt'] = 'SPDY/HTTP2 Kullanılsın';
+$wb['web_settings_txt'] = 'Web Sunucu';
+$wb['xmpp_server_txt'] = 'XMPP Sunucu';
+$wb['xmpp_use_ipv6_txt'] = 'IPv6 Kullanılsın';
+$wb['xmpp_bosh_max_inactivity_txt'] = 'BOSH için en uzun işlem yapılmama süresi';
+$wb['xmpp_bosh_timeout_range_wrong'] = '15 ile 360 arasında bir bosh zaman aşımı süresi yazın';
 $wb['xmpp_module_saslauth'] = 'saslauth';
-$wb['xmpp_server_admins_txt'] = 'Server Admins (JIDs)';
-$wb['xmpp_modules_enabled_txt'] = 'Serverwide enabled plugins (one per line)';
-$wb['xmpp_ports_txt'] = 'Component ports';
+$wb['xmpp_server_admins_txt'] = 'Sunucu Yöneticileri (JID)';
+$wb['xmpp_modules_enabled_txt'] = 'Sunucu genelinde etkinleştirilecek uygulama ekleri (her satıra bir tane yazın)';
+$wb['xmpp_ports_txt'] = 'Bileşen Kapı Numaraları';
 $wb['xmpp_port_http_txt'] = 'HTTP';
 $wb['xmpp_port_https_txt'] = 'HTTPS';
 $wb['xmpp_port_pastebin_txt'] = 'Pastebin';
 $wb['xmpp_port_bosh_txt'] = 'BOSH';
-$wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
-$wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
-$wb['skip_le_check_txt'] = 'Skip Lets Encrypt Check';
-$wb['migration_mode_txt'] = 'Server Migration Mode';
-$wb['nginx_enable_pagespeed_txt'] = 'Makes Pagespeed available';
-$wb['backup_tmp_txt'] = 'Backup tmp directory for zip';
-$wb['tmpdir_path_error_empty'] = 'tmp-dir Path is empty.';
-$wb['tmpdir_path_error_regex'] = 'Invalid tmp-dir path.';
-$wb['logging_txt'] = 'Store website access and error logs';
-$wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
-$wb['log_retention_txt'] = 'Log retention (days)';
-$wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
-$wb['php_default_name_txt'] = 'Description Default PHP-Version';
-$wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
-$wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
+$wb['disable_bind_log_txt'] = 'UYARI günlük düzeyi iletileri için bind9 iletileri devre dışı bırakılsın';
+$wb['apps_vhost_enabled_txt'] = 'Uygulama Sanal Sunucusu Kullanılsın';
+$wb['skip_le_check_txt'] = 'Lets Encrypt Denetimi Atlansın';
+$wb['migration_mode_txt'] = 'Sunucu Aktarımı Kipi';
+$wb['nginx_enable_pagespeed_txt'] = 'Pagespeed uygulamasını etkinleştirir';
+$wb['logging_txt'] = 'Web Sitesi Erişim ve Hata Günlükleri Kaydedilsin';
+$wb['logging_desc_txt'] = 'Değişiklikleri var olan sitelere uygulamak için Araçlar > Yeniden Eşitle komutunu kullanın. Apache için, erişim ve hata günlükleri anonimleştirilebilir. nginx için, only erişim günlüğü anonimleştirilebilir, hata günlüğüne IP adresleri kaydedilir.';
+$wb['log_retention_txt'] = 'Günlük Tutma Süresi (Gün)';
+$wb['log_retention_error_ispositive'] = 'Günlük tutma süresi 0 değerinden büyük bir sayı olmalıdır';
+$wb['php_default_name_txt'] = 'Varsayılan PHP Sürümü Açıklaması';
+$wb['php_default_name_error_empty'] = 'Varsayılan PHP sürümü açıklaması boş olamaz';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_ip.lng b/interface/web/admin/lib/lang/tr_server_ip.lng
index 3ebdbd08300b73d8204d6d3dba757e40a97fec8d..4b2cb1187d410b70e40e8d71611bb16b82557865 100644
--- a/interface/web/admin/lib/lang/tr_server_ip.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip.lng
@@ -1,10 +1,10 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
 $wb['client_id_txt'] = 'Müşteri';
-$wb['ip_type_txt'] = 'Tip';
+$wb['ip_type_txt'] = 'Tür';
 $wb['ip_address_txt'] = 'IP Adresi';
-$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
-$wb['virtualhost_port_txt'] = 'HTTP Kapıları';
+$wb['virtualhost_txt'] = 'HTTP sSunucu Adı';
+$wb['virtualhost_port_txt'] = 'HTTP Kapı Numaraları';
 $wb['ip_error_wrong'] = 'IP adresi geçersiz';
 $wb['ip_error_unique'] = 'Aynı IP adresi zaten var';
 $wb['error_port_syntax'] = 'Kapı alanında geçersiz karakterler var. Lütfen yalnız virgül ile ayrılmış sayılar yazın. Örnek: 80,443';
diff --git a/interface/web/admin/lib/lang/tr_server_ip_list.lng b/interface/web/admin/lib/lang/tr_server_ip_list.lng
index 9b25c605e7b4acf128f51d5598e25ab97f1c4c77..d252da3df4d6a6034d7f6189819fd34e3135906c 100644
--- a/interface/web/admin/lib/lang/tr_server_ip_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip_list.lng
@@ -4,7 +4,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['client_id_txt'] = 'Müşteri';
 $wb['ip_address_txt'] = 'IP Adresi';
 $wb['add_new_record_txt'] = 'IP Adresi Ekle';
-$wb['virtualhost_txt'] = 'HTTP SSunucu';
+$wb['virtualhost_txt'] = 'HTTP sSunucu';
 $wb['virtualhost_port_txt'] = 'HTTP Kapıları';
-$wb['ip_type_txt'] = 'Tip';
+$wb['ip_type_txt'] = 'Tür';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_ip_map.lng b/interface/web/admin/lib/lang/tr_server_ip_map.lng
index 68b196fb23a8a805455d768e32ed419d405f9ecb..c05e19c4b1f808b77b2864c3afdd0d4eec22dd20 100644
--- a/interface/web/admin/lib/lang/tr_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip_map.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['server_id_txt'] = 'Rewrite on Server';
-$wb['source_txt'] = 'Source IP';
-$wb['destination_txt'] = 'Destination IP';
-$wb['active_txt'] = 'Active';
-$wb['ip_error_wrong'] = 'The Destination IP address is invalid';
-$wb['destination_ip_empty'] = 'The Destination IP is empty.';
-$wb['source_ip_empty'] = 'The Source IP is empty.';
-$wb['server_empty_error'] = 'The Server is empty.';
-$wb['duplicate_mapping_error'] = 'Mapping already exists.';
-$wb['ip_mapping_error'] = 'Source IP can not be an IP of the Rewrite-Server';
+$wb['server_id_txt'] = 'Sunucuda Yeniden Yazma';
+$wb['source_txt'] = 'Kaynak IP';
+$wb['destination_txt'] = 'Hedef IP';
+$wb['active_txt'] = 'Etkin';
+$wb['ip_error_wrong'] = 'Hedef IP adresi geçersiz';
+$wb['destination_ip_empty'] = 'Hedef IP adresi boÅŸ olamaz.';
+$wb['source_ip_empty'] = 'Kaynak IP adresi boÅŸ olamaz.';
+$wb['server_empty_error'] = 'Sunucu boÅŸ olamaz.';
+$wb['duplicate_mapping_error'] = 'EÅŸleÅŸme zaten var.';
+$wb['ip_mapping_error'] = 'Kaynak IP adresi Yeniden yazma sunucusunun IP adreslerinden biri olamaz';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_ip_map_list.lng b/interface/web/admin/lib/lang/tr_server_ip_map_list.lng
index 1fedc10b2e2590cb4c252d9c0ff90eeaf565d68b..e0ee9a97291383cdeb70995255faf9550891b2fd 100644
--- a/interface/web/admin/lib/lang/tr_server_ip_map_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_ip_map_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'IP Mappings';
-$wb['server_id_txt'] = 'Server';
-$wb['source_ip_txt'] = 'Source IP';
-$wb['destination_ip_txt'] = 'Destination IP';
-$wb['active_txt'] = 'Active';
+$wb['list_head_txt'] = 'IP EÅŸleÅŸtirmeleri';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['source_ip_txt'] = 'Kaynak IP';
+$wb['destination_ip_txt'] = 'Hedef IP';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_list.lng b/interface/web/admin/lib/lang/tr_server_list.lng
index 9f791f78a16bb0958dbfdadbc34614ddb5c0f5e8..8e22a526c8e74e79b65f1762455d16abaddfd5a4 100644
--- a/interface/web/admin/lib/lang/tr_server_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_list.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['list_head_txt'] = 'Sunucu';
 $wb['server_name_txt'] = 'Ad';
-$wb['mail_server_txt'] = 'Posta';
+$wb['mail_server_txt'] = 'E-posta';
 $wb['web_server_txt'] = 'Web';
 $wb['dns_server_txt'] = 'DNS';
 $wb['file_server_txt'] = 'Dosya';
 $wb['db_server_txt'] = 'Veritabanı';
-$wb['vserver_server_txt'] = 'SSunucu';
+$wb['vserver_server_txt'] = 'sSunucu';
 $wb['proxy_server_txt'] = 'Vekil Sunucu';
 $wb['firewall_server_txt'] = 'Güvenlik Duvarı';
 $wb['add_new_record_txt'] = 'Sunucu Ekle';
diff --git a/interface/web/admin/lib/lang/tr_server_php.lng b/interface/web/admin/lib/lang/tr_server_php.lng
index 8728444f130d19f507e5d0fec809a6be93117d30..e0437e94b323a1aa5d463d2b7652db266e167669 100644
--- a/interface/web/admin/lib/lang/tr_server_php.lng
+++ b/interface/web/admin/lib/lang/tr_server_php.lng
@@ -13,5 +13,5 @@ $wb['php_fastcgi_ini_dir_txt'] = 'php.ini Klasörünün Yolu';
 $wb['php_fpm_init_script_txt'] = 'PHP-FPM BaÅŸlatma BetiÄŸinin Yolu';
 $wb['php_fpm_ini_dir_txt'] = 'php.ini Klasörünün Yolu';
 $wb['php_fpm_pool_dir_txt'] = 'PHP-FPM Havuz Klasörünün Yolu';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_php_list.lng b/interface/web/admin/lib/lang/tr_server_php_list.lng
index 3b1d39bdd207365341b506f80de8d892191909f9..06319e9855ce0a8f4971c5b9c858c191daaca84c 100644
--- a/interface/web/admin/lib/lang/tr_server_php_list.lng
+++ b/interface/web/admin/lib/lang/tr_server_php_list.lng
@@ -4,4 +4,5 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['add_new_record_txt'] = 'PHP Sürümü Ekle';
 $wb['client_id_txt'] = 'Müşteri';
 $wb['name_txt'] = 'PHP Adı';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_software_package.lng b/interface/web/admin/lib/lang/tr_software_package.lng
index dfd498183241f07c009fa7badb0883aeb41aa954..addda60195a1bb25f115b50b835b59153eea8030 100644
--- a/interface/web/admin/lib/lang/tr_software_package.lng
+++ b/interface/web/admin/lib/lang/tr_software_package.lng
@@ -2,5 +2,5 @@
 $wb['package_title_txt'] = 'Paket Başlığı';
 $wb['package_key_txt'] = 'Paket Anahtarı';
 $wb['Software Package'] = 'Yazılım Paketi';
-$wb['Modify software package details'] = 'Yazılım paketi ayrıntılarını düzenleyin';
+$wb['Modify software package details'] = 'Yazılım paketi bilgilerini düzenle';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_software_update_list.lng b/interface/web/admin/lib/lang/tr_software_update_list.lng
index 4ee824a6e1e30c517ab81f1325f733d013a8ee34..a462d90faa7dc79180330f9ebe69d176cdc5117d 100644
--- a/interface/web/admin/lib/lang/tr_software_update_list.lng
+++ b/interface/web/admin/lib/lang/tr_software_update_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Yazılım Güncellemeleri';
-$wb['server_select_txt'] = 'Sunucu seçin';
+$wb['server_select_txt'] = 'Sunucu Seçin';
 $wb['installed_txt'] = 'Ä°ÅŸlem';
 $wb['update_title_txt'] = 'Güncelleme';
 $wb['version_txt'] = 'Sürüm';
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index 8f5bef0e4d4d2dde47393325292255a4685ed3cd..3ef8e26875e8b9bb38cf765a9c226e53ab62c220 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['system_config_desc_txt'] = '';
-$wb['smtp_missing_admin_mail_txt'] = 'SMTP posta göndermesini kullanmak için yönetici adı ve yönetici e-posta adresini yazmalısınız.';
+$wb['smtp_missing_admin_mail_txt'] = 'SMTP e-posta gönderimini kullanmak için yönetici adı ve yönetici e-posta adresini yazmalısınız.';
 $wb['dashboard_atom_url_admin_txt'] = 'Panel Atom akışının İnternet adresi (yönetici)';
 $wb['dashboard_atom_url_reseller_txt'] = 'Panel Atom akışının İnternet adresi (bayi)';
 $wb['dashboard_atom_url_client_txt'] = 'Panel Atom akışının İnternet adresi (müşteri)';
 $wb['warning'] = 'Bu değerleri değiştirirken dikkatli olun! Sistemde birden fazla müşteri varsa, ön ekleri kaldırmayın.';
-$wb['tab_change_discard_txt'] = 'Sekme değiştirildiğinde değişiklikler yoksayılsın';
+$wb['tab_change_discard_txt'] = 'Sekme değiştirildiğinde değişiklikler yok sayılsın';
 $wb['tab_change_warning_txt'] = 'Sekme değiştirme uyarısı';
 $wb['tab_change_warning_note_txt'] = 'Formlardaki veriler düzenlenirken, kullanıcı bir değişiklik yapmışsa sekme değiştirilmek istendiğinde bir uyarı görüntülenir.';
 $wb['dbname_prefix_txt'] = 'Veritabanı adı ön eki';
@@ -13,8 +13,10 @@ $wb['dbuser_prefix_txt'] = 'Veritabanı kullanıcısı ön eki';
 $wb['shelluser_prefix_txt'] = 'Kabuk kullanıcısı ön eki';
 $wb['webdavuser_prefix_txt'] = 'Webdav kullanıcısı ön eki';
 $wb['ftpuser_prefix_txt'] = 'FTP kullanıcısı ön eki';
-$wb['vhost_subdomains_txt'] = 'Alt alanlar web sitesi ÅŸeklinde oluÅŸturulsun';
-$wb['vhost_subdomains_note_txt'] = 'Sistemde SSunucu alt alan adları varken bu seçenek devre dışı bırakılamaz!';
+$wb['vhost_subdomains_txt'] = 'Etki alanları web sitesi şeklinde oluşturulsun';
+$wb['vhost_subdomains_note_txt'] = 'Sistemde sanal sunucu alt etki alanları varken bu seçenek devre dışı bırakılamaz!';
+$wb['vhost_aliasdomains_txt'] = 'Takma etki alanı web sitesi olarak eklensin';
+$wb['vhost_aliasdomains_note_txt'] = 'Sistemde sanal sunucu takma etki alanları varken bu seçenek devre dışı bırakılamaz!';
 $wb['dbname_prefix_error_regex'] = 'Veritabanı adı ön ekinde izin verilmeyen karakterler var';
 $wb['dbuser_prefix_error_regex'] = 'Veritabanı kullanıcısı ön ekinde izin verilmeyen karakterler var';
 $wb['ftpuser_prefix_error_regex'] = 'FTP kullanıcısı ön ekinde izin verilmeyen karakterler var';
@@ -22,20 +24,23 @@ $wb['shelluser_prefix_error_regex'] = 'Kabuk kullanıcısı ön ekinde izin veri
 $wb['webdavuser_prefix_error_regex'] = 'Webdav kullanıcısı ön ekinde izin verilmeyen karakterler var.';
 $wb['dblist_phpmyadmin_link_txt'] = 'Veritabanı listesinde phpMyAdmin bağlantısı';
 $wb['enable_custom_login_txt'] = 'Özel oturum açma kullanıcı adı kullanılabilsin';
-$wb['mailboxlist_webmail_link_txt'] = 'Posta kutusu listesinde Webmail bağlantısı';
+$wb['mailboxlist_webmail_link_txt'] = 'E-posta kutusu listesinde Webmail bağlantısı';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin';
 $wb['webmail_url_txt'] = 'Webmail Adresi';
-$wb['mailmailinglist_link_txt'] = 'Posta Listeleri listesinde Posta Listesi bağlantısı';
-$wb['mailmailinglist_url_txt'] = 'Posta Listesi Adresi';
+$wb['mailmailinglist_link_txt'] = 'E-posta Listeleri listesinde E-posta Listesi bağlantısı';
+$wb['mailmailinglist_url_txt'] = 'E-posta Listesi Adresi';
 $wb['phpmyadmin_url_txt'] = 'phpMyAdmin Adresi';
-$wb['use_domain_module_txt'] = 'Alan adı eklemek için alan adı modülü kullanılsın';
-$wb['use_domain_module_hint'] = 'Bu modül kullanıldığında, müşteriler yalnız yöneticinin oluşturduğu alan adlarından birini seçebilir. Alan adı alanını özgürce düzenleyemez. Bu değeri değiştirdikten sonra değişikliklerin geçerli olması için oturumu kapatıp yeniden açmalısınız.';
-$wb['new_domain_txt'] = 'Yeni alan adı oluşturma HTML kodu';
+$wb['use_domain_module_txt'] = 'Etki alanı eklemek için etki alanı modülü kullanılsın';
+$wb['use_domain_module_hint'] = 'Bu modül kullanıldığında, müşteriler yalnız yöneticinin oluşturduğu etki alanlarından birini seçebilir. Etki alanını istediği gibi yazamaz. Bu değeri değiştirdikten sonra değişikliklerin geçerli olması için oturumu kapatıp yeniden açmalısınız.';
+$wb['new_domain_txt'] = 'Yeni etki alanı oluşturma HTML kodu';
 $wb['webftp_url_txt'] = 'WebFTP Adresi';
 $wb['admin_mail_txt'] = 'Yönetici E-posta Adresi';
 $wb['monitor_key_txt'] = 'Ä°zlenecek Kelime';
 $wb['admin_name_txt'] = 'Yönetici Adı';
 $wb['maintenance_mode_txt'] = 'Bakım Kipi';
-$wb['smtp_enabled_txt'] = 'Sistem postaları SMTP ile gönderilsin';
+$wb['smtp_enabled_txt'] = 'Sistem e-postaları SMTP ile gönderilsin';
 $wb['smtp_host_txt'] = 'SMTP Sunucusu';
 $wb['smtp_port_txt'] = 'SMTP Kapısı';
 $wb['smtp_user_txt'] = 'SMTP Kullanıcı Adı';
@@ -46,9 +51,10 @@ $wb['use_combobox_txt'] = 'jQuery Açılan Kutusu Kullanılsın';
 $wb['use_loadindicator_txt'] = 'Yük Göstergesi Kullanılsın';
 $wb['f5_to_reload_js_txt'] = 'Bu değer değiştirildiğinde, web tarayıcının JavaScript kitaplıklarını yeniden yüklemesi için F5 tuşuna basmalı ya da web tarayıcının ön belleğini temizlemelisiniz.';
 $wb['client_username_web_check_disabled_txt'] = 'Müşteri kullanıcı adında \'web\' sözcüğü denetimi devre dışı bırakılsın.';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Posta hesabı ayrıntılarında posta süzgeci sekmesi görüntülensin';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Posta hesabı ayrıntılarında isteğe bağlı posta süzgeci sekmesi görüntülensin';
+$wb['backups_include_into_web_quota_txt'] = 'Yedek dosyaları web kotasına katılsın.';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin';
 $wb['webmail_url_error_regex'] = 'Webmail adresi geçersiz';
 $wb['phpmyadmin_url_note_txt'] = 'Kod:';
 $wb['webmail_url_note_txt'] = 'Kod:';
@@ -64,21 +70,18 @@ $wb['customer_no_template_error_regex_txt'] = 'Müşteri no kalıbında geçersi
 $wb['customer_no_start_txt'] = 'Müşteri No Başlangıç Değeri';
 $wb['customer_no_counter_txt'] = 'Müşteri No Sayacı';
 $wb['session_timeout_txt'] = 'Oturum Zaman Aşımı (dakika)';
-$wb['session_allow_endless_txt'] = '\\"Oturum açık kalsın\\" kullanılabilsin';
+$wb['session_allow_endless_txt'] = '"Oturum açık kalsın" kullanılabilsin';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'En Az Parola UzunluÄŸu';
-$wb['min_password_strength_txt'] = 'En Az Parola Güçlüğü';
-$wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site';
-$wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!';
-$wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['company_name_txt'] = 'Company Name for the page title';
-$wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websites';
-$wb['custom_login_text_txt'] = 'Custom Text on Login-Page';
-$wb['custom_login_link_txt'] = 'Custom Link on Login-Page';
-$wb['login_link_error_regex'] = 'Invalid Link for Custom Login';
+$wb['min_password_strength_txt'] = 'En Az Parola ZorluÄŸu';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
+$wb['default_dnsserver_txt'] = 'Varsayılan Birincil DNS Sunucusu';
+$wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
+$wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['company_name_txt'] = 'Sayfa başlığı için kurum adı';
+$wb['reseller_can_use_options_txt'] = 'Bayi web siteleri için seçenek sekmesini kullanabilsin';
+$wb['custom_login_text_txt'] = 'Oturum Açma Sayfası Metni';
+$wb['custom_login_link_txt'] = 'Oturum Açma Sayfası Bağlantısı';
+$wb['login_link_error_regex'] = 'Oturum Açma Bağlantısı Geçersiz';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_users.lng b/interface/web/admin/lib/lang/tr_users.lng
index 0029214773cda0aef35f2125ba5454dbe14845a5..72aa9d1813bdcb4574c45990a8974aa512ff0909 100644
--- a/interface/web/admin/lib/lang/tr_users.lng
+++ b/interface/web/admin/lib/lang/tr_users.lng
@@ -1,22 +1,22 @@
 <?php
-$wb['username_txt'] = 'Kullanıcı adı';
+$wb['username_txt'] = 'Kullanıcı Adı';
 $wb['username_err'] = 'Kullanıcı adı çok uzun ya da geçersiz karakterler içeriyor.';
 $wb['username_empty'] = 'Kullanıcı adı boş olamaz.';
 $wb['username_unique'] = 'Bu adla bir kullanıcı zaten var.';
 $wb['passwort_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['modules_txt'] = 'Modül';
 $wb['startmodule_txt'] = 'Başlangıç modülü';
 $wb['app_theme_txt'] = 'Tasarım';
-$wb['typ_txt'] = 'Tip';
+$wb['typ_txt'] = 'Tür';
 $wb['active_txt'] = 'Etkin';
 $wb['language_txt'] = 'Dil';
 $wb['name_txt'] = 'Ad';
 $wb['vorname_txt'] = 'Takma ad';
-$wb['unternehmen_txt'] = 'Kurum';
+$wb['unternehmen_txt'] = 'KuruluÅŸ';
 $wb['strasse_txt'] = 'Adres';
 $wb['ort_txt'] = 'Ä°l';
-$wb['plz_txt'] = 'Posta kodu';
+$wb['plz_txt'] = 'Posta Kodu';
 $wb['land_txt'] = 'Ãœlke';
 $wb['email_txt'] = 'E-posta';
 $wb['url_txt'] = 'Ä°nternet Adresi';
@@ -25,12 +25,12 @@ $wb['fax_txt'] = 'Faks';
 $wb['groups_txt'] = 'Gruplar';
 $wb['default_group_txt'] = 'Varsayılan Grup';
 $wb['startmodule_err'] = 'Başlangıç modülü, modüllerin arasında değil.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['username_error_collision'] = 'Kullanıcı adı -web- ya da -web- sözcüğünü izleyen bir sayı ile başlayamaz.\\"';
-$wb['client_not_admin_err'] = 'Bir müşteriye ait bir kullanıcının tipi admin olarak atanamaz';
-$wb['lost_password_function_txt'] = 'Forgot password function is available';
-$wb['no_user_insert'] = 'CP-Users of type -user- get added and updated automatically when you add a client or reseller.';
+$wb['username_error_collision'] = 'Kullanıcı adı -web- ya da -web- sözcüğünü izleyen bir sayı ile başlayamaz."';
+$wb['client_not_admin_err'] = 'Bir müşteriye ait bir kullanıcının türü admin olarak atanamaz';
+$wb['lost_password_function_txt'] = 'Parolamı unuttum özelliği kullanılabilir';
+$wb['no_user_insert'] = 'Bir müşteri ya da bayi eklediğinizde -user- türündeki kontrol panosu kullanıcıları otomatik olarak eklenir ve güncellenir .';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_users_list.lng b/interface/web/admin/lib/lang/tr_users_list.lng
index 31dbee70001ecd4705a5610b0b0c211bc2438ec6..182ab3ca7c0a4d1eb38a2f06cf0bcf8e874f112a 100644
--- a/interface/web/admin/lib/lang/tr_users_list.lng
+++ b/interface/web/admin/lib/lang/tr_users_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Kullanıcılar';
-$wb['username_txt'] = 'Kullanıcı adı';
+$wb['username_txt'] = 'Kullanıcı Adı';
 $wb['client_id_txt'] = 'Müşteri Kodu';
 $wb['active_txt'] = 'Etkin';
 $wb['groups_txt'] = 'Gruplar';
diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index 7eebb7f5b00daf638bf30c87da8e3440d9b0fffc..f311f6b1a58e558baaa41ee452d4f08e23be0f1c 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -52,6 +52,21 @@ $app->load('tform_actions');
 
 class page_action extends tform_actions {
 
+	function onShow() {
+		global $app, $conf;
+		
+		// get the config
+		$app->uses('getconf');
+		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
+		
+		if($web_config['server_type'] == 'nginx'){
+			unset($app->tform->formDef["tabs"]["fastcgi"]);
+			unset($app->tform->formDef["tabs"]["vlogger"]);
+		}
+		
+		parent::onShow();
+	}
+
 	function onSubmit() {
 		global $app, $conf;
 		
@@ -73,18 +88,26 @@ class page_action extends tform_actions {
 			$server_id = $this->id;
 
 			$this->dataRecord = $app->getconf->get_server_config($server_id, $section);
+
+			if($section == 'mail'){
+				$server_config = $app->getconf->get_server_config($server_id, 'server');
+				$rspamd_url = 'https://'.$server_config['hostname'].':8081/rspamd/';
+			}
 		}
 
 		$record = $app->tform->getHTML($this->dataRecord, $this->active_tab, 'EDIT');
 
 		$record['id'] = $this->id;
+		if(isset($rspamd_url)) $record['rspamd_url'] = $rspamd_url;
 		$app->tpl->setVar($record);
 	}
 
 	function onShowEnd() {
 		global $app;
-
-		$app->tpl->setVar('server_name', $app->functions->htmlentities($app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ? AND ((SELECT COUNT(*) FROM server) > 1)", $this->id)['server_name']));
+		
+		$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ? AND ((SELECT COUNT(*) FROM server) > 1)", $this->id);
+		$app->tpl->setVar('server_name', $app->functions->htmlentities($tmp['server_name']));
+		unset($tmp);
 
 		parent::onShowEnd();
 	}
@@ -110,6 +133,14 @@ class page_action extends tform_actions {
 				}
 			}
 
+			if($section === 'mail') {
+				if(isset($server_config_array['mail']['rspamd_available']) && $server_config_array['mail']['rspamd_available'] === 'y') {
+					$this->dataRecord['rspamd_available'] = 'y';
+				} else {
+					$this->dataRecord['rspamd_available'] = 'n';
+				}
+			}
+			
 			if($app->tform->errorMessage == '') {
 				$server_config_array[$section] = $app->tform->encode($this->dataRecord, $section);
 				$server_config_str = $app->ini_parser->get_ini_string($server_config_array);
@@ -121,6 +152,56 @@ class page_action extends tform_actions {
 		}
 	}
 
+	function onAfterUpdate() {
+		global $app;
+		
+		if(isset($this->dataRecord['content_filter'])){
+			$app->uses('ini_parser');
+			$old_config = $app->ini_parser->parse_ini_string(stripslashes($this->oldDataRecord['config']));
+			if($this->dataRecord['content_filter'] == 'rspamd' && $old_config['mail']['content_filter'] != $this->dataRecord['content_filter']){
+			
+				$spamfilter_users = $app->db->queryAllRecords("SELECT * FROM spamfilter_users WHERE server_id = ?", intval($this->id));
+				if(is_array($spamfilter_users) && !empty($spamfilter_users)){
+					foreach($spamfilter_users as $spamfilter_user){
+						$app->db->datalogUpdate('spamfilter_users', $spamfilter_user, 'id', $spamfilter_user["id"], true);
+					}
+				}
+				
+				$spamfilter_wblists = $app->db->queryAllRecords("SELECT * FROM spamfilter_wblist WHERE server_id = ?", intval($this->id));
+				if(is_array($spamfilter_wblists) && !empty($spamfilter_wblists)){
+					foreach($spamfilter_wblists as $spamfilter_wblist){
+						$app->db->datalogUpdate('spamfilter_wblist', $spamfilter_wblist, 'wblist_id', $spamfilter_wblist["wblist_id"], true);
+					}
+				}
+				
+				$mail_users = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE server_id = ?", intval($this->id));
+				if(is_array($mail_users) && !empty($mail_users)){
+					foreach($mail_users as $mail_user){
+						if($mail_user['autoresponder'] == 'y'){
+							$mail_user['autoresponder'] = 'n';
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+							$mail_user['autoresponder'] = 'y';
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+						} elseif($mail_user['move_junk'] == 'y') {
+							$mail_user['move_junk'] = 'n';
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+							$mail_user['move_junk'] = 'y';
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+						} else {
+							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
+						}
+					}
+				}
+				
+				$mail_forwards = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE server_id = ?", intval($this->id));
+				if(is_array($mail_forwards) && !empty($mail_forwards)){
+					foreach($mail_forwards as $mail_forward){
+						$app->db->datalogUpdate('mail_forwarding', $mail_forward, 'forwarding_id', $mail_forward["forwarding_id"], true);
+					}
+				}
+			}
+		}
+	}
 }
 
 $app->tform_actions = new page_action;
diff --git a/interface/web/admin/software_package_del.php b/interface/web/admin/software_package_del.php
index 31aeb1c09b07e38492823abb41a19bcf2f5c334d..e1387f39c43459b7261f1d90d19798a78c4a7d3e 100644
--- a/interface/web/admin/software_package_del.php
+++ b/interface/web/admin/software_package_del.php
@@ -36,6 +36,9 @@ $app->auth->check_module_permissions('admin');
 $app->auth->check_security_permissions('admin_allow_software_packages');
 if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
 
+// Check CSRF Token
+$app->auth->csrf_token_check('GET');
+
 $software_update_inst_id = $app->functions->intval($_GET['software_update_inst_id']);
 
 if($software_update_inst_id > 0) {
diff --git a/interface/web/admin/software_package_install.php b/interface/web/admin/software_package_install.php
index ccbfd73ebe6e2c3411f1a1fa32dd579c06b45ccd..6a5326d51a1bed56d1d1b2faf862d8aa38533f3d 100644
--- a/interface/web/admin/software_package_install.php
+++ b/interface/web/admin/software_package_install.php
@@ -38,6 +38,13 @@ $app->auth->check_security_permissions('admin_allow_software_packages');
 //* This is only allowed for administrators
 if(!$app->auth->is_admin()) die('only allowed for administrators.');
 
+// Check CSRF Token
+if(count($_POST) > 0) {
+	$app->auth->csrf_token_check('POST');
+} else {
+	$app->auth->csrf_token_check('GET');
+}
+
 $package_name = $_REQUEST['package'];
 $install_server_id = $app->functions->intval($_REQUEST['server_id']);
 $install_key = trim($_REQUEST['install_key']);
diff --git a/interface/web/admin/software_package_list.php b/interface/web/admin/software_package_list.php
index b6664d4234ce27fdfc398877ad77e31f80d7e181..8a21696c7f398600ba7083b3f95d3e8f548de825 100644
--- a/interface/web/admin/software_package_list.php
+++ b/interface/web/admin/software_package_list.php
@@ -145,6 +145,9 @@ $app->uses('tpl');
 $app->tpl->newTemplate("form.tpl.htm");
 $app->tpl->setInclude('content_tpl', 'templates/software_package_list.htm');
 
+$csrf_token = $app->auth->csrf_token_get('software_package_list');
+$_csrf_id = $csrf_token['csrf_id'];
+$_csrf_key = $csrf_token['csrf_key'];
 
 $servers = $app->db->queryAllRecords('SELECT server_id, server_name FROM server ORDER BY server_name');
 $packages = $app->db->queryAllRecords('SELECT * FROM software_package');
@@ -167,12 +170,14 @@ if(is_array($packages) && count($packages) > 0) {
 				if($p['package_installable'] == 'no') {
 					$installed_txt .= $s['server_name'].": ".$app->lng("Package can not be installed.")."<br />";
 				} else {
-					$installed_txt .= $s['server_name'].": <a href=\"#\" data-load-content=\"admin/software_package_install.php?package=".$p["package_name"]."&server_id=".$s["server_id"]."\">Install now</a><br />";
+					$installed_txt .= $s['server_name'].": <a href=\"#\" data-load-content=\"admin/software_package_install.php?package=".$p["package_name"]."&server_id=".$s["server_id"]."&_csrf_key=".$_csrf_key."&_csrf_id=".$_csrf_id."\">Install now</a><br />";
 				}
 			}
 		}
 		$packages[$key]['software_update_inst_id'] = intval($inst['software_update_inst_id']);
 		$packages[$key]['installed'] = $installed_txt;
+		$packages[$key]['csrf_id'] = $_csrf_id;
+		$packages[$key]['csrf_key'] = $_csrf_key;
 	}
 	$app->tpl->setVar('has_packages', 1);
 } else {
diff --git a/interface/web/admin/templates/directive_snippets_edit.htm b/interface/web/admin/templates/directive_snippets_edit.htm
index eab53c79bbd82bb07bffce5775ea812006e8a53f..72eb82369c485c5b6bc44bfe89a0baccfd774b2f 100644
--- a/interface/web/admin/templates/directive_snippets_edit.htm
+++ b/interface/web/admin/templates/directive_snippets_edit.htm
@@ -18,7 +18,9 @@
 			<div class="form-group">
                 <label for="snippet" class="col-sm-3 control-label">{tmpl_var name='snippet_txt'}</label>
                 <tmpl_if name='is_master'><div class="col-sm-9 col-text"><pre>{tmpl_var name='snippet'}</pre></div></tmpl_else><div class="col-sm-9"><textarea class="form-control" name="snippet" id="snippet" rows='10' cols='50'>{tmpl_var name='snippet'}</textarea>
-                &nbsp; Nginx {tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{FASTCGIPASS}</a>, <a href="javascript:void(0);" class="addPlaceholder">{PHPFALLBACKFASTCGIPASS}</a></div></tmpl_if>
+                &nbsp; Nginx {tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{FASTCGIPASS}</a>, <a href="javascript:void(0);" class="addPlaceholder">{PHPFALLBACKFASTCGIPASS}</a><br />
+				&nbsp; Apache {tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT_CLIENT}</a>
+				</div></tmpl_if>
             </div>
             <tmpl_if name='is_master'></tmpl_else>
 			<div class="form-group php">
diff --git a/interface/web/admin/templates/directive_snippets_list.htm b/interface/web/admin/templates/directive_snippets_list.htm
index 602c71a07c3ab866fe7fd21e82d478708f550c7d..84332824960fa233023d47aba017f6f47af7171a 100644
--- a/interface/web/admin/templates/directive_snippets_list.htm
+++ b/interface/web/admin/templates/directive_snippets_list.htm
@@ -40,7 +40,7 @@
 							<td><a href="#" data-load-content="admin/directive_snippets_edit.php?id={tmpl_var name='id'}">{tmpl_var name="customer_viewable"}</a></td>
 							<td><a href="#" data-load-content="admin/directive_snippets_edit.php?id={tmpl_var name='id'}">{tmpl_var name="master_directive_snippets_id"}</a></td>
                             <td class="text-right">
-                                <tmpl_if name='is_master'></tmpl_else><a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/directive_snippets_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a></tmpl_if>
+                                <tmpl_if name='is_master'></tmpl_else><a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/directive_snippets_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a></tmpl_if>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/firewall_list.htm b/interface/web/admin/templates/firewall_list.htm
index ac85f7e4fe1ae1b584315b0401bba1373e05a97a..b40414a5daf5fc771e773ccfc916699ac220c6fb 100644
--- a/interface/web/admin/templates/firewall_list.htm
+++ b/interface/web/admin/templates/firewall_list.htm
@@ -40,7 +40,7 @@
                             <td><a href="#" data-load-content="admin/firewall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="tcp_port"}</a></td>
                             <td><a href="#" data-load-content="admin/firewall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="udp_port"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/firewall_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/firewall_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/groups_list.htm b/interface/web/admin/templates/groups_list.htm
index d53ee58b249d19934cc34f5dc44771ea9874fa90..972ae64144159c6a1b7602732aef1fef84cc8df3 100644
--- a/interface/web/admin/templates/groups_list.htm
+++ b/interface/web/admin/templates/groups_list.htm
@@ -35,7 +35,7 @@
                             <td><a href="#" data-load-content="admin/groups_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
                             <td><a href="#" data-load-content="admin/groups_edit.php?id={tmpl_var name='id'}">{tmpl_var name="description"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/groups_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/groups_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/iptables_list.htm b/interface/web/admin/templates/iptables_list.htm
index e1fcb3dc034564c4701446a8769009a42d7a7634..2adbd046275dee1c53cb22b0790ed2d6062e4243 100644
--- a/interface/web/admin/templates/iptables_list.htm
+++ b/interface/web/admin/templates/iptables_list.htm
@@ -51,7 +51,7 @@
                             <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="state"}</a></td>
                             <td><a href="#" data-load-content="admin/iptables_edit.php?id={tmpl_var name='id'}">{tmpl_var name="target"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/iptables_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/iptables_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/remote_user_list.htm b/interface/web/admin/templates/remote_user_list.htm
index de65c64536cabab9d86d2286d7889ed2cc6e0f3c..7189dc20df8cc3bb1e8d4ef3d632d15a4104efdc 100644
--- a/interface/web/admin/templates/remote_user_list.htm
+++ b/interface/web/admin/templates/remote_user_list.htm
@@ -33,7 +33,7 @@
                             <td><a href="#" data-load-content="admin/remote_user_edit.php?id={tmpl_var name='remote_userid'}">{tmpl_var name="remote_userid"}</a></td>
                             <td><a href="#" data-load-content="admin/remote_user_edit.php?id={tmpl_var name='remote_userid'}">{tmpl_var name="remote_username"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/remote_user_del.php?id={tmpl_var name='remote_userid'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/remote_user_del.php?id={tmpl_var name='remote_userid'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/server_config_list.htm b/interface/web/admin/templates/server_config_list.htm
index ef0935552af746e10252b01a63f2063668dea312..9284c5c35466ef5f0aa2ceba42fd4c0a6b9945b5 100644
--- a/interface/web/admin/templates/server_config_list.htm
+++ b/interface/web/admin/templates/server_config_list.htm
@@ -24,7 +24,7 @@
                         <tr>
                             <td><a href="#" data-load-content="admin/server_config_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_config_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_config_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm
index c1531c654a18b1a430bb1a856600667d4fdeab58..6ba37104ef111f91d555c2fd8610e88f7dae6660 100644
--- a/interface/web/admin/templates/server_config_mail_edit.htm
+++ b/interface/web/admin/templates/server_config_mail_edit.htm
@@ -44,6 +44,20 @@
                         {tmpl_var name='mail_filter_syntax'}
                     </select></div>
             </div>
+			<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='content_filter_txt'}</label>
+                <div class="col-sm-9"><select name="content_filter" id="content_filter" class="form-control">
+                        {tmpl_var name='content_filter'}
+                    </select></div>
+            </div>
+			<div class="form-group rspamd">
+                <label for="rspamd_url" class="col-sm-3 control-label col-text">{tmpl_var name='rspamd_url_txt'}</label>
+                <div class="col-sm-6"><a href="{tmpl_var name='rspamd_url'}" target="_blank">{tmpl_var name='rspamd_url'}</a><a href="{tmpl_var name='rspamd_url'}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow" style="margin-left:20px"><span class="icon icon-link"></span></a></div>
+            </div>
+			<div class="form-group rspamd">
+                <label for="rspamd_password" class="col-sm-3 control-label">{tmpl_var name='rspamd_password_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_password" id="rspamd_password" value="{tmpl_var name='rspamd_password'}" class="form-control" /></div>
+			</div>
             <div class="form-group">
                 <label for="mailuser_uid" class="col-sm-3 control-label">{tmpl_var name='mailuser_uid_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="mailuser_uid" id="mailuser_uid" value="{tmpl_var name='mailuser_uid'}" class="form-control" /></div></div>
@@ -125,3 +139,23 @@
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/server_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_config_list.php">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
+<script>
+	if($('#rspamd_password').val() == ''){
+		var pword = password(8, false, 1);
+		jQuery('#rspamd_password').val(pword);
+	}
+	
+	if($('#content_filter').val() === 'rspamd'){
+		$('.rspamd').show();
+	} else {
+		$('.rspamd').hide();
+	}
+	
+	$('#content_filter').change(function(){
+		if($(this).val() === 'rspamd'){
+			$('.rspamd').show();
+		} else {
+			$('.rspamd').hide();
+		}
+	});
+</script>
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index bb61d866ca0a64b5381ecb51d94a9c7ac04d24a8..eb285bbc078c6663ad4681e16493d4f131088555 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -256,7 +256,7 @@
     <div id="collapsePHP" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPHP">
       <div class="panel-body">
 	  <!-- Begin content -->
-                <div class="form-group">
+				<div class="form-group">
                     <label for="php_default_name" class="col-sm-3 control-label">{tmpl_var name='php_default_name_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="php_default_name" id="php_default_name" value="{tmpl_var name='php_default_name'}" class="form-control" /></div></div>
 			    <div class="form-group apache">
@@ -293,6 +293,18 @@
                             {tmpl_var name='php_handler'}
                         </select></div>
                 </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_incron_reload_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='php_fpm_incron_reload'}
+                    </div>
+                </div>
+				<div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_reload_mode_txt'}</label>
+                <div class="col-sm-9"><select name="php_fpm_reload_mode" id="php_fpm_reload_mode" class="form-control">
+                        {tmpl_var name='php_fpm_reload_mode'}
+                    </select></div>
+            </div>
 	  <!-- End content -->
 	  </div>
 	</div>
diff --git a/interface/web/admin/templates/server_ip_list.htm b/interface/web/admin/templates/server_ip_list.htm
index 892c263f20e2b3304c6fc40a5419a81472d2c4a8..c612e1ca643e0dc67a5be4db315b39581070c3d7 100644
--- a/interface/web/admin/templates/server_ip_list.htm
+++ b/interface/web/admin/templates/server_ip_list.htm
@@ -45,7 +45,7 @@
                             <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virtualhost"}</a></td>
                             <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virtualhost_port"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/server_ip_map_list.htm b/interface/web/admin/templates/server_ip_map_list.htm
index a186e49b032d106bf3f1e85a6cc7bd2da059fc0b..ea23856022c5b328ad1e3a00a17237c700b349a3 100644
--- a/interface/web/admin/templates/server_ip_map_list.htm
+++ b/interface/web/admin/templates/server_ip_map_list.htm
@@ -32,7 +32,7 @@
 					<td><a href="#" data-load-content="admin/server_ip_map_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source_ip"}</a></td>
 					<td><a href="#" data-load-content="admin/server_ip_map_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination_ip"}</a></td>
 					<td class="text-right">
-						<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_map_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+						<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_ip_map_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
 					</td>
 				</tr>
 			</tmpl_loop>
diff --git a/interface/web/admin/templates/server_list.htm b/interface/web/admin/templates/server_list.htm
index 1152909320f758d7e9fbe086296a4c1e7255c46b..313fad7ff113b055b2cb6b2ab649fa040d43195e 100644
--- a/interface/web/admin/templates/server_list.htm
+++ b/interface/web/admin/templates/server_list.htm
@@ -45,7 +45,7 @@
                             <td>{tmpl_var name="vserver_server"}</td>
                             <td>{tmpl_var name="xmpp_server"}</td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/server_php_list.htm b/interface/web/admin/templates/server_php_list.htm
index 5a6392eea33a18664e1d9459ba05142d38c3768b..9833eb1e7ee35e1f18dcaee356628d82c62b63af 100644
--- a/interface/web/admin/templates/server_php_list.htm
+++ b/interface/web/admin/templates/server_php_list.htm
@@ -39,7 +39,7 @@
                             <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
                             <td><a href="#" data-load-content="admin/server_php_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_php_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/server_php_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/software_package_list.htm b/interface/web/admin/templates/software_package_list.htm
index 31969c0575543e91949f3219df0c32b72256f3b6..e69e3780af4e3ccff25906c9a5867f46b8b19f5c 100644
--- a/interface/web/admin/templates/software_package_list.htm
+++ b/interface/web/admin/templates/software_package_list.htm
@@ -33,7 +33,7 @@
                             <td>ispapp{tmpl_var name="package_id"}</td>
 							<td class="text-right">
 								<a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="admin/software_package_edit.php?id={tmpl_var name='package_id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_package_del.php?software_update_inst_id={tmpl_var name='software_update_inst_id'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_package_del.php?software_update_inst_id={tmpl_var name='software_update_inst_id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
 						</tmpl_if>
diff --git a/interface/web/admin/templates/software_repo_list.htm b/interface/web/admin/templates/software_repo_list.htm
index 8b1a48b56262181a20a12d40dec98a0606aab49e..d408896de6f943ba0a5d23240f37eefb58dc858a 100644
--- a/interface/web/admin/templates/software_repo_list.htm
+++ b/interface/web/admin/templates/software_repo_list.htm
@@ -37,7 +37,7 @@
                             <td><a href="#" data-load-content="admin/software_repo_edit.php?id={tmpl_var name='id'}">{tmpl_var name="repo_name"}</a></td>
                             <td><a href="#" data-load-content="admin/software_repo_edit.php?id={tmpl_var name='id'}">{tmpl_var name="repo_url"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_repo_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/software_repo_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/admin/templates/system_config_dns_ca.htm b/interface/web/admin/templates/system_config_dns_ca.htm
new file mode 100644
index 0000000000000000000000000000000000000000..7f430a85e393b8b06b5ba120a9c2828211b85447
--- /dev/null
+++ b/interface/web/admin/templates/system_config_dns_ca.htm
@@ -0,0 +1,15 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+<!--
+<div class="clear">
+	<div class="left">
+		<div class="buttonHolder buttons">
+			<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_new_txt'}" onClick="ISPConfig.changeTab('dns_ca','admin/system_config_edit.php?action=edit&id={tmpl_var name='id'}', true);">{tmpl_var name='btn_new_txt'}</button>
+		</div>
+	</div>
+</div>
+<br>
+-->
+{tmpl_var name='dns_ca'}
+{tmpl_var name='dns_ca_list'}
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
diff --git a/interface/web/admin/templates/system_config_dns_ca_edit.htm b/interface/web/admin/templates/system_config_dns_ca_edit.htm
new file mode 100644
index 0000000000000000000000000000000000000000..739c3f93fea5c3dac21b9e902d6f9d02d7aa0de2
--- /dev/null
+++ b/interface/web/admin/templates/system_config_dns_ca_edit.htm
@@ -0,0 +1,41 @@
+<tmpl_if name="edit_record">
+<tmpl_if name="error">
+    <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">{tmpl_var name='error'}</div>
+</tmpl_if>
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<div class="form-group">
+	<label for="ca_name" class="col-sm-2 control-label">{tmpl_var name='ca_name_txt'}</label>
+	<div class='col-sm-6'><input type='text' class="form-control" name="ca_name" id="ca_name" value="{tmpl_var name='ca_name'}"/></div>
+</div>
+
+<div class="form-group">
+	<label for="ca_issue" class="col-sm-2 control-label">{tmpl_var name='ca_issue_txt'}</label>
+	<div class="col-sm-6"><input name="ca_issue" id="ca_issue" value="{tmpl_var name='ca_issue'}" size="" maxlength="" type="text" class="form-control" /></div>
+</div>
+
+<div class="form-group">
+    <label class="col-sm-2 control-label">{tmpl_var name='ca_wildcard_txt'}</label>
+	<div class="col-sm-6"><input type="checkbox" value="{tmpl_var name='ca_wildcard'}" id="ca_wildcard" name="ca_wildcard" <tmpl_if name='ca_wildcard' op='==' value='Y'>checked</tmpl_if> /></div>
+</div>
+
+<div class="form-group">
+    <label class="col-sm-2 control-label">{tmpl_var name='ca_critical_txt'}</label>
+	<div class="col-sm-6"><input type="checkbox" value="{tmpl_var name='ca_critical'}" id="ca_critical" name="ca_critical" <tmpl_if name='ca_critical'>checked</tmpl_if> /></div>
+</div>
+<!--
+<div class="form-group">
+	<label for="ca_iodef" class="col-sm-2 control-label">{tmpl_var name='ca_iodef_txt'}</label>
+	<div class="col-sm-6"><textarea class="form-control" name="ca_iodef" id="ca_iodef" rows='5' cols='30'>{tmpl_var name='ca_iodef'}</textarea></div>
+</div>
+-->
+<div class="form-group">
+    <label class="col-sm-2 control-label">{tmpl_var name='active_txt'}</label>
+	<div class="col-sm-6"><input type="checkbox" value="{tmpl_var name='active'}" id="active" name="active" <tmpl_if name='active' op='==' value='Y'>checked</tmpl_if> /></div>
+</div>
+
+</div>
+<div class="clear"><div class="right">
+	<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="ISPConfig.changeTab('dns_ca','admin/system_config_edit.php?action=save&id={tmpl_var name='id'}', true);"><span class="icon icon-edit"></span>{tmpl_var name='btn_save_txt'}</button>
+	<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+</div></div>
+</tmpl_if>
diff --git a/interface/web/admin/templates/system_config_dns_ca_list.htm b/interface/web/admin/templates/system_config_dns_ca_list.htm
new file mode 100644
index 0000000000000000000000000000000000000000..7af2b78d13c74bcc038bfda70c01deef34ecfce8
--- /dev/null
+++ b/interface/web/admin/templates/system_config_dns_ca_list.htm
@@ -0,0 +1,25 @@
+<tmpl_if name="edit_record">
+<tmpl_else>
+<table class="table">
+	<thead class="dark form-group-sm">
+		<tr>
+			<th data-column="active"><tmpl_var name="active_txt"></th>
+			<th data-column="name"><tmpl_var name="ca_name_txt"></th>
+			<th></th>
+		</tr>
+
+	</thead>
+	<tbody>
+		<tmpl_loop name="ca_records">
+			<tr>
+				<td>{tmpl_var name="active"}</td>
+				<td>{tmpl_var name="name"}</td>
+				<td class="text-right">
+ 					<button class="btn btn-default formbutton-default formbutton-narrow" type="button" onClick="ISPConfig.changeTab('dns_ca','admin/system_config_edit.php?action=edit&id={tmpl_var name='ca_id'}', true);"><span class="icon icon-edit"></span></button>
+					<button class="btn btn-default formbutton-danger formbutton-narrow" type="button" onClick="ISPConfig.changeTab('dns_ca','admin/system_config_edit.php?action=delete&id={tmpl_var name='ca_id'}', true);"><span class="icon icon-delete"></span></button>
+				</td>
+			</tr>
+		</tmpl_loop>
+	</tbody>
+</table>
+</tmpl_if>
diff --git a/interface/web/admin/templates/system_config_sites_edit.htm b/interface/web/admin/templates/system_config_sites_edit.htm
index 8ab35989ff277c39cef2f354b8f01ebe2e7a316d..4ff4a64affe202fe5dad3d413dae7d269e24414e 100644
--- a/interface/web/admin/templates/system_config_sites_edit.htm
+++ b/interface/web/admin/templates/system_config_sites_edit.htm
@@ -63,6 +63,12 @@
                     {tmpl_var name='reseller_can_use_options'}
                 </div>
             </div>
+			<div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='web_php_options_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='web_php_options'}
+                    </div>
+                </div>
             <div class="form-group">
                 <label for="default_webserver" class="col-sm-3 control-label">{tmpl_var name='default_webserver_txt'}</label>
                 <div class="col-sm-9"><select name="default_webserver" id="default_webserver" class="form-control">
diff --git a/interface/web/admin/templates/users_list.htm b/interface/web/admin/templates/users_list.htm
index b7872527ff8127187f45053de94ce15963ac5760..8db81c6c8dbf63d30427da4f3a1f782b84cb4aaf 100644
--- a/interface/web/admin/templates/users_list.htm
+++ b/interface/web/admin/templates/users_list.htm
@@ -43,7 +43,7 @@
                             <td class="text-right">
                                 <tmpl_if name="username" op="!=" value="admin">
                                     <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='client_id'}"><span class="icon icon-loginas"></span></a>
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('admin/users_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                             </td>
                         </tr>
diff --git a/interface/web/admin/users_edit.php b/interface/web/admin/users_edit.php
index 4c5c97409f1dd107fd69786d6dddfa6c05bec71f..7f0c691c4243e3b48e7a261124bdfae2a40dbf98 100644
--- a/interface/web/admin/users_edit.php
+++ b/interface/web/admin/users_edit.php
@@ -104,6 +104,8 @@ class page_action extends tform_actions {
 	function onAfterUpdate() {
 		global $app, $conf;
 
+		$app->uses('auth');
+		
 		$client = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = ?", $this->id);
 		$client_id = $app->functions->intval($client['client_id']);
 		$username = $this->dataRecord["username"];
@@ -121,13 +123,7 @@ class page_action extends tform_actions {
 		// password changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord["passwort"]) && $this->dataRecord["passwort"] != '') {
 			$password = $this->dataRecord["passwort"];
-			$salt="$1$";
-			$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-			for ($n=0;$n<8;$n++) {
-				$salt.=$base64_alphabet[mt_rand(0, 63)];
-			}
-			$salt.="$";
-			$password = crypt(stripslashes($password), $salt);
+			$password = $app->auth->crypt_password($password);
 			$sql = "UPDATE client SET password = ? WHERE client_id = ? AND username = ?";
 			$app->db->query($sql, $password, $client_id, $username);
 		}
diff --git a/interface/web/client/client_del.php b/interface/web/client/client_del.php
index 2bddd02a0750294de606cb335e7710987c585f15..d92dc5600849f4353eef4ed030fe67d362973ee3 100644
--- a/interface/web/client/client_del.php
+++ b/interface/web/client/client_del.php
@@ -58,9 +58,14 @@ class page_action extends tform_actions {
 		if(!is_object($app->tform)) $app->uses('tform');
 
 		if($_POST["confirm"] == 'yes') {
+			if(isset($_POST['_csrf_id'])) $_GET['_csrf_id'] = $_POST['_csrf_id'];
+			if(isset($_POST['_csrf_key'])) $_GET['_csrf_key'] = $_POST['_csrf_key'];
 			parent::onDelete();
 		} else {
 
+			// Check CSRF Token
+			$app->auth->csrf_token_check('GET');
+			
 			$app->uses('tpl');
 			$app->tpl->newTemplate("form.tpl.htm");
 			$app->tpl->setInclude('content_tpl', 'templates/client_del.htm');
@@ -100,6 +105,11 @@ class page_action extends tform_actions {
 			$lng_file = 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'_client_del.lng';
 			include $lng_file;
 			$app->tpl->setVar($wb);
+			
+			// get new csrf token
+			$csrf_token = $app->auth->csrf_token_get('client_del');
+			$app->tpl->setVar('_csrf_id', $csrf_token['csrf_id']);
+			$app->tpl->setVar('_csrf_key', $csrf_token['csrf_key']);
 
 			$app->tpl_defaults();
 			$app->tpl->pparse();
diff --git a/interface/web/client/client_edit.php b/interface/web/client/client_edit.php
index 8577a1b32d94a5c1e27de0c622495d3f0b4ca2be..bbc7849f1f296bbda7bb132252a36574ed7f6638 100644
--- a/interface/web/client/client_edit.php
+++ b/interface/web/client/client_edit.php
@@ -266,7 +266,7 @@ class page_action extends tform_actions {
 		$app->functions->generate_ssh_key($this->id, $username);
 
 		// Create the controlpaneluser for the client
-		$sql = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
+		$sql = "INSERT INTO sys_user (`username`,`passwort`,`modules`,`startmodule`,`app_theme`,`typ`,`active`,`language`,`groups`,`default_group`,`client_id`)
 		VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 		$app->db->query($sql, $username, $password, $modules, $startmodule, $usertheme, $type, $active, $language, $groups, $groupid, $this->id);
 
diff --git a/interface/web/client/client_message.php b/interface/web/client/client_message.php
index 2617bbe67d9408a711933d6a68229022be4ed64b..a46aefa6b4426b1d8648de06ca1a6868883ba7c5 100644
--- a/interface/web/client/client_message.php
+++ b/interface/web/client/client_message.php
@@ -71,18 +71,18 @@ if(isset($_POST) && count($_POST) > 1) {
 					$where[] = 'client_id = '.$app->functions->intval($tmp_client_id);
 				}
 				if(!empty($where)) $where_clause = ' AND ('.implode(' OR ', $where).')';
-				$sql = "SELECT * FROM client WHERE email != ''".$where_clause;
+				$sql = "SELECT * FROM client WHERE canceled != 'y' AND email != ''".$where_clause;
 			} else {
-				$sql = "SELECT * FROM client WHERE 0";
+				$sql = "SELECT * FROM client WHERE canceled != 'y'";
 			}
 		} else {
 			//* Select all clients and resellers
 			if($_SESSION["s"]["user"]["typ"] == 'admin'){
-				$sql = "SELECT * FROM client WHERE email != ''";
+				$sql = "SELECT * FROM client WHERE email != '' AND canceled != 'y'";
 			} else {
 				$client_id = $app->functions->intval($_SESSION['s']['user']['client_id']);
 				if($client_id == 0) die('Invalid Client ID.');
-				$sql = "SELECT * FROM client WHERE email != '' AND parent_client_id = '$client_id'";
+				$sql = "SELECT * FROM client WHERE email != '' AND canceled != 'y' AND parent_client_id = '$client_id'";
 			}
 		}
 
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 151c5dc95926373f089135c8fc278ddd8105d821..5b45ffb972f58734121c712bc9e55a0b3caab92f 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -1087,7 +1087,7 @@ $form["tabs"]['limits'] = array (
 			),
 			'default' => '',
 			'separator' => ',',
-			'valuelimit' => 'client:web_php_options',
+			'valuelimit' => 'system:sites:web_php_options',
 			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
 		),
 		'limit_cgi' => array (
@@ -1518,7 +1518,7 @@ $form["tabs"]['ipaddress'] = array (
 			'separator'	=> ';'
 		),
 	##################################
-	# ENDE Datatable fields
+	# END Datatable fields
 	##################################
 	)
 );
diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php
index 5d9f81de0b80114e81068d23f9b465939d891118..1da5cdafcd845b83401eeda28b0ceb7a00d2f0de 100644
--- a/interface/web/client/form/client_template.tform.php
+++ b/interface/web/client/form/client_template.tform.php
@@ -495,7 +495,7 @@ $form["tabs"]['limits'] = array (
 			'formtype' => 'CHECKBOXARRAY',
 			'default' => '',
 			'separator' => ',',
-			'valuelimit' => 'client:web_php_options',
+			'valuelimit' => 'system:sites:web_php_options',
 			'value'  => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM')
 		),
 		'limit_cgi' => array (
diff --git a/interface/web/client/form/domain.tform.php b/interface/web/client/form/domain.tform.php
index 549617e713cc3f0bc23e1d312513e3c8f1a7d46a..2d3e1dbdd1781145ea9d06140333879c5fdd1ac6 100644
--- a/interface/web/client/form/domain.tform.php
+++ b/interface/web/client/form/domain.tform.php
@@ -109,7 +109,7 @@ $form["tabs"]['domain'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php
index 706219f76afa9f74ed177ba79cb323d0ce37ba4b..174c18081df4ff04139ec21642e045d71c1d899a 100644
--- a/interface/web/client/form/reseller.tform.php
+++ b/interface/web/client/form/reseller.tform.php
@@ -1080,6 +1080,7 @@ $form["tabs"]['limits'] = array (
 		'web_php_options' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOXARRAY',
+			'valuelimit' => 'system:sites:web_php_options',
 			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
 					'errmsg'=> 'web_php_options_notempty'),
 			),
@@ -1559,7 +1560,7 @@ $form["tabs"]['ipaddress'] = array (
 			'separator'	=> ';'
 		),
 	##################################
-	# ENDE Datatable fields
+	# END Datatable fields
 	##################################
 	)
 );
diff --git a/interface/web/client/lib/lang/ar_client_template_list.lng b/interface/web/client/lib/lang/ar_client_template_list.lng
index 0840184a9bafca2542318ec40c751362e105f931..9112afc626de7cdf3a94257aeec601438c719ed2 100644
--- a/interface/web/client/lib/lang/ar_client_template_list.lng
+++ b/interface/web/client/lib/lang/ar_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Client-Templates';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Template name';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/bg_client_template_list.lng b/interface/web/client/lib/lang/bg_client_template_list.lng
index 0840184a9bafca2542318ec40c751362e105f931..9112afc626de7cdf3a94257aeec601438c719ed2 100644
--- a/interface/web/client/lib/lang/bg_client_template_list.lng
+++ b/interface/web/client/lib/lang/bg_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Client-Templates';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Template name';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/br.lng b/interface/web/client/lib/lang/br.lng
index 2228cf3e211025aea83a8af44b241e0b8d96efec..538a3e2e85416715d0cc35ea3776f7026c5990c4 100644
--- a/interface/web/client/lib/lang/br.lng
+++ b/interface/web/client/lib/lang/br.lng
@@ -10,20 +10,20 @@ $wb['Limit-Templates'] = 'Gabaritos de limites';
 $wb['Add Reseller'] = 'Adicionar revenda';
 $wb['Edit Reseller'] = 'Editar revenda';
 $wb['Resellers'] = 'Revendas';
-$wb['error_has_clients'] = 'Esta revenda possui clientes. Você deve remover os clientes primeiro.';
+$wb['error_has_clients'] = 'Esta revenda possui clientes associados. Certifique-se de remover os clientes associados a mesma antes de removê-la.';
 $wb['add_additional_template_txt'] = 'Adicionar gabarito personalizado';
 $wb['delete_additional_template_txt'] = 'Remover gabarito personalizado';
-$wb['Messaging'] = 'Círculos';
+$wb['Messaging'] = 'Mensagens';
 $wb['Send email'] = 'Enviar e-mail';
-$wb['Edit Client Circle'] = 'Editar círculo';
+$wb['Edit Client Circle'] = 'Editar círculo de clientes';
 $wb['Domains'] = 'Domínios';
 $wb['domain_txt'] = 'Domínio';
 $wb['client_txt'] = 'Cliente';
-$wb['error_domain_in mailuse'] = 'Este domínio não pode ser removido porque está em uso como um domínio de e-mail.';
-$wb['error_domain_in webuse'] = 'Este domínio não pode ser removido porque está em uso como um domínio de site.';
-$wb['error_client_can_not_add_domain'] = 'Você não pode adicionar um novo domínio.';
-$wb['error_client_group_id_empty'] = 'Você deve selecionar um cliente<br>';
-$wb['error_domain_in dnsuse'] = 'Este domínio não pode ser removido porque está em uso como uma zona dns.';
-$wb['error_domain_in dnsslaveuse'] = 'Este domínio não pode ser removido porque está em uso como uma zona dns secundária.';
-$wb['Email-Templates'] = 'Gabaritos de e-mails';
+$wb['error_domain_in dnsuse'] = 'Este domínio não pode ser removido pois é utilizado em uma zona dns.';
+$wb['error_domain_in dnsslaveuse'] = 'Este domínio não pode ser removido pois é utilizado em uma zona dns secundária.';
+$wb['error_domain_in mailuse'] = 'Este domínio não pode ser removido pois é utilizado como um domínio de e-mail.';
+$wb['error_domain_in webuse'] = 'Este domínio não pode ser removido pois é utilizado como um domínio de site.';
+$wb['error_client_can_not_add_domain'] = 'Você não tem permissão para adicionar novos domínios.';
+$wb['error_client_group_id_empty'] = 'Você deve selecionar um cliente.';
+$wb['Email-Templates'] = 'Gabaritos de e-mail';
 ?>
diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng
index ad9282aa4cc24b04dad4473a7fa953e0739fe5b9..c640be54fbe1d0220865606d75d6fb273b7bc263 100644
--- a/interface/web/client/lib/lang/br_client.lng
+++ b/interface/web/client/lib/lang/br_client.lng
@@ -1,26 +1,29 @@
 <?php
 $wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail';
-$wb['limit_mailbox_txt'] = 'Limite de caixas postais';
-$wb['limit_mailalias_txt'] = 'Limite de apelidos de domínio de e-mail';
-$wb['limit_mailforward_txt'] = 'Limite de redirecionamentos de e-mail';
-$wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo';
-$wb['limit_mailrouting_txt'] = 'Limite de transportes de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mail';
+$wb['limit_mailbox_txt'] = 'Limite de contas de e-mail';
+$wb['limit_mailalias_txt'] = 'Limite de alias de e-mail';
+$wb['limit_mailaliasdomain_txt'] = 'Limite de alias de domínios';
+$wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de e-mail';
+$wb['limit_mailcatchall_txt'] = 'Limite de contas cata-tudo';
+$wb['limit_mailrouting_txt'] = 'Limite de rotas de e-mail';
 $wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mail';
 $wb['limit_fetchmail_txt'] = 'Limite de contas de busca';
-$wb['limit_mailquota_txt'] = 'Cota de e-mail';
-$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam lista branca/negra';
-$wb['limit_spamfilter_user_txt'] = 'Limite de usuários de filtros anti-spam';
+$wb['limit_mailquota_txt'] = 'Cota da conta de e-mail';
+$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista branca/negra"';
+$wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam por conta de e-mail';
 $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam';
-$wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
+$wb['default_mailserver_txt'] = 'Servidor de e-mail padrão';
 $wb['company_name_txt'] = 'Empresa';
 $wb['contact_firstname_txt'] = 'Nome do contato';
-$wb['contact_name_txt'] = 'Sobrenome do contato';
-$wb['username_txt'] = 'Nome do usuário';
+$wb['contact_name_txt'] = 'Contato';
+$wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
+$wb['password_click_to_set_txt'] = 'Clique para configurar';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['language_txt'] = 'Idioma';
 $wb['usertheme_txt'] = 'Tema';
-$wb['street_txt'] = 'Rua';
+$wb['street_txt'] = 'Endereço';
 $wb['zip_txt'] = 'CEP';
 $wb['city_txt'] = 'Cidade';
 $wb['state_txt'] = 'Estado';
@@ -28,177 +31,174 @@ $wb['country_txt'] = 'País';
 $wb['telephone_txt'] = 'Telefone';
 $wb['mobile_txt'] = 'Celular';
 $wb['fax_txt'] = 'Fax';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['internet_txt'] = 'Internet';
-$wb['icq_txt'] = 'Skype/Telegram';
+$wb['icq_txt'] = 'Redes sociais';
 $wb['notes_txt'] = 'Notas';
 $wb['company_txt'] = 'Empresa';
-$wb['title_txt'] = 'Título';
+$wb['title_txt'] = 'Cargo';
 $wb['firstname_txt'] = 'Nome';
 $wb['surname_txt'] = 'Sobrenome';
 $wb['limit_domain_txt'] = 'Limite de domínios';
 $wb['limit_subdomain_txt'] = 'Limite de subdomínios';
-$wb['limit_webquota_txt'] = 'Limite da cota de site';
+$wb['limit_webquota_txt'] = 'Limite da cota de sites';
 $wb['limit_database_txt'] = 'Limite de banco de dados';
+$wb['limit_cron_txt'] = 'Limite de tarefas no cron';
+$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefa no cron (chroot e url implícitas)';
+$wb['limit_cron_frequency_txt'] = 'Tempo de espera entre as execuções';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['limit_client_error_notint'] = 'Limite de clientes deve ser um número.';
 $wb['firstname_error_empty'] = 'Nome está em branco.';
 $wb['contact_error_empty'] = 'Contato está em branco.';
-$wb['default_webserver_txt'] = 'Servidor de páginas padrão';
-$wb['limit_web_domain_txt'] = 'Limite de de domínios de site';
-$wb['limit_web_aliasdomain_txt'] = 'Limite de apelidos de domínio';
-$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios';
+$wb['default_webserver_txt'] = 'Servidor web padrão';
+$wb['limit_web_domain_txt'] = 'Limite de domínios de site';
+$wb['limit_web_aliasdomain_txt'] = 'Limite de alias de domínios de site';
+$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios de site';
 $wb['limit_ftp_user_txt'] = 'Limite de usuários ftp';
 $wb['default_dnsserver_txt'] = 'Servidor dns padrão';
 $wb['limit_dns_zone_txt'] = 'Limite de zonas dns';
 $wb['limit_dns_slave_zone_txt'] = 'Limite de zonas dns secundárias';
 $wb['limit_dns_record_txt'] = 'Limite de registros dns';
-$wb['limit_shell_user_txt'] = 'Limite de usuários shell';
+$wb['limit_shell_user_txt'] = 'Limite de usuários do shell';
+$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
+$wb['limit_backup_txt'] = 'Função de backup disponível';
 $wb['limit_client_txt'] = 'Limite de clientes';
 $wb['username_error_empty'] = 'Nome do usuário está em branco.';
 $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
-$wb['limit_maildomain_error_notint'] = 'Limite de contas de e-mail deve ser um número.';
-$wb['limit_mailbox_error_notint'] = 'Limite da contas de e-mail deve ser um número.';
-$wb['limit_mailalias_error_notint'] = 'Limite do apelidos de e-mail deve ser um número.';
-$wb['limit_mailforward_error_notint'] = 'Limite de redirecionamentos de e-mail deve ser um número.';
-$wb['limit_mailcatchall_error_notint'] = 'Limite de contas cata tudo deve ser um número.';
-$wb['limit_mailrouting_error_notint'] = 'Limite de transportes de e-mail deve ser um número.';
-$wb['limit_mailfilter_error_notint'] = 'Limite de filtros de e-mail deve ser um número.';
-$wb['limit_mailfetchmail_error_notint'] = 'Limite de contas de busca deve ser um número.';
-$wb['limit_mailquota_error_notint'] = 'A cota de e-mail deve ser um número.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Limite de filtros anti-spam lista branca/negra deve ser um número.';
-$wb['limit_spamfilter_user_error_notint'] = 'Limite de filtros anti-spam por usuário deve ser um número.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Limite de políticas de filtros anti-spam deve ser um número.';
-$wb['limit_web_domain_error_notint'] = 'Limite de sites deve ser um número.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Limite de apelidos de domínios deve ser um número.';
-$wb['limit_web_subdomain_error_notint'] = 'Limite de subdomínios deve ser um número.';
-$wb['limit_ftp_user_error_notint'] = 'Limite de usuários ftp deve ser um número.';
-$wb['limit_shell_user_error_notint'] = 'Limite de usuários shell deve ser um número.';
-$wb['limit_dns_zone_error_notint'] = 'Limite de registros dns deve ser um número.';
-$wb['limit_dns_slave_zone_error_notint'] = 'Limite de zonas dns secundárias deve ser um número.';
+$wb['limit_maildomain_error_notint'] = 'O limite de domínios de e-mail deve ser um número.';
+$wb['limit_mailmailinglist_error_notint'] = 'O limite de listas de e-mail deve ser um número.';
+$wb['limit_mailbox_error_notint'] = 'O limite de contas de e-mail deve ser um número.';
+$wb['limit_mailalias_error_notint'] = 'O limite de alias de e-mail deve ser um número.';
+$wb['limit_mailaliasdomain_error_notint'] = 'O limite de alias de domínios de e-mail deve ser um número.';
+$wb['limit_mailforward_error_notint'] = 'O limite de encaminhamentos de e-mail deve ser um número.';
+$wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata-tudo deve ser um número.';
+$wb['limit_mailrouting_error_notint'] = 'O limite de rotas de e-mail deve ser um número.';
+$wb['limit_mailfilter_error_notint'] = 'O limite de filtros de e-mail deve ser um número.';
+$wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.';
+$wb['limit_mailquota_error_notint'] = 'O limite das cotas de e-mail deve ser um número.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'O limite de filtros anti-spam "lista branca/negra" deve ser um número.';
+$wb['limit_spamfilter_user_error_notint'] = 'O limite de filtros anti-spam por conta de e-mail deve ser um número.';
+$wb['limit_spamfilter_policy_error_notint'] = 'O limite de políticas anti-spam deve ser um número.';
+$wb['limit_web_domain_error_notint'] = 'O limite de domínios de site deve ser um número.';
+$wb['limit_web_aliasdomain_error_notint'] = 'O limite de alias de domínios de site deve ser um número.';
+$wb['limit_web_subdomain_error_notint'] = 'O limite de subdomínios de site deve ser um número.';
+$wb['limit_ftp_user_error_notint'] = 'O limite de usuários ftp deve ser um número.';
+$wb['limit_shell_user_error_notint'] = 'O limite de usuários do shell deve ser um número.';
+$wb['limit_webdav_user_error_notint'] = 'O limite de usuários webdav deve ser um número.';
+$wb['limit_dns_zone_error_notint'] = 'O limite de zonas dns deve ser um número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'O limite de zonas dns secundárias deve ser um número.';
+$wb['limit_dns_record_error_notint'] = 'O limite de registros dns deve ser um número.';
 $wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['limit_database_error_notint'] = 'Limite de banco de dados deve ser um número.';
+$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número.';
+$wb['limit_cron_error_notint'] = 'O limite de tarefas no cron deve ser um número.';
+$wb['limit_cron_error_frequency'] = 'O limite de frequência de tarefas no cron deve ser um número.';
 $wb['username_error_regex'] = 'O nome de usuário contém caracteres inválidos.';
-$wb['template_master_txt'] = 'Gabarito principal';
+$wb['template_master_txt'] = 'Gabarito mestre';
 $wb['template_additional_txt'] = 'Gabarito personalizado';
-$wb['ssh_chroot_txt'] = 'Opções do SSH Chroot';
-$wb['web_php_options_txt'] = 'Opções do PHP';
-$wb['limit_client_error'] = 'O limite de clientes foi alcançado.';
-$wb['limit_cron_txt'] = 'Limite de tarefas no cron.';
-$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefas no cron (em chroot e url completas)';
-$wb['limit_cron_frequency_txt'] = 'Intervalo mínimo entre as execuções';
-$wb['limit_cron_error_notint'] = 'Limite do cron deve ser um número.';
-$wb['limit_cron_error_frequency'] = 'Limite de frequência do cron deve ser um número.';
-$wb['limit_mailaliasdomain_txt'] = 'Limite de apelidos de domínios';
-$wb['limit_mailaliasdomain_error_notint'] = 'Limite de apelidos de domínio deve ser um número.';
-$wb['limit_web_quota_txt'] = 'Cota de site';
-$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
-$wb['limit_trafficquota_error_notint'] = 'A cota de tráfego dever ser um número.';
-$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
-$wb['limit_webdav_user_error_notint'] = 'Limite de usuários webdav deve ser um número.';
-$wb['limit_backup_txt'] = 'Função de backup disponível';
-$wb['customer_no_txt'] = 'Código do cliente';
-$wb['vat_id_txt'] = 'VAT ID';
-$wb['required_fields_txt'] = '*Campos obrigatórios';
-$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mail';
-$wb['limit_mailmailinglist_error_notint'] = 'Limite do listas de e-mail deve ser um número.';
-$wb['company_id_txt'] = 'ID da Empresa';
-$wb['limit_openvz_vm_txt'] = 'Limite de servidores virtuais';
-$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito de servidor virtual';
-$wb['limit_openvz_vm_error_notint'] = 'Limite de servidores virtuais deve ser um número.';
-$wb['web_php_options_notempty'] = 'Nenhuma opção PHP selecionada. Selecione ao menos uma opção.';
-$wb['ssh_chroot_notempty'] = 'Nenhuma opção de SSH chroot selecionada. Selecione ao menos uma opção.';
-$wb['username_error_collision'] = 'O usuário não pode ter como iniciais as palavras -web- ou -web- seguida por um número.';
+$wb['active_template_additional_txt'] = 'Ativar gabarito personalizado';
 $wb['add_additional_template_txt'] = 'Adicionar gabarito personalizado';
 $wb['delete_additional_template_txt'] = 'Remover gabarito personalizado';
+$wb['ssh_chroot_txt'] = 'Opções SSH-Chroot';
+$wb['web_php_options_txt'] = 'Opções PHP';
 $wb['limit_cgi_txt'] = 'CGI disponível';
 $wb['limit_ssi_txt'] = 'SSI disponível';
 $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
 $wb['force_suexec_txt'] = 'Forçar SuEXEC';
-$wb['limit_hterror_txt'] = 'Custom error docs disponível';
-$wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
+$wb['limit_hterror_txt'] = 'Custom errordocs disponível';
+$wb['limit_wildcard_txt'] = 'Curingas de subdomínio disponível';
 $wb['limit_ssl_txt'] = 'SSL disponível';
-$wb['bank_account_number_txt'] = 'Conta corrente no.';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
+$wb['limit_client_error'] = 'O limite de clientes foi alcançado.';
+$wb['limit_web_quota_txt'] = 'Cota de site';
+$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
+$wb['limit_trafficquota_error_notint'] = 'Cota de tráfego deve ser um número.';
+$wb['customer_no_txt'] = 'Código do cliente.';
+$wb['vat_id_txt'] = 'VAT ID';
+$wb['required_fields_txt'] = '*Campos obrigatórios';
+$wb['company_id_txt'] = 'Código da empresa';
+$wb['limit_openvz_vm_txt'] = 'Limite de máquinas virtuais';
+$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito de máquina virtual';
+$wb['limit_openvz_vm_error_notint'] = 'O limite de máquinas virtuais deve ser um número.';
+$wb['web_php_options_notempty'] = 'Nenhuma opção php selecionada. Selecione ao menos uma opção.';
+$wb['ssh_chroot_notempty'] = 'Nenhuma opção ssh chroot selecionada. Selecione ao menos uma opção.';
+$wb['username_error_collision'] = 'O nome de usuário não pode conter as palavras "web" ou "web" seguida de um número.';
+$wb['bank_account_number_txt'] = 'Conta corrente';
+$wb['bank_account_owner_txt'] = 'Proprietário da conta corrente';
 $wb['bank_code_txt'] = 'Código do banco';
 $wb['bank_name_txt'] = 'Nome do banco';
 $wb['bank_account_iban_txt'] = 'IBAN';
 $wb['bank_account_swift_txt'] = 'BIC/Swift';
-$wb['web_limits_txt'] = 'Limites web';
-$wb['email_limits_txt'] = 'Limites de e-mails';
+$wb['web_limits_txt'] = 'Limites de site';
+$wb['email_limits_txt'] = 'Limites de e-mail';
+$wb['xmpp_limits_txt'] = 'Limites xmpp';
 $wb['database_limits_txt'] = 'Limites de banco de dados';
 $wb['cron_job_limits_txt'] = 'Limites de tarefas no cron';
-$wb['dns_limits_txt'] = 'Limites de DNS';
-$wb['virtualization_limits_txt'] = 'Limites de virtualização';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['active_template_additional_txt'] = 'Complementos ativos';
-$wb['bank_account_owner_txt'] = 'Proprietário da conta corrente';
-$wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
-$wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo (ou em branco).';
+$wb['dns_limits_txt'] = 'Limites de registros dns';
+$wb['virtualization_limits_txt'] = 'Limites de máquinas virtuais';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['email_error_isemail'] = 'Por favor, insira um endereço de e-mail válido.';
+$wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo ou não pode estar está em branco.';
 $wb['paypal_email_error_isemail'] = 'Por favor, insira um e-mail do PayPal válido.';
-$wb['paypal_email_txt'] = 'e-mail do PayPal';
-$wb['err_msg_master_tpl_set'] = 'Todos as configurações de limites personalizadas são ignoradas se qualquer gabarito mestre ou algum gabarito \"personalizado\" for selecionado.';
-$wb['aps_limits_txt'] = 'Limites de apps instalados';
-$wb['limit_aps_txt'] = 'Limite de instâncias de apps';
-$wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
+$wb['paypal_email_txt'] = 'e-Mail do PayPal';
+$wb['err_msg_master_tpl_set'] = 'Todas as configurações de limites serão ignoradas se for selecionado a opção de gabarito personalizado.';
+$wb['aps_limits_txt'] = 'Limites de instalações de APPs';
+$wb['limit_aps_txt'] = 'Limite de instâncias de APPs';
+$wb['limit_aps_error_notint'] = 'O limite de instâncias de APPs deve ser um número.';
 $wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
-$wb['locked_txt'] = 'Bloqueado (web desabilitado)';
-$wb['canceled_txt'] = 'Cancelado (acesso do cliente desabilitado)';
+$wb['locked_txt'] = 'Bloqueado (desabilita todos os sites, etc.)';
+$wb['canceled_txt'] = 'Cancelado (desabilita o acesso do cliente.)';
 $wb['gender_txt'] = 'Título';
 $wb['gender_m_txt'] = 'Sr.';
 $wb['gender_f_txt'] = 'Sra.';
-$wb['added_by_txt'] = 'Cadastrado por';
-$wb['added_date_txt'] = 'Data do cadastro';
-$wb['parent_client_id_txt'] = 'Cliente da revenda';
-$wb['none_txt'] = 'nenhum';
-$wb['email_error_empty'] = 'e-mail está em branco.';
-$wb['xmpp_limits_txt'] = 'Limites XMPP';
 $wb['web_servers_txt'] = 'Servidores web';
-$wb['web_servers_placeholder'] = 'Selecionar servidores web';
-$wb['no_web_server_error'] = 'Ao menos um servidor de páginas deve ser selecionado.';
-$wb['web_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor de páginas. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['dns_servers_txt'] = 'Servidores dns';
-$wb['dns_servers_placeholder'] = 'Selecionar servidores dns';
-$wb['no_dns_server_error'] = 'Ao menos um servidor dns deve ser selecionado.';
-$wb['dns_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor dns. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['db_servers_txt'] = 'Servidor de banco de dados';
-$wb['db_servers_placeholder'] = 'Selecione o servidor de banco de dados';
+$wb['web_servers_placeholder'] = 'Selecione os servidores web';
+$wb['no_web_server_error'] = 'Ao menos um servidor web deve ser selecionado.';
+$wb['web_servers_used'] = 'O servidor web que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
+$wb['dns_servers_txt'] = 'Servidores DNS';
+$wb['dns_servers_placeholder'] = 'Selecione os servidores dns';
+$wb['no_dns_server_error'] = 'Ao menos um servidor DNS deve ser selecionado.';
+$wb['dns_servers_used'] = 'O servidor dns que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
+$wb['db_servers_txt'] = 'Servidores de banco de dados';
+$wb['db_servers_placeholder'] = 'Selecione os servidores de banco de dados';
 $wb['no_db_server_error'] = 'Ao menos um servidor de banco de dados deve ser selecionado.';
-$wb['db_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor de banco de dados. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
+$wb['db_servers_used'] = 'O servidor de banco de dados que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
 $wb['mail_servers_txt'] = 'Servidores de e-mail';
 $wb['mail_servers_placeholder'] = 'Selecione os servidores de e-mail';
-$wb['no_mail_server_error'] = 'Ao menos um servidor de e-mail deve ser selecionado';
-$wb['mail_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor de e-mail. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
+$wb['no_mail_server_error'] = 'Ao menos um servidor de e-mail deve ser selecionado.';
+$wb['mail_servers_used'] = 'O servidor de e-mail que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
 $wb['xmpp_servers_txt'] = 'Servidores XMPP';
-$wb['xmpp_servers_placeholder'] = 'Selecione os servidores XMPP';
-$wb['no_xmpp_server_error'] = 'Ao menos um servidor XMPP deve ser selecionado.';
-$wb['xmpp_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor XMPP. Tenha certeza que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['limit_xmpp_domain_error_notint'] = 'Limite de domínios XMPP deve ser um número.';
-$wb['limit_xmpp_user_error_notint'] = 'Limite de usuários XMPP deve ser um número.';
-$wb['limit_xmpp_domain_txt'] = 'Limite de domínios XMPP';
-$wb['limit_xmpp_user_txt'] = 'Limite de contas XMPP';
-$wb['limit_xmpp_muc_txt'] = 'Chat multiusuário disponível';
+$wb['xmpp_servers_placeholder'] = 'Selecione o(s) servidor(es) xmpp';
+$wb['no_xmpp_server_error'] = 'Ao menos um servidor xmpp deve ser selecionado.';
+$wb['xmpp_servers_used'] = 'O servidor xmpp que você está tentando remover para este cliente é utilizado pelo mesmo. Certifique-se que este servidor não esteja em uso pelo cliente antes de removê-lo.';
+$wb['limit_xmpp_domain_error_notint'] = 'O limite de domínios xmpp deve ser um número.';
+$wb['limit_xmpp_user_error_notint'] = 'O limite de usuários xmpp deve ser um número.';
+$wb['limit_xmpp_domain_txt'] = 'Limite de domínios xmpp';
+$wb['limit_xmpp_user_txt'] = 'Limite de usuários xmpp';
+$wb['limit_xmpp_muc_txt'] = 'Chat multiusuário (MUC) disponível';
 $wb['limit_xmpp_pastebin_txt'] = 'Pastebin para MUC disponível';
-$wb['limit_xmpp_httparchive_txt'] = 'Arquivo HTTP para MUC disponível';
+$wb['limit_xmpp_httparchive_txt'] = 'Arquivos http para MUC disponível';
 $wb['limit_xmpp_anon_txt'] = 'Host anônimo disponível';
-$wb['limit_xmpp_vjud_txt'] = 'Diretório de usuário VJUD disponível';
+$wb['limit_xmpp_vjud_txt'] = 'Diretório de usuários VJUD disponível';
 $wb['limit_xmpp_proxy_txt'] = 'Proxy Bytestream disponível';
 $wb['limit_xmpp_status_txt'] = 'Estado do host disponível';
-$wb['limit_database_quota_txt'] = 'Cota para banco de dados';
-$wb['limit_database_quota_error_notint'] = 'A cota para banco de dados deve ser um número.';
+$wb['added_by_txt'] = 'Cadastrado por';
+$wb['added_date_txt'] = 'Data do cadastro';
+$wb['parent_client_id_txt'] = 'Cliente da revenda';
+$wb['none_txt'] = 'nenhum';
+$wb['limit_database_quota_txt'] = 'Cota do banco de dados';
+$wb['limit_database_quota_error_notint'] = 'O limite da cota de banco de dados deve ser um número.';
+$wb['limit_database_user_txt'] = 'Limite de  usuários do banco de dados';
+$wb['limit_database_user_error_notint'] = 'O limite de usuários do banco de dados deve ser um número.';
 $wb['reseller_txt'] = 'Revenda';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['invalid_vat_id'] = 'O VAT ID é inválido.';
-$wb['limit_database_user_txt'] = 'Limite de usuários de banco de dados';
-$wb['limit_database_user_error_notint'] = 'Limite de usuários de banco de dados deve ser um número.';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
-$wb['limit_directive_snippets_txt'] = 'Exibir seleção de configurações do servidor de páginas';
-$wb['password_click_to_set_txt'] = 'Selecionar para configurar';
-$wb['limit_dns_record_error_notint'] = 'O limite de registros dns deve ser um número.';
+$wb['invalid_vat_id'] = 'O ID do VAT é inválido.';
+$wb['email_error_empty'] = 'O e-mail está em branco';
+$wb['limit_directive_snippets_txt'] = 'Exibir configurações de seleção do servidor web';
 $wb['Limits'] = 'Limites';
 ?>
diff --git a/interface/web/client/lib/lang/br_client_circle.lng b/interface/web/client/lib/lang/br_client_circle.lng
index 364172f1ae95a7ebfea3b25ff7b4d14b63e2fade..6c6cb132718096bfddefebf37f4f7aae72ba0216 100644
--- a/interface/web/client/lib/lang/br_client_circle.lng
+++ b/interface/web/client/lib/lang/br_client_circle.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['Client Circle'] = 'Círculo de cliente';
-$wb['Circle'] = 'Círculo';
+$wb['Client Circle'] = 'Círculos de clientes';
+$wb['Circle'] = 'Círculos';
 $wb['circle_txt'] = 'Círculo';
 $wb['circle_name_txt'] = 'Nome do círculo';
 $wb['client_ids_txt'] = 'Clientes/Revendas';
diff --git a/interface/web/client/lib/lang/br_client_circle_list.lng b/interface/web/client/lib/lang/br_client_circle_list.lng
index 857984f89242486b498a08b6aa15badfbb5f9f62..1c1a43f49aad36796541c4c268f0f80ff65f0496 100644
--- a/interface/web/client/lib/lang/br_client_circle_list.lng
+++ b/interface/web/client/lib/lang/br_client_circle_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Círculos de Clientes';
-$wb['circle_id_txt'] = 'ID do Círculo';
-$wb['circle_name_txt'] = 'Nome do Círculo';
+$wb['list_head_txt'] = 'Círculo de clientes';
+$wb['circle_id_txt'] = 'ID do círculo';
+$wb['circle_name_txt'] = 'Nome do círculo';
 $wb['description_txt'] = 'Descrição';
 $wb['add_new_record_txt'] = 'Adicionar novo círculo';
 $wb['filter_txt'] = 'Filtro';
diff --git a/interface/web/client/lib/lang/br_client_del.lng b/interface/web/client/lib/lang/br_client_del.lng
index 6c3e4e668aa11432131cd98c7fdfa925b939e695..880c12c36a2ea0c936c8c319090b69f5e052cea1 100644
--- a/interface/web/client/lib/lang/br_client_del.lng
+++ b/interface/web/client/lib/lang/br_client_del.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['confirm_action_txt'] = 'Confirmar ação';
-$wb['delete_explanation'] = 'Atenção: está ação removerá todos os objetos associados ao cliente!';
+$wb['delete_explanation'] = 'Esta ação removerá os seguintes registros associados a este cliente.';
 $wb['btn_save_txt'] = 'Remover o cliente';
 $wb['btn_cancel_txt'] = 'Cancelar sem remover o cliente';
 $wb['confirm_client_delete_txt'] = 'Você tem certeza que deseja remover este cliente?';
diff --git a/interface/web/client/lib/lang/br_client_message.lng b/interface/web/client/lib/lang/br_client_message.lng
index 802dcca368aaa7e1691bc72ca39ee6abb1421395..75aa3480c5af620a875cd30b700928b9e0f0074c 100644
--- a/interface/web/client/lib/lang/br_client_message.lng
+++ b/interface/web/client/lib/lang/br_client_message.lng
@@ -1,16 +1,16 @@
 <?php
+$wb['page_head_txt'] = 'Enviar informações do cliente';
 $wb['btn_send_txt'] = 'Enviar e-mail';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['sender_txt'] = 'Remetente';
+$wb['sender_txt'] = 'e-Mail do remetente';
 $wb['subject_txt'] = 'Assunto';
 $wb['message_txt'] = 'Mensagem';
-$wb['form_legend_client_txt'] = 'Enviar mensagem a todos os clientes.';
-$wb['form_legend_admin_txt'] = 'Enviar mensagem a todos clientes e revendas.';
-$wb['sender_invalid_error'] = 'O e-mail do remetente é é inválido.';
-$wb['subject_invalid_error'] = 'O assunto está em branco.';
-$wb['message_invalid_error'] = 'A mensagem está em branco.';
-$wb['email_sent_to_txt'] = 'Enviar e-mail para:';
-$wb['page_head_txt'] = 'Enviar informações aos clientes';
+$wb['form_legend_client_txt'] = 'Enviar e-mail para clientes.';
+$wb['form_legend_admin_txt'] = 'Enviar e-mail para clientes e revendas.';
+$wb['sender_invalid_error'] = 'Remetente inválido.';
+$wb['subject_invalid_error'] = 'Assunto está em branco.';
+$wb['message_invalid_error'] = 'Mensagem está em branco.';
+$wb['email_sent_to_txt'] = 'e-Mail enviado para:';
 $wb['recipient_txt'] = 'Destinatário';
 $wb['all_clients_resellers_txt'] = 'Todos os clientes e revendas';
 $wb['all_clients_txt'] = 'Todos os clientes';
diff --git a/interface/web/client/lib/lang/br_client_message_template.lng b/interface/web/client/lib/lang/br_client_message_template.lng
index eb3c0b99382144c3017a9a9060973e30de8a82ab..8fb0934837872af9fd6eebfe68ba219e382b96b2 100644
--- a/interface/web/client/lib/lang/br_client_message_template.lng
+++ b/interface/web/client/lib/lang/br_client_message_template.lng
@@ -4,10 +4,10 @@ $wb['template_name_txt'] = 'Nome do gabarito';
 $wb['subject_txt'] = 'Assunto';
 $wb['message_txt'] = 'Mensagem';
 $wb['Email template'] = 'Gabarito do e-mail';
-$wb['Settings'] = 'Configuração';
+$wb['Settings'] = 'Configurações';
 $wb['variables_txt'] = 'Variáveis';
-$wb['variables_description_txt'] = '(As variáveis usuário e senha estão disponíveis apenas em e-mails de boas vindas.)';
-$wb['duplicate_welcome_error'] = 'Disponível apenas para o gabarito padrão de e-mail de boas vindas. Por favor edite o gabarito existente ou adicione um novo gabarito.';
-$wb['subject_error_empty'] = 'Subject is empty';
-$wb['message_error_empty'] = 'Message is empty';
+$wb['variables_description_txt'] = '(Variáveis de usuário e senha só estão disponíveis em e-mail de boas-vindas.)';
+$wb['duplicate_welcome_error'] = 'Só pode existir apenas um gabarito de e-mail de boas-vindas. Edite o modelo existente ao invés de adicionar um novo.';
+$wb['subject_error_empty'] = 'Assunto está em branco.';
+$wb['message_error_empty'] = 'Mensagem está em branco.';
 ?>
diff --git a/interface/web/client/lib/lang/br_client_message_template_list.lng b/interface/web/client/lib/lang/br_client_message_template_list.lng
index 9853a71ad3d5e7687a8e8c041449114c22eabcd5..36737693548ded01de015f277df8c59104f881cd 100644
--- a/interface/web/client/lib/lang/br_client_message_template_list.lng
+++ b/interface/web/client/lib/lang/br_client_message_template_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Gabarito de e-mails';
+$wb['list_head_txt'] = 'Gabaritos de e-mail';
 $wb['template_type_txt'] = 'Mensagem de';
 $wb['template_name_txt'] = 'Nome do gabarito';
 ?>
diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng
index bc7124b16cfae24f37b7b307dbd05332368add8c..c09c622bb2794a0cdf689ea31849ee75da65cf92 100644
--- a/interface/web/client/lib/lang/br_client_template.lng
+++ b/interface/web/client/lib/lang/br_client_template.lng
@@ -1,123 +1,126 @@
 <?php
-$wb['limit_client_error_notint'] = 'Limite de clientes não é um número.';
+$wb['template_type_txt'] = 'Tipo de gabarito';
+$wb['template_name_txt'] = 'Nome do gabarito';
+$wb['limit_client_error_notint'] = 'Limite de cliente não é um número.';
+$wb['default_mailserver_txt'] = 'Servidor de e-mail padrão';
 $wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail';
-$wb['limit_mailbox_txt'] = 'Limite de caixas postais';
-$wb['limit_mailalias_txt'] = 'Limite de apelidos de e-mail';
-$wb['limit_mailforward_txt'] = 'Limite de redirecionamentos de e-mail';
-$wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo';
-$wb['limit_mailrouting_txt'] = 'Limite de transportes de e-mails';
+$wb['limit_mailbox_txt'] = 'Limite de contas de e-mail';
+$wb['limit_mailalias_txt'] = 'Limite de alias de e-mail';
+$wb['limit_mailaliasdomain_txt'] = 'Limite de alias de domínios de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mail';
+$wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de e-mail';
+$wb['limit_mailcatchall_txt'] = 'Limite de contas cata-tudo';
+$wb['limit_mailrouting_txt'] = 'Limite de rotas de e-mail';
 $wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mail';
 $wb['limit_fetchmail_txt'] = 'Limite de contas de busca';
-$wb['limit_mailquota_txt'] = 'Espaço da caixa postal';
-$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam permitidos lista branca/negra';
-$wb['limit_spamfilter_user_txt'] = 'Limite de usuários de filtros anti-spam';
+$wb['limit_mailquota_txt'] = 'Cota da conta de e-mail';
+$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista branca/negra"';
+$wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam para conta de e-mail';
 $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam';
 $wb['limit_domain_txt'] = 'Limite de domínios';
-$wb['limit_subdomain_txt'] = 'Limite de subdomínios';
-$wb['limit_webquota_txt'] = 'Cota de site';
+$wb['limit_subdomain_txt'] = 'Limite de sub-domínios';
+$wb['limit_webquota_txt'] = 'Limite da cota de site';
 $wb['limit_database_txt'] = 'Limite de banco de dados';
+$wb['limit_cron_txt'] = 'Limite de tarefas no cron';
+$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefa no cron (chroot e url implícitas)';
+$wb['limit_cron_frequency_txt'] = 'Tempo de espera entre as execuções';
+$wb['default_webserver_txt'] = 'Servidor web padrão';
 $wb['limit_web_domain_txt'] = 'Limite de domínios de site';
-$wb['limit_web_aliasdomain_txt'] = 'Limite de apelidos de domínio de site';
-$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios de site';
-$wb['limit_ftp_user_txt'] = 'Limite de usuários ftp';
-$wb['limit_dns_zone_txt'] = 'Limite de zonas dns primárias';
+$wb['limit_web_aliasdomain_txt'] = 'Limite de alias de domínios de site';
+$wb['limit_web_subdomain_txt'] = 'Limite de sud-domínios de site';
+$wb['limit_ftp_user_txt'] = 'Limite de usuário FTP';
+$wb['default_dnsserver_txt'] = 'Servidor DNS padrão';
+$wb['limit_dns_zone_txt'] = 'Limite de zonas dns';
+$wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundário';
 $wb['limit_dns_slave_zone_txt'] = 'Limite de zonas dns secundárias';
 $wb['limit_dns_record_txt'] = 'Limite de registros dns';
-$wb['limit_shell_user_txt'] = 'Limite de usuários shell';
+$wb['limit_shell_user_txt'] = 'Limite de usuários do shell';
+$wb['limit_webdav_user_txt'] = 'Limite de usuário Webdav';
+$wb['limit_backup_txt'] = 'Funções de backup disponível';
 $wb['limit_client_txt'] = 'Limite de clientes';
-$wb['limit_maildomain_error_notint'] = 'Limite de e-mails deve ser um número';
-$wb['limit_mailbox_error_notint'] = 'Limite de caixas postais deve ser um número';
-$wb['limit_mailalias_error_notint'] = 'Limite de apelidos de domínio de e-mails deve ser um número';
-$wb['limit_mailforward_error_notint'] = 'Limite de redirecionamentos de e-mail deve ser um número';
-$wb['limit_mailcatchall_error_notint'] = 'Limite de contas cata tudo deve ser um número';
-$wb['limit_mailrouting_error_notint'] = 'Limite de transportes de e-mails deve ser um número';
-$wb['limit_mailfilter_error_notint'] = 'Limite de filtros de e-mails deve ser um número.';
-$wb['limit_mailfetchmail_error_notint'] = 'Limite de contas de busca deve ser um número.';
-$wb['limit_mailquota_error_notint'] = 'Cota de e-mail deve ser um número.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Limite de filtros anti-spam lista branca/negra deve ser um número';
-$wb['limit_spamfilter_user_error_notint'] = 'Limite de filtros anti-spam deve ser um número.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Limite de políticas anti-spam deve ser um número.';
-$wb['limit_web_domain_error_notint'] = 'Limite de sites deve ser um número';
-$wb['limit_web_aliasdomain_error_notint'] = 'Limite de apelidos de domínio de site deve ser um número';
-$wb['limit_web_subdomain_error_notint'] = 'Limite de subdomínios de site deve ser um número';
-$wb['limit_ftp_user_error_notint'] = 'Limite de contas FTP deve ser um número';
-$wb['limit_shell_user_error_notint'] = 'Limite de contas shell deve ser um número';
-$wb['limit_dns_zone_error_notint'] = 'Limite de zonas DNS primárias deve ser um número';
-$wb['limit_dns_slave_zone_error_notint'] = 'Limite de zonas DNS secundárias deve ser um número.';
-$wb['limit_dns_record_error_notint'] = 'Limite de registros DNS deve ser um número.';
-$wb['limit_database_error_notint'] = 'Limite de banco de dados deve ser um número';
-$wb['error_template_name_empty'] = 'Por favor insira o nome do gabarito';
-$wb['limit_cron_txt'] = 'Limite de tarefas no cron';
-$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefas no cron (em chroot e url completas)';
-$wb['limit_cron_frequency_txt'] = 'Intervalo mínimo entre as execuções';
-$wb['limit_cron_error_notint'] = 'Limite  do cron deve ser um número.';
-$wb['limit_cron_error_frequency'] = 'Limite de frequência do cron deve ser um número.';
-$wb['limit_mailaliasdomain_txt'] = 'Limite de apelidos de domínio de e-mails';
-$wb['limit_mailaliasdomain_error_notint'] = 'Limite de apelidos de domínio de e-mails deve ser um número.';
+$wb['limit_maildomain_error_notint'] = 'O limite de domínios de e-mail deve ser um número.';
+$wb['limit_mailmailinglist_error_notint'] = 'O limite de listas de e-mail deve ser um número.';
+$wb['limit_mailbox_error_notint'] = 'O limite de contas de e-mail deve ser um número.';
+$wb['limit_mailalias_error_notint'] = 'O limite de alias de e-mail deve ser um número.';
+$wb['limit_mailaliasdomain_error_notint'] = 'O limite de alias de domínios deve ser um número.';
+$wb['limit_mailforward_error_notint'] = 'O limite de encaminhamento de e-mails deve ser um número.';
+$wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata-tudo deve ser um número.';
+$wb['limit_mailrouting_error_notint'] = 'O limite de rotas de e-mail deve ser um número.';
+$wb['limit_mailfilter_error_notint'] = 'O limite de filtros de e-mail deve ser um número.';
+$wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.';
+$wb['limit_mailquota_error_notint'] = 'O limite da cota de e-mails deve ser um número.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'O limite de filtros anti-spam "lista branca/negra" deve ser um número.';
+$wb['limit_spamfilter_user_error_notint'] = 'O limite de filtros anti-spam por conta de e-mail deve ser um número.';
+$wb['limit_spamfilter_policy_error_notint'] = 'O limite de políticas anti-spam deve ser um número.';
+$wb['limit_web_domain_error_notint'] = 'O limite de sites deve ser um número.';
+$wb['limit_web_aliasdomain_error_notint'] = 'O limite de alias de domínio para sites deve ser um número.';
+$wb['limit_web_subdomain_error_notint'] = 'O limite de sub-domínios para site deve ser um número.';
+$wb['limit_ftp_user_error_notint'] = 'O limite de usuários ftp deve ser um número.';
+$wb['limit_shell_user_error_notint'] = 'O limite de usuários do shell deve ser um número.';
+$wb['limit_webdav_user_error_notint'] = 'O limite de usuários webdav deve ser um número.';
+$wb['limit_dns_zone_error_notint'] = 'O limite de zonas dns deve ser um número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'O limite de zonas dns secundárias deve ser um número.';
+$wb['limit_dns_record_error_notint'] = 'O limite de registros dns deve ser um número.';
+$wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
+$wb['limit_database_txt'] = 'Limite de banco de dados';
+$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número.';
+$wb['limit_cron_error_notint'] = 'O limite de tarefas no cron deve ser um número.';
+$wb['limit_cron_error_frequency'] = 'O limite de execuções no cron deve ser um número.';
+$wb['error_template_name_empty'] = 'Por favor, insira um nome para o gabarito';
 $wb['limit_web_quota_txt'] = 'Cota de site';
-$wb['limit_traffic_quota_txt'] = 'Cota de Tráfego';
-$wb['limit_trafficquota_error_notint'] = 'A cota de tráfego deve ser um número.';
-$wb['template_del_aborted_txt'] = 'Remoção abortada. Ainda existem clientes com o gabarito selecionado.';
-$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
-$wb['limit_webdav_user_error_notint'] = 'Limite de usuários webdav deve ser um número.';
-$wb['limit_backup_txt'] = 'Funções de backup disponíveis';
-$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mails';
-$wb['limit_mailmailinglist_error_notint'] = 'Limite de listas de e-mails deve ser um número.';
-$wb['limit_openvz_vm_txt'] = 'Limite de servidores virtuais';
-$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito de servidor virtual';
-$wb['limit_openvz_vm_error_notint'] = 'Limite de servidores virtuais deve ser um número.';
-$wb['ssh_chroot_txt'] = 'Opções SSH-Chroot';
+$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
+$wb['limit_trafficquota_error_notint'] = 'Cota de tráfego deve ser um número.';
+$wb['template_del_aborted_txt'] = 'Remover cancelado. Ainda existe algum cliente com este gabarito em uso.';
+$wb['limit_openvz_vm_txt'] = 'Limite de máquinas virtuais';
+$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito para máquina virtual';
+$wb['limit_openvz_vm_error_notint'] = 'O limite de máquinas virtuais deve ser um número.';
+$wb['ssh_chroot_txt'] = 'Opções de SSH-Chroot';
 $wb['web_php_options_txt'] = 'Opções PHP';
-$wb['template_type_txt'] = 'Tipo de Gabarito';
-$wb['template_name_txt'] = 'Nome do Gabarito';
 $wb['limit_cgi_txt'] = 'CGI disponível';
 $wb['limit_ssi_txt'] = 'SSI disponível';
 $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
 $wb['force_suexec_txt'] = 'Forçar SuEXEC';
-$wb['limit_hterror_txt'] = 'Diretório \"Custom error docs\" disponível';
-$wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
+$wb['limit_hterror_txt'] = 'Custom-error-docs disponível';
+$wb['limit_wildcard_txt'] = 'Curingas de sub-domínio disponível';
 $wb['limit_ssl_txt'] = 'SSL disponível';
-$wb['web_limits_txt'] = 'Limites web';
-$wb['email_limits_txt'] = 'Limites de e-mail';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let';
+$wb['web_limits_txt'] = 'Limites de site';
+$wb['email_limits_txt'] = 'Limites de e-mails';
 $wb['database_limits_txt'] = 'Limites de banco de dados';
-$wb['cron_job_limits_txt'] = 'Limites de tarefas no cron';
+$wb['cron_job_limits_txt'] = 'Limite de tarefas no cron';
 $wb['dns_limits_txt'] = 'Limites de DNS';
 $wb['virtualization_limits_txt'] = 'Limites de virtualização';
-$wb['aps_limits_txt'] = 'Limites de instalações de apps';
-$wb['limit_aps_txt'] = 'Limites de instâncias de apps';
-$wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
+$wb['aps_limits_txt'] = 'Limites de instalações de aplicações - APPs';
+$wb['limit_aps_txt'] = 'Limite de instâncias para APPs';
+$wb['limit_aps_error_notint'] = 'O limite de instância para APPs deve ser um número.';
 $wb['limit_domainmodule_txt'] = 'Limites de módulos de domínio';
 $wb['client_limits_txt'] = 'Limites de clientes';
-$wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
-$wb['default_webserver_txt'] = 'Servidor de páginas padrão';
-$wb['default_dnsserver_txt'] = 'Servidor DNS padrão';
-$wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundário padrão';
-$wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['limit_database_quota_txt'] = 'Cota para banco de dados';
-$wb['limit_database_quota_error_notint'] = 'Limite da cota para banco de dados deve ser um número.';
-$wb['xmpp_limits_txt'] = 'Limites XMPP';
-$wb['xmpp_servers_txt'] = 'Servidores XMPP';
-$wb['xmpp_servers_placeholder'] = 'Selecionar servidores XMPP';
-$wb['no_xmpp_server_error'] = 'Ao menos um servidor XMPP deve ser selecionado.';
-$wb['xmpp_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor XMPP. Tenha certeza que este servidor não é usando por este cliente antes de removê-lo.';
-$wb['limit_xmpp_domain_error_notint'] = 'Limite de domínios XMPP deve ser um número.';
-$wb['limit_xmpp_user_error_notint'] = 'Limite de usuários XMPP deve ser um número.';
-$wb['limit_xmpp_domain_txt'] = 'Limite de domínios XMPP';
-$wb['limit_xmpp_user_txt'] = 'Limite de contas XMPP';
+$wb['limit_database_quota_txt'] = 'Cotas de banco de dados';
+$wb['limit_database_quota_error_notint'] = 'O limite das cotas de banco de dados deve ser um número.';
+$wb['xmpp_limits_txt'] = 'Limites de xmpp';
+$wb['xmpp_servers_txt'] = 'Servidores xmpp';
+$wb['xmpp_servers_placeholder'] = 'Selecione o(s) servidor(es) xmpp';
+$wb['no_xmpp_server_error'] = 'Ao menos um servidor xmpp deve ser selecionado.';
+$wb['xmpp_servers_used'] = 'O servidor que você está tentando remover para este cliente é usado como um servidor xmpp. Garanta que este servidor não é usado por este cliente antes de removê-lo.';
+$wb['limit_xmpp_domain_error_notint'] = 'O limite de domínios xmpp deve ser um número.';
+$wb['limit_xmpp_user_error_notint'] = 'O limite de usuários xmpp deve ser um número.';
+$wb['limit_xmpp_domain_txt'] = 'Limite de domínios xmpp';
+$wb['limit_xmpp_user_txt'] = 'Limite de usuários xmpp';
 $wb['limit_xmpp_muc_txt'] = 'Chat multiusuário disponível';
 $wb['limit_xmpp_pastebin_txt'] = 'Pastebin para MUC disponível';
-$wb['limit_xmpp_httparchive_txt'] = 'Arquivo HTTP para MUC disponível';
+$wb['limit_xmpp_httparchive_txt'] = 'Arquivos http para MUC disponível';
 $wb['limit_xmpp_anon_txt'] = 'Host anônimo disponível';
 $wb['limit_xmpp_vjud_txt'] = 'Diretório de usuário VJUD disponível';
 $wb['limit_xmpp_proxy_txt'] = 'Proxy Bytestream disponível';
 $wb['limit_xmpp_status_txt'] = 'Estado do host disponível';
-$wb['dns_servers_txt'] = 'Servidores DNS';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
-$wb['limit_directive_snippets_txt'] = 'Exibir seleção de configuração do servidor de páginas';
-$wb['limit_database_user_txt'] = 'Limite de usuários de banco de dados';
+$wb['dns_servers_txt'] = 'Servidores dns';
+$wb['limit_directive_snippets_txt'] = 'Exibir seleção de configurações do servidor web';
+$wb['limit_database_user_txt'] = 'Limite de usuários do banco de dados';
 $wb['web_servers_txt'] = 'Servidores web';
+$wb['dns_servers_txt'] = 'Servidores dns';
+$wb['xmpp_servers_txt'] = 'Servidores xmpp';
 $wb['db_servers_txt'] = 'Servidores de banco de dados';
 $wb['mail_servers_txt'] = 'Servidores de e-mail';
 $wb['Limits'] = 'Limites';
diff --git a/interface/web/client/lib/lang/br_client_template_list.lng b/interface/web/client/lib/lang/br_client_template_list.lng
index 46217880165e325db0b90b9a788b775ed89ee106..47bd2e5779ed45cbeef57ed9d7021b33bda5b7f3 100644
--- a/interface/web/client/lib/lang/br_client_template_list.lng
+++ b/interface/web/client/lib/lang/br_client_template_list.lng
@@ -1,6 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Gabarito de limites para clientes';
+$wb['list_head_txt'] = 'Gabaritos de clientes e revendas';
 $wb['template_type_txt'] = 'Tipo';
-$wb['template_name_txt'] = 'Nome do Gabarito';
-$wb['template_id_txt'] = 'ID do Gabarito';
+$wb['template_name_txt'] = 'Nome do gabarito';
+$wb['template_id_txt'] = 'ID do gabarito';
+$wb['sys_groupid_txt'] = 'Revenda';
 ?>
diff --git a/interface/web/client/lib/lang/br_clients_list.lng b/interface/web/client/lib/lang/br_clients_list.lng
index 7470bd27c4fc66bacc805adaa05e1626885ca35e..8016151a9bd270bd389fce43947b3c19f14f5f69 100644
--- a/interface/web/client/lib/lang/br_clients_list.lng
+++ b/interface/web/client/lib/lang/br_clients_list.lng
@@ -3,12 +3,12 @@ $wb['list_head_txt'] = 'Clientes';
 $wb['client_id_txt'] = 'ID';
 $wb['company_name_txt'] = 'Empresa';
 $wb['contact_name_txt'] = 'Contato';
+$wb['username_txt'] = 'Usuário';
 $wb['city_txt'] = 'Cidade';
 $wb['country_txt'] = 'País';
 $wb['add_new_record_txt'] = 'Adicionar novo cliente';
-$wb['username_txt'] = 'Usuário';
-$wb['customer_no_txt'] = 'Código do Cliente';
-$wb['locked_txt'] = 'Locked';
-$wb['yes_txt'] = 'Yes';
-$wb['no_txt'] = 'No';
+$wb['customer_no_txt'] = 'Código do cliente';
+$wb['locked_txt'] = 'Bloqueado';
+$wb['yes_txt'] = 'Sim';
+$wb['no_txt'] = 'Não';
 ?>
diff --git a/interface/web/client/lib/lang/br_domain.lng b/interface/web/client/lib/lang/br_domain.lng
index 26c205a56ba31e04b9c2fb8d22c577d0285b3e7d..988976d2ce5ef0da5f79ae5c6349505e9ffda855 100644
--- a/interface/web/client/lib/lang/br_domain.lng
+++ b/interface/web/client/lib/lang/br_domain.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['domain_error_empty'] = 'Nome do domínio está em branco.';
-$wb['domain_error_unique'] = 'Nome do domínio já existe.';
-$wb['domain_error_regex'] = 'Nome do domínio não é permitido.';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'O domínio já existe.';
+$wb['domain_error_regex'] = 'O nome do domínio não é permitido.';
 $wb['Domain'] = 'Domínio';
 ?>
diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng
index d90d3b15a2af1f665bdbf0ca923ee552a74a4f17..12a8a2953fbde3fa482f181e8a7839d8773577fc 100644
--- a/interface/web/client/lib/lang/br_reseller.lng
+++ b/interface/web/client/lib/lang/br_reseller.lng
@@ -1,26 +1,29 @@
 <?php
-$wb['limit_maildomain_txt'] = 'Limite de domínios de e-mails';
-$wb['limit_mailbox_txt'] = 'Limite de contas de e-mails';
-$wb['limit_mailalias_txt'] = 'Limite de apelidos de domínio de e-mails';
-$wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de e-mails';
-$wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo';
-$wb['limit_mailrouting_txt'] = 'Limite de transportes de e-mails';
-$wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mails';
-$wb['limit_fetchmail_txt'] = 'Limite de contas de busca ';
-$wb['limit_mailquota_txt'] = 'Cota de e-mail';
-$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam lista branca/negra';
-$wb['limit_spamfilter_user_txt'] = 'Limite de usuários de filtros anti-spam';
+$wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mail';
+$wb['limit_mailbox_txt'] = 'Limite de contas de e-mail';
+$wb['limit_mailalias_txt'] = 'Limite de alias de e-mail';
+$wb['limit_mailaliasdomain_txt'] = 'Limite de alias de domínios';
+$wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de e-mail';
+$wb['limit_mailcatchall_txt'] = 'Limite de contas cata-tudo';
+$wb['limit_mailrouting_txt'] = 'Limite de rotas de e-mail';
+$wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mail';
+$wb['limit_fetchmail_txt'] = 'Limite de contas de busca';
+$wb['limit_mailquota_txt'] = 'Cota de contas de e-mail';
+$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista branca/negra"';
+$wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam por usuário';
 $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam';
-$wb['default_mailserver_txt'] = 'Servidor de e-mails padrão';
+$wb['default_mailserver_txt'] = 'Servidor de e-mail padrão';
 $wb['company_name_txt'] = 'Empresa';
-$wb['contact_firstname_txt'] = 'Nome do contato';
-$wb['contact_name_txt'] = 'Sobrenome do contato';
+$wb['contact_firstname_txt'] = 'Contato';
+$wb['contact_name_txt'] = 'Nome do contato';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
+$wb['password_click_to_set_txt'] = 'Clique para configurar';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['language_txt'] = 'Idioma';
 $wb['usertheme_txt'] = 'Tema';
-$wb['street_txt'] = 'Rua';
+$wb['street_txt'] = 'Endereço';
 $wb['zip_txt'] = 'CEP';
 $wb['city_txt'] = 'Cidade';
 $wb['state_txt'] = 'Estado';
@@ -28,180 +31,177 @@ $wb['country_txt'] = 'País';
 $wb['telephone_txt'] = 'Telefone';
 $wb['mobile_txt'] = 'Celular';
 $wb['fax_txt'] = 'Fax';
-$wb['email_txt'] = 'e-mail';
-$wb['internet_txt'] = 'Internet';
-$wb['icq_txt'] = 'Skype/Telegram';
-$wb['notes_txt'] = 'Notas';
+$wb['email_txt'] = 'e-Mail';
+$wb['internet_txt'] = 'Site';
+$wb['icq_txt'] = 'Redes Sociais';
+$wb['notes_txt'] = 'Observações';
 $wb['company_txt'] = 'Empresa';
 $wb['title_txt'] = 'Título';
 $wb['firstname_txt'] = 'Nome';
 $wb['surname_txt'] = 'Sobrenome';
 $wb['limit_domain_txt'] = 'Limite de domínios';
 $wb['limit_subdomain_txt'] = 'Limite de subdomínios';
-$wb['limit_webquota_txt'] = 'Cota de site';
+$wb['limit_webquota_txt'] = 'Cota de sites';
 $wb['limit_database_txt'] = 'Limite de banco de dados';
+$wb['limit_database_user_txt'] = 'Limite de usuários do banco de dados';
 $wb['limit_cron_txt'] = 'Limite de tarefas no cron';
-$wb['limit_cron_type_txt'] = 'Limites de tarefas no cron (em chroot e url completas)';
-$wb['limit_cron_frequency_txt'] = 'Limite de tempo entre as execuções';
+$wb['limit_cron_type_txt'] = 'Limite de tipos de tarefa no cron (chrooted e url implícitas)';
+$wb['limit_cron_frequency_txt'] = 'Tempo de espera entre as execuções';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['limit_client_error_notint'] = 'Limite de clientes para revenda deve ser um número.';
+$wb['limit_client_error_notint'] = 'O limite de clientes deve ser um número.';
 $wb['firstname_error_empty'] = 'Nome está em branco.';
 $wb['contact_error_empty'] = 'Contato está em branco.';
-$wb['default_webserver_txt'] = 'Servidor de páginas padrão';
+$wb['default_webserver_txt'] = 'Servidor web padrão';
 $wb['limit_web_domain_txt'] = 'Limite de domínios de site';
-$wb['limit_web_aliasdomain_txt'] = 'Limite de apelidos';
-$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios';
+$wb['limit_web_aliasdomain_txt'] = 'Limite de alias de domínios de site';
+$wb['limit_web_subdomain_txt'] = 'Limite subdomínios de site';
 $wb['limit_ftp_user_txt'] = 'Limite de usuários ftp';
-$wb['default_dnsserver_txt'] = 'Servidor dns Padrão';
-$wb['limit_dns_zone_txt'] = 'Limite de de zonas dns';
+$wb['default_dnsserver_txt'] = 'Servidor dns padrão';
+$wb['limit_dns_zone_txt'] = 'Limite de zonas dns';
 $wb['limit_dns_slave_zone_txt'] = 'Limite de zonas dns secundárias';
 $wb['limit_dns_record_txt'] = 'Limite de registros dns';
-$wb['limit_shell_user_txt'] = 'Limite de usuários shell';
+$wb['limit_shell_user_txt'] = 'Limite de usuários do shell';
+$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
+$wb['limit_backup_txt'] = 'Função de backup disponível';
 $wb['limit_client_txt'] = 'Limite de clientes';
-$wb['username_error_empty'] = 'Nome do usuário está em branco.';
-$wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
-$wb['limit_maildomain_error_notint'] = 'Limite de domínios de e-mails deve ser um número.';
-$wb['limit_mailbox_error_notint'] = 'Limite de contas de e-mails deve ser um número.';
-$wb['limit_mailalias_error_notint'] = 'Limite de apelidos de domínio de e-mails deve ser um número.';
-$wb['limit_mailforward_error_notint'] = 'Limite de encaminhamentos de e-mails deve ser um número.';
-$wb['limit_mailcatchall_error_notint'] = 'Limite de contas cata tudo deve ser um número.';
-$wb['limit_mailrouting_error_notint'] = 'Limite de transportes de e-mails deve ser um número.';
-$wb['limit_mailfilter_error_notint'] = 'Limite de filtros de e-mails deve ser um número.';
-$wb['limit_mailfetchmail_error_notint'] = 'Limite de contas de busca deve ser um número.';
-$wb['limit_mailquota_error_notint'] = 'A cota de e-mail deve ser um número.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Limite de filtros anti-spam lista branca/negra deve ser um número.';
-$wb['limit_spamfilter_user_error_notint'] = 'Limite de usuários de filtros anti-spam deve ser um número.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Limite de políticas anti-spam deve ser um número.';
-$wb['limit_web_domain_error_notint'] = 'Limite de sites deve ser um número.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Limite de apelidos de domínio de site deve ser um número.';
-$wb['limit_web_subdomain_error_notint'] = 'Limite de subdomínios de site deve ser um número.';
-$wb['limit_ftp_user_error_notint'] = 'Limite de usuários ftp deve ser um número.';
-$wb['limit_shell_user_error_notint'] = 'Limite de usuários shell deve ser um número.';
-$wb['limit_dns_zone_error_notint'] = 'Limite de registros dns deve ser um número.';
-$wb['limit_dns_slave_zone_error_notint'] = 'Limite de zonas dns secundárias deve ser um número.';
-$wb['limit_dns_record_error_notint'] = 'Limite de registros dns deve ser um número.';
+$wb['username_error_empty'] = 'Usuário está em branco.';
+$wb['username_error_unique'] = 'O nome de usuário deve ser exclusivo.';
+$wb['limit_maildomain_error_notint'] = 'O limite de domínios de e-mail deve ser um número.';
+$wb['limit_mailmailinglist_error_notint'] = 'O limite de registro de listas de e-mail deve ser um número.';
+$wb['limit_mailbox_error_notint'] = 'O limite de contas de e-mail deve ser um número.';
+$wb['limit_mailalias_error_notint'] = 'O limite de alias de e-mail deve ser um número.';
+$wb['limit_mailforward_error_notint'] = 'O limite de encaminhamentos deve ser um número.';
+$wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata-tudo deve ser um número.';
+$wb['limit_mailrouting_error_notint'] = 'O limite de rotas de e-mail deve ser um número.';
+$wb['limit_mailfilter_error_notint'] = 'O limite de filtros de e-mail deve ser um número.';
+$wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.';
+$wb['limit_mailquota_error_notint'] = 'O limite das cotas de e-mail deve ser um número.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'O limite de filtros anti-spam "lista branca/negra" deve ser um número.';
+$wb['limit_spamfilter_user_error_notint'] = 'O limite de filtros anti-spam por conta de e-mail deve ser um número.';
+$wb['limit_spamfilter_policy_error_notint'] = 'O limite de políticas anti-spam deve ser um número.';
+$wb['limit_web_domain_error_notint'] = 'O limite de sites deve ser um número.';
+$wb['limit_web_aliasdomain_error_notint'] = 'O limite de alias de domínios de site deve ser um número.';
+$wb['limit_web_subdomain_error_notint'] = 'O limite de subdomínios de site deve ser um número.';
+$wb['limit_ftp_user_error_notint'] = 'O limite de usuários ftp deve ser um número.';
+$wb['limit_webdav_user_error_notint'] = 'O limite de usuários webdav deve ser um número.';
+$wb['limit_shell_user_error_notint'] = 'O limite de usuários do shell deve ser um número.';
+$wb['limit_dns_zone_error_notint'] = 'O limite de zonas dns deve ser um número.';
+$wb['limit_dns_slave_zone_error_notint'] = 'O limite de zonas dns secundárias deve ser um número.';
+$wb['limit_dns_record_error_notint'] = 'O limite de registros dns deve ser um número.';
 $wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão';
-$wb['limit_database_error_notint'] = 'Limite de banco de dados deve ser um número.';
-$wb['limit_cron_error_notint'] = 'Limite de tarefas no cron deve ser um número.';
-$wb['limit_cron_error_frequency'] = 'Limite de frequência no cron deve ser um número.';
+$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número.';
+$wb['limit_cron_error_notint'] = 'O limite de tarefas no cron deve ser um número.';
+$wb['limit_cron_error_frequency'] = 'O limite da frequência de execuções no cron deve ser um número.';
 $wb['username_error_regex'] = 'O nome do usuário contém caracteres inválidos.';
-$wb['template_master_txt'] = 'Gabarito mestre';
-$wb['template_additional_txt'] = 'Gabarito personalizado';
-$wb['ssh_chroot_txt'] = 'Opções do Chroot SSH';
-$wb['web_php_options_txt'] = 'Opções do PHP';
-$wb['limit_client_error'] = 'Limite de clientes foi alcançado.';
-$wb['limit_client_error_positive_or_unlimited'] = 'Limite de clientes deve ser > 0';
-$wb['limit_web_quota_txt'] = 'Cota de site';
-$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
-$wb['limit_trafficquota_error_notint'] = 'A cota de tráfego deve ser um número.';
-$wb['customer_no_txt'] = 'Código do cliente.';
-$wb['vat_id_txt'] = 'VAT ID';
-$wb['required_fields_txt'] = '*Campos obrigatórios';
-$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mails';
-$wb['limit_mailmailinglist_error_notint'] = 'Limite de listas de e-mails deve ser um número.';
-$wb['limit_webdav_user_txt'] = 'Limite de usuário webdav';
-$wb['limit_webdav_user_error_notint'] = 'Limite de usuários webdav deve ser um número.';
-$wb['limit_backup_txt'] = 'Função de backup disponível';
-$wb['limit_mailaliasdomain_txt'] = 'Limite de apelidos de domínio de e-mails';
-$wb['limit_openvz_vm_txt'] = 'Limite de servidores virtuais';
-$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito de servidor virtual';
-$wb['limit_openvz_vm_error_notint'] = 'Limite de servidores virtuais deve ser um número.';
-$wb['web_php_options_notempty'] = 'Nenhuma opção do php selecionada. Selecione ao menos uma opção.';
-$wb['ssh_chroot_notempty'] = 'Nenhuma opção do ssh-chroot selecionada. Selecione ao menos uma opção.';
-$wb['username_error_collision'] = 'O nome do usuário não pode iniciar com a palavra -web- ou -web- seguida de um número.';
+$wb['template_master_txt'] = 'Gabarito Mestre';
+$wb['template_additional_txt'] = 'Gabarito Personalizado';
 $wb['add_additional_template_txt'] = 'Adicionar gabarito personalizado';
 $wb['delete_additional_template_txt'] = 'Remover gabarito personalizado';
+$wb['ssh_chroot_txt'] = 'Opções SSH-Chroot';
+$wb['web_php_options_txt'] = 'Opções PHP';
 $wb['limit_cgi_txt'] = 'CGI disponível';
 $wb['limit_ssi_txt'] = 'SSI disponível';
 $wb['limit_perl_txt'] = 'Perl disponível';
 $wb['limit_ruby_txt'] = 'Ruby disponível';
 $wb['limit_python_txt'] = 'Python disponível';
-$wb['force_suexec_txt'] = 'SuEXEC forced';
+$wb['force_suexec_txt'] = 'Forçar SuEXEC';
 $wb['limit_hterror_txt'] = 'Custom error docs disponível';
-$wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponíveis';
+$wb['limit_wildcard_txt'] = 'Curingas de subdomínios disponível';
 $wb['limit_ssl_txt'] = 'SSL disponível';
-$wb['web_limits_txt'] = 'Limites web';
-$wb['email_limits_txt'] = 'Limites de e-mails';
-$wb['database_limits_txt'] = 'Limites de banco de dados';
-$wb['cron_job_limits_txt'] = 'Limites de tarefas no cron';
-$wb['dns_limits_txt'] = 'Limites de dns';
-$wb['virtualization_limits_txt'] = 'Limites de virtualização';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
+$wb['limit_client_error'] = 'O limite de clientes para esta conta foi alcançado.';
+$wb['limit_client_error_positive_or_unlimited'] = 'O número de clientes deve ser > 0 ou -1 (ilimitado)';
+$wb['limit_web_quota_txt'] = 'Cota web';
+$wb['limit_traffic_quota_txt'] = 'Cota de tráfego';
+$wb['limit_trafficquota_error_notint'] = 'Cota de tráfego deve ser um número.';
+$wb['customer_no_txt'] = 'Código do cliente';
+$wb['vat_id_txt'] = 'VAT ID';
+$wb['required_fields_txt'] = '*Campos obrigatórios';
+$wb['limit_openvz_vm_txt'] = 'Limite de máquinas virtuais';
+$wb['limit_openvz_vm_template_id_txt'] = 'Forçar gabarito para máquina virtual';
+$wb['limit_openvz_vm_error_notint'] = 'O limite de máquinas virtuais deve ser um número.';
+$wb['web_php_options_notempty'] = 'Nenhuma opção PHP selecionado. Selecione ao menos uma opção PHP.';
+$wb['ssh_chroot_notempty'] = 'Nenhuma opção SSH chroot selecionada. Selecione ao menos uma opção SSH chroot.';
+$wb['username_error_collision'] = 'O nome de usuário não pode iniciar com -web- ou -web- seguida de um número.';
+$wb['web_limits_txt'] = 'Limite de site';
+$wb['email_limits_txt'] = 'Limites de e-mail';
+$wb['database_limits_txt'] = 'Limite de banco de dados';
+$wb['cron_job_limits_txt'] = 'Limites de tarefa no Cron';
+$wb['dns_limits_txt'] = 'Limites de DNS';
+$wb['virtualization_limits_txt'] = 'Limites de máquinas virtuais';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
-$wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo (ou deixe em branco).';
+$wb['customer_no_error_unique'] = 'O código do cliente deve ser exclusivo e não pode estar está em branco.';
 $wb['paypal_email_error_isemail'] = 'Por favor, insira um e-mail do PayPal válido.';
-$wb['paypal_email_txt'] = 'e-mail do PayPal';
-$wb['company_id_txt'] = 'ID da empresa';
-$wb['bank_account_number_txt'] = 'Conta corrente';
-$wb['bank_account_owner_txt'] = 'Proprietário';
-$wb['bank_code_txt'] = 'Codigo do banco';
+$wb['paypal_email_txt'] = 'e-Mail PayPal';
+$wb['company_id_txt'] = 'Código da Empresa';
+$wb['bank_account_number_txt'] = 'Conta bancária';
+$wb['bank_account_owner_txt'] = 'Proprietário da conta bancária';
+$wb['bank_code_txt'] = 'Código do banco';
 $wb['bank_name_txt'] = 'Nome do banco';
 $wb['bank_account_iban_txt'] = 'IBAN';
 $wb['bank_account_swift_txt'] = 'BIC/Swift';
-$wb['aps_limits_txt'] = 'Limites de instalações de apps';
-$wb['limit_aps_txt'] = 'Limites de instâncias de apps';
-$wb['limit_aps_error_notint'] = 'Limite de instâncias de apps deve ser um número.';
-$wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão';
+$wb['aps_limits_txt'] = 'Limites de instaladores de APPs';
+$wb['limit_aps_txt'] = 'Limite de instâncias de APPs';
+$wb['limit_aps_error_notint'] = 'O limite de instâncias de APPs deve ser um número.';
+$wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundário padrão';
 $wb['locked_txt'] = 'Bloqueado';
 $wb['canceled_txt'] = 'Cancelado';
 $wb['gender_m_txt'] = 'Sr.';
 $wb['gender_f_txt'] = 'Sra.';
 $wb['gender_txt'] = 'Título';
-$wb['customer_no_template_txt'] = 'No. do gabarito do cliente';
-$wb['customer_no_template_error_regex_txt'] = 'O número do gabarito contém caracteres inválidos.';
-$wb['customer_no_start_txt'] = 'Valor inicial do código do cliente';
-$wb['customer_no_counter_txt'] = 'Contador de código do cliente';
-$wb['added_by_txt'] = 'Cadastrado por';
-$wb['added_date_txt'] = 'Data do cadastro';
-$wb['limit_domainmodule_error_notint'] = 'Limite de módulos de domínio deve ser um número.';
-$wb['limit_domainmodule_txt'] = 'Limites de módulos de domínio';
-$wb['client_limits_txt'] = 'Limite de clientes';
-$wb['err_msg_master_tpl_set'] = 'Todas as configurações personalizadas de limites serão ignoradas se um gabarito mestre ou \\"personalizado\\" for selecionado.';
-$wb['btn_save_txt'] = 'Salvar';
-$wb['btn_cancel_txt'] = 'Cancelar';
-$wb['email_error_empty'] = 'e-mail está em branco.';
-$wb['web_servers_txt'] = 'Servidores web';
-$wb['web_servers_placeholder'] = 'Selecionar servidores web';
-$wb['no_web_server_error'] = 'Ao menos um servidor de páginas deve ser selecionado.';
-$wb['web_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor de páginas. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['dns_servers_txt'] = 'Servidores dns';
-$wb['dns_servers_placeholder'] = 'Selecione os servidores dns';
-$wb['no_dns_server_error'] = 'Ao menos um servidor dns deve ser selecionado.';
-$wb['dns_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor dns. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['db_servers_txt'] = 'Servidores de banco de dados';
-$wb['db_servers_placeholder'] = 'Selecione os servidores de banco de dados.';
+$wb['web_servers_txt'] = 'Servidores Web';
+$wb['web_servers_placeholder'] = 'Selecione o(s) servidor(es) web';
+$wb['no_web_server_error'] = 'Ao menos um servidor web deve ser selecionado.';
+$wb['web_servers_used'] = 'O servidor web que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['dns_servers_txt'] = 'Servidor DNS';
+$wb['dns_servers_placeholder'] = 'Selecione os servidores DNS';
+$wb['no_dns_server_error'] = 'Ao menos um servidor DNS deve ser selecionado.';
+$wb['dns_servers_used'] = 'O servidor DNS que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['db_servers_txt'] = 'Servidor de banco de dados';
+$wb['db_servers_placeholder'] = 'Selecione os servidores de banco de dados';
 $wb['no_db_server_error'] = 'Ao menos um servidor de banco de dados deve ser selecionado.';
-$wb['db_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor de banco de dados. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['mail_servers_txt'] = 'Servidores de e-mails';
-$wb['mail_servers_placeholder'] = 'Selecionar servidores de e-mails';
+$wb['db_servers_used'] = 'O servidor de banco de dados que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['mail_servers_txt'] = 'Servidores de e-mail';
+$wb['mail_servers_placeholder'] = 'Selecione os servidores de e-mail';
 $wb['no_mail_server_error'] = 'Ao menos um servidor de e-mail deve ser selecionado.';
-$wb['mail_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor de e-mails. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['xmpp_limits_txt'] = 'Limites XMPP';
-$wb['xmpp_servers_txt'] = 'Servidores XMPP';
-$wb['xmpp_servers_placeholder'] = 'Selecione os servidores XMPP';
-$wb['no_xmpp_server_error'] = 'Ao menos um servidor XMPP deve ser selecionado.';
-$wb['xmpp_servers_used'] = 'O servidor que você está tentando remover para este cliente é utilizado como um servidor xmpp. Certifique-se de que este servidor não é usado por este cliente antes de removê-lo.';
-$wb['limit_xmpp_domain_error_notint'] = 'Limite de domínios xmpp deve ser um número.';
-$wb['limit_xmpp_user_error_notint'] = 'Limite de usuários xmpp deve ser um número.';
+$wb['mail_servers_used'] = 'O servidor de e-mails que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['customer_no_template_txt'] = 'Código do gabarito de clientes';
+$wb['customer_no_template_error_regex_txt'] = 'O código de gabarito de clientes possui caracteres inválidos.';
+$wb['customer_no_start_txt'] = 'Iniciar código de clientes em';
+$wb['customer_no_counter_txt'] = 'Contador de código do cliente';
+$wb['xmpp_limits_txt'] = 'Limites xmpp';
+$wb['xmpp_servers_txt'] = 'Servidores xmpp';
+$wb['xmpp_servers_placeholder'] = 'Selecione os servidores xmpp';
+$wb['no_xmpp_server_error'] = 'Ao menos um servidor xmpp deve ser selecionado.';
+$wb['xmpp_servers_used'] = 'O servidor xmpp que você está tentando remover para este cliente é usado pelo mesmo. Certifique-se que este servidor não esteja em uso para este cliente antes de removê-lo.';
+$wb['limit_xmpp_domain_error_notint'] = 'O limite de domínios xmpp deve ser um número.';
+$wb['limit_xmpp_user_error_notint'] = 'O limite de usuários xmpp deve ser um número.';
 $wb['limit_xmpp_domain_txt'] = 'Limite de domínios xmpp';
 $wb['limit_xmpp_user_txt'] = 'Limite de usuários xmpp';
-$wb['limit_xmpp_muc_txt'] = 'Chat multiusuário disponível';
+$wb['limit_xmpp_muc_txt'] = 'Chat multiusuário (MUC) disponível';
 $wb['limit_xmpp_pastebin_txt'] = 'Pastebin para MUC disponível';
 $wb['limit_xmpp_httparchive_txt'] = 'Arquivo HTTP para MUC disponível';
 $wb['limit_xmpp_anon_txt'] = 'Host anônimo disponível';
 $wb['limit_xmpp_vjud_txt'] = 'Diretório de usuário VJUD disponível';
-$wb['limit_xmpp_proxy_txt'] = 'Proxy bytestream disponível';
+$wb['limit_xmpp_proxy_txt'] = 'Proxy Bytestream disponível';
 $wb['limit_xmpp_status_txt'] = 'Estado do host disponível';
-$wb['invalid_vat_id'] = 'O VAT ID é é inválido.';
-$wb['limit_database_user_txt'] = 'Limite de usuários de banco de dados';
-$wb['limit_database_user_error_notint'] = 'Limite de usuários de banco de dados deve ser um número.';
-$wb['limit_database_quota_txt'] = 'Cota para banco de dados';
-$wb['limit_database_quota_error_notint'] = 'A cota para banco de dados deve ser um número.';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponível';
-$wb['limit_directive_snippets_txt'] = 'Exibir seleção das configurações do servidor de páginas';
-$wb['password_click_to_set_txt'] = 'Configurar';
+$wb['added_by_txt'] = 'Cadastrado por';
+$wb['added_date_txt'] = 'Data do cadastro';
+$wb['limit_domainmodule_error_notint'] = 'Limite de módulos de domínio deve ser um número.';
+$wb['limit_domainmodule_txt'] = 'Limite de módulos de domínio';
+$wb['client_limits_txt'] = 'Limite de clientes';
+$wb['err_msg_master_tpl_set'] = 'Todas as configurações de limites serão ignoradas se qualquer gabarito mestre ou personalizado for selecionado.';
+$wb['invalid_vat_id'] = 'O ID do VAT é inválido.';
+$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+$wb['email_error_empty'] = 'O endereço de e-mail está em branco.';
+$wb['limit_directive_snippets_txt'] = 'Exibir seleção de configuração do servidor web';
+$wb['limit_database_user_error_notint'] = 'O limite de usuários do banco de dados deve ser um número.';
+$wb['limit_database_quota_txt'] = 'Cota do banco de dados';
+$wb['limit_database_quota_error_notint'] = 'A cota do banco de dados deve ser um número.';
 $wb['Limits'] = 'Limites';
 ?>
diff --git a/interface/web/client/lib/lang/br_resellers_list.lng b/interface/web/client/lib/lang/br_resellers_list.lng
index 5a64358af96e94930c59f98a982d5694d7691d7e..1f67e7f5934437c8f433c718738c6432bd5dc816 100644
--- a/interface/web/client/lib/lang/br_resellers_list.lng
+++ b/interface/web/client/lib/lang/br_resellers_list.lng
@@ -6,6 +6,6 @@ $wb['contact_name_txt'] = 'Contato';
 $wb['city_txt'] = 'Cidade';
 $wb['country_txt'] = 'País';
 $wb['add_new_record_txt'] = 'Adicionar nova revenda';
-$wb['customer_no_txt'] = 'Código do Cliente';
+$wb['customer_no_txt'] = 'Código do cliente';
 $wb['username_txt'] = 'Usuário';
 ?>
diff --git a/interface/web/client/lib/lang/ca_client_template_list.lng b/interface/web/client/lib/lang/ca_client_template_list.lng
index b5315018d2eaf163d9020fd2ac4c33ce311f3e09..b22a375f4472683343f4532a63060bca19a8d2d4 100644
--- a/interface/web/client/lib/lang/ca_client_template_list.lng
+++ b/interface/web/client/lib/lang/ca_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Modèles de clients';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Nom du modèle';
 $wb['template_id_txt'] = 'ID du modèle';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/cz_client_template_list.lng b/interface/web/client/lib/lang/cz_client_template_list.lng
index 3abbd09adc7c709b3b40afb9142a18348abdd683..28a5d3bf63ff2509eba0e910ba6591d2a6047650 100644
--- a/interface/web/client/lib/lang/cz_client_template_list.lng
+++ b/interface/web/client/lib/lang/cz_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Klientské šablony';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Název šablony';
 $wb['template_id_txt'] = 'ID Å¡ablony';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/cz_clients_list.lng b/interface/web/client/lib/lang/cz_clients_list.lng
index 8cdabf2696da35a1b417623993040161aabb7419..270da3674db2c36b250ce6c8b70b282561d4115f 100644
--- a/interface/web/client/lib/lang/cz_clients_list.lng
+++ b/interface/web/client/lib/lang/cz_clients_list.lng
@@ -8,7 +8,7 @@ $wb['country_txt'] = 'Stát';
 $wb['add_new_record_txt'] = 'Vytvořit klienta';
 $wb['username_txt'] = 'Uživatelské jméno';
 $wb['customer_no_txt'] = 'Zákaznické číslo';
-$wb['locked_txt'] = 'Locked';
-$wb['yes_txt'] = 'Yes';
-$wb['no_txt'] = 'No';
+$wb['locked_txt'] = 'Zamčené';
+$wb['yes_txt'] = 'Ano';
+$wb['no_txt'] = 'Ne';
 ?>
diff --git a/interface/web/client/lib/lang/de_client_template_list.lng b/interface/web/client/lib/lang/de_client_template_list.lng
index cd5f339eea8c209b26267116db9ae9275e9237af..adb3fecdcb772c434d522d8a1c66627dd6b99298 100644
--- a/interface/web/client/lib/lang/de_client_template_list.lng
+++ b/interface/web/client/lib/lang/de_client_template_list.lng
@@ -3,5 +3,5 @@ $wb['list_head_txt'] = 'Kundenvorlagen';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Vorlagenname';
 $wb['template_id_txt'] = 'Template ID';
-$wb['sys_groupid_txt'] = 'Reseller';        
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/dk_client_template_list.lng b/interface/web/client/lib/lang/dk_client_template_list.lng
index ca83656182c2ae1e51c636e37f7ca8233a34e092..6be08eade8f3df806b130292b391ce46af1224a5 100644
--- a/interface/web/client/lib/lang/dk_client_template_list.lng
+++ b/interface/web/client/lib/lang/dk_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Kunde og Forhandler Skabeloner';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Skabelon navn';
 $wb['template_id_txt'] = 'Skabelon ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/el_client_template_list.lng b/interface/web/client/lib/lang/el_client_template_list.lng
index 175c2bfb8f3cc4a99ea135e27ae49c400541d9f8..8bb3412df9ad4cdb2304119ff4f51c67e40c6d59 100644
--- a/interface/web/client/lib/lang/el_client_template_list.lng
+++ b/interface/web/client/lib/lang/el_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Πρότυπα Πελάτη';
 $wb['template_type_txt'] = 'Τύπος';
 $wb['template_name_txt'] = 'Όνομα Προτύπου';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/es_client_template_list.lng b/interface/web/client/lib/lang/es_client_template_list.lng
index 4a8032c6fb34749c5c22b0668cc31f3a8e493359..283a4ff17a1e3fdab5bf94e4f1806d1c235aefbe 100755
--- a/interface/web/client/lib/lang/es_client_template_list.lng
+++ b/interface/web/client/lib/lang/es_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Plantillas de clientes';
 $wb['template_id_txt'] = 'ID de la plantilla';
 $wb['template_name_txt'] = 'Nombre de la plantilla';
 $wb['template_type_txt'] = 'Tipo';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/fi_client_template_list.lng b/interface/web/client/lib/lang/fi_client_template_list.lng
index b3f310f131c899f27a5f724ca55ea866f2a32d23..586f93e01ca329b222f9a5bb2c1feb4cc9a8228b 100755
--- a/interface/web/client/lib/lang/fi_client_template_list.lng
+++ b/interface/web/client/lib/lang/fi_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Asiakasmallit';
 $wb['template_type_txt'] = 'Tyyppi';
 $wb['template_name_txt'] = 'Asiakasmallin nimi';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/fr_client_template_list.lng b/interface/web/client/lib/lang/fr_client_template_list.lng
index b5315018d2eaf163d9020fd2ac4c33ce311f3e09..b22a375f4472683343f4532a63060bca19a8d2d4 100644
--- a/interface/web/client/lib/lang/fr_client_template_list.lng
+++ b/interface/web/client/lib/lang/fr_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Modèles de clients';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Nom du modèle';
 $wb['template_id_txt'] = 'ID du modèle';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/hr_client_template_list.lng b/interface/web/client/lib/lang/hr_client_template_list.lng
index cdc2f0006ae1e78a666f356ad765042df30e823a..fc817c9c254dfbd8b67196859877957e5a550832 100644
--- a/interface/web/client/lib/lang/hr_client_template_list.lng
+++ b/interface/web/client/lib/lang/hr_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Predlošci za klijente';
 $wb['template_type_txt'] = 'Vrsta';
 $wb['template_name_txt'] = 'Naziv predloška';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/hu_client_template_list.lng b/interface/web/client/lib/lang/hu_client_template_list.lng
index 316de63143533a8fc3eb316e579d8dd6a7ce7074..b04b3405eeea473bba3fc95cb9d5b8af45ec2282 100644
--- a/interface/web/client/lib/lang/hu_client_template_list.lng
+++ b/interface/web/client/lib/lang/hu_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Ügyfél-Sablonok';
 $wb['template_type_txt'] = 'típus';
 $wb['template_name_txt'] = 'Sablon neve';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/id_client_template_list.lng b/interface/web/client/lib/lang/id_client_template_list.lng
index e0da97101a8f3f623f64962380f1d02fefc112f6..dd0259544b4f41b5a4dfd9c433b43dcaea9a5bc6 100644
--- a/interface/web/client/lib/lang/id_client_template_list.lng
+++ b/interface/web/client/lib/lang/id_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Template Klien';
 $wb['template_type_txt'] = 'Tipe';
 $wb['template_name_txt'] = 'Nama Template';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_template_list.lng b/interface/web/client/lib/lang/it_client_template_list.lng
index d78faf87789ad9536b6880ede51c6335e7c16f17..43b1a5ca49c7fa88a022a7c43370effa0a5ccde3 100644
--- a/interface/web/client/lib/lang/it_client_template_list.lng
+++ b/interface/web/client/lib/lang/it_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Modelli cliente';
 $wb['template_type_txt'] = 'Tipo';
 $wb['template_name_txt'] = 'Nome modello';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ja_client_template_list.lng b/interface/web/client/lib/lang/ja_client_template_list.lng
index 8adca01b14bef778c75adca471fd1cb9440e7ad6..3e67a0e0092377363dbe6082937982095da79a03 100644
--- a/interface/web/client/lib/lang/ja_client_template_list.lng
+++ b/interface/web/client/lib/lang/ja_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'クライアントテンプレート';
 $wb['template_type_txt'] = '種別';
 $wb['template_name_txt'] = 'テンプレート名';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/nl_client_template_list.lng b/interface/web/client/lib/lang/nl_client_template_list.lng
index 8bbe7a5a0fc82366cb1104901f0edda4228b39e6..fa62e4b79f048118a2bc85b8062811e23748408d 100644
--- a/interface/web/client/lib/lang/nl_client_template_list.lng
+++ b/interface/web/client/lib/lang/nl_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Client-Templates';
 $wb['template_type_txt'] = 'Type';
 $wb['template_name_txt'] = 'Template naam';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/pl_client_template_list.lng b/interface/web/client/lib/lang/pl_client_template_list.lng
index d6bd952d0bd7d427172e287b67ab6ddebd0dd04f..a7f7cf1638addae2ef0147761649603388563da9 100644
--- a/interface/web/client/lib/lang/pl_client_template_list.lng
+++ b/interface/web/client/lib/lang/pl_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Szablon klienta';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Nazwa szablonu';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/pt_client_template_list.lng b/interface/web/client/lib/lang/pt_client_template_list.lng
index d5f451111a9fd9c63356ba4e54854cd67042f7af..54b88241dab8b7f8f87f93f43562fa53ed1d92a6 100644
--- a/interface/web/client/lib/lang/pt_client_template_list.lng
+++ b/interface/web/client/lib/lang/pt_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Templates de Cliente ';
 $wb['template_type_txt'] = 'Tipo';
 $wb['template_name_txt'] = 'Nome da template';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ro_client_template_list.lng b/interface/web/client/lib/lang/ro_client_template_list.lng
index 17fbf995b976646e62c30392ded171ad71573dbb..3f5764c50c2c81abc0696ff786eaa772a8e2c942 100644
--- a/interface/web/client/lib/lang/ro_client_template_list.lng
+++ b/interface/web/client/lib/lang/ro_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Template client';
 $wb['template_type_txt'] = 'Tp';
 $wb['template_name_txt'] = 'Nume Template';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng
index a37d4673a1d69e4e0a6f2a4bc6da00fbb3a8e70d..befd6b15bf44a07631ff822be2ea15b718f082e2 100644
--- a/interface/web/client/lib/lang/ru_client.lng
+++ b/interface/web/client/lib/lang/ru_client.lng
@@ -108,7 +108,7 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Принудительный шабл
 $wb['limit_openvz_vm_error_notint'] = 'Лимит виртуальных серверов должен быть числом.';
 $wb['web_php_options_notempty'] = 'Нет выбранных параметров PHP. Выберите по крайней мере один параметр PHP.';
 $wb['ssh_chroot_notempty'] = 'Не выбран параметр SSH-Chroot. Выберите по крайней мере один параметр SSH-Chroot.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['add_additional_template_txt'] = 'Добавить дополнительный шаблон';
 $wb['delete_additional_template_txt'] = 'Удалить дополнительный шаблон';
 $wb['limit_cgi_txt'] = 'CGI доступен';
@@ -141,7 +141,7 @@ $wb['email_error_isemail'] = 'Некорректный почтовый адре
 $wb['customer_no_error_unique'] = 'Счётчик номера Клиента должен быть уникален (или отсутствует).';
 $wb['paypal_email_error_isemail'] = 'Пожалуйста, введите действующий адрес электронной почты PayPal.';
 $wb['paypal_email_txt'] = 'Адрес электронной почты PayPal';
-$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \"Custom\"!';
+$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \\"Custom\\"!';
 $wb['aps_limits_txt'] = 'Лимиты Установщика APS';
 $wb['limit_aps_txt'] = 'Макс. количество экземпляров APS';
 $wb['limit_aps_error_notint'] = 'Лимит экземпляров APS должен быть числом.';
diff --git a/interface/web/client/lib/lang/ru_client_template_list.lng b/interface/web/client/lib/lang/ru_client_template_list.lng
index 30d0dfed45f972687786cb627df3b1a01ec9740f..2981e21671d5de3da97b324bdfbde0faaca5d024 100644
--- a/interface/web/client/lib/lang/ru_client_template_list.lng
+++ b/interface/web/client/lib/lang/ru_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Шаблоны клиентов';
 $wb['template_type_txt'] = 'Тип';
 $wb['template_name_txt'] = 'Имя шаблона';
 $wb['template_id_txt'] = 'ID шаблона';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng
index 4a177cccc8242ecc9f4249616d3e15e13bd1e8a8..998a88699051ce145e3b053e583eb651f055d934 100644
--- a/interface/web/client/lib/lang/ru_reseller.lng
+++ b/interface/web/client/lib/lang/ru_reseller.lng
@@ -108,7 +108,7 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Принудительный шабл
 $wb['limit_openvz_vm_error_notint'] = 'Лимит виртуальных серверов должен быть числом.';
 $wb['web_php_options_notempty'] = 'Нет выбранных параметров PHP. Выберите по крайней мере один параметр PHP.';
 $wb['ssh_chroot_notempty'] = 'Не выбран параметр SSH-Chroot. Выберите по крайней мере один параметр SSH-Chroot.';
-$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \"web\" или \"web\" плюс число.';
+$wb['username_error_collision'] = 'Имя пользователя не может начинаться со слова \\"web\\" или \\"web\\" плюс число.';
 $wb['add_additional_template_txt'] = 'Добавить дополнительный шаблон';
 $wb['delete_additional_template_txt'] = 'Удалить дополнительный шаблон';
 $wb['limit_cgi_txt'] = 'CGI доступен';
@@ -159,7 +159,7 @@ $wb['added_date_txt'] = 'Дата добавления';
 $wb['limit_domainmodule_error_notint'] = 'Лимит модулей домена должен быть числом.';
 $wb['limit_domainmodule_txt'] = 'Лимит модулей домена';
 $wb['client_limits_txt'] = 'Лимиты Клиента';
-$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \"Custom\"!';
+$wb['err_msg_master_tpl_set'] = 'Значения, установленные здесь игнорируются, если не выбран в качестве главного шаблона \\"Custom\\"!';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
 $wb['email_error_empty'] = 'Адрес эл. почты пустой';
diff --git a/interface/web/client/lib/lang/se_client_template_list.lng b/interface/web/client/lib/lang/se_client_template_list.lng
index b594337e7ca6ef727ad97849a7036bcd708428dd..37ce6de45d0a3f8f50c709d0d9230cb2feba3cda 100644
--- a/interface/web/client/lib/lang/se_client_template_list.lng
+++ b/interface/web/client/lib/lang/se_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Kundmallar';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Mallnamn';
 $wb['template_id_txt'] = 'Mall-ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/sk_client_template_list.lng b/interface/web/client/lib/lang/sk_client_template_list.lng
index ac25b8f3a9685b37651893ac39ec870c2302e543..94637b1750121208a01a27f064e08e875d45a869 100644
--- a/interface/web/client/lib/lang/sk_client_template_list.lng
+++ b/interface/web/client/lib/lang/sk_client_template_list.lng
@@ -3,4 +3,5 @@ $wb['list_head_txt'] = 'Klient-Šablóny';
 $wb['template_type_txt'] = 'Typ';
 $wb['template_name_txt'] = 'Meno šablóny';
 $wb['template_id_txt'] = 'Template ID';
+$wb['sys_groupid_txt'] = 'Reseller';
 ?>
diff --git a/interface/web/client/lib/lang/tr.lng b/interface/web/client/lib/lang/tr.lng
index 0f3df4d7a38e5a931b7f7a6fc7c7d2480064b12a..cc2e8aa022f685152be1a76ce7f6a1df034ad8bf 100644
--- a/interface/web/client/lib/lang/tr.lng
+++ b/interface/web/client/lib/lang/tr.lng
@@ -16,14 +16,15 @@ $wb['delete_additional_template_txt'] = 'Ek Kalıbı Sil';
 $wb['Messaging'] = 'Ä°letiÅŸim';
 $wb['Send email'] = 'E-posta Gönderimi';
 $wb['Edit Client Circle'] = 'Müşteri Grubu Düzenleme';
-$wb['Domains'] = 'Alan Adları';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['Domains'] = 'Etki Alanları';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['client_txt'] = 'Müşteri';
-$wb['error_domain_in mailuse'] = 'Bu alan adı e-posta alan adı olarak kullanıldığından silinemez';
-$wb['error_domain_in webuse'] = 'Bu alan adı web alan adı olarak kullanıldığından silinemez';
-$wb['error_client_can_not_add_domain'] = 'Yeni bir alan adı ekleyemezsiniz';
+$wb['error_domain_in dnsuse'] = 'Bu etki alanı birincil DNS bölgesi olarak kullanıldığından silinemez';
+$wb['error_domain_in dnsslaveuse'] = 'Bu etki alanı ikincil DNS bölgesi olarak kullanıldığından silinemez';
+$wb['error_domain_in mailuse'] = 'Bu etki alanı e-posta etki alanı olarak kullanıldığından silinemez';
+$wb['error_domain_in webuse'] = 'Bu etki alanı web etki alanı olarak kullanıldığından silinemez';
+$wb['error_client_can_not_add_domain'] = 'Yeni bir etki alanı ekleyemezsiniz';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['error_client_group_id_empty'] = 'Bir müşteri seçmelisiniz<br>';
-$wb['error_domain_in dnsuse'] = 'This domain cannot be deleted, because it is in use as dns zone';
-$wb['error_domain_in dnsslaveuse'] = 'This domain cannot be deleted, because it is in use as secondary dns zone';
-$wb['Email-Templates'] = 'Email-Templates';
+$wb['Email-Templates'] = 'E-posta Kalıpları';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng
index 765d9f198062bf50a8eba83da192d56caef91413..f0711709661cf126bc041fd7daef2e3239c1a5e3 100644
--- a/interface/web/client/lib/lang/tr_client.lng
+++ b/interface/web/client/lib/lang/tr_client.lng
@@ -1,24 +1,26 @@
 <?php
-$wb['limit_maildomain_txt'] = 'En Fazla E-posta Alan Adı Sayısı';
-$wb['limit_mailmailinglist_txt'] = 'En Fazla Posta Listesi Sayısı';
-$wb['limit_mailbox_txt'] = 'En Fazla Posta Kutusu Sayısı';
+$wb['limit_maildomain_txt'] = 'En Fazla E-posta Etki Alanı Sayısı';
+$wb['limit_mailmailinglist_txt'] = 'En Fazla E-posta Listesi Sayısı';
+$wb['limit_mailbox_txt'] = 'En Fazla E-posta Kutusu Sayısı';
 $wb['limit_mailalias_txt'] = 'En Fazla Takma E-posta Sayısı';
-$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
+$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
 $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirme Sayısı';
 $wb['limit_mailcatchall_txt'] = 'En Fazla Tümünü Al Hesabı Sayısı';
 $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı';
 $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı';
-$wb['limit_fetchmail_txt'] = 'En Fazla Posta Alma Hesabı Sayısı';
-$wb['limit_mailquota_txt'] = 'Posta Kutusu Kotası';
-$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz Posta Beyaz/Kara Liste Süzgeci Sayısı';
-$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz Posta Süzgeci Kullanıcısı Sayısı';
-$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz Posta Süzgeci Kuralı Sayısı';
-$wb['default_mailserver_txt'] = 'Varsayılan Posta Sunucusu';
-$wb['company_name_txt'] = 'Kurum Adı';
+$wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı';
+$wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası';
+$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı';
+$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kullanıcısı Sayısı';
+$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kuralı Sayısı';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['company_name_txt'] = 'Kuruluş Adı';
+$wb['contact_firstname_txt'] = 'İlgili Adı';
 $wb['contact_name_txt'] = 'İlgili Adı';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['language_txt'] = 'Dil';
 $wb['usertheme_txt'] = 'Tema';
 $wb['street_txt'] = 'Adres';
@@ -33,8 +35,8 @@ $wb['email_txt'] = 'E-posta';
 $wb['internet_txt'] = 'Ä°nternet';
 $wb['icq_txt'] = 'ICQ';
 $wb['notes_txt'] = 'Notlar';
-$wb['company_txt'] = 'Kurum';
-$wb['title_txt'] = 'Ãœnvan';
+$wb['company_txt'] = 'KuruluÅŸ';
+$wb['title_txt'] = 'Unvan';
 $wb['firstname_txt'] = 'Ad';
 $wb['surname_txt'] = 'Soyad';
 $wb['limit_domain_txt'] = 'limit_domain';
@@ -42,16 +44,16 @@ $wb['limit_subdomain_txt'] = 'limit_subdomain';
 $wb['limit_webquota_txt'] = 'limit_webquota';
 $wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
 $wb['limit_cron_txt'] = 'En Fazla Zamanlanmış Görev Sayısı';
-$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Tipi Sayısı (chroot ve tam İnternet adresi uygulama)';
+$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Türü Sayısı (chroot ve tam İnternet adresi uygulama)';
 $wb['limit_cron_frequency_txt'] = 'İki Çalıştırma Arasındaki Süre';
 $wb['ip_address_txt'] = 'ip_address';
 $wb['limit_client_error_notint'] = 'Alt müşteri sınırı bir sayı olmalıdır.';
 $wb['firstname_error_empty'] = 'Ad boÅŸ olamaz.';
 $wb['contact_error_empty'] = 'İlgili adı boş olamaz.';
 $wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
-$wb['limit_web_domain_txt'] = 'En Fazla Alan Adı Sayısı';
-$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
-$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Alan Adı Sayısı';
+$wb['limit_web_domain_txt'] = 'En Fazla Etki Alanı Sayısı';
+$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
+$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Etki Alanı Sayısı';
 $wb['limit_ftp_user_txt'] = 'En Fazla FTP Kullanıcısı Sayısı';
 $wb['default_dnsserver_txt'] = 'Varsayılan DNS Sunucusu';
 $wb['limit_dns_zone_txt'] = 'En Fazla DNS Bölgesi Sayısı';
@@ -59,32 +61,35 @@ $wb['limit_dns_slave_zone_txt'] = 'En Fazla İkincil DNS Bölgesi Sayısı';
 $wb['limit_dns_record_txt'] = 'En Fazla DNS Kaydı Sayısı';
 $wb['limit_shell_user_txt'] = 'En Fazla Kabuk Kullanıcısı Sayısı';
 $wb['limit_webdav_user_txt'] = 'En Fazla Webdav Kullanıcısı Sayısı';
+$wb['limit_backup_txt'] = 'Yedekleme Özelliği Kullanılsın';
 $wb['limit_client_txt'] = 'En Fazla Müşteri Sayısı';
 $wb['username_error_empty'] = 'Kullanıcı adı boş olamaz.';
 $wb['username_error_unique'] = 'Bu kullanıcı adı zaten var.';
-$wb['limit_maildomain_error_notint'] = 'E-posta alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_mailmailinglist_error_notint'] = 'Posta listesi kaydı sınırı bir sayı olmalıdır.';
-$wb['limit_mailbox_error_notint'] = 'Posta kutusu sınırı bir sayı olmalıdır.';
+$wb['limit_maildomain_error_notint'] = 'E-posta etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_mailmailinglist_error_notint'] = 'E-posta listesi kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_mailbox_error_notint'] = 'E-posta kutusu sınırı bir sayı olmalıdır.';
 $wb['limit_mailalias_error_notint'] = 'Takma e-posta sınırı bir sayı olmalıdır.';
-$wb['limit_mailaliasdomain_error_notint'] = 'E-posta takma alan adı sınırı bir sayı olmalıdır.';
+$wb['limit_mailaliasdomain_error_notint'] = 'E-posta takma etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirme sınırı bir sayı olmalıdır.';
 $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al hesabı sınırı bir sayı olmalıdır.';
 $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.';
 $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.';
 $wb['limit_mailfetchmail_error_notint'] = 'E-posta alma sınırı bir sayı olmalıdır.';
 $wb['limit_mailquota_error_notint'] = 'E-posta kota sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz posta süzgeci beyaz/kara liste sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz posta süzgeci kullanıcısı sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz posta süzgeci kuralı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz ileti süzgeci beyaz/kara liste sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz ileti süzgeci kullanıcısı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz ileti süzgeci kuralı sınırı bir sayı olmalıdır.';
 $wb['limit_web_domain_error_notint'] = 'Web sitesi sınırı bir sayı olmalıdır.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt alan adı sınırı bir sayı olmalıdır.';
+$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_ftp_user_error_notint'] = 'FTP kullanıcısı sınırı bir sayı olmalıdır.';
 $wb['limit_shell_user_error_notint'] = 'Kabuk kullanıcısı sınırı bir sayı olmalıdır.';
 $wb['limit_webdav_user_error_notint'] = 'Webdav kullanıcısı sınırı bir sayı olmalıdır.';
-$wb['limit_dns_zone_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_dns_zone_error_notint'] = 'Birincil DNS kaydı sınırı bir sayı olmalıdır.';
 $wb['limit_dns_slave_zone_error_notint'] = 'İkincil DNS bölgesi sınırı bir sayı olmalıdır.';
+$wb['limit_dns_record_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
 $wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['limit_database_txt'] = 'Veritabanı Sayısı';
 $wb['limit_database_error_notint'] = 'Veritabanı sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_notint'] = 'Zamanlanmış Görev sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_frequency'] = 'Zamanlanmış Görev sıklığı sınırı bir sayı olmalıdır.';
@@ -96,15 +101,16 @@ $wb['add_additional_template_txt'] = 'Ek Kalıbı Ekle';
 $wb['delete_additional_template_txt'] = 'Ek Kalıbı Sil';
 $wb['ssh_chroot_txt'] = 'SSH-Chroot Ayarları';
 $wb['web_php_options_txt'] = 'PHP Ayarları';
-$wb['limit_cgi_txt'] = 'CGI Kullanılabilir';
-$wb['limit_ssi_txt'] = 'SSI Kullanılabilir';
-$wb['limit_perl_txt'] = 'Perl Kullanılabilir';
-$wb['limit_ruby_txt'] = 'Ruby Kullanılabilir';
-$wb['limit_python_txt'] = 'Python Kullanılabilir';
-$wb['force_suexec_txt'] = 'SuEXEC Dayatılmış';
-$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılabilir';
-$wb['limit_wildcard_txt'] = 'Genel Alt Alan Adı Kullanılabilir';
-$wb['limit_ssl_txt'] = 'SSL Kullanılabilir';
+$wb['limit_cgi_txt'] = 'CGI Kullanılsın';
+$wb['limit_ssi_txt'] = 'SSI Kullanılsın';
+$wb['limit_perl_txt'] = 'Perl Kullanılsın';
+$wb['limit_ruby_txt'] = 'Ruby Kullanılsın';
+$wb['limit_python_txt'] = 'Python Kullanılsın';
+$wb['force_suexec_txt'] = 'SuEXEC Dayatılsın';
+$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılsın';
+$wb['limit_wildcard_txt'] = 'Genel Alt Etki Alanı Kullanılsın';
+$wb['limit_ssl_txt'] = 'SSL Kullanılsın';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt Kullanılsın';
 $wb['limit_client_error'] = 'Hesabınıza ekleyebileceğiniz en fazla müşteri sınırına ulaştınız.';
 $wb['limit_web_quota_txt'] = 'Web Kotası';
 $wb['limit_traffic_quota_txt'] = 'Trafik Kotası';
@@ -127,11 +133,12 @@ $wb['bank_account_iban_txt'] = 'IBAN';
 $wb['bank_account_swift_txt'] = 'BIC / Swift';
 $wb['web_limits_txt'] = 'Web Sınırları';
 $wb['email_limits_txt'] = 'E-posta Sınırları';
+$wb['xmpp_limits_txt'] = 'XMPP Sınırları';
 $wb['database_limits_txt'] = 'Veritabanı Sınırları';
 $wb['cron_job_limits_txt'] = 'Zamanlanmış Görev Sınırları';
 $wb['dns_limits_txt'] = 'DNS Sınırları';
 $wb['virtualization_limits_txt'] = 'Sanallaştırma Sınırları';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
@@ -139,66 +146,61 @@ $wb['email_error_isemail'] = 'Lütfen geçerli bir e-posta adresi yazın.';
 $wb['customer_no_error_unique'] = 'Müşteri numarası eşsiz (ya da boş) olmalıdır.';
 $wb['paypal_email_error_isemail'] = 'Lütfen geçerli bir PayPal e-posta adresi yazın.';
 $wb['paypal_email_txt'] = 'PayPal E-posta Adresi';
-$wb['err_msg_master_tpl_set'] = '\\"Özel\\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
+$wb['err_msg_master_tpl_set'] = '"Özel" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yok sayılır.';
 $wb['aps_limits_txt'] = 'APS Yükleyici Sınırları';
 $wb['limit_aps_txt'] = 'En Fazla APS Kopyası Sayısı';
 $wb['limit_aps_error_notint'] = 'APS kopya sayısı sınırı bir sayı olmalıdır.';
 $wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
 $wb['locked_txt'] = 'Kilitli<br/>(tüm web vb. devre dışı)';
 $wb['canceled_txt'] = 'İptal<br/>(müşteri oturumu devre dışı)';
-$wb['gender_txt'] = 'Ãœnvan';
+$wb['gender_txt'] = 'Unvan';
 $wb['gender_m_txt'] = 'Bay';
 $wb['gender_f_txt'] = 'Bayan';
+$wb['web_servers_txt'] = 'Web Sunucuları';
+$wb['web_servers_placeholder'] = 'Web Sunucularını Seçin';
+$wb['no_web_server_error'] = 'En az bir web sunucusu seçilmelidir.';
+$wb['web_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir web sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['dns_servers_txt'] = 'DNS Sunucular';
+$wb['dns_servers_placeholder'] = 'DNS Sunucuları Seçin';
+$wb['no_dns_server_error'] = 'En az bir DNS sunucusu seçilmelidir.';
+$wb['dns_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir DNS sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun';
+$wb['db_servers_txt'] = 'Veritabanı Sunucuları';
+$wb['db_servers_placeholder'] = 'Veritabanı Sunucularını Seçin';
+$wb['no_db_server_error'] = 'En az bir veritabanı sunucusu seçilmelidir.';
+$wb['db_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir veritabanı sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['mail_servers_txt'] = 'E-posta Sunucuları';
+$wb['mail_servers_placeholder'] = 'E-posta Sunucularını Seçin';
+$wb['no_mail_server_error'] = 'En az bir e-posta sunucusu seçilmelidir.';
+$wb['mail_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir e-posta sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+
+$wb['xmpp_servers_txt'] = 'XMPP Sunucular';
+$wb['xmpp_servers_placeholder'] = 'XMPP Sunucuları Seçin';
+$wb['no_xmpp_server_error'] = 'En az bir XMPP sunucusu seçilmelidir.';
+$wb['xmpp_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir XMPP sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_domain_txt'] = 'En Fazla XMPP Etki Alanı Sayısı';
+$wb['limit_xmpp_user_txt'] = 'En Fazla XMPP Hesabı Sayısı';
+$wb['limit_xmpp_muc_txt'] = 'Çok Kullanıcılı Sohbet (ÇKS) Kullanılsın';
+$wb['limit_xmpp_pastebin_txt'] = 'ÇKS için Pastebin Kullanılsın';
+$wb['limit_xmpp_httparchive_txt'] = 'ÇKS için HTTP Arşivi Kullanılsın';
+$wb['limit_xmpp_anon_txt'] = 'Adsız Sunucu Kullanılsın';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD Kullanıcı Klasörü Kullanılsın';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream Vekil Sunucusu Kullanılsın';
+$wb['limit_xmpp_status_txt'] = 'Durum Sunucusu Kullanılsın';
 $wb['added_by_txt'] = 'Ekleyen';
 $wb['added_date_txt'] = 'EklendiÄŸi Tarih';
 $wb['parent_client_id_txt'] = 'Bayi Müşterisi';
-$wb['none_txt'] = 'yok';
-$wb['contact_firstname_txt'] = 'Contact firstname';
-$wb['password_click_to_set_txt'] = 'Click to set';
-$wb['limit_backup_txt'] = 'Backupfunction available';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['xmpp_limits_txt'] = 'XMPP Limits';
-$wb['web_servers_txt'] = 'Webservers';
-$wb['web_servers_placeholder'] = 'Select webservers';
-$wb['no_web_server_error'] = 'At least one webserver must be selected.';
-$wb['web_servers_used'] = 'The server you are trying to remove from this client is used as a webserver. Be sure that this server is not used by this client before you remove it.';
-$wb['dns_servers_txt'] = 'DNS servers';
-$wb['dns_servers_placeholder'] = 'Select DNS servers';
-$wb['no_dns_server_error'] = 'At least one DNS server must be selected.';
-$wb['dns_servers_used'] = 'The server you are trying to remove from this client is used as a DNS server. Be sure that this server is not used by this client before you remove it.';
-$wb['db_servers_txt'] = 'Database servers';
-$wb['db_servers_placeholder'] = 'Select database servers';
-$wb['no_db_server_error'] = 'At least one Database server must be selected.';
-$wb['db_servers_used'] = 'The server you are trying to remove from this client is used as a Database server. Be sure that this server is not used by this client before you remove it.';
-$wb['mail_servers_txt'] = 'Mailservers';
-$wb['mail_servers_placeholder'] = 'Select mailservers';
-$wb['no_mail_server_error'] = 'At least one mailserver must be selected.';
-$wb['mail_servers_used'] = 'The server you are trying to remove from this client is used as a Mailserver. Be sure that this server is not used by this client before you remove it.';
-$wb['xmpp_servers_txt'] = 'XMPP Servers';
-$wb['xmpp_servers_placeholder'] = 'Select XMPP Servers';
-$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
-$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
-$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
-$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
-$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
-$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
-$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
-$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
-$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
-$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
-$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
-$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
-$wb['limit_xmpp_status_txt'] = 'Status host available';
-$wb['limit_database_quota_txt'] = 'Database quota';
-$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
-$wb['limit_database_user_txt'] = 'Max. Database users';
-$wb['limit_database_user_error_notint'] = 'The database user limit must be a number.';
-$wb['reseller_txt'] = 'Reseller';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['invalid_vat_id'] = 'The VAT ID is invalid.';
-$wb['email_error_empty'] = 'Email is empty';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
-$wb['Limits'] = 'Limits';
+$wb['none_txt'] = 'Yok';
+$wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
+$wb['limit_database_quota_error_notint'] = 'Veritabanı kotası sınırı bir sayı olmalıdır.';
+$wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
+$wb['limit_database_user_error_notint'] = 'Veritabanı kullanıcı sınırı bir sayı olmalıdır.';
+$wb['reseller_txt'] = 'Bayi';
+$wb['btn_save_txt'] = 'Kaydet';
+$wb['btn_cancel_txt'] = 'Ä°ptal';
+$wb['invalid_vat_id'] = 'Vergi numarası geçersiz.';
+$wb['email_error_empty'] = 'E-posta boÅŸ olamaz.';
+$wb['limit_directive_snippets_txt'] = 'Web Sunucu Yapılandırma Seçimi Görüntülensin';
+$wb['Limits'] = 'Sınırlar';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_message_template.lng b/interface/web/client/lib/lang/tr_client_message_template.lng
index 885e2afc865693d21f588627dcc2639fed794fd7..2b2994c557ef3d6776d5da555a9ad9a473a190e1 100644
--- a/interface/web/client/lib/lang/tr_client_message_template.lng
+++ b/interface/web/client/lib/lang/tr_client_message_template.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['template_type_txt'] = 'E-posta tipi';
-$wb['template_name_txt'] = 'Kalıp adı';
+$wb['template_type_txt'] = 'E-posta Türü';
+$wb['template_name_txt'] = 'Kalıp Adı';
 $wb['subject_txt'] = 'Konu';
 $wb['message_txt'] = 'Ä°leti';
-$wb['Email template'] = 'E-posta kalıbı';
+$wb['Email template'] = 'E-posta Kalıbı';
 $wb['Settings'] = 'Ayarlar';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['variables_description_txt'] = '(Kullanıcı adı ve parola değişkenleri yalnız hoşgeldiniz e-postalarında kullanılabilir.)';
-$wb['duplicate_welcome_error'] = 'Yalnız bir varsayılan hoşgeldiniz e-postası kalıbı bulunabilir. Lütfen yeni bir tema eklemek yerine varolan temayı düzenlemeyi deneyin.';
-$wb['subject_error_empty'] = 'Subject is empty';
-$wb['message_error_empty'] = 'Message is empty';
+$wb['duplicate_welcome_error'] = 'Yalnız bir varsayılan hoşgeldiniz e-postası kalıbı bulunabilir. Lütfen yeni bir tema eklemek yerine var olan temayı düzenlemeyi deneyin.';
+$wb['subject_error_empty'] = 'Konu boÅŸ olamaz';
+$wb['message_error_empty'] = 'Ä°leti boÅŸ olamaz';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_message_template_list.lng b/interface/web/client/lib/lang/tr_client_message_template_list.lng
index d0f50c7feab299fdbbbae0168ad36a2f066abdab..fb7fd944fea9c0f630ce6845ef0f5d4e3e56fdb7 100644
--- a/interface/web/client/lib/lang/tr_client_message_template_list.lng
+++ b/interface/web/client/lib/lang/tr_client_message_template_list.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['list_head_txt'] = 'E-posta Kalıpları';
-$wb['template_type_txt'] = 'Ä°leti grubu';
-$wb['template_name_txt'] = 'Kalıp adı';
+$wb['template_type_txt'] = 'Ä°leti Grubu';
+$wb['template_name_txt'] = 'Kalıp Adı';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_template.lng b/interface/web/client/lib/lang/tr_client_template.lng
index da9f19f79487a165c7ca7994e18ff9f3ff0455f8..30911764483f05a10fbc7b0c62ce6c83c58b6dd4 100644
--- a/interface/web/client/lib/lang/tr_client_template.lng
+++ b/interface/web/client/lib/lang/tr_client_template.lng
@@ -1,61 +1,68 @@
 <?php
-$wb['template_type_txt'] = 'Kalıp Tipi';
+$wb['template_type_txt'] = 'Kalıp Türü';
 $wb['template_name_txt'] = 'Kalıp Adı';
-$wb['limit_client_error_notint'] = 'Müşteri sınırı bir sayı olmalı.';
-$wb['limit_maildomain_txt'] = 'En Fazla E-posta Alan Adı Sayısı';
-$wb['limit_mailbox_txt'] = 'En Fazla Posta Kutusu Sayısı';
+$wb['limit_client_error_notint'] = 'Müşteri sınırı bir sayı olmalıdır.';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['limit_maildomain_txt'] = 'En Fazla E-posta Etki Alanı Sayısı';
+$wb['limit_mailbox_txt'] = 'En Fazla E-posta Kutusu Sayısı';
 $wb['limit_mailalias_txt'] = 'En Fazla Takma E-posta Sayısı';
-$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
-$wb['limit_mailmailinglist_txt'] = 'En Fazla Posta Listesi Sayısı';
+$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
+$wb['limit_mailmailinglist_txt'] = 'En Fazla E-posta Listesi Sayısı';
 $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirici Sayısı';
 $wb['limit_mailcatchall_txt'] = 'En Fazla Tümünü Al Hesabı Sayısı';
 $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı';
 $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı';
-$wb['limit_fetchmail_txt'] = 'En Fazla Posta Alma Hesabı Sayısı';
-$wb['limit_mailquota_txt'] = 'Posta Kutusu Kotası';
-$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz Posta Beyaz/Kara Liste Süzgeci Sayısı';
-$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz Posta Süzgeci Kullanıcı Sayısı';
-$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz Posta Süzgeci Kuralı Sayısı';
+$wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı';
+$wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası';
+$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı';
+$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kullanıcı Sayısı';
+$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kuralı Sayısı';
 $wb['limit_domain_txt'] = 'limit_domain';
 $wb['limit_subdomain_txt'] = 'limit_subdomain';
 $wb['limit_webquota_txt'] = 'limit_webquota';
 $wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
 $wb['limit_cron_txt'] = 'En Fazla Zamanlanmış Görev Sayısı';
-$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Tipi (chroot ve tam İnternet adresi uygulanan)';
+$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Türü (chroot ve tam İnternet adresi uygulanan)';
 $wb['limit_cron_frequency_txt'] = 'İki çalıştırma arasındaki süre';
-$wb['limit_web_domain_txt'] = 'En Fazla Alan Adı Sayısı';
-$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
-$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Alan Adı Sayısı';
+$wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
+$wb['limit_web_domain_txt'] = 'En Fazla Etki Alanı Sayısı';
+$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
+$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Etki Alanı Sayısı';
 $wb['limit_ftp_user_txt'] = 'En Fazla FTP Kullanıcısı Sayısı';
+$wb['default_dnsserver_txt'] = 'Varsayılan Birincil DNS Sunucusu';
 $wb['limit_dns_zone_txt'] = 'En Fazla DNS Bölgesi Sayısı';
-$wb['limit_dns_slave_zone_txt'] = 'En Fazla İkinci DNS Bölgesi Sayısı';
+$wb['default_slave_dnsserver_txt'] = 'Varsayılan İkincil DNS Sunucusu';
+$wb['limit_dns_slave_zone_txt'] = 'En Fazla İkincil DNS Bölgesi Sayısı';
 $wb['limit_dns_record_txt'] = 'En Fazla DNS Kaydı Sayısı';
 $wb['limit_shell_user_txt'] = 'En Fazla Kabuk Kullanıcısı Sayısı';
 $wb['limit_webdav_user_txt'] = 'En Fazla Webdav Kullanıcısı Sayısı';
+$wb['limit_backup_txt'] = 'Yedekleme Özelliği Kullanılsın';
 $wb['limit_client_txt'] = 'En Fazla Müşteri Sayısı';
-$wb['limit_maildomain_error_notint'] = 'E-posta alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_mailmailinglist_error_notint'] = 'Posta listesi kaydı sınırı bir sayı olmalıdır.';
-$wb['limit_mailbox_error_notint'] = 'Posta kutusu sınırı bir sayı olmalıdır.';
+$wb['limit_maildomain_error_notint'] = 'E-posta etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_mailmailinglist_error_notint'] = 'E-posta listesi kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_mailbox_error_notint'] = 'E-posta kutusu sınırı bir sayı olmalıdır.';
 $wb['limit_mailalias_error_notint'] = 'Takma e-posta sınırı bir sayı olmalıdır.';
-$wb['limit_mailaliasdomain_error_notint'] = 'Takma e-posta alan adı sınırı bir sayı olmalıdır.';
+$wb['limit_mailaliasdomain_error_notint'] = 'Takma e-posta etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirme sınırı bir sayı olmalıdır.';
 $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al sınırı bir sayı olmalıdır.';
 $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.';
 $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.';
-$wb['limit_mailfetchmail_error_notint'] = 'Posta alma sınırı bir sayı olmalıdır.';
+$wb['limit_mailfetchmail_error_notint'] = 'E-posta alma sınırı bir sayı olmalıdır.';
 $wb['limit_mailquota_error_notint'] = 'E-posta kotası sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz posta süzgeci beyaz/kara liste sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz posta süzgeci kullanıcı sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz posta süzgeci kural sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz ileti süzgeci beyaz/kara liste sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz ileti süzgeci kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz ileti süzgeci kural sınırı bir sayı olmalıdır.';
 $wb['limit_web_domain_error_notint'] = 'Web sitesi sınırı bir sayı olmalıdır.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt alan sınırı bir sayı olmalıdır.';
+$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_ftp_user_error_notint'] = 'FTP kullanıcı sınırı bir sayı olmalıdır.';
 $wb['limit_shell_user_error_notint'] = 'Kabuk kullanıcı sınırı bir sayı olmalıdır.';
 $wb['limit_webdav_user_error_notint'] = 'Webdav kullanıcı sınırı bir sayı olmalıdır.';
-$wb['limit_dns_zone_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_dns_zone_error_notint'] = 'Birincil DNS kaydı sınırı bir sayı olmalıdır.';
 $wb['limit_dns_slave_zone_error_notint'] = 'İkinci DNS bölgesi sınırı bir sayı olmalıdır.';
 $wb['limit_dns_record_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
+$wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
 $wb['limit_database_error_notint'] = 'Veritabanı sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_notint'] = 'Zamanlanmış Görev sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_frequency'] = 'Zamanlanmış Görev sıklığı sınırı bir sayı olmalıdır.';
@@ -69,15 +76,16 @@ $wb['limit_openvz_vm_template_id_txt'] = 'Dayatılacak Sanal Sunucu Kalıbı';
 $wb['limit_openvz_vm_error_notint'] = 'Sanal sunucu sınırı bir sayı olmalıdır.';
 $wb['ssh_chroot_txt'] = 'SSH-Chroot Ayarları';
 $wb['web_php_options_txt'] = 'PHP Ayarları';
-$wb['limit_cgi_txt'] = 'CGI Kullanılabilir';
-$wb['limit_ssi_txt'] = 'SSI Kullanılabilir';
-$wb['limit_perl_txt'] = 'Perl Kullanılabilir';
-$wb['limit_ruby_txt'] = 'Ruby Kullanılabilir';
-$wb['limit_python_txt'] = 'Python Kullanılabilir';
-$wb['force_suexec_txt'] = 'SuEXEC Dayatılmış';
-$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılabilir';
-$wb['limit_wildcard_txt'] = 'Genel Alt Alan Adı Kullanılabilir';
-$wb['limit_ssl_txt'] = 'SSL Kullanılabilir';
+$wb['limit_cgi_txt'] = 'CGI Kullanılsın';
+$wb['limit_ssi_txt'] = 'SSI Kullanılsın';
+$wb['limit_perl_txt'] = 'Perl Kullanılsın';
+$wb['limit_ruby_txt'] = 'Ruby Kullanılsın';
+$wb['limit_python_txt'] = 'Python Kullanılsın';
+$wb['force_suexec_txt'] = 'SuEXEC Dayatılsın';
+$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılsın';
+$wb['limit_wildcard_txt'] = 'Genel Alt Etki Alanı Kullanılsın';
+$wb['limit_ssl_txt'] = 'SSL Kullanılsın';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt Kullanılsın';
 $wb['web_limits_txt'] = 'Web Sınırları';
 $wb['email_limits_txt'] = 'E-posta Sınırları';
 $wb['database_limits_txt'] = 'Veritabanı Sınırları';
@@ -87,38 +95,33 @@ $wb['virtualization_limits_txt'] = 'Sanallaştırma Sınırları';
 $wb['aps_limits_txt'] = 'APS Yükleyici Sınırları';
 $wb['limit_aps_txt'] = 'En fazla APS kopyası sayısı';
 $wb['limit_aps_error_notint'] = 'APS kopyaları sınırı bir sayı olmalıdır.';
-$wb['limit_domainmodule_txt'] = 'Alan Adı Modülü Sınırı';
+$wb['limit_domainmodule_txt'] = 'Etki Alanı Modülü Sınırı';
 $wb['client_limits_txt'] = 'Müşteri Sınırları';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['default_webserver_txt'] = 'Default Webserver';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['limit_backup_txt'] = 'Backupfunction available';
-$wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['limit_database_quota_txt'] = 'Database quota';
-$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
-$wb['xmpp_limits_txt'] = 'XMPP Limits';
-$wb['xmpp_servers_txt'] = 'XMPP Servers';
-$wb['xmpp_servers_placeholder'] = 'Select XMPP Servers';
-$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
-$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
-$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
-$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
-$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
-$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
-$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
-$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
-$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
-$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
-$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
-$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
-$wb['limit_xmpp_status_txt'] = 'Status host available';
-$wb['dns_servers_txt'] = 'DNS servers';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['limit_database_user_txt'] = 'Max. Database users';
-$wb['web_servers_txt'] = 'Webservers';
-$wb['db_servers_txt'] = 'Database servers';
-$wb['mail_servers_txt'] = 'Mailservers';
-$wb['Limits'] = 'Limits';
+$wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
+$wb['limit_database_quota_error_notint'] = 'Veritabanı kotası sınırı değeri bir sayı olmalıdır.';
+$wb['xmpp_limits_txt'] = 'XMPP Sınırları';
+$wb['xmpp_servers_txt'] = 'XMPP Sunucuları';
+$wb['xmpp_servers_placeholder'] = 'XMPP Sunucularını Seçin';
+$wb['no_xmpp_server_error'] = 'En az bir XMPP sunucusu seçilmelidir.';
+$wb['xmpp_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir XMPP sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_domain_txt'] = 'En fazla XMPP etki alanı sayısı';
+$wb['limit_xmpp_user_txt'] = 'En fazla XMPP hesabı sayısı';
+$wb['limit_xmpp_muc_txt'] = 'Çok Kullanıcılı Sohbet (ÇKS) Kullanılsın';
+$wb['limit_xmpp_pastebin_txt'] = 'ÇKS için Pastebin Kullanılsın';
+$wb['limit_xmpp_httparchive_txt'] = 'ÇKS için HTTP Arşivi Kullanılsın';
+$wb['limit_xmpp_anon_txt'] = 'Adsız Sunucu Kullanılsın';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD Kullanıcı Klasörü Kullanılsın';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream Vekil Sunucusu Kullanılsın';
+$wb['limit_xmpp_status_txt'] = 'Durum Sunucusu Kullanılsın';
+$wb['dns_servers_txt'] = 'DNS Sunucular';
+$wb['limit_directive_snippets_txt'] = 'Web Sunucu Yapılandırma Seçimi Görüntülensin';
+$wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
+$wb['web_servers_txt'] = 'Web Sunucuları';
+$wb['db_servers_txt'] = 'Veritabanı Sunucuları';
+$wb['xmpp_servers_txt'] = 'XMPP Sunucuları';
+$wb['db_servers_txt'] = 'Veritabanı Sunucuları';
+$wb['mail_servers_txt'] = 'E-posta Sunucuları';
+$wb['Limits'] = 'Sınırlar';
 ?>
diff --git a/interface/web/client/lib/lang/tr_client_template_list.lng b/interface/web/client/lib/lang/tr_client_template_list.lng
index 1663e6e2da3ccaab1f2fa8a93519d45e6212ff72..cab3f906a4aaa871f1e7758796bc9cc028e99ca1 100644
--- a/interface/web/client/lib/lang/tr_client_template_list.lng
+++ b/interface/web/client/lib/lang/tr_client_template_list.lng
@@ -1,6 +1,7 @@
 <?php
 $wb['list_head_txt'] = 'Müşteri ve Bayi Kalıpları';
-$wb['template_type_txt'] = 'Tip';
-$wb['template_name_txt'] = 'Kalıp adı';
-$wb['template_id_txt'] = 'Kalıp kodu';
+$wb['template_type_txt'] = 'Tür';
+$wb['template_name_txt'] = 'Kalıp Adı';
+$wb['template_id_txt'] = 'Kalıp Kodu';
+$wb['sys_groupid_txt'] = 'Bayi';
 ?>
diff --git a/interface/web/client/lib/lang/tr_clients_list.lng b/interface/web/client/lib/lang/tr_clients_list.lng
index d59411a3d1d02dbcd35ddf9d61d71e1730ebb983..8b13f1c81b94b31c26e93a14ecdc92aab8804cef 100644
--- a/interface/web/client/lib/lang/tr_clients_list.lng
+++ b/interface/web/client/lib/lang/tr_clients_list.lng
@@ -1,14 +1,14 @@
 <?php
 $wb['list_head_txt'] = 'Müşteriler';
 $wb['client_id_txt'] = 'Kod';
-$wb['company_name_txt'] = 'Kurum Adı';
+$wb['company_name_txt'] = 'Kuruluş Adı';
 $wb['contact_name_txt'] = 'İlgili Adı';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['city_txt'] = 'Ä°l';
 $wb['country_txt'] = 'Ãœlke';
 $wb['add_new_record_txt'] = 'Müşteri Ekle';
 $wb['customer_no_txt'] = 'Müşteri No';
-$wb['locked_txt'] = 'Locked';
-$wb['yes_txt'] = 'Yes';
-$wb['no_txt'] = 'No';
+$wb['locked_txt'] = 'Kilitli';
+$wb['yes_txt'] = 'Evet';
+$wb['no_txt'] = 'Hayır';
 ?>
diff --git a/interface/web/client/lib/lang/tr_domain.lng b/interface/web/client/lib/lang/tr_domain.lng
index ba5dab700d0a988220530423d87ead120ce0c69f..d0b4e228dae6ab0867652235de8eea6ff4c2d601 100644
--- a/interface/web/client/lib/lang/tr_domain.lng
+++ b/interface/web/client/lib/lang/tr_domain.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['domain_error_empty'] = 'Alan adı boş olamaz';
-$wb['domain_error_unique'] = 'Aynı alan adı zaten var';
-$wb['domain_error_regex'] = 'Bu alan adına izin verilmiyor';
-$wb['Domain'] = 'Alan Adı';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz';
+$wb['domain_error_unique'] = 'Aynı etki alanı zaten var';
+$wb['domain_error_regex'] = 'Bu etki alanına izin verilmiyor';
+$wb['Domain'] = 'Etki Alanı';
 ?>
diff --git a/interface/web/client/lib/lang/tr_domain_list.lng b/interface/web/client/lib/lang/tr_domain_list.lng
index d422ef3d5d4ac5e51619e10b5f18df24604ed47f..8b6f75be84624cbec238c7df2fea38deb6b8497b 100644
--- a/interface/web/client/lib/lang/tr_domain_list.lng
+++ b/interface/web/client/lib/lang/tr_domain_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Alan Adları';
-$wb['add_new_record_txt'] = 'Alan Adı Ekle';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['list_head_txt'] = 'Etki Alanları';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['user_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng
index 4906a894c0bf02bbd6bf33b4ab4a7f8c84eb0eb5..e042301400928d353f6fda56acf588f36e83760e 100644
--- a/interface/web/client/lib/lang/tr_reseller.lng
+++ b/interface/web/client/lib/lang/tr_reseller.lng
@@ -1,28 +1,30 @@
 <?php
-$wb['limit_maildomain_txt'] = 'En Fazla Alan Adı Sayısı';
-$wb['limit_mailmailinglist_txt'] = 'En Fazla Posta Listesi Sayısı';
-$wb['limit_mailbox_txt'] = 'En Fazla Posta Kutusu Sayısı';
+$wb['limit_maildomain_txt'] = 'En Fazla Etki Alanı Sayısı';
+$wb['limit_mailmailinglist_txt'] = 'En Fazla E-posta Listesi Sayısı';
+$wb['limit_mailbox_txt'] = 'En Fazla E-posta Kutusu Sayısı';
 $wb['limit_mailalias_txt'] = 'En Fazla Takma E-posta Sayısı';
-$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
+$wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
 $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirici Sayısı';
 $wb['limit_mailcatchall_txt'] = 'En Fazla E-posta Tümünü Al Hesabı Sayısı';
 $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı';
 $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı';
-$wb['limit_fetchmail_txt'] = 'En Fazla Posta Alma Hesabı Sayısı';
-$wb['limit_mailquota_txt'] = 'Posta Kutusu Kotası';
-$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz Posta Beyaz/Kara Liste Süzgeci Sayısı';
-$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz Posta Kullanıcısı Sayısı';
-$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz Posta Kuralı Sayısı';
-$wb['default_mailserver_txt'] = 'Varsayılan Posta Sunucusu';
-$wb['company_name_txt'] = 'Kurum Adı';
+$wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı';
+$wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası';
+$wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı';
+$wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Kullanıcısı Sayısı';
+$wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Kuralı Sayısı';
+$wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu';
+$wb['company_name_txt'] = 'Kuruluş Adı';
+$wb['contact_firstname_txt'] = 'İlgili Adı';
 $wb['contact_name_txt'] = 'İlgili Adı';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['language_txt'] = 'Dil';
 $wb['usertheme_txt'] = 'Tema';
 $wb['street_txt'] = 'Adres';
-$wb['zip_txt'] = 'Posta kodu';
+$wb['zip_txt'] = 'Posta Kodu';
 $wb['city_txt'] = 'İlçe';
 $wb['state_txt'] = 'Ä°l';
 $wb['country_txt'] = 'Ãœlke';
@@ -33,25 +35,26 @@ $wb['email_txt'] = 'E-posta';
 $wb['internet_txt'] = 'Ä°nternet';
 $wb['icq_txt'] = 'ICQ';
 $wb['notes_txt'] = 'Notlar';
-$wb['company_txt'] = 'Kurum';
-$wb['title_txt'] = 'Ãœnvan';
+$wb['company_txt'] = 'KuruluÅŸ';
+$wb['title_txt'] = 'Unvan';
 $wb['firstname_txt'] = 'Adı';
 $wb['surname_txt'] = 'Soyadı';
 $wb['limit_domain_txt'] = 'limit_domain';
 $wb['limit_subdomain_txt'] = 'limit_subdomain';
 $wb['limit_webquota_txt'] = 'limit_webquota';
 $wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
+$wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
 $wb['limit_cron_txt'] = 'En Fazla Zamanlanmış Görev Sayısı';
-$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Tipi (chroot ve tam İnternet adresi uygulaması)';
+$wb['limit_cron_type_txt'] = 'En Fazla Zamanlanmış Görev Türü (chroot ve tam İnternet adresi uygulaması)';
 $wb['limit_cron_frequency_txt'] = 'İki Çalıştırma Arasındaki Süre';
 $wb['ip_address_txt'] = 'ip_adresi';
 $wb['limit_client_error_notint'] = 'Alt müşteri sınırı bir sayı olmalıdır.';
 $wb['firstname_error_empty'] = 'Adı boş olamaz.';
 $wb['contact_error_empty'] = 'İlgili adı boş olamaz.';
 $wb['default_webserver_txt'] = 'Varsayılan Web Sunucusu';
-$wb['limit_web_domain_txt'] = 'En Fazla Alan Adı Sayısı';
-$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Alan Adı Sayısı';
-$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Alan Adı Sayısı';
+$wb['limit_web_domain_txt'] = 'En Fazla Etki Alanı Sayısı';
+$wb['limit_web_aliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı';
+$wb['limit_web_subdomain_txt'] = 'En Fazla Alt Etki Alanı Sayısı';
 $wb['limit_ftp_user_txt'] = 'En Fazla FTP Kullanıcı Sayısı';
 $wb['default_dnsserver_txt'] = 'Varsayılan DNS Sunucusu';
 $wb['limit_dns_zone_txt'] = 'En Fazla DNS Bölgesi Sayısı';
@@ -59,32 +62,35 @@ $wb['limit_dns_slave_zone_txt'] = 'En Fazla İkincil DNS Bölgesi Sayısı';
 $wb['limit_dns_record_txt'] = 'En Fazla DNS Kaydı Sayısı';
 $wb['limit_shell_user_txt'] = 'En Fazla Kabuk Kullanıcısı Sayısı';
 $wb['limit_webdav_user_txt'] = 'En Fazla Webdav Kullanıcısı Sayısı';
+$wb['limit_backup_txt'] = 'Yedekleme Özelliği Kullanılsın';
 $wb['limit_client_txt'] = 'En Fazla Müşteri Sayısı';
 $wb['username_error_empty'] = 'Kullanıcı adı boş olamaz.';
 $wb['username_error_unique'] = 'Bu kullanıcı adı zaten var.';
-$wb['limit_maildomain_error_notint'] = 'E-posta alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_mailmailinglist_error_notint'] = 'Posta listesi kaydı sınırı bir sayı olmalıdır.';
-$wb['limit_mailbox_error_notint'] = 'Posta kutusu sınırı bir sayı olmalıdır.';
+$wb['limit_maildomain_error_notint'] = 'E-posta etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_mailmailinglist_error_notint'] = 'E-posta listesi kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_mailbox_error_notint'] = 'E-posta kutusu sınırı bir sayı olmalıdır.';
 $wb['limit_mailalias_error_notint'] = 'Takma e-posta sınırı bir sayı olmalıdır.';
 $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirici sınırı bir sayı olmalıdır.';
 $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al hesabı sınırı bir sayı olmalıdır.';
 $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.';
 $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.';
-$wb['limit_mailfetchmail_error_notint'] = 'Posta alıcısı sınırı bir sayı olmalıdır.';
+$wb['limit_mailfetchmail_error_notint'] = 'E-posta alıcısı sınırı bir sayı olmalıdır.';
 $wb['limit_mailquota_error_notint'] = 'E-posta kota sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz posta beyaz/kara liste süzgeci sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz posta süzgeci kullanıcısı sınırı bir sayı olmalıdır.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz posta süzgeci kuralı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'Önemsiz ileti beyaz/kara liste süzgeci sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_user_error_notint'] = 'Önemsiz ileti süzgeci kullanıcısı sınırı bir sayı olmalıdır.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Önemsiz ileti süzgeci kuralı sınırı bir sayı olmalıdır.';
 $wb['limit_web_domain_error_notint'] = 'Web sitesi sınırı bir sayı olmalıdır.';
-$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma alan adı sınırı bir sayı olmalıdır.';
-$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt alan adı sınırı bir sayı olmalıdır.';
+$wb['limit_web_aliasdomain_error_notint'] = 'Web sitesi takma etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_web_subdomain_error_notint'] = 'Web sitesi alt etki alanı sınırı bir sayı olmalıdır.';
 $wb['limit_ftp_user_error_notint'] = 'FTP kullanıcı sınırı bir sayı olmalıdır.';
 $wb['limit_webdav_user_error_notint'] = 'Webdav kullanıcısı sınırı bir sayı olmalıdır.';
 $wb['limit_shell_user_error_notint'] = 'Kabuk kullanıcısı sınırı bir sayı olmalıdır.';
-$wb['limit_dns_zone_error_notint'] = 'DNS bölgesi sınırı bir sayı olmalıdır.';
+$wb['limit_dns_zone_error_notint'] = 'Birincil DNS bölgesi sınırı bir sayı olmalıdır.';
 $wb['limit_dns_slave_zone_error_notint'] = 'İkincil DNS bölgesi sınırı bir sayı olmalıdır.';
 $wb['limit_dns_record_error_notint'] = 'DNS kaydı sınırı bir sayı olmalıdır.';
+$wb['limit_client_error_notint'] = 'Müşteri sınırı bir sayı olmalıdır.';
 $wb['default_dbserver_txt'] = 'Varsayılan Veritabanı Sunucusu';
+$wb['limit_database_txt'] = 'En Fazla Veritabanı Sayısı';
 $wb['limit_database_error_notint'] = 'Veritabanı sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_notint'] = 'Zamanlanmış görev sınırı bir sayı olmalıdır.';
 $wb['limit_cron_error_frequency'] = 'Zamanlanmış görev sıklığı sınırı bir sayı olmalıdır.';
@@ -95,16 +101,18 @@ $wb['add_additional_template_txt'] = 'Ek Kalıbı Ekle';
 $wb['delete_additional_template_txt'] = 'Ek Kalıbı Sil';
 $wb['ssh_chroot_txt'] = 'SSH-Chroot Ayarları';
 $wb['web_php_options_txt'] = 'PHP Ayarları';
-$wb['limit_cgi_txt'] = 'CGI Kullanılabilir';
-$wb['limit_ssi_txt'] = 'SSI Kullanılabilir';
-$wb['limit_perl_txt'] = 'Perl Kullanılabilir';
-$wb['limit_ruby_txt'] = 'Ruby Kullanılabilir';
-$wb['limit_python_txt'] = 'Python Kullanılabilir';
-$wb['force_suexec_txt'] = 'SuEXEC Dayatılmış';
-$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılabilir';
-$wb['limit_wildcard_txt'] = 'Genel Alt Alan Kullanılabilir';
-$wb['limit_ssl_txt'] = 'SSL Kullanılabilir';
+$wb['limit_cgi_txt'] = 'CGI Kullanılsın';
+$wb['limit_ssi_txt'] = 'SSI Kullanılsın';
+$wb['limit_perl_txt'] = 'Perl Kullanılsın';
+$wb['limit_ruby_txt'] = 'Ruby Kullanılsın';
+$wb['limit_python_txt'] = 'Python Kullanılsın';
+$wb['force_suexec_txt'] = 'SuEXEC Dayatılsın';
+$wb['limit_hterror_txt'] = 'Özel Hata Sayfaları Kullanılsın';
+$wb['limit_wildcard_txt'] = 'Genel Alt Etki Alanı Kullanılsın';
+$wb['limit_ssl_txt'] = 'SSL Kullanılsın';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt Kullanılsın';
 $wb['limit_client_error'] = 'Hesabınıza ekleyebileceğiniz en fazla müşteri sayısına ulaştınız.';
+$wb['limit_client_error_positive_or_unlimited'] = 'Müşteri sayısı > 0 ya da -1 (sınırsız) olmalıdır';
 $wb['limit_web_quota_txt'] = 'Web Kotası';
 $wb['limit_traffic_quota_txt'] = 'Trafik Kotası';
 $wb['limit_trafficquota_error_notint'] = 'Trafik kotası bir sayı olmalıdır.';
@@ -123,7 +131,7 @@ $wb['database_limits_txt'] = 'Veritabanı Sınırları';
 $wb['cron_job_limits_txt'] = 'Zamanlanmış Görev Sınırları';
 $wb['dns_limits_txt'] = 'DNS Sınırları';
 $wb['virtualization_limits_txt'] = 'Sanallaştırma Sınırları';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
@@ -146,62 +154,58 @@ $wb['locked_txt'] = 'Kilitli';
 $wb['canceled_txt'] = 'Ä°ptal edilmiÅŸ';
 $wb['gender_m_txt'] = 'Bay';
 $wb['gender_f_txt'] = 'Bayan';
-$wb['gender_txt'] = 'Ãœnvan';
+$wb['gender_txt'] = 'Unvan';
+$wb['web_servers_txt'] = 'Web Sunucuları';
+$wb['web_servers_placeholder'] = 'Web Sunucularını Seçin';
+$wb['no_web_server_error'] = 'En az bir web sunucusu seçilmelidir.';
+$wb['web_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir web sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['dns_servers_txt'] = 'DNS Sunucular';
+$wb['dns_servers_placeholder'] = 'DNS Sunucuları Seçin';
+$wb['no_dns_server_error'] = 'En az bir DNS sunucusu seçilmelidir.';
+$wb['dns_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir DNS sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun';
+$wb['db_servers_txt'] = 'Veritabanı Sunucuları';
+$wb['db_servers_placeholder'] = 'Veritabanı Sunucularını Seçin';
+$wb['no_db_server_error'] = 'En az bir veritabanı sunucusu seçilmelidir.';
+$wb['db_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir veritabanı sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['mail_servers_txt'] = 'E-posta Sunucuları';
+$wb['mail_servers_placeholder'] = 'E-posta Sunucularını Seçin';
+$wb['no_mail_server_error'] = 'En az bir e-posta sunucusu seçilmelidir.';
+$wb['mail_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir e-posta sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
 $wb['customer_no_template_txt'] = 'Müşteri No Kalıbı';
 $wb['customer_no_template_error_regex_txt'] = 'Müşteri no kalıbında geçersiz karakterler var';
 $wb['customer_no_start_txt'] = 'Müşteri No Başlangıç Değeri';
 $wb['customer_no_counter_txt'] = 'Müşteri No Sayacı';
+
+$wb['xmpp_limits_txt'] = 'XMPP Sınırları';
+$wb['xmpp_servers_txt'] = 'XMPP Sunucular';
+$wb['xmpp_servers_placeholder'] = 'XMPP Sunucuları Seçin';
+$wb['no_xmpp_server_error'] = 'En az bir XMPP sunucusu seçilmelidir.';
+$wb['xmpp_servers_used'] = 'Bu müşteriden kaldırmaya çalıştığınız sunucu bir XMPP sunucusu olarak kullanılıyor. Kaldırmadan önce bu sunucunun bu müşteri tarafından kullanılmadığından emin olun.';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP etki alanı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_xmpp_domain_txt'] = 'En Fazla XMPP Etki Alanı Sayısı';
+$wb['limit_xmpp_user_txt'] = 'En Fazla XMPP Hesabı Sayısı';
+$wb['limit_xmpp_muc_txt'] = 'Çok Kullanıcılı Sohbet (ÇKS) Kullanılsın';
+$wb['limit_xmpp_pastebin_txt'] = 'ÇKS için Pastebin Kullanılsın';
+$wb['limit_xmpp_httparchive_txt'] = 'ÇKS için HTTP Arşivi Kullanılsın';
+$wb['limit_xmpp_anon_txt'] = 'Adsız Sunucu Kullanılsın';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD Kullanıcı Klasörü Kullanılsın';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream Vekil Sunucusu Kullanılsın';
+$wb['limit_xmpp_status_txt'] = 'Durum Sunucusu Kullanılsın';
 $wb['added_by_txt'] = 'Ekleyen';
 $wb['added_date_txt'] = 'EklendiÄŸi Tarih';
-$wb['limit_domainmodule_error_notint'] = 'Alan adı modülü sınırı bir sayı olmalıdır.';
-$wb['limit_domainmodule_txt'] = 'Alan Adı Modülü Sınırı';
+$wb['limit_domainmodule_error_notint'] = 'Etki alanı modülü sınırı bir sayı olmalıdır.';
+$wb['limit_domainmodule_txt'] = 'Etki Alanı Modülü Sınırı';
 $wb['client_limits_txt'] = 'Müşteri Sınırları';
-$wb['err_msg_master_tpl_set'] = '\\"Özel\\" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yoksayılır.';
-$wb['contact_firstname_txt'] = 'Contact firstname';
-$wb['password_click_to_set_txt'] = 'Click to set';
-$wb['limit_database_user_txt'] = 'Max. Database users';
-$wb['limit_backup_txt'] = 'Backupfunction available';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
-$wb['web_servers_txt'] = 'Webservers';
-$wb['web_servers_placeholder'] = 'Select Webservers';
-$wb['no_web_server_error'] = 'At least one webserver must be selected.';
-$wb['web_servers_used'] = 'The server you are trying to remove from this client is used as a webserver. Be sure that this server is not used by this client before to remove it.';
-$wb['dns_servers_txt'] = 'DNS Server';
-$wb['dns_servers_placeholder'] = 'Select DNS Servers';
-$wb['no_dns_server_error'] = 'At least one DNS server must be selected.';
-$wb['dns_servers_used'] = 'The server you are trying to remove from this client is used as a DNS server. Be sure that this server is not used by this client before to remove it.';
-$wb['db_servers_txt'] = 'Database Server';
-$wb['db_servers_placeholder'] = 'Select Database Servers';
-$wb['no_db_server_error'] = 'At least one Database server must be selected.';
-$wb['db_servers_used'] = 'The server you are trying to remove from this client is used as a Database server. Be sure that this server is not used by this client before to remove it.';
-$wb['mail_servers_txt'] = 'Mailservers';
-$wb['mail_servers_placeholder'] = 'Select Mailservers';
-$wb['no_mail_server_error'] = 'At least one Mailserver must be selected.';
-$wb['mail_servers_used'] = 'The server you are trying to remove from this client is used as a Mailserver. Be sure that this server is not used by this client before to remove it.';
-$wb['xmpp_limits_txt'] = 'XMPP Limits';
-$wb['xmpp_servers_txt'] = 'XMPP Servers';
-$wb['xmpp_servers_placeholder'] = 'Select XMPP Servers';
-$wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.';
-$wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.';
-$wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.';
-$wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.';
-$wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains';
-$wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts';
-$wb['limit_xmpp_muc_txt'] = 'Multiuser chat available';
-$wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available';
-$wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available';
-$wb['limit_xmpp_anon_txt'] = 'Anonymous host available';
-$wb['limit_xmpp_vjud_txt'] = 'VJUD user directory available';
-$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy available';
-$wb['limit_xmpp_status_txt'] = 'Status host available';
-$wb['invalid_vat_id'] = 'The VAT ID is invalid.';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['email_error_empty'] = 'Email is empty';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['limit_database_user_error_notint'] = 'The database user limit must be a number.';
-$wb['limit_database_quota_txt'] = 'Database quota';
-$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
-$wb['Limits'] = 'Limits';
+$wb['err_msg_master_tpl_set'] = '"Özel" kalıptan başka bir ana kalıp seçilirse, tüm özel sınırlama ayarları yok sayılır.';
+$wb['invalid_vat_id'] = 'Vergi numarası geçersiz.';
+$wb['btn_save_txt'] = 'Kaydet';
+$wb['btn_cancel_txt'] = 'Ä°ptal';
+$wb['email_error_empty'] = 'E-posta boÅŸ olamaz.';
+$wb['limit_directive_snippets_txt'] = 'Web Sunucu Yapılandırma Seçimi Görüntülensin';
+$wb['limit_database_user_txt'] = 'En Fazla Veritabanı Kullanıcısı Sayısı';
+$wb['limit_database_user_error_notint'] = 'Veritabanı kullanıcı sınırı bir sayı olmalıdır.';
+$wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
+$wb['limit_database_quota_error_notint'] = 'Veritabanı kotası sınırı bir sayı olmalıdır.';
+$wb['Limits'] = 'Sınırlar';
 ?>
diff --git a/interface/web/client/lib/lang/tr_resellers_list.lng b/interface/web/client/lib/lang/tr_resellers_list.lng
index 2cb388b96eaf084d3e4fb0140d32dbd13585657f..62116103c14046c5e5f46f479e49e5e26d251a0f 100644
--- a/interface/web/client/lib/lang/tr_resellers_list.lng
+++ b/interface/web/client/lib/lang/tr_resellers_list.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['list_head_txt'] = 'Bayiler';
 $wb['client_id_txt'] = 'Kod';
-$wb['company_name_txt'] = 'Kurum Adı';
+$wb['company_name_txt'] = 'Kuruluş Adı';
 $wb['contact_name_txt'] = 'İlgili Adı';
 $wb['city_txt'] = 'Ä°l';
 $wb['country_txt'] = 'Ãœlke';
diff --git a/interface/web/client/reseller_del.php b/interface/web/client/reseller_del.php
index 55872beabd3567f1c536bf775ac534d3d6133cee..a77dc5659cda8a36d75189ab62d244a7fb9a7280 100644
--- a/interface/web/client/reseller_del.php
+++ b/interface/web/client/reseller_del.php
@@ -60,7 +60,48 @@ class page_action extends tform_actions {
 		$client_id = $app->functions->intval($this->dataRecord['client_id']);
 
 		$tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE parent_client_id = ?", $client_id);
-		if($tmp["number"] > 0) $app->error($app->lng('error_has_clients'));
+		if($tmp["number"] > 0) {
+			$app->error($app->lng('error_has_clients'));
+		} else {
+			$parent_client_id = $app->functions->intval($this->dataRecord['parent_client_id']);
+			$parent_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE client_id = ?", $parent_client_id);
+			$client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client_id);
+			
+			// Delete all records (mail, web, etc....) of this reseller.
+			$tables = 'cron,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_database_user,web_domain,web_folder,web_folder_user,domain,mail_mailinglist,spamfilter_wblist';
+			$tables_array = explode(',', $tables);
+			$client_group_id = $app->functions->intval($client_group['groupid']);
+			if($client_group_id > 1) {
+				foreach($tables_array as $table) {
+					if($table != '') {
+						//* find the primary ID of the table
+						$table_info = $app->db->tableInfo($table);
+						$index_field = '';
+						foreach($table_info as $tmp) {
+							if($tmp['option'] == 'primary') $index_field = $tmp['name'];
+						}
+						//* Delete the records
+						if($index_field != '') {
+							$records = $app->db->queryAllRecords("SELECT * FROM ?? WHERE sys_groupid = ? ORDER BY ?? DESC", $table, $client_group_id, $index_field);
+							if(is_array($records)) {
+								foreach($records as $rec) {
+									$app->db->datalogDelete($table, $index_field, $rec[$index_field]);
+									//* Delete traffic records that dont have a sys_groupid column
+									if($table == 'web_domain') {
+										$app->db->query("DELETE FROM web_traffic WHERE hostname = ?", $rec['domain']);
+									}
+									//* Delete mail_traffic records that dont have a sys_groupid
+									if($table == 'mail_user') {
+										$app->db->query("DELETE FROM mail_traffic WHERE mailuser_id = ?", $rec['mailuser_id']);
+									}
+								}
+							}
+						}
+
+					}
+				}
+			}
+		}
 
 	}
 
diff --git a/interface/web/client/reseller_edit.php b/interface/web/client/reseller_edit.php
index 7a84be525300ccedf01d95ce1f7aacacf8368fe7..3078e01fbc47a8c71f1ec1734fa03f642c4b6baf 100644
--- a/interface/web/client/reseller_edit.php
+++ b/interface/web/client/reseller_edit.php
@@ -200,6 +200,9 @@ class page_action extends tform_actions {
 	*/
 	function onAfterInsert() {
 		global $app, $conf;
+		
+		$app->uses('auth');
+		
 		// Create the group for the reseller
 		$groupid = $app->db->datalogInsert('sys_group', array("name" => $this->dataRecord["username"], "description" => '', "client_id" => $this->id), 'groupid');
 		$groups = $groupid;
@@ -213,16 +216,10 @@ class page_action extends tform_actions {
 		$active = 1;
 		$language = $this->dataRecord["language"];
 
-		$salt="$1$";
-		$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-		for ($n=0;$n<8;$n++) {
-			$salt.=$base64_alphabet[mt_rand(0, 63)];
-		}
-		$salt.="$";
-		$password = crypt(stripslashes($password), $salt);
-
+		$password = $app->auth->crypt_password(stripslashes($password));
+		
 		// Create the controlpaneluser for the reseller
-		$sql = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
+		$sql = "INSERT INTO sys_user (`username`,`passwort`,`modules`,`startmodule`,`app_theme`,`typ`, `active`,`language`,`groups`,`default_group`,`client_id`)
 		VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 		$app->db->query($sql, $username, $password, $modules, $startmodule, $usertheme, $type, $active, $language, $groups, $groupid, $this->id);
 
@@ -313,6 +310,8 @@ class page_action extends tform_actions {
 	function onAfterUpdate() {
 		global $app, $conf;
 
+		$app->uses('auth');
+		
 		// username changed
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['username']) && $this->dataRecord['username'] != '' && $this->oldDataRecord['username'] != $this->dataRecord['username']) {
 			$username = $this->dataRecord["username"];
@@ -329,13 +328,8 @@ class page_action extends tform_actions {
 		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord["password"]) && $this->dataRecord["password"] != '') {
 			$password = $this->dataRecord["password"];
 			$client_id = $this->id;
-			$salt="$1$";
-			$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-			for ($n=0;$n<8;$n++) {
-				$salt.=$base64_alphabet[mt_rand(0, 63)];
-			}
-			$salt.="$";
-			$password = crypt(stripslashes($password), $salt);
+			
+			$password = $app->auth->crypt_password(stripslashes($password));
 			$sql = "UPDATE sys_user SET passwort = ? WHERE client_id = ?";
 			$app->db->query($sql, $password, $client_id);
 		}
@@ -368,6 +362,124 @@ class page_action extends tform_actions {
 			$app->uses('client_templates');
 			$app->client_templates->update_client_templates($this->id, $this->_template_additional);
 		}
+		
+		if(!isset($this->dataRecord['locked'])) $this->dataRecord['locked'] = 'n';
+		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["locked"] != $this->oldDataRecord['locked']) {
+			/** lock all the things like web, mail etc. - easy to extend */
+
+
+			// get tmp_data of client
+			$client_data = $app->db->queryOneRecord('SELECT `tmp_data` FROM `client` WHERE `client_id` = ?', $this->id);
+
+			if($client_data['tmp_data'] == '') $tmp_data = array();
+			else $tmp_data = unserialize($client_data['tmp_data']);
+
+			if(!is_array($tmp_data)) $tmp_data = array();
+
+			// database tables with their primary key columns
+			$to_disable = array('cron' => 'id',
+				'ftp_user' => 'ftp_user_id',
+				'mail_domain' => 'domain_id',
+				'mail_user' => 'mailuser_id',
+				'mail_user_smtp' => 'mailuser_id',
+				'mail_forwarding' => 'forwarding_id',
+				'mail_get' => 'mailget_id',
+				'openvz_vm' => 'vm_id',
+				'shell_user' => 'shell_user_id',
+				'webdav_user' => 'webdav_user_id',
+				'web_database' => 'database_id',
+				'web_domain' => 'domain_id',
+				'web_folder' => 'web_folder_id',
+				'web_folder_user' => 'web_folder_user_id'
+			);
+
+			$udata = $app->db->queryOneRecord('SELECT `userid` FROM `sys_user` WHERE `client_id` = ?', $this->id);
+			$gdata = $app->db->queryOneRecord('SELECT `groupid` FROM `sys_group` WHERE `client_id` = ?', $this->id);
+			$sys_groupid = $gdata['groupid'];
+			$sys_userid = $udata['userid'];
+
+			$entries = array();
+			if($this->dataRecord['locked'] == 'y') {
+				$prev_active = array();
+				$prev_sysuser = array();
+				foreach($to_disable as $current => $keycolumn) {
+					$active_col = 'active';
+					$reverse = false;
+					if($current == 'mail_user') {
+						$active_col = 'postfix';
+					} elseif($current == 'mail_user_smtp') {
+						$current = 'mail_user';
+						$active_col = 'disablesmtp';
+						$reverse = true;
+					}
+					
+					if(!isset($prev_active[$current])) $prev_active[$current] = array();
+					if(!isset($prev_sysuser[$current])) $prev_sysuser[$current] = array();
+
+					$entries = $app->db->queryAllRecords('SELECT ?? as `id`, `sys_userid`, ?? FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $active_col, $current, $sys_groupid);
+					foreach($entries as $item) {
+
+						if($item[$active_col] != 'y' && $reverse == false) $prev_active[$current][$item['id']][$active_col] = 'n';
+						elseif($item[$active_col] == 'y' && $reverse == true) $prev_active[$current][$item['id']][$active_col] = 'y';
+						if($item['sys_userid'] != $sys_userid) $prev_sysuser[$current][$item['id']] = $item['sys_userid'];
+						// we don't have to store these if y, as everything without previous state gets enabled later
+
+						$app->db->datalogUpdate($current, array($active_col => ($reverse == true ? 'y' : 'n'), 'sys_userid' => $_SESSION["s"]["user"]["userid"]), $keycolumn, $item['id']);
+					}
+				}
+
+				$tmp_data['prev_active'] = $prev_active;
+				$tmp_data['prev_sys_userid'] = $prev_sysuser;
+				$app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $this->id);
+				unset($prev_active);
+				unset($prev_sysuser);
+			} elseif($this->dataRecord['locked'] == 'n') {
+				foreach($to_disable as $current => $keycolumn) {
+					$active_col = 'active';
+					$reverse = false;
+					if($current == 'mail_user') {
+						$active_col = 'postfix';
+					} elseif($current == 'mail_user_smtp') {
+						$current = 'mail_user';
+						$active_col = 'disablesmtp';
+						$reverse = true;
+					}
+					
+					$entries = $app->db->queryAllRecords('SELECT ?? as `id` FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $current, $sys_groupid);
+					foreach($entries as $item) {
+						$set_active = ($reverse == true ? 'n' : 'y');
+						$set_inactive = ($reverse == true ? 'y' : 'n');
+						$set_sysuser = $sys_userid;
+						if(array_key_exists('prev_active', $tmp_data) == true
+							&& array_key_exists($current, $tmp_data['prev_active']) == true
+							&& array_key_exists($item['id'], $tmp_data['prev_active'][$current]) == true
+							&& $tmp_data['prev_active'][$current][$item['id']][$active_col] == $set_inactive) $set_active = $set_inactive;
+						if(array_key_exists('prev_sysuser', $tmp_data) == true
+							&& array_key_exists($current, $tmp_data['prev_sysuser']) == true
+							&& array_key_exists($item['id'], $tmp_data['prev_sysuser'][$current]) == true
+							&& $tmp_data['prev_sysuser'][$current][$item['id']] != $sys_userid) $set_sysuser = $tmp_data['prev_sysuser'][$current][$item['id']];
+
+						$app->db->datalogUpdate($current, array($active_col => $set_active, 'sys_userid' => $set_sysuser), $keycolumn, $item['id']);
+					}
+				}
+				if(array_key_exists('prev_active', $tmp_data)) unset($tmp_data['prev_active']);
+				$app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $this->id);
+			}
+			unset($tmp_data);
+			unset($entries);
+			unset($to_disable);
+		}
+		
+		if(!isset($this->dataRecord['canceled'])) $this->dataRecord['canceled'] = 'n';
+		if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["canceled"] != $this->oldDataRecord['canceled']) {
+			if($this->dataRecord['canceled'] == 'y') {
+				$sql = "UPDATE sys_user SET active = '0' WHERE client_id = ?";
+				$app->db->query($sql, $this->id);
+			} elseif($this->dataRecord['canceled'] == 'n') {
+				$sql = "UPDATE sys_user SET active = '1' WHERE client_id = ?";
+				$app->db->query($sql, $this->id);
+			}
+		}
 
 		parent::onAfterUpdate();
 	}
diff --git a/interface/web/client/templates/client_circle_list.htm b/interface/web/client/templates/client_circle_list.htm
index 56bce62d6c3b823587308506199607790bbd8eb6..2cfbdf36e38b87e1af5e919c825b70b5db8ecd5c 100644
--- a/interface/web/client/templates/client_circle_list.htm
+++ b/interface/web/client/templates/client_circle_list.htm
@@ -40,7 +40,7 @@
                             <td><a href="#" data-load-content="client/client_circle_edit.php?id={tmpl_var name='id'}">{tmpl_var name="circle_name"}</a></td>
                             <td><a href="#" data-load-content="client/client_circle_edit.php?id={tmpl_var name='id'}">{tmpl_var name="description"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_circle_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_circle_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/client/templates/client_message_template_list.htm b/interface/web/client/templates/client_message_template_list.htm
index d83a9f7dec1ce714a3da33ea4c815e5c2a520ed5..2f586c1ed767bb5555b62070528633b47f8d0831 100644
--- a/interface/web/client/templates/client_message_template_list.htm
+++ b/interface/web/client/templates/client_message_template_list.htm
@@ -32,7 +32,7 @@
             <td><a href="#" data-load-content="client/message_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
             <td class="text-right">
               <div class="buttons icons16">
-                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/message_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/message_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
               </div>
             </td>
           </tr>
diff --git a/interface/web/client/templates/client_template_list.htm b/interface/web/client/templates/client_template_list.htm
index 37564f7197c2f6c01749cd6ee8b00f61da0c7b0c..887072b438623e679ceb65b9c318006a85c6c84a 100644
--- a/interface/web/client/templates/client_template_list.htm
+++ b/interface/web/client/templates/client_template_list.htm
@@ -40,7 +40,7 @@
                             <td><a href="#" data-load-content="client/client_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_type"}</a></td>
                             <td><a href="#" data-load-content="client/client_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/client/templates/clients_list.htm b/interface/web/client/templates/clients_list.htm
index 7a538eba22a212a38567418bae3d40970a862854..2ffd7dfa78acd49aa24bc82b8d2fe38fdfcdef38 100644
--- a/interface/web/client/templates/clients_list.htm
+++ b/interface/web/client/templates/clients_list.htm
@@ -68,7 +68,7 @@
                                 <tmpl_elseif name="is_reseller">
                                     <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='id'}"><span class="icon icon-loginas"></span></a>
                                 </tmpl_if>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/client_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/client/templates/domain_list.htm b/interface/web/client/templates/domain_list.htm
index 8dda689cba7e0b728eb475da8c4d75ca32afc109..818812ddd91b951cb93d6a7381fcdc77914bade7 100644
--- a/interface/web/client/templates/domain_list.htm
+++ b/interface/web/client/templates/domain_list.htm
@@ -32,7 +32,7 @@
                     <td><a href="#" data-load-content="client/domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                     <td><a href="#" data-load-content="client/domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
                     <td class="text-right">
-                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                     </td>
                 </tr>
                 </tmpl_loop>
diff --git a/interface/web/client/templates/message_template_list.htm b/interface/web/client/templates/message_template_list.htm
index 5efaf5f23e9d21dfccf7092496ffbabc36fcfe50..71011634f9a397167a9ff16b3d2701559b41bc8a 100644
--- a/interface/web/client/templates/message_template_list.htm
+++ b/interface/web/client/templates/message_template_list.htm
@@ -28,7 +28,7 @@
             <td><a href="#" data-load-content="billing/invoice_message_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
             <td class="text-right">
               <div class="buttons icons16">    
-                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('billing/invoice_message_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('billing/invoice_message_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
               </div>
             </td>
           </tr>
diff --git a/interface/web/client/templates/resellers_list.htm b/interface/web/client/templates/resellers_list.htm
index 8edfa08546d28bf66201ffde13a3311e7acec7cf..1ccaffa07e12c7639b78f387b978b77c6e1e5a19 100644
--- a/interface/web/client/templates/resellers_list.htm
+++ b/interface/web/client/templates/resellers_list.htm
@@ -50,7 +50,7 @@
                             <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}"><span class="flags flag-{tmpl_var name="countryiso"}">{tmpl_var name="country"}</span></a></td>
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-success formbutton-narrow" data-load-content="login/login_as.php?cid={tmpl_var name='id'}"><span class="icon icon-loginas"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/reseller_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('client/reseller_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/dashboard/dashboard.php b/interface/web/dashboard/dashboard.php
index 5426ba9572cfb085de0891635b2243fc8218e86d..005c364aa5cd644dd04ca87482f54c1b7e846e80 100644
--- a/interface/web/dashboard/dashboard.php
+++ b/interface/web/dashboard/dashboard.php
@@ -149,7 +149,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
 		$info[] = array('info_msg' => '<p>There is a new Version of ISPConfig 3 available!</p>' .
 			'<p>This Version: <b>' . $v1 . '</b></p>' .
 			'<p>New Version : <b>' . $v2 .  '</b></p>' .
-			'<p><a href="http://www.ispconfig.org/ispconfig-3/download" target="ISPC">See more...</a></p>');
+			'<p><a href="https://www.ispconfig.org/ispconfig-3/download" target="ISPC">See more...</a></p>');
 	}
 }
 
diff --git a/interface/web/dashboard/dashlets/modules.php b/interface/web/dashboard/dashlets/modules.php
index 5c1f15149da70a328f922ab18a79bb3f2bab9a57..f5f96a82acc8e9e462c07d284fc67874bdcc509d 100644
--- a/interface/web/dashboard/dashlets/modules.php
+++ b/interface/web/dashboard/dashlets/modules.php
@@ -40,6 +40,11 @@ class dashlet_modules {
 							$web_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE web_server = 1 AND active = 1");
 							if($web_servers['cnt'] == 0) continue;
 						}
+						
+						if($mt == 'vm'){
+							$vserver_servers = $app->db->queryOneRecord("SELECT COUNT(*) as cnt FROM server WHERE vserver_server = 1 AND active = 1");
+							if($vserver_servers['cnt'] == 0) continue;
+						}
 					
 						$module_title = $app->lng($module['title']);
 						if(function_exists('mb_strlen')) {
diff --git a/interface/web/dashboard/dashlets/templates/mailquota.htm b/interface/web/dashboard/dashlets/templates/mailquota.htm
index 5ad01d6865a662a5fc9660f7853337da86742228..3573ef1ab9aea76697e574ee0b7cb3f5d7289880 100644
--- a/interface/web/dashboard/dashlets/templates/mailquota.htm
+++ b/interface/web/dashboard/dashlets/templates/mailquota.htm
@@ -12,7 +12,7 @@
 		<tbody>
 		<tmpl_loop name='mailquota'>
 			<tr>
-				<td>{tmpl_var name='email'}</td>
+				<td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='mailuser_id'}" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="{tmpl_var name='email'}">{tmpl_var name='email'}</a></td>
 				<td>{tmpl_var name='name'}</td>
 				<td>{tmpl_var name='used'}</td>
 				<td>{tmpl_var name='quota'}</td>
diff --git a/interface/web/dashboard/lib/lang/br.lng b/interface/web/dashboard/lib/lang/br.lng
index 05935493bb7e36cc8cb058bd6ed6aad10d7a119c..4ad7fc9c3ccf392b622e73010820e78be60b3b06 100644
--- a/interface/web/dashboard/lib/lang/br.lng
+++ b/interface/web/dashboard/lib/lang/br.lng
@@ -1,4 +1,4 @@
 <?php
 $wb['welcome_user_txt'] = 'Bem-vindo %s';
-$wb['available_modules_txt'] = 'Módulos Disponíveis';
+$wb['available_modules_txt'] = 'Módulos disponíveis';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_customer.lng b/interface/web/dashboard/lib/lang/br_dashlet_customer.lng
index 5e73e41ff9663e178d3d0e8039c66e4e39972eb0..8c110cc29b12d16bd000349438e7375a71e6abbc 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_customer.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_customer.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['customerdata_txt'] = 'Meus Dados';
+$wb['customerdata_txt'] = 'Meus dados';
 $wb['edit_txt'] = 'Editar';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng
index de92eef6bf687a32dd45a608cc96ea3617c609ea..9279d2230a2172ce862b52c28228f6dc136e773e 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_databasequota.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['databasequota_txt'] = 'Cota para banco de dados';
-$wb['database_txt'] = 'Nome do banco de dados';
+$wb['databasequota_txt'] = 'Cota do banco de dados';
+$wb['database_txt'] = 'Banco de dados';
 $wb['used_txt'] = 'Espaço utilizado';
 $wb['quota_txt'] = 'Cota';
 $wb['no_database_accounts_txt'] = 'Nenhum banco de dados encontrado.';
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_invoice_client_settings.lng b/interface/web/dashboard/lib/lang/br_dashlet_invoice_client_settings.lng
index 413177c83dac419ecc70a0084ae8d6598f15b93d..1ac4ee2fae26549856762b1cc321d77b5946cb8d 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_invoice_client_settings.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_invoice_client_settings.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['invoice_client_settings_txt'] = 'Configuração de Faturas do Cliente';
+$wb['invoice_client_settings_txt'] = 'Configurações de fatura de clientes';
 $wb['edit_txt'] = 'Editar';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/br_dashlet_invoices.lng
index 2a5a0d9bcc7df4147c21020c099247ca2354203e..545c6994a620a9a273e6ad53477d2cf67dc5f50c 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_invoices.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_invoices.lng
@@ -1,18 +1,18 @@
 <?php
 $wb['invoices_txt'] = 'Faturas';
-$wb['invoice_no_txt'] = 'No. da Fatura';
+$wb['invoice_no_txt'] = 'No. da fatura';
 $wb['amount_txt'] = 'Quantidade';
 $wb['date_txt'] = 'Data';
 $wb['invoice_status_txt'] = 'Estado';
 $wb['no_invoices_txt'] = 'Nenhuma fatura disponível.';
 $wb['paid_txt'] = 'Pago';
-$wb['unpaid_txt'] = 'Aberto';
+$wb['unpaid_txt'] = 'A pagar';
 $wb['paynow_txt'] = 'pagar agora';
 $wb['proforma_txt'] = 'Proforma';
 $wb['refunded_txt'] = 'Devolvido';
-$wb['not_refunded_txt'] = 'Sem devolução';
+$wb['not_refunded_txt'] = 'Não reembolsado';
 $wb['invoice_type_invoice_txt'] = 'Fatura';
 $wb['invoice_type_proforma_txt'] = 'Proforma';
-$wb['invoice_type_refund_txt'] = 'Devolver';
+$wb['invoice_type_refund_txt'] = 'Reembolso';
 $wb['invoice_type_reminder_txt'] = 'Lembrar';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_limits.lng b/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
index 04c59b883528a37f97fd2530a031b1aa70430a99..72558f5797f462adac944a2d4a43b6f3bb956ea1 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
@@ -1,34 +1,34 @@
 <?php
-$wb['limits_txt'] = 'Limites das contas';
+$wb['limits_txt'] = 'Limites de contas';
 $wb['of_txt'] = 'de';
-$wb['unlimited_txt'] = 'ilimitado';
-$wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail';
-$wb['limit_mailbox_txt'] = 'Limite de contas de e-mail';
-$wb['limit_mailalias_txt'] = 'Limite de apelidos de domínio de e-mail';
-$wb['limit_mailaliasdomain_txt'] = 'Limite de subdomínios para e-mail';
-$wb['limit_mailforward_txt'] = 'Limite de redirecionamentos de e-mail';
-$wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo';
-$wb['limit_mailrouting_txt'] = 'Limite de transporte de e-mail';
-$wb['limit_mailfilter_txt'] = 'Limite de filtros de e-mail';
-$wb['limit_fetchmail_txt'] = 'Limite de contas de busca';
-$wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam lista branca/negra';
-$wb['limit_spamfilter_user_txt'] = 'Limite de usuários para filtros anti-spam';
-$wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam';
-$wb['limit_cron_txt'] = 'Limite de tarefas no cron';
-$wb['limit_web_domain_txt'] = 'Limite de domínios de site';
-$wb['limit_web_aliasdomain_txt'] = 'Limite de apelidos de domínios de site';
-$wb['limit_web_subdomain_txt'] = 'Limite de subdomínios de site';
-$wb['limit_ftp_user_txt'] = 'Limite de contas ftp';
-$wb['limit_dns_zone_txt'] = 'Limite de zonas dns primárias';
-$wb['limit_dns_slave_zone_txt'] = 'Limite de zonas dns secundárias';
-$wb['limit_dns_record_txt'] = 'Limite de registros dns';
-$wb['limit_shell_user_txt'] = 'Limite de usuários shell';
-$wb['limit_webdav_user_txt'] = 'Limite de usuários webdav';
-$wb['limit_client_txt'] = 'Limite de clientes';
-$wb['limit_database_txt'] = 'Limite de banco de dados';
-$wb['limit_mailmailinglist_txt'] = 'Limite de listas de e-mails';
-$wb['limit_domain_txt'] = 'Limite de domínios';
-$wb['limit_mailquota_txt'] = 'Assigned mailbox quota';
-$wb['limit_web_quota_txt'] = 'Assigned web quota';
-$wb['limit_database_quota_txt'] = 'Assigned database quota';
+$wb['unlimited_txt'] = 'Ilimitado';
+$wb['limit_maildomain_txt'] = 'Número de domínios de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'Número de listas de e-mail';
+$wb['limit_mailbox_txt'] = 'Número de contas de e-mail';
+$wb['limit_mailalias_txt'] = 'Número de alias de e-mail';
+$wb['limit_mailaliasdomain_txt'] = 'Número de alias de domínios de e-mail';
+$wb['limit_mailforward_txt'] = 'Número de encaminhamentos de e-mail';
+$wb['limit_mailcatchall_txt'] = 'Número de contas cata-tudo';
+$wb['limit_mailrouting_txt'] = 'Número de rotas de e-mail';
+$wb['limit_mailfilter_txt'] = 'Número de filtros de e-mail';
+$wb['limit_fetchmail_txt'] = 'Número de contas de busca';
+$wb['limit_spamfilter_wblist_txt'] = 'Número de filtros anti-spam "lista branca/negra"';
+$wb['limit_spamfilter_user_txt'] = 'Número de filtros anti-spam';
+$wb['limit_spamfilter_policy_txt'] = 'Número de políticas anti-spam';
+$wb['limit_cron_txt'] = 'Número de tarefas no cron';
+$wb['limit_web_domain_txt'] = 'Número de domínios de site';
+$wb['limit_web_aliasdomain_txt'] = 'Número de alias de domínios de site';
+$wb['limit_web_subdomain_txt'] = 'Número de subdomínios de site';
+$wb['limit_ftp_user_txt'] = 'Número de usuários ftp';
+$wb['limit_dns_zone_txt'] = 'Número de zonas dns';
+$wb['limit_dns_slave_zone_txt'] = 'Número de zonas dns secundárias';
+$wb['limit_dns_record_txt'] = 'Número de registros dns';
+$wb['limit_shell_user_txt'] = 'Número de usuários do shell';
+$wb['limit_webdav_user_txt'] = 'Número de usuários webdav';
+$wb['limit_client_txt'] = 'Número de clientes';
+$wb['limit_database_txt'] = 'Número de banco de dados';
+$wb['limit_domain_txt'] = 'Número de domínios';
+$wb['limit_mailquota_txt'] = 'Cotas atribuídas para contas de e-mail';
+$wb['limit_web_quota_txt'] = 'Cotas atribuídas para sites';
+$wb['limit_database_quota_txt'] = 'Cotas atribuídas para banco de dados';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/br_dashlet_mailquota.lng
index 8aa300dffa5da937a810cdd87ab00e98c5889188..d164a35661c264480757acaf6ae003623494bad5 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_mailquota.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_mailquota.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['mailquota_txt'] = 'Cota para contas de e-mail';
-$wb['email_txt'] = 'e-mail';
+$wb['mailquota_txt'] = 'Cota de contas de e-mail';
+$wb['email_txt'] = 'Endereço de e-mail';
 $wb['name_txt'] = 'Nome';
 $wb['used_txt'] = 'Espaço utilizado';
 $wb['quota_txt'] = 'Cota';
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_modules.lng b/interface/web/dashboard/lib/lang/br_dashlet_modules.lng
index 80af8858209abd67aca0c452ed4108b5c51a8ac6..905d3d600723704273e3dc7a47107befcda6f59f 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_modules.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_modules.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['available_modules_txt'] = 'Módulos Disponíveis';
+$wb['available_modules_txt'] = 'Módulos disponíveis';
 $wb['go_to_txt'] = 'Ir para';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_products.lng b/interface/web/dashboard/lib/lang/br_dashlet_products.lng
index 129b14480102f2bd453a873ba2a0844df7e3ba54..c750052ad7182178dbaa61c25ddeb8cced63676c 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_products.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_products.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['products_txt'] = 'Meus Produtos';
+$wb['products_txt'] = 'Meus produtos';
 $wb['name_txt'] = 'Nome';
 $wb['price_txt'] = 'Preço';
-$wb['next_payment_date_txt'] = 'Próxima Fatura';
+$wb['next_payment_date_txt'] = 'Próxima fatura';
 $wb['no_products_txt'] = 'Nenhum produto encontrado.';
 $wb['edit_txt'] = 'Editar';
 $wb['cancellation_date_txt'] = 'Cancelado por';
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_quota.lng b/interface/web/dashboard/lib/lang/br_dashlet_quota.lng
index 080e45d4e73a066134fe09397949b16a39ab0482..589e3dca3ec8e245430c195e8b1fcce96cafa877 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_quota.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_quota.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['quota_txt'] = 'Cota para sites';
+$wb['quota_txt'] = 'Cota de site (disco)';
 $wb['domain_txt'] = 'Domínio/Site';
 $wb['used_txt'] = 'Espaço utilizado';
-$wb['hard_txt'] = 'Limite';
+$wb['hard_txt'] = 'Limite para bloqueio';
 $wb['soft_txt'] = 'Limite para alerta';
 $wb['no_sites_txt'] = 'Nenhum site encontrado.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_shop.lng b/interface/web/dashboard/lib/lang/br_dashlet_shop.lng
index 48847abff4a7135ca9290eb76a094b2b8eabdc33..9fd37d5250f046f988c48c2accbb51a867ea993b 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_shop.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_shop.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['shop_txt'] = 'Pedido';
+$wb['shop_txt'] = 'Ordem';
 $wb['name_txt'] = 'Nome';
 $wb['price_txt'] = 'Preço';
-$wb['setup_fee_txt'] = 'Taxa Inicial';
+$wb['setup_fee_txt'] = 'Taxa criada';
 $wb['no_products_txt'] = 'Nenhum produto encontrado.';
-$wb['order_txt'] = 'Pedir';
+$wb['order_txt'] = 'Ordem';
 ?>
diff --git a/interface/web/dashboard/lib/lang/cz_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/cz_dashlet_invoices.lng
index 9666ed2b084e918617cee00c4a8d3aa3d39e64df..ab093825c60f1890b862021d2977528c7aa3878d 100644
--- a/interface/web/dashboard/lib/lang/cz_dashlet_invoices.lng
+++ b/interface/web/dashboard/lib/lang/cz_dashlet_invoices.lng
@@ -3,7 +3,7 @@ $wb['invoices_txt'] = 'Invoices';
 $wb['invoice_no_txt'] = 'Invoice No.';
 $wb['amount_txt'] = 'Amount';
 $wb['date_txt'] = 'Datum';
-$wb['invoice_status_txt'] = 'Status';
+$wb['invoice_status_txt'] = 'Stav';
 $wb['no_invoices_txt'] = 'No Invoices available.';
 $wb['paid_txt'] = 'Paid';
 $wb['unpaid_txt'] = 'Unpaid';
diff --git a/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng b/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
index d322823e6bab0a400bd5e0d9ac06b6090bb98156..a7aecc4a539beb0a074f7744ece25e94068dab5e 100644
--- a/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['limits_txt'] = 'Limity účtu';
+$wb['limits_txt'] = 'Limity účtů';
 $wb['of_txt'] = 'z';
 $wb['unlimited_txt'] = 'neomezeno';
 $wb['limit_maildomain_txt'] = 'Počet e-mailových domén';
@@ -28,7 +28,7 @@ $wb['limit_client_txt'] = 'Počet klientů';
 $wb['limit_database_txt'] = 'Počet databází';
 $wb['limit_mailmailinglist_txt'] = 'Počet e-mailových konferencí';
 $wb['limit_domain_txt'] = 'Počet domén';
-$wb['limit_mailquota_txt'] = 'Assigned mailbox quota';
-$wb['limit_web_quota_txt'] = 'Assigned web quota';
-$wb['limit_database_quota_txt'] = 'Assigned database quota';
+$wb['limit_mailquota_txt'] = 'Přiřazená e-mailová kvóta';
+$wb['limit_web_quota_txt'] = 'Přiřazená webová kvóta';
+$wb['limit_database_quota_txt'] = 'Přiřazená databázová kvóta';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_customer.lng b/interface/web/dashboard/lib/lang/tr_dashlet_customer.lng
index 4fe6cb0ef7db195cb03d4e73c5ba9b232a7d58bb..4902a83a09b162257e8718cfa31473b937c0f0ea 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_customer.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_customer.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['customerdata_txt'] = 'My Data';
-$wb['edit_txt'] = 'Edit';
+$wb['customerdata_txt'] = 'Bilgilerim';
+$wb['edit_txt'] = 'Düzenle';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng
index bd2402dbf6c113dde8190fbbdec29490f948d725..d8e8dfb89a4d0016ee34b3e50ecdb3b930b51bb1 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_databasequota.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['databasequota_txt'] = 'Database Quota';
-$wb['database_txt'] = 'Database Name';
-$wb['used_txt'] = 'Used Space';
-$wb['quota_txt'] = 'Quota';
-$wb['no_database_accounts_txt'] = 'No databases found.';
+$wb['databasequota_txt'] = 'Veritabanı Kotası';
+$wb['database_txt'] = 'Veritabanı Adı';
+$wb['used_txt'] = 'Kullanılan Alan';
+$wb['quota_txt'] = 'Kota';
+$wb['no_database_accounts_txt'] = 'Henüz bir veritabanı yok.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_donate.lng b/interface/web/dashboard/lib/lang/tr_dashlet_donate.lng
index e41c374cde792db1d7b906f986f7ba7e0a215ef8..7324cb840da45468a1243fc5e5acfa0311be0aaf 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_donate.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_donate.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['donate_txt'] = 'The ISPConfig Hosting Control Panel is free software. Maybe you are aware, that it takes a lot of time and effort to develop, maintain and support a software project of this complexity. If you want to support the further development of ISPConfig, please consider making a donation. As a bonus you will get a copy of the current ISPConfig Manual.';
-$wb['donate2_txt'] = 'The donation amount can be 5 EUR or more, the amount is chosen during checkout. The payment method is PayPal. You will receive an receipt as PDF from ISPConfig UG.';
-$wb['hide_btn_txt'] = 'Hide';
-$wb['donate_btn_txt'] = 'Support ISPConfig and get the Manual';
-$wb['more_btn_txt'] = 'More';
+$wb['donate_txt'] = 'ISPConfig Hosting Control Panel uygulaması ücretsiz dağıtılmaktadır. Belki bu düzeyde bir yazılımı geliştirmek, güncellemek ve desteklemek için çok fazla zaman ve emek harcandığının farkındasınızdır. ISPConfig uygulamasının geliştirmesine destek olmak için bağış yapmak isteyebilirsiniz.  Hediye olarak ISPConfig kılavuzunu alacaksınız.';
+$wb['donate2_txt'] = 'Bağış tutarı en az 5 EUR ya da ödeme sırasında seçeceğiniz başka bir tutar olabilir. Ödemeleri PayPal üzerinden alıyoruz. PDF alındısında ISPConfig UG yazar.';
+$wb['hide_btn_txt'] = 'Gizle';
+$wb['donate_btn_txt'] = 'ISPConfig uygulamasını destekleyerek kılavuzu edinin';
+$wb['more_btn_txt'] = 'Ayrıntılar';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_invoice_client_settings.lng b/interface/web/dashboard/lib/lang/tr_dashlet_invoice_client_settings.lng
index 8cae3dfb4f0563e28f98f3cc43f4e0983946e9d6..b6b47cae90be2f4ab65183f62d5eb82cf7e8ff18 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_invoice_client_settings.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_invoice_client_settings.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['invoice_client_settings_txt'] = 'Invoice Client Settings';
-$wb['edit_txt'] = 'Edit';
+$wb['invoice_client_settings_txt'] = 'Müşteri Fatura Ayarları';
+$wb['edit_txt'] = 'Düzenle';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/tr_dashlet_invoices.lng
index a680daa8f623ad5af726dffd8eb1e1c0b1ce9b4e..db24326749b97a5673286dd288ea1e7c2b83f2f0 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_invoices.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_invoices.lng
@@ -1,18 +1,18 @@
 <?php
-$wb['invoices_txt'] = 'Invoices';
-$wb['invoice_no_txt'] = 'Invoice No.';
-$wb['amount_txt'] = 'Amount';
-$wb['date_txt'] = 'Date';
-$wb['invoice_status_txt'] = 'Status';
-$wb['no_invoices_txt'] = 'No Invoices available.';
-$wb['paid_txt'] = 'Paid';
-$wb['unpaid_txt'] = 'Unpaid';
-$wb['paynow_txt'] = 'pay now';
-$wb['proforma_txt'] = 'Proforma';
-$wb['refunded_txt'] = 'Refunded';
-$wb['not_refunded_txt'] = 'Not refunded';
-$wb['invoice_type_invoice_txt'] = 'Invoice';
-$wb['invoice_type_proforma_txt'] = 'Proforma';
-$wb['invoice_type_refund_txt'] = 'Refund';
-$wb['invoice_type_reminder_txt'] = 'Reminder';
+$wb['invoices_txt'] = 'Faturalar';
+$wb['invoice_no_txt'] = 'Fatura No';
+$wb['amount_txt'] = 'Tutar';
+$wb['date_txt'] = 'Tarih';
+$wb['invoice_status_txt'] = 'Durum';
+$wb['no_invoices_txt'] = 'Henüz bir fatura yok.';
+$wb['paid_txt'] = 'Ödendi';
+$wb['unpaid_txt'] = 'Ödenmedi';
+$wb['paynow_txt'] = 'Şimdi Öde';
+$wb['proforma_txt'] = 'Teklif';
+$wb['refunded_txt'] = 'Geri Ödendi';
+$wb['not_refunded_txt'] = 'Geri Ödenmedi';
+$wb['invoice_type_invoice_txt'] = 'Fatura';
+$wb['invoice_type_proforma_txt'] = 'Teklif';
+$wb['invoice_type_refund_txt'] = 'Geri Ödeme';
+$wb['invoice_type_reminder_txt'] = 'Anımsatıcı';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng b/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
index a8869328f9f02096e41093acbcafca40cd1f04b0..9fa1fb5b90595d9bd20405927d4536876d82d76e 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
@@ -2,33 +2,33 @@
 $wb['limits_txt'] = 'Hesap Sınırları';
 $wb['of_txt'] = '/';
 $wb['unlimited_txt'] = 'Sınırsız';
-$wb['limit_maildomain_txt'] = 'E-posta Alan Adı Sayısı';
-$wb['limit_mailmailinglist_txt'] = 'Posta Listesi Sayısı';
-$wb['limit_mailbox_txt'] = 'Posta Kutusu Sayısı';
+$wb['limit_maildomain_txt'] = 'E-posta Etki Alanı Sayısı';
+$wb['limit_mailmailinglist_txt'] = 'E-posta Listesi Sayısı';
+$wb['limit_mailbox_txt'] = 'E-posta Kutusu Sayısı';
 $wb['limit_mailalias_txt'] = 'Takma E-posta Sayısı';
-$wb['limit_mailaliasdomain_txt'] = 'Takma Alan Adı Sayısı';
+$wb['limit_mailaliasdomain_txt'] = 'Takma Etki Alanı Sayısı';
 $wb['limit_mailforward_txt'] = 'E-posta Yönlendirici Sayısı';
 $wb['limit_mailcatchall_txt'] = 'E-posta Tümünü Al Hesabı Sayısı';
 $wb['limit_mailrouting_txt'] = 'E-posta Yöneltici Sayısı';
 $wb['limit_mailfilter_txt'] = 'E-posta Süzgeci Sayısı';
-$wb['limit_fetchmail_txt'] = 'Posta Alma Hesabı Sayısı';
-$wb['limit_spamfilter_wblist_txt'] = 'Önemsiz Posta Beyaz/Kara Liste Sayısı';
-$wb['limit_spamfilter_user_txt'] = 'Önemsiz Posta Süzgeci Kullanıcı Sayısı';
-$wb['limit_spamfilter_policy_txt'] = 'Önemsiz Posta Kuralı Sayısı';
+$wb['limit_fetchmail_txt'] = 'E-posta Alma Hesabı Sayısı';
+$wb['limit_spamfilter_wblist_txt'] = 'Önemsiz İleti Beyaz/Kara Liste Sayısı';
+$wb['limit_spamfilter_user_txt'] = 'Önemsiz İleti Süzgeci Kullanıcı Sayısı';
+$wb['limit_spamfilter_policy_txt'] = 'Önemsiz İletia Kuralı Sayısı';
 $wb['limit_cron_txt'] = 'Zamanlanmış Görev Sayısı';
-$wb['limit_web_domain_txt'] = 'Web Alan Adı Sayısı';
-$wb['limit_web_aliasdomain_txt'] = 'Web Takma Alan Adı Sayısı';
-$wb['limit_web_subdomain_txt'] = 'Web Alt Alan Adı Sayısı';
+$wb['limit_web_domain_txt'] = 'Web Etki Alanı Sayısı';
+$wb['limit_web_aliasdomain_txt'] = 'Web Takma Etki Alanı Sayısı';
+$wb['limit_web_subdomain_txt'] = 'Web Alt Etki Alanı Sayısı';
 $wb['limit_ftp_user_txt'] = 'FTP Kullanıcı Sayısı';
 $wb['limit_dns_zone_txt'] = 'DNS Bölgesi Sayısı';
-$wb['limit_dns_slave_zone_txt'] = 'İkinci DNS Bölgesi Sayısı';
+$wb['limit_dns_slave_zone_txt'] = 'İkincil DNS Bölgesi Sayısı';
 $wb['limit_dns_record_txt'] = 'DNS Kayıtları Sayısı';
 $wb['limit_shell_user_txt'] = 'Kabuk Kullanıcısı Sayısı';
 $wb['limit_webdav_user_txt'] = 'Webdav Kullanıcı Sayısı';
 $wb['limit_client_txt'] = 'Müşteri Sayısı';
 $wb['limit_database_txt'] = 'Veritabanı Sayısı';
-$wb['limit_domain_txt'] = 'Alan Adı Sayısı';
-$wb['limit_mailquota_txt'] = 'Assigned mailbox quota';
-$wb['limit_web_quota_txt'] = 'Assigned web quota';
-$wb['limit_database_quota_txt'] = 'Assigned database quota';
+$wb['limit_domain_txt'] = 'Etki Alanı Sayısı';
+$wb['limit_mailquota_txt'] = 'E-posta Kutusu Alanı Kotası';
+$wb['limit_web_quota_txt'] = 'Web Sitesi Alanı Kotası';
+$wb['limit_database_quota_txt'] = 'Veritabanı Alanı Kotası';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/tr_dashlet_mailquota.lng
index bee7e8677f699865aad3c44f3df3768735697df4..67888a818eb770b3c4f899af64c4c2f651dbe116 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_mailquota.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_mailquota.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['mailquota_txt'] = 'Posta Kutusu Kotası';
+$wb['mailquota_txt'] = 'E-posta Kutusu Kotası';
 $wb['email_txt'] = 'E-posta Adresi';
 $wb['name_txt'] = 'Ad';
 $wb['used_txt'] = 'Kullanılan Alan';
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_modules.lng b/interface/web/dashboard/lib/lang/tr_dashlet_modules.lng
index c551510a50b61d008ac94abe96b3bd23614b80cb..ce75e962108a664166a58e6f5ebcc7b8ec810fd9 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_modules.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_modules.lng
@@ -1,4 +1,4 @@
 <?php
 $wb['available_modules_txt'] = 'Kullanılabilecek Modüller';
-$wb['go_to_txt'] = 'Go to';
+$wb['go_to_txt'] = '';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_products.lng b/interface/web/dashboard/lib/lang/tr_dashlet_products.lng
index a69b61d2fbf06f20ab1cbed5f33d4804256ba40a..11aa2e519dd794a60612b7d00ecc83923e557bce 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_products.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_products.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['products_txt'] = 'My Products';
-$wb['name_txt'] = 'Name';
-$wb['price_txt'] = 'Price';
-$wb['next_payment_date_txt'] = 'Next Invoice';
-$wb['no_products_txt'] = 'No products found.';
-$wb['edit_txt'] = 'Edit';
-$wb['cancellation_date_txt'] = 'Cancelled by';
+$wb['products_txt'] = 'Ürünlerim';
+$wb['name_txt'] = 'Ad';
+$wb['price_txt'] = 'Fiyat';
+$wb['next_payment_date_txt'] = 'Sonraki Fatura';
+$wb['no_products_txt'] = 'Henüz bir ürün yok.';
+$wb['edit_txt'] = 'Düzenle';
+$wb['cancellation_date_txt'] = 'Ä°ptal eden:';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_quota.lng b/interface/web/dashboard/lib/lang/tr_dashlet_quota.lng
index 5a757be6f7384152444548e95af3d9d179ea9051..c49fcba52205c3e21b995591787e00313320b693 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_quota.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_quota.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['quota_txt'] = 'Web Sitesi Disk Kotası';
-$wb['domain_txt'] = 'Alan Adı / Web Sitesi';
+$wb['domain_txt'] = 'Etki Alanı / Web Sitesi';
 $wb['used_txt'] = 'Kullanılan Alan';
-$wb['hard_txt'] = 'Donanım sınırı';
-$wb['soft_txt'] = 'Yazılım sınırı';
+$wb['hard_txt'] = 'Donanım Sınırı';
+$wb['soft_txt'] = 'Yazılım Sınırı';
 $wb['no_sites_txt'] = 'Henüz bir web sitesi yok.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_shop.lng b/interface/web/dashboard/lib/lang/tr_dashlet_shop.lng
index 1e0b5361d7baaca8a3501c3b3506d424a0c29581..59e629889fa28f1f8347e50144a398af90496f0f 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_shop.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_shop.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['shop_txt'] = 'Order';
-$wb['name_txt'] = 'Name';
-$wb['price_txt'] = 'Price';
-$wb['setup_fee_txt'] = 'Setup Fee';
-$wb['no_products_txt'] = 'No products found.';
-$wb['order_txt'] = 'Order';
+$wb['shop_txt'] = 'SipariÅŸ';
+$wb['name_txt'] = 'Ad';
+$wb['price_txt'] = 'Fiyat';
+$wb['setup_fee_txt'] = 'Kurulum Ãœcreti';
+$wb['no_products_txt'] = 'Herhangi bir ürün bulunamadı.';
+$wb['order_txt'] = 'SipariÅŸ';
 ?>
diff --git a/interface/web/dns/ajax_get_json.php b/interface/web/dns/ajax_get_json.php
index c2da4dce631172dab52b487509e639da8a6988d2..1dd9c518f9480b3d54359f6bc57bdc7b07d81586 100644
--- a/interface/web/dns/ajax_get_json.php
+++ b/interface/web/dns/ajax_get_json.php
@@ -35,6 +35,7 @@ require_once '../../lib/app.inc.php';
 $app->auth->check_module_permissions('dns');
 
 $type = $_GET["type"];
+$ca_id = $app->functions->intval($_GET['ca_id']);
 
 if($type == 'get_ipv4'){
 	$result = array();
@@ -54,6 +55,17 @@ if($type == 'get_ipv6'){
 	$json = $app->functions->json_encode($result);
 }
 
+if($type == 'ca_wildcard'){
+	$json = '{';
+	$json .= '"ca_wildcard":"';
+	$tmp = $app->db->queryOneRecord("SELECT ca_wildcard, ca_issue, ca_critical FROM dns_ssl_ca WHERE id = ?", $ca_id);
+	$json .= $tmp['ca_wildcard'].'"';
+	$json .= ',"ca_issue":"'.$tmp['ca_issue'].'"';
+	$json .= ',"ca_critical":"'.$tmp['ca_critical'].'"';
+	unset($tmp);
+	$json .= '}';
+}
+
 header('Content-type: application/json');
 echo $json;
 ?>
diff --git a/interface/web/dns/dns_caa_edit.php b/interface/web/dns/dns_caa_edit.php
new file mode 100644
index 0000000000000000000000000000000000000000..0151600e4808ee0def9144cae680c5834eff4ff3
--- /dev/null
+++ b/interface/web/dns/dns_caa_edit.php
@@ -0,0 +1,223 @@
+<?php
+/*
+Copyright (c) 2017, Florian Schaal, schaal @it UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = 'form/dns_caa.tform.php';
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dns');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions,validate_dns');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onShowNew() {
+		global $app;
+		// we will check only users, not admins
+		if($_SESSION['s']['user']['typ'] == 'user') {
+			// Get the limits of the client
+			$client_group_id = intval($_SESSION['s']['user']['default_group']);
+			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			// Check if the user may add another record.
+			if($client['limit_dns_record'] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
+				if($tmp['number'] >= $client['limit_dns_record']) {
+					$app->error($app->tform->wordbook['limit_dns_record_txt']);
+				}
+			}
+		}
+
+		parent::onShowNew();
+	}
+
+	function onShowEnd() {
+		global $app;
+
+		$zone = @(!isset($this->dataRecord['zone']))?$app->functions->intval($_GET['zone']):$this->dataRecord['zone'];
+
+		// get domain-name
+		$sql = "SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r');
+		$soa = $app->db->queryOneRecord($sql, $zone);
+		$domain_name = rtrim($soa['origin'], '.');
+		$app->tpl->setVar('name', $domain_name);
+		if($this->id > 0) {
+			$temp = $this->dataRecord['name'];
+			$temp = str_replace($soa['origin'], '', $this->dataRecord['name']);
+			$temp = trim($temp,'.');
+			if(trim($temp != '')) $app->tpl->setVar('additional', $temp);
+			unset($temp);
+		}
+
+		//create ca-list
+		$rec = $app->db->QueryAllRecords("SELECT * FROM dns_ssl_ca WHERE active = 'Y' AND ca_issue != '' ORDER by ca_name ASC");
+		$ca_select = "<option value='0' >".$app->tform->wordbook['select_txt']."</option>";
+		if(count($rec) > 0) {
+			foreach($rec as $ca) {
+				if(strpos($this->dataRecord['data'], $ca['ca_issue']) !== FALSE) $selected = ' selected'; else $selected='';
+				$ca_select .= "<option value='$ca[id]'$selected>$ca[ca_name]</option>\r\n";
+			}
+		}
+		$app->tpl->setVar('ca_list', $ca_select);
+		$app->tpl->setVar('type', 'CAA');
+		if($this->id > 0) {
+			if(stristr($this->dataRecord['data'], 'issuewild') !== FALSE) $app->tpl->setVar('allow_wildcard', 'CHECKED'); else $app->tpl->setVar('allow_wildcard', 'UNCHECKED');
+			if(strpos($this->dataRecord['data'], '128') === 0) $app->tpl->setVar('allow_critical', 'CHECKED'); else $app->tpl->setVar('allow_critical', 'UNCHECKED');
+			$app->tpl->setVar('edit_disabled', 1);
+		} else {
+			$app->tpl->setVar('ttl', $soa['ttl']);
+		}
+
+		parent::onShowEnd();
+	}
+
+	function onSubmit() {
+		global $app;
+
+		// Check the client limits, if user is not the admin
+		if($_SESSION['s']['user']['typ'] != 'admin') { // if user is not admin
+			// Get the limits of the client
+			$client_group_id = intval($_SESSION['s']['user']['default_group']);
+			$client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
+
+			// Check if the user may add another record.
+			if($this->id == 0 && $client['limit_dns_record'] >= 0) {
+				$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id);
+				if($tmp['number'] >= $client['limit_dns_record']) {
+					$app->error($app->tform->wordbook['limit_dns_record_txt']);
+				}
+			}
+		} // end if user is not admin
+
+		// Check CA
+		if($this->dataRecord['ca_issue'] == '') $this->error('ca_error_txt');
+
+		// Get the parent soa record of the domain
+		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_POST['zone']);
+		$this->dataRecord['name'] = $soa['origin'];
+
+		// Check if Domain belongs to user
+		if($soa['id'] != $_POST['zone']) $this->error('no_zone_perm');
+
+		// Set the server ID of the rr record to the same server ID as the parent record.
+        $this->dataRecord['server_id'] = $soa['server_id'];
+		
+		// Set issue
+		$critical = 0; //* To use critical > 0, uncommented "<div class="critical form-group">" in the template
+		if(isset($this->dataRecord['allow_critical']) && $this->dataRecord['allow_critical'] == 'on' && isset($this->dataRecord['ca_critical']) && $this->dataRecord['ca_critical'] == 1) $critical = 128;
+		if(isset($this->dataRecord['allow_wildcard']) && $this->dataRecord['allow_wildcard'] == "on") {
+			$this->dataRecord['data'] = $critical.' issuewild "'.$this->dataRecord['ca_issue'];
+		} else {
+			$this->dataRecord['data'] = $critical.' issue "'.$this->dataRecord['ca_issue'];
+		}
+		unset($critical);
+		if(isset($this->dataRecord['options']) && $this->dataRecord['options'] != '') {
+			$options=explode(',', $this->dataRecord['options']);
+			foreach($options as $option) {
+				if(trim($option) != '') {
+					if(preg_match('/^(\w+|d\+)=(\w+|d\+)/', $option)) {
+						$this->dataRecord['data'] = $this->dataRecord['data'] . '; '.$option;
+					} else {
+						$this->error('ca_option_error');
+					}
+				}
+			}
+		}
+		$this->dataRecord['data'] = $this->dataRecord['data'].'"';
+
+		// Set name
+		if($this->dataRecord['additional'] != '') {
+			$temp = explode(',', $this->dataRecord['additional']);
+			$temp = $temp[0]; // if we have more hostnames the interface-plugin will be used
+			$temp = trim($temp,'.');
+			if(trim($temp != '')) $this->dataRecord['name'] = $temp.'.'.$this->dataRecord['name'];
+			unset($temp);
+		}
+
+		// Check for duplicate
+		$temp = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE type = 'CAA' AND name = ? AND data = ? AND active = ?", $this->dataRecord['name'], $this->dataRecord['data'], $POST['active']);
+		if(is_array($temp)) $this->error('caa_exists_error');
+		unset($temp);
+		
+		// Update the serial number  and timestamp of the RR record
+		$dns_rr = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);
+		$this->dataRecord['serial'] = $app->validate_dns->increase_serial($dns_rr['serial']);
+		$this->dataRecord['stamp'] = date('Y-m-d H:i:s');
+
+		parent::onSubmit();
+	}
+
+	function onAfterInsert() {
+		global $app;
+
+		//* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record
+		$soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord['zone']);
+		$app->db->datalogUpdate('dns_rr', array('sys_groupid' => $soa['sys_groupid']), 'id', $this->id);
+
+		//* Update the serial number of the SOA record
+		$soa_id = $app->functions->intval($_POST["zone"]);
+		$serial = $app->validate_dns->increase_serial($soa['serial']);
+		$app->db->datalogUpdate('dns_soa', array('serial' => $serial), 'id', $soa_id);
+
+	}
+
+	function onAfterUpdate() {
+		global $app;
+
+		//* Update the serial number of the SOA record
+		$soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord['zone']);
+		$soa_id = $app->functions->intval($_POST['zone']);
+		$serial = $app->validate_dns->increase_serial($soa['serial']);
+		$app->db->datalogUpdate('dns_soa', array('serial' => $serial), 'id', $soa_id);
+	}
+
+	private function error($errmsg) {
+		global $app;
+		if (isset($app->tform->errorMessage)) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
+		$app->tform->errorMessage .= $app->tform->wordbook[$errmsg];
+	}
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/dns/dns_dkim_edit.php b/interface/web/dns/dns_dkim_edit.php
index 35bac0d0c6254b642fc8a198b28209cb64109f49..5c95b2033d78d5211d62d3590676add744a10d39 100644
--- a/interface/web/dns/dns_dkim_edit.php
+++ b/interface/web/dns/dns_dkim_edit.php
@@ -128,7 +128,7 @@ class page_action extends tform_actions {
 		// check for duplicate entry
 		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data = ? AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord["data"], $this->dataRecord['name']);
 		if ($check!='') $app->tform->errorMessage .= $app->tform->wordbook["record_exists_txt"];
-		if (empty($this->dataRecord['data'])) $app->tform->errorMessage /= $app->tform->wordbook["dkim_disabled_txt"];
+		if (empty($this->dataRecord['data'])) $app->tform->errorMessage .= $app->tform->wordbook["dkim_disabled_txt"];
 
 		// validate selector and public-key
 		if (empty($this->dataRecord['selector'])) $app->tform->errorMessage .= '<br/>'.$app->tform->wordbook["dkim_selector_empty_txt"].'<br/>';
diff --git a/interface/web/dns/form/dns_a.tform.php b/interface/web/dns/form/dns_a.tform.php
index d9ed197c515aa71593670828511f56a7d7f1eef5..aa00e9cb50f3ffdd3c48472dd5c44ac1959d8664 100644
--- a/interface/web/dns/form/dns_a.tform.php
+++ b/interface/web/dns/form/dns_a.tform.php
@@ -159,7 +159,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_aaaa.tform.php b/interface/web/dns/form/dns_aaaa.tform.php
index 018657b838edf181add028e4025bbaec98c7308f..05f52ca67bdaa43d72d1404c22f63e85153b3e89 100644
--- a/interface/web/dns/form/dns_aaaa.tform.php
+++ b/interface/web/dns/form/dns_aaaa.tform.php
@@ -152,7 +152,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_alias.tform.php b/interface/web/dns/form/dns_alias.tform.php
index 55833b7ec73f4136980d335b55db4a7f65ec9dca..0e82ee6da26a7a8580b2c98f9c0ec76d51312178 100644
--- a/interface/web/dns/form/dns_alias.tform.php
+++ b/interface/web/dns/form/dns_alias.tform.php
@@ -170,7 +170,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_caa.tform.php b/interface/web/dns/form/dns_caa.tform.php
new file mode 100644
index 0000000000000000000000000000000000000000..aa297f29d77bd3a8018d25027fdefae628fedeb7
--- /dev/null
+++ b/interface/web/dns/form/dns_caa.tform.php
@@ -0,0 +1,117 @@
+<?php
+
+global $app;
+
+$form['title'] = 'DNS CAA Record';
+$form['description'] = '';
+$form['name'] = 'dns_caa';
+$form['action'] = 'dns_caa_edit.php';
+$form['db_table'] = 'dns_rr';
+$form['db_table_idx'] = 'id';
+$form['db_history'] = 'yes';
+$form['tab_default'] = 'dns';
+$form['list_default'] = 'dns_a_list.php';
+$form['auth'] = 'yes';
+
+$form['auth_preset']['userid']  = 0;
+$form['auth_preset']['groupid'] = 0;
+$form['auth_preset']['perm_user'] = 'riud';
+$form['auth_preset']['perm_group'] = 'riud';
+$form['auth_preset']['perm_other'] = '';
+
+$form['tabs']['dns'] = array (
+	'title'  => 'DNS CAA',
+	'width'  => 100,
+	'template'  => 'templates/dns_caa_edit.htm',
+	'fields'  => array (
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'zone' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => @$app->functions->intval($_REQUEST['zone']),
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array( 0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}$/',
+					'errmsg'=> 'name_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'type' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'CAA',
+			'value'  => '',
+			'width'  => '5',
+			'maxlength' => '5'
+		),
+		'data' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'ttl' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'RANGE',
+							'range' => '60:',
+							'errmsg'=> 'ttl_range_error'),
+			),
+			'default' => '3600',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'Y',
+			'value'  => array(0 => 'N', 1 => 'Y')
+		),
+		'stamp' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'serial' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+	)
+);
+
+
+
+?>
diff --git a/interface/web/dns/form/dns_cname.tform.php b/interface/web/dns/form/dns_cname.tform.php
index d04c1d01aff18bf82fffe94ec213e74123684de5..290e83f54bda6b1f5d3cafde83dc02c34109c7ae 100644
--- a/interface/web/dns/form/dns_cname.tform.php
+++ b/interface/web/dns/form/dns_cname.tform.php
@@ -168,7 +168,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_dkim.tform.php b/interface/web/dns/form/dns_dkim.tform.php
index 550255da4639827709946ecb2416c99cd9cf519e..d47a622b0d1d0370fcb2ed6bd52a1e1a738b8a13 100644
--- a/interface/web/dns/form/dns_dkim.tform.php
+++ b/interface/web/dns/form/dns_dkim.tform.php
@@ -148,7 +148,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_dmarc.tform.php b/interface/web/dns/form/dns_dmarc.tform.php
index a1ecaa40c80ccffe2050d6a45a20fd46e3b0e446..625fddc98c604d289938bfc85fca6a00c2ea7829 100644
--- a/interface/web/dns/form/dns_dmarc.tform.php
+++ b/interface/web/dns/form/dns_dmarc.tform.php
@@ -154,7 +154,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// End Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_ds.tform.php b/interface/web/dns/form/dns_ds.tform.php
index fe8528f9c8951ff33ee0560f95b562941bcad8c3..04ee9a1f0bf0e0134835f13e11f78a7212590eb7 100644
--- a/interface/web/dns/form/dns_ds.tform.php
+++ b/interface/web/dns/form/dns_ds.tform.php
@@ -152,7 +152,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_hinfo.tform.php b/interface/web/dns/form/dns_hinfo.tform.php
index 76c8c79dc0f66cac2787aaeaaf977c134aadf35f..972a07dff847883589258e531b17f727c642c19b 100644
--- a/interface/web/dns/form/dns_hinfo.tform.php
+++ b/interface/web/dns/form/dns_hinfo.tform.php
@@ -160,7 +160,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_loc.tform.php b/interface/web/dns/form/dns_loc.tform.php
index 5749a866b23510f7e210336bcb60c59fe2ed241d..37df8b24c94ecd13372b168b63b3f43a22663fea 100644
--- a/interface/web/dns/form/dns_loc.tform.php
+++ b/interface/web/dns/form/dns_loc.tform.php
@@ -157,7 +157,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_mx.tform.php b/interface/web/dns/form/dns_mx.tform.php
index 9aace37ae7858a9b2197e320c70a00182578e45a..3681c1a67a38bac10dd2ae9edba5d4ff40f4bba0 100644
--- a/interface/web/dns/form/dns_mx.tform.php
+++ b/interface/web/dns/form/dns_mx.tform.php
@@ -169,7 +169,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_ns.tform.php b/interface/web/dns/form/dns_ns.tform.php
index e20a7892bfce61b2ed904f7fcfe782c9ca7c41f9..fdfb92b54fe13aeacbf786e63068ec6e9e680e7a 100644
--- a/interface/web/dns/form/dns_ns.tform.php
+++ b/interface/web/dns/form/dns_ns.tform.php
@@ -168,7 +168,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_ptr.tform.php b/interface/web/dns/form/dns_ptr.tform.php
index 4cc0462522e0fc4e42aff1f28afbe2f830b694c4..cf505777644797d334c1107181fd4435e1cc63b0 100644
--- a/interface/web/dns/form/dns_ptr.tform.php
+++ b/interface/web/dns/form/dns_ptr.tform.php
@@ -168,7 +168,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_rp.tform.php b/interface/web/dns/form/dns_rp.tform.php
index 5f4610a45bb397a247078ad08404c3e7319233c9..fc85ad98e815befffe2d8a02fa3953d78aa70e2a 100644
--- a/interface/web/dns/form/dns_rp.tform.php
+++ b/interface/web/dns/form/dns_rp.tform.php
@@ -161,7 +161,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_slave.tform.php b/interface/web/dns/form/dns_slave.tform.php
index 2f287dbfd7a291a7788a00be23c62514290d0818..0b4457b700a2f385f0c98782d38c7023daa14f24 100644
--- a/interface/web/dns/form/dns_slave.tform.php
+++ b/interface/web/dns/form/dns_slave.tform.php
@@ -144,7 +144,7 @@ $form["tabs"]['dns_slave'] = array (
 			'value'  => array(0 => 'N', 1 => 'Y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index 6fab657baac1f601aab737bcd446d7c0e6e43329..e56211782a4e4190e5faa347429c33f37787e758 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -289,7 +289,7 @@ $form["tabs"]['dns_soa'] = array (
  			'maxlength' => '10000'
  		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -304,7 +304,7 @@ $form["tabs"]['dns_records'] = array (
 		//#################################
 
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	),
 	'plugins' => array (
diff --git a/interface/web/dns/form/dns_spf.tform.php b/interface/web/dns/form/dns_spf.tform.php
index ea2cf8310c8310477cb98365d9a29ed8c3dc259a..62b6b5283b58dc03f582be5e2f730ee31041e90d 100644
--- a/interface/web/dns/form/dns_spf.tform.php
+++ b/interface/web/dns/form/dns_spf.tform.php
@@ -154,7 +154,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// End Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_srv.tform.php b/interface/web/dns/form/dns_srv.tform.php
index ee0674fd1931318ab95e1809e20075eab3e10150..5d1c1066957057303f0e3981e27c6f0dee4728a7 100644
--- a/interface/web/dns/form/dns_srv.tform.php
+++ b/interface/web/dns/form/dns_srv.tform.php
@@ -159,7 +159,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_template.tform.php b/interface/web/dns/form/dns_template.tform.php
index 2c53f32ec11195b6178022497f861ad4d33fd7ae..5655c3e4cd77933adf1e5ef2160ee08ad4125cc6 100644
--- a/interface/web/dns/form/dns_template.tform.php
+++ b/interface/web/dns/form/dns_template.tform.php
@@ -106,7 +106,7 @@ $form["tabs"]['template'] = array (
 			'value'  => array(0 => 'N', 1 => 'Y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_tlsa.tform.php b/interface/web/dns/form/dns_tlsa.tform.php
index ef6f2a05b16a4028d2334ecd08a380a92778d45a..b86252cc31019113574455a372067e4e71d6a458 100644
--- a/interface/web/dns/form/dns_tlsa.tform.php
+++ b/interface/web/dns/form/dns_tlsa.tform.php
@@ -148,7 +148,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/form/dns_txt.tform.php b/interface/web/dns/form/dns_txt.tform.php
index 3aee920dd9e82f2b1ce433a271a167ecfe29fa58..564e26aa186ad14bd17d39bc41c04b164e5878d5 100644
--- a/interface/web/dns/form/dns_txt.tform.php
+++ b/interface/web/dns/form/dns_txt.tform.php
@@ -165,7 +165,7 @@ $form["tabs"]['dns'] = array (
 			'maxlength' => '10'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/dns/lib/lang/ar_dns_caa.lng b/interface/web/dns/lib/lang/ar_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..973a97ceb6870404d7c8107002e1738b373362a0
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnamen';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_template.lng b/interface/web/dns/lib/lang/ar_dns_template.lng
index 3a09e3bb71b6fc2ba62aa40fce668fc2dd86ffe8..b598d0f0f1a0e65f088df14b936cb191cd7a1afb 100644
--- a/interface/web/dns/lib/lang/ar_dns_template.lng
+++ b/interface/web/dns/lib/lang/ar_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Name';
 $wb['fields_txt'] = 'Fields';
 $wb['template_txt'] = 'Template';
 $wb['visible_txt'] = 'Visible';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_caa.lng b/interface/web/dns/lib/lang/bg_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..973a97ceb6870404d7c8107002e1738b373362a0
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnamen';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_template.lng b/interface/web/dns/lib/lang/bg_dns_template.lng
index 808010e6e09dcca8cf42c3b1d3440edb49fec2b6..37fcdcd617a2b18d9266fabb51448431af4d91e7 100644
--- a/interface/web/dns/lib/lang/bg_dns_template.lng
+++ b/interface/web/dns/lib/lang/bg_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Име';
 $wb['fields_txt'] = 'Полета';
 $wb['template_txt'] = 'Шаблон';
 $wb['visible_txt'] = 'Видим';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/br.lng b/interface/web/dns/lib/lang/br.lng
index b45d1575af67fd22a874e0fb3074a343485c90c4..9228373fdf0b75dc3bcb9e1959b59893a9724390 100644
--- a/interface/web/dns/lib/lang/br.lng
+++ b/interface/web/dns/lib/lang/br.lng
@@ -1,4 +1,5 @@
 <?php
+
 $wb['DNS'] = 'DNS';
 $wb['Zones'] = 'Zonas';
 $wb['DNS A'] = 'A';
@@ -9,14 +10,15 @@ $wb['DNS mx'] = 'MX';
 $wb['DNS ns'] = 'NS';
 $wb['DNS ptr'] = 'PTR';
 $wb['DNS RP'] = 'RP';
-$wb['DNS Zone'] = 'Zona';
+$wb['DNS Zone'] = 'ZONA';
 $wb['Records'] = 'Registros';
 $wb['DNS SRV'] = 'SRV';
 $wb['DNS TXT Record'] = 'Registro TXT';
 $wb['DNS TXT'] = 'TXT';
-$wb['DNS Wizard'] = 'Assistente dns';
-$wb['Add DNS Zone'] = 'Adicionar nova zona';
-$wb['Import Zone File'] = 'Importar arquivo de zona';
+$wb['DNS Wizard'] = 'Assistente DNS';
+$wb['Add DNS Zone'] = 'Adicionar zona dns';
 $wb['Templates'] = 'Gabaritos';
+$wb['Secondary DNS'] = 'DNS secundário';
 $wb['Secondary Zones'] = 'Zonas secundárias';
+$wb['Import Zone File'] = 'Importar arquivo de zona';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_a.lng b/interface/web/dns/lib/lang/br_dns_a.lng
index 93704528e2e927806992e5e3999eda8747a0bd1c..f96cf551e6c8a0ec411052c6959658790beef18f 100644
--- a/interface/web/dns/lib/lang/br_dns_a.lng
+++ b/interface/web/dns/lib/lang/br_dns_a.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Endereço IP';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['ip_error_wrong'] = 'Endereço IP é inválido.';
-$wb['data_error_duplicate'] = 'Registro A duplicado.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['ip_error_wrong'] = 'Endereço IP inválido.';
+$wb['data_error_duplicate'] = 'Registro A ou CNAME duplicado.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_a_list.lng b/interface/web/dns/lib/lang/br_dns_a_list.lng
index 0abaf5493d33373e9a5a84b2b915b656c92f8e79..6387c14cbee7d238e8219731bc74d3f2756e9eb9 100644
--- a/interface/web/dns/lib/lang/br_dns_a_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_a_list.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['list_head_txt'] = 'Registro (A)';
+$wb['list_head_txt'] = 'Registro A';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Nome';
-$wb['data_txt'] = 'Data';
+$wb['data_txt'] = 'Dados';
 $wb['aux_txt'] = 'Prioridade';
-$wb['type_txt'] = 'Tipo';
 $wb['ttl_txt'] = 'TTL';
-$wb['add_new_record_txt'] = 'Adicionar um novo registro (A)';
+$wb['type_txt'] = 'Tipo';
+$wb['add_new_record_txt'] = 'Adicionar novo registro A';
 $wb['page_txt'] = 'Página';
 $wb['page_of_txt'] = 'de';
 $wb['delete_confirmation'] = 'Tem certeza que deseja remover este registro?';
diff --git a/interface/web/dns/lib/lang/br_dns_aaaa.lng b/interface/web/dns/lib/lang/br_dns_aaaa.lng
index 5f0b4632759691e11ebaf44987c04ac504096891..1a3cfb2d2740446bea11ffdc4f98404b225d51cd 100644
--- a/interface/web/dns/lib/lang/br_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/br_dns_aaaa.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Endereço IPv6';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'O nome está em branco.';
-$wb['name_error_regex'] = 'O nome é inválido.';
-$wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['ip_error_wrong'] = 'Endereço IP é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Endereço IPv6 está em branco.';
+$wb['ip_error_wrong'] = 'O endereço IPv6 possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_alias.lng b/interface/web/dns/lib/lang/br_dns_alias.lng
index b303a662ba08a49664ca1b4c29f4ad35abdc447d..46821ee1ae5aeb548a3bc926b0d86d5d82245348 100644
--- a/interface/web/dns/lib/lang/br_dns_alias.lng
+++ b/interface/web/dns/lib/lang/br_dns_alias.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Servidor de destino';
+$wb['data_txt'] = 'Alvo do host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'O nome está em branco.';
-$wb['name_error_regex'] = 'O nome é inválido.';
-$wb['data_error_empty'] = 'O servidor de destino está em branco.';
-$wb['data_error_regex'] = 'O servidor de destino é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O alvo do host está em branco.';
+$wb['data_error_regex'] = 'O formato do alvo do host é inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_caa.lng b/interface/web/dns/lib/lang/br_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..16bf267862e92e1422405e6c95cc221d6855864d
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Autoridade Certificadora - CA';
+$wb['ca_domain_txt'] = 'Domínio';
+$wb['ca_hostname_txt'] = 'Nome de hosts adicionais';
+$wb['ca_hostname_note_txt'] = '(separado por vírgulas - em branco para todos os hosts)';
+$wb['ca_options_txt'] = 'Opções adicionais';
+$wb['ca_options_note_txt'] = 'solicitado pela CA (lista separado por vírgulas)';
+$wb['ca_wildcard_txt'] = 'Usar curingas SSL';
+$wb['ca_critical_txt'] = 'Verificação estrita';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Ativo';
+$wb['select_txt'] = 'Selecionar autoridade certificadora';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['ca_error_txt'] = 'Nenhuma autoridade certificadora selecionada.';
+$wb['caa_exists_error'] = 'Registro CAA já existe.';
+$wb['ca_option_error'] = 'Formato inválido para opções adicionais; OPÇÃO=VALOR';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_cname.lng b/interface/web/dns/lib/lang/br_dns_cname.lng
index cbba03cdaf92825927c668c10db0abf4b06748ca..c4fb0df260691581383407dfa939e9623b203ef2 100644
--- a/interface/web/dns/lib/lang/br_dns_cname.lng
+++ b/interface/web/dns/lib/lang/br_dns_cname.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Nome de destino';
+$wb['data_txt'] = 'Alvo do host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Nome de destino está em branco.';
-$wb['data_error_regex'] = 'Nome de destino é inválido.';
-$wb['data_error_duplicate'] = 'Registros A ou CNAME duplicados.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O alvo do host está em branco.';
+$wb['data_error_regex'] = 'O alvo do host possui formato inválido.';
+$wb['data_error_duplicate'] = 'Registro A ou CNAME duplicado.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_dkim.lng b/interface/web/dns/lib/lang/br_dns_dkim.lng
index 1ec851a216b80324f451df216e096d157d032fa3..a24976194d6ea426bcf597342dc3cccca7fdea29 100644
--- a/interface/web/dns/lib/lang/br_dns_dkim.lng
+++ b/interface/web/dns/lib/lang/br_dns_dkim.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['public_key_txt'] = 'Chave pública';
+$wb['public_key_txt'] = 'Chave Pública';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['record_exists_txt'] = 'Registro dns já existe.';
-$wb['dkim_disabled_txt'] = 'DKIM desabilitado para este domínio.';
+$wb['record_exists_txt'] = 'Este registro dns já existe.';
+$wb['dkim_disabled_txt'] = 'Chave DKIM está desabilitada para este domínio de e-mail.';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 $wb['selector_txt'] = 'Seletor DKIM';
-$wb['data_error_empty'] = 'Public-Key missing';
-$wb['dkim_selector_empty_txt'] = 'DKIM-Selector is empty';
+$wb['data_error_empty'] = 'Chave pública ausente.';
+$wb['dkim_selector_empty_txt'] = 'Seletor DKIM está em branco.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_dmarc.lng b/interface/web/dns/lib/lang/br_dns_dmarc.lng
index 5b7201075fbd364533109bf712812525ea1142c5..bacd3af25fc6b3869f6acadf167713b1296a00cc 100644
--- a/interface/web/dns/lib/lang/br_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/br_dns_dmarc.lng
@@ -1,50 +1,50 @@
 <?php
 $wb['data_txt'] = 'Registro DMARC';
 $wb['domain_txt'] = 'Domínio';
-$wb['dmarc_policy_txt'] = 'Política de recepção de e-mails';
-$wb['dmarc_policy_note_txt'] = 'Como os \"ISPs\" devem tratar as mensagens SPF ou DKIM com falha (DMARC).';
-$wb['dmarc_policy_none_txt'] = 'não fazer nada';
+$wb['dmarc_policy_txt'] = 'Política para recepção de e-mails';
+$wb['dmarc_policy_note_txt'] = 'Como os ISPs devem manipular as mensagens que falharam para SPF ou DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'nenhuma';
 $wb['dmarc_policy_quarantine_txt'] = 'quarentena';
 $wb['dmarc_policy_reject_txt'] = 'rejeitar';
-$wb['dmarc_rua_txt'] = 'Agregrar os dados por endereço';
-$wb['dmarc_rua_note_txt'] = 'Endereços de e-mail para receber relatórios do sistema sobre mensagens com falha e controles DMARC do domínio (separados por espaço em branco)';
-$wb['dmarc_ruf_txt'] = 'Relatório forense de dados por endereço';
-$wb['dmarc_ruf_note_txt'] = 'Endereços de e-mail para receber amostras de mensagens com falha e controles DMARC do domínio (separados por espaço em branco)';
+$wb['dmarc_rua_txt'] = 'Relatório de dados de endereços sumarizado';
+$wb['dmarc_rua_note_txt'] = 'Endereços de e-mail para receber relatórios dos ISPs sobre mensagens de falhas DMARC para este domínio (separado por espaço).';
+$wb['dmarc_ruf_txt'] = 'Endereço para relatório de dados forense';
+$wb['dmarc_ruf_note_txt'] = 'Endereços de e-mail para receber mensagens simples sobre falhas DMARC para este domínio (separado por espaço).';
 $wb['dmarc_fo_txt'] = 'Opções de relatório forense';
-$wb['dmarc_fo0_txt'] = 'Gerar relatórios se todos os mecanismos de autenticação subjacentes deixarem de produzir um resultado DMARC \"pass\".';
-$wb['dmarc_fo1_txt'] = 'Gerar relatório se algum mecanismo falhar.';
-$wb['dmarc_fod_txt'] = 'Gerar relatório se assinatura DKIM falhar na verificação.';
-$wb['dmarc_fos_txt'] = 'Gerar relatório se o SPF falhar.';
-$wb['dmarc_adkim_txt'] = 'Parametrização do identificador DKIM';
-$wb['dmarc_adkim_note_txt'] = 'Modo \"strict\" exige combinação exata entre o DKIM do domínio e e-mails';
+$wb['dmarc_fo0_txt'] = 'Gerar relatório se todos os mecanismos de autenticação falharem em produzir um resultado \'pass\' do DMARC.';
+$wb['dmarc_fo1_txt'] = 'Gerar relatório se qualquer mecanismo falhar.';
+$wb['dmarc_fod_txt'] = 'Gerar relatório se a assinatura DKIM falhar na verificação.';
+$wb['dmarc_fos_txt'] = 'Gerar relatório se a consulta SPF falhar.';
+$wb['dmarc_adkim_txt'] = 'Alinhamento do identificador DKIM';
+$wb['dmarc_adkim_note_txt'] = '\'strict\' requer combinação exata entre DKIM do domínio e oremetente do e-mail';
 $wb['dmarc_adkim_r_txt'] = 'relaxed';
 $wb['dmarc_adkim_s_txt'] = 'strict';
-$wb['dmarc_aspf_txt'] = 'Parametrização do identificador SPF';
-$wb['dmarc_aspf_note_txt'] = 'Modo \"strict\" exige combinação exata entre o SPF do domínio e e-mails';
+$wb['dmarc_aspf_txt'] = 'Alinhamento do identificador SPF';
+$wb['dmarc_aspf_note_txt'] = '\'strict\' requer combinação exata o SPF do domínio e oremetente do e-mail';
 $wb['dmarc_aspf_r_txt'] = 'relaxed';
 $wb['dmarc_aspf_s_txt'] = 'strict';
-$wb['dmarc_rf_txt'] = 'Formatação do relatório';
-$wb['dmarc_rf_afrf_txt'] = 'Falha de autenticação para formatação do relatório';
-$wb['dmarc_rf_iodef_txt'] = 'Formato da descrição de troca objeto de incidentes';
-$wb['dmarc_pct_txt'] = 'Aplicar políticas para este percentual';
-$wb['dmarc_pct_note_txt'] = '% (100 padrão). Percentual de mensagens do domínio que serão verificadas.';
-$wb['dmarc_ri_txt'] = 'Intervalo de relatórios';
-$wb['dmarc_ri_note_txt'] = 'Segundos (padrão=86400). Valor em segundos que os relatórios de agregação serão gerados (86400 representa 1 dia).';
-$wb['dmarc_sp_txt'] = 'Políticas de subdomínio (padrão é o mesmo do domínio).';
+$wb['dmarc_rf_txt'] = 'Formato do Relatório';
+$wb['dmarc_rf_afrf_txt'] = 'Formato do relatório de falhas de autenticação';
+$wb['dmarc_rf_iodef_txt'] = 'Formato da descrição de incidentes de objetos de troca';
+$wb['dmarc_pct_txt'] = 'Aplicar política para este percentual';
+$wb['dmarc_pct_note_txt'] = '% (100 padrão). Percentual de mensagens para este domínio a serem verificadas.';
+$wb['dmarc_ri_txt'] = 'Intervalo de geração do relatório';
+$wb['dmarc_ri_note_txt'] = 'Segundos (padrão=86400). Intervalo, em segundos, para gerar relatórios sumarizados (86400 equivale a 1 dia).';
+$wb['dmarc_sp_txt'] = 'Política para subdomínio (padrão é o mesmo do domínio).';
 $wb['dmarc_sp_same_txt'] = 'mesmo do domínio';
-$wb['dmarc_sp_none_txt'] = 'nenhum';
+$wb['dmarc_sp_none_txt'] = 'nenhuma';
 $wb['dmarc_sp_quarantine_txt'] = 'quarentena';
 $wb['dmarc_sp_reject_txt'] = 'rejeitar';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['dmarc_policy_error_txt'] = 'Somente a política \"nenhum\" é permitida para e-mails sem assinatura DKIM.';
+$wb['dmarc_policy_error_txt'] = 'A política \'nenhuma\' é permitida apenas para e-mails sem assinatura DKIM.';
 $wb['dmarc_no_dkim_txt'] = 'Nenhum registro DKIM ativo.';
 $wb['dmarc_no_spf_txt'] = 'Nenhum registro SPF ativo.';
-$wb['dmarc_more_spf_txt'] = 'Mais de um registro SPF ativo.';
-$wb['dmarc_invalid_email_txt'] = 'e-mail é inválido.';
-$wb['dmarc_empty_txt'] = 'Registro DMARC em branco - especifique ao menos um';
-$wb['record_exists_txt'] = 'Registro dns já existe.';
-$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['dmarc_more_spf_txt'] = 'Existe mais de um registro SPF ativo';
+$wb['dmarc_invalid_email_txt'] = 'Endereço de e-mail inválido';
+$wb['dmarc_empty_txt'] = 'Registro DMARC em branco - especifique ao menos uma opção';
+$wb['record_exists_txt'] = 'Registro dns já existe';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['ttl_range_error'] = 'TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_ds.lng b/interface/web/dns/lib/lang/br_dns_ds.lng
index 38b2183ead3e3f6dfdf5cc1d6924a1d84c6d70eb..843338a943860d125ab3d4b265b4ecaada39e8b9 100644
--- a/interface/web/dns/lib/lang/br_dns_ds.lng
+++ b/interface/web/dns/lib/lang/br_dns_ds.lng
@@ -1,17 +1,18 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Dados';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Dados está em branco.';
-$wb['data_error_regex'] = 'Dados é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
-$wb['invalid_type_ds'] = 'Registro DS é inválido.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O campo texto (Text) em branco';
+$wb['data_error_regex'] = 'O campo texto (Text) possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+$wb['invalid_type_ds'] = 'O registro DS possui formato inválido.';
+
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_hinfo.lng b/interface/web/dns/lib/lang/br_dns_hinfo.lng
index bf7b7f33d403ac2bea608762fb1a1f9199bbce63..e7bdfa2f4c8debb543cb64a18260caa45a5ba18f 100644
--- a/interface/web/dns/lib/lang/br_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/br_dns_hinfo.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Servidor';
+$wb['data_txt'] = 'Informação do host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'O nome está em branco.';
-$wb['name_error_regex'] = 'O nome é inválido.';
-$wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['data_error_regex'] = 'Endereço IP é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Informação do host está em branco.';
+$wb['data_error_regex'] = 'Informação do host possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_import.lng b/interface/web/dns/lib/lang/br_dns_import.lng
index e26b20a3f32db09759236488cc568bdab5cd5a2e..ffcef7d743b9c2e7daf443dd9ab5d30ca4f49784 100644
--- a/interface/web/dns/lib/lang/br_dns_import.lng
+++ b/interface/web/dns/lib/lang/br_dns_import.lng
@@ -1,16 +1,16 @@
 <?php
+$wb['zone_file_import_txt'] = 'Importar arquivo de zona';
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_txt'] = 'Cliente';
-$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_save_txt'] = 'Importar arquivo de zona';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['domain_txt'] = 'Domínio';
-$wb['zone_file_successfully_imported_txt'] = 'O arquivo de zona foi importado com sucesso!';
-$wb['error_no_valid_zone_file_txt'] = 'Este arquivo não parece ser um arquivo de zona válido!';
-$wb['zonefile_to_import_txt'] = 'Arquivo de zona';
-$wb['domain_field_desc_txt'] = 'Pode ficar em branco caso o domínio é o mesmo nome do arquivo ou faz parte do conteúdo do mesmo.';
-$wb['title'] = 'Importar arquivos de zonas';
-$wb['no_file_uploaded_error'] = 'Nenhum arquivo de zona importado.';
-$wb['zone_file_import_txt'] = 'Importar arquivo de zona';
-$wb['error_no_server_id'] = 'Nenhum servidor informado.';
-$wb['error_not_allowed_server_id'] = 'O servidor selecionado não tem permissão para esta conta.';
+$wb['zone_file_successfully_imported_txt'] = 'O arquivo de zona dns foi importado com sucesso!';
+$wb['error_no_valid_zone_file_txt'] = 'Aparentemente este não é um arquivo de zona dns válido!';
+$wb['zonefile_to_import_txt'] = 'Arquivo de Zona';
+$wb['domain_field_desc_txt'] = 'Pode ficar em branco caso o domínio seja o mesmo nome do arquivo ou faz parte do conteúdo do mesmo.';
+$wb['title'] = 'Importar arquivo de zona';
+$wb['no_file_uploaded_error'] = 'Nenhum arquivo de zona dns foi carregado.';
+$wb['error_no_server_id'] = 'Nenhum servidor foi informado.';
+$wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido nesta conta.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_loc.lng b/interface/web/dns/lib/lang/br_dns_loc.lng
index 838fdcf12b7c1582e56e1f4d240b3b4a8d74ecb7..f84c2af034680dfa53d7cbad289c9b9f94d373e1 100644
--- a/interface/web/dns/lib/lang/br_dns_loc.lng
+++ b/interface/web/dns/lib/lang/br_dns_loc.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Dados';
+$wb['data_txt'] = 'Texto';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Upload (pastebin) para MUC';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Dados está em branco.';
-$wb['data_error_regex'] = 'Dados é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Texto está em branco.';
+$wb['data_error_regex'] = 'Texto possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_mx.lng b/interface/web/dns/lib/lang/br_dns_mx.lng
index 30116f16b238fba0686c67dd2b036ec63b03839a..45b721c1a81e1ee076ef864e9180593dfccab5f5 100644
--- a/interface/web/dns/lib/lang/br_dns_mx.lng
+++ b/interface/web/dns/lib/lang/br_dns_mx.lng
@@ -1,18 +1,18 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Nome do servidor de e-mails';
+$wb['data_txt'] = 'Nome do servidor de e-mail';
 $wb['aux_txt'] = 'Prioridade';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Nome do servidor de e-mails está em branco.';
-$wb['data_error_regex'] = 'Nome do servidor de e-mails é inválido.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O nome do servidor de e-mails está em branco.';
+$wb['data_error_regex'] = 'O nome do servidor de e-mails possui formato inválido.';
 $wb['duplicate_mx_record_txt'] = 'Registro MX duplicado.';
-$wb['ttl_range_error'] = 'O ttl minímo são 60 segundos.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_ns.lng b/interface/web/dns/lib/lang/br_dns_ns.lng
index 5b3b03a809852c3e02d03ed1eccf8fc807a44a03..d83d0f7b8a03b27235c39d23ff515179978308db 100644
--- a/interface/web/dns/lib/lang/br_dns_ns.lng
+++ b/interface/web/dns/lib/lang/br_dns_ns.lng
@@ -3,14 +3,14 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Zona';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Servidor de nomes';
+$wb['data_txt'] = 'Nome do servidor';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Zona está em branco.';
-$wb['name_error_regex'] = 'Zona inválida.';
-$wb['data_error_empty'] = 'Nome está em branco.';
-$wb['data_error_regex'] = 'Nome é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'A zona está em branco.';
+$wb['name_error_regex'] = 'A zona possui formato inválido.';
+$wb['data_error_empty'] = 'Nome do servidor está em branco.';
+$wb['data_error_regex'] = 'Nome do servidor possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_ptr.lng b/interface/web/dns/lib/lang/br_dns_ptr.lng
index cfb7eddd7fbc83a4e48e63f913228318568e94bf..b6214a62e86fb20acbd17ee63b6ea4c106e6c8ee 100644
--- a/interface/web/dns/lib/lang/br_dns_ptr.lng
+++ b/interface/web/dns/lib/lang/br_dns_ptr.lng
@@ -3,14 +3,14 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Nome';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Nome reverso';
+$wb['data_txt'] = 'Nome canônico para o nome do host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
 $wb['name_error_empty'] = 'O nome está em branco.';
-$wb['name_error_regex'] = 'O nome é inválido.';
-$wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['data_error_regex'] = 'Endereço IP é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['name_error_regex'] = 'O nome possui formato inválido.';
+$wb['data_error_empty'] = 'O nome canônico está em branco.';
+$wb['data_error_regex'] = 'O nome canônico possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_rp.lng b/interface/web/dns/lib/lang/br_dns_rp.lng
index d8f1cad2a5a8a782aaa7795f210c5d44051dd1e4..4f782fb4a025c76155dd304461e3229ed4f1b252 100644
--- a/interface/web/dns/lib/lang/br_dns_rp.lng
+++ b/interface/web/dns/lib/lang/br_dns_rp.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
-$wb['data_txt'] = 'Responsável';
+$wb['data_txt'] = 'Responsável técnico';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Responsável está em branco.';
-$wb['data_error_regex'] = 'Responsável é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Responsável técnico está em branco.';
+$wb['data_error_regex'] = 'Responsável técnico possui formato inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave.lng b/interface/web/dns/lib/lang/br_dns_slave.lng
index 336164442c98fdacca2e39a3d9a82e5c0688c4bc..a71e64c4f282db2a3c8f4f48fe590890e070669f 100644
--- a/interface/web/dns/lib/lang/br_dns_slave.lng
+++ b/interface/web/dns/lib/lang/br_dns_slave.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['origin_txt'] = 'Zona dns';
-$wb['ns_txt'] = 'NS';
+$wb['origin_txt'] = 'Zona DNS';
+$wb['secondary_zone_txt'] = 'Zona DNS secundária';
+$wb['ns_txt'] = 'NS (Endereço IP)';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_slave_zone_txt'] = 'O limite de zonas dns secundárias para esta conta foi alcançado.';
 $wb['client_txt'] = 'Cliente';
-$wb['xfer_txt'] = 'Permitir transferência da zona para estes IPs (IPs separados por vírgulas)';
+$wb['xfer_txt'] = 'Permitir transferência de zonas para <br />Endereço(s) IP(s) (lista de endereços, separados por vírgula)';
 $wb['server_id_error_empty'] = 'Nenhum servidor selecionado.';
 $wb['origin_error_empty'] = 'Zona está em branco.';
-$wb['origin_error_unique'] = 'Já existe um registro igual para esta zona.';
-$wb['origin_error_regex'] = 'Zona inválida.';
-$wb['ns_error_regex'] = 'Registro NS é inválido.';
+$wb['origin_error_unique'] = 'Já existe este registro dns nesta zona.';
+$wb['origin_error_regex'] = 'Zona possui um formato inválido.';
+$wb['ns_error_regex'] = 'O NS possui formato inválido.';
 $wb['eg_domain_tld'] = 'ex.: dominio.com.br.';
-$wb['ipv4_form_txt'] = 'Separar múltiplos endereços IP por vírgulas';
-$wb['secondary_zone_txt'] = 'Zona dns secundária';
+$wb['ipv4_form_txt'] = 'Separar múltiplos IPs com vírgulas.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
index b691471041aa41cbffabf93e298f8da3b68b03b5..9b4c7e07ef08c670b157d97a7dee06afebc937dd 100644
--- a/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Zonas dns secundárias';
+$wb['list_head_txt'] = 'Zonas DNS Secundárias';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
-$wb['add_new_record_txt'] = 'Adicionar nova zona';
+$wb['add_new_record_txt'] = 'Adicionar nova zona dns secundária';
 $wb['eg_domain_tld'] = 'ex.: dominio.com.br.';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave_list.lng b/interface/web/dns/lib/lang/br_dns_slave_list.lng
index 5ff54311a823192dab153b52c3bd433be6a0c13d..adf14dfdc7f472792f8d19a9d53f96a67b76697f 100644
--- a/interface/web/dns/lib/lang/br_dns_slave_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_slave_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Zonas dns secundárias';
+$wb['list_head_txt'] = 'Zonas secundárias';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
-$wb['add_new_record_txt'] = 'Adicionar nova zona';
+$wb['add_new_record_txt'] = 'Adicionar nova zona dns secundária';
 $wb['eg_domain_tld'] = 'ex.: dominio.com.br.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa.lng b/interface/web/dns/lib/lang/br_dns_soa.lng
index fcad62b44da7ff3311cbe3ed629388d5efaea822..f5385c4706b98e51611e803341ac3ea1a4f35ac4 100644
--- a/interface/web/dns/lib/lang/br_dns_soa.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa.lng
@@ -2,43 +2,43 @@
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona (SOA)';
 $wb['ns_txt'] = 'NS';
-$wb['mbox_txt'] = 'e-mail';
+$wb['mbox_txt'] = 'e-Mail';
 $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Atualizar';
 $wb['retry_txt'] = 'Repetir';
 $wb['expire_txt'] = 'Expirar';
-$wb['minimum_txt'] = 'Minímo';
+$wb['minimum_txt'] = 'Mínimo';
 $wb['ttl_txt'] = 'TTL';
-$wb['xfer_txt'] = 'Permitir transferências de zona para estes IPs (IPs separados por vírgula).';
+$wb['xfer_txt'] = 'Permitir transferências de zonas para <br />Endereço(s) IP(s) (lista de endereços, separados por vírgula)';
 $wb['active_txt'] = 'Ativo';
+$wb['dnssec_info_txt'] = 'O campo DS DNSSEC para o registro';
+$wb['dnssec_wanted_txt'] = 'Zona assinada (DNSSEC)';
+$wb['dnssec_wanted_info'] = 'Ao desativar o DNSSEC as chaves não serão excluídas se o DNSSEC tiver sido ativado anteriormente e as chaves já tiverem sido geradas, mas a zona não será mais entregue no formato assinado posteriormente. Se você usa o PowerDNS, as chaves serão excluídas!';
 $wb['limit_dns_zone_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
 $wb['client_txt'] = 'Cliente';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['server_id_error_empty'] = 'Servidor não selecionado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['server_id_error_empty'] = 'Nenhum servidor selecionado';
 $wb['origin_error_empty'] = 'Zona está em branco.';
-$wb['origin_error_unique'] = 'Este registro já existe nesta zona.';
-$wb['origin_error_regex'] = 'Zona inválida.';
-$wb['ns_error_regex'] = 'NS é inválido.';
-$wb['mbox_error_empty'] = 'Endereço de e-mail está em branco.';
-$wb['mbox_error_regex'] = 'Endereço de e-mail é inválido.';
+$wb['origin_error_unique'] = 'Já existe este registro dns nesta zona.';
+$wb['origin_error_regex'] = 'A zona dns possui formato inválido.';
+$wb['ns_error_regex'] = 'O registro NS possui formato inválido.';
+$wb['mbox_error_empty'] = 'O e-mail está em branco.';
+$wb['mbox_error_regex'] = 'O e-mail possui formato inválido.';
 $wb['also_notify_txt'] = 'Também notificar';
-$wb['also_notify_error_regex'] = 'Por favor, insira um endereço IP.';
+$wb['also_notify_error_regex'] = 'Também notificar: Por favor, use um endereço IP.';
+$wb['xfer_error_regex'] = 'Xfer: Por favor use um ou mais endereço(s) IP, separado por vírgula ou use a palavra reservada: any';
 $wb['update_acl_txt'] = 'Atualizar ACL';
 $wb['seconds_txt'] = 'Segundos';
 $wb['eg_domain_tld'] = 'ex.: dominio.com.br';
 $wb['eg_ns1_domain_tld'] = 'ex.: ns1.dominio.com.br';
-$wb['eg_webmaster_domain_tld'] = 'ex.: postmaster@dominio.com.br';
-$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'O domínio não pode ser modificado. Por favor, entre em contato com o administrador do sistema se você deseja modificar este domínio.';
-$wb['refresh_range_error'] = 'Tempo mínimo de atualizações (refresh) são 60 segundos.';
-$wb['retry_range_error'] = 'Tempo mínimo de repetições (retry) são 60 segundos.';
-$wb['expire_range_error'] = 'Tempo mínimo para expirar (expire) são 60 segundos.';
-$wb['minimum_range_error'] = 'Tempo mínimo (minimum) são 60 segundos.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
-$wb['xfer_error_regex'] = 'Também notificar: Por favor, insira um endereço IP.';
-$wb['dnssec_info_txt'] = 'Registro para DNSSEC (DS-Data)';
-$wb['dnssec_wanted_txt'] = 'Zona assinada (DNSSEC)';
-$wb['dnssec_wanted_info'] = 'Quando desabilitar o DNSSEC as chaves não são eliminadas mas a zona não será disponibilizada assinada. Se você usar o PowerDNS, as chaves serão excluídas!';
-$wb['error_not_allowed_server_id'] = 'O servidor selecionado não tem permissão para esta conta.';
-$wb['soa_cannot_be_changed_txt'] = 'A zona SOA não pode ser modificada. Entre em contato com o administrador para alterar esta zona.';
+$wb['eg_webmaster_domain_tld'] = 'ex.: hostmaster@dominio.com.br';
+$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'O domínio não pode ser alterado. Por favor contate o administrador se deseja alterar o domínio.';
+$wb['refresh_range_error'] = 'Intervalo mínimo entre as atualizações são 60 segundos.';
+$wb['retry_range_error'] = 'Intervalo mínimo entre as repetições são 60 segundos.';
+$wb['expire_range_error'] = 'Intervalo mínimo para expirar são 60 segundos.';
+$wb['minimum_range_error'] = 'Intervalo mínimo são 60 segundos.';
+$wb['ttl_range_error'] = 'Intervalo mínimo do TTL são 60 segundos.';
+$wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido para esta conta.';
+$wb['soa_cannot_be_changed_txt'] = 'A zona (SOA) não pode ser alterada. Por favor, contate o administrador se deseja alterar esta zona.';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
index dd3169a8307cc73fccc755cee3b46d8c926f29f7..26e8062d530859904438dca6cc1b3b51515760cd 100644
--- a/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
@@ -1,11 +1,12 @@
 <?php
-$wb['list_head_txt'] = 'Zonas dns';
+$wb['list_head_txt'] = 'Zonas DNS';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
-$wb['mbox_txt'] = 'e-mail';
-$wb['add_new_record_wizard_txt'] = 'Adicionar nova zona dns através do assistente';
-$wb['add_new_record_txt'] = 'Adicionar nova zona dns manualmente';
+$wb['mbox_txt'] = 'e-Mail';
+$wb['add_new_record_wizard_txt'] = 'Adicionar zona dns através do assistente';
+$wb['add_new_record_txt'] = 'Adicionar zona dns manualmente';
+$wb['zone_file_import_txt'] = 'Importar arquivo de zona';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa_list.lng b/interface/web/dns/lib/lang/br_dns_soa_list.lng
index ddb24697e3d641a046f5544673fc24c77749d81f..969df1d2a92b1a9f3bfbaecbf7d06c4f6ab6aed5 100644
--- a/interface/web/dns/lib/lang/br_dns_soa_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa_list.lng
@@ -1,11 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Zonas dns';
+$wb['list_head_txt'] = 'Zonas DNS';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
-$wb['mbox_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar nova zona dns';
+$wb['mbox_txt'] = 'e-Mail';
 $wb['add_new_record_wizard_txt'] = 'Adicionar nova zona dns através do assistente';
-$wb['import_zone_file_txt'] = 'Importar arquivo de zona';
+$wb['add_new_record_txt'] = 'Adicionar nova zona dns manualmente';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_spf.lng b/interface/web/dns/lib/lang/br_dns_spf.lng
index 0c56cd32ed8a03e7472d75895bbc0007a31500de..739e59cf41787cc4d0dec825d9fe8afb79540cf4 100644
--- a/interface/web/dns/lib/lang/br_dns_spf.lng
+++ b/interface/web/dns/lib/lang/br_dns_spf.lng
@@ -1,25 +1,25 @@
 <?php
 $wb['data_txt'] = 'Registro SPF';
 $wb['spf_mechanism_txt'] = 'Mecanismo SPF';
-$wb['spf_mechanism_pass_txt'] = 'Pass - permite e-mail de outros remetentes';
-$wb['spf_mechanism_fail_txt'] = 'Fail - rejeita e-mails de outros remetentes';
+$wb['spf_mechanism_pass_txt'] = 'Pass - permitir e-mails de outros remetentes';
+$wb['spf_mechanism_fail_txt'] = 'Fail - rejeitar e-mails de outros remetentes';
 $wb['spf_mechanism_softfail_txt'] = 'SoftFail - permite e-mails de outros remetentes mas marca os mesmos';
 $wb['spf_mechanism_neutral_txt'] = 'Neutral - não faz nada';
 $wb['spf_mx_txt'] = 'Permite servidores listados como MX enviar e-mail deste domínio';
 $wb['spf_a_txt'] = 'Permite o endereço IP atual do domínio enviar e-mails deste domínio';
 $wb['spf_ip_txt'] = 'Endereço IP adicional no formato CIDR pode entregar ou retransmitir e-mails para este domínio';
-$wb['spf_ip_note_txt'] = '(endereços IPs separados por espaços em branco)';
-$wb['spf_invalid_ip_txt'] = 'Endereço IP é inválido.';
+$wb['spf_ip_note_txt'] = '(endereços IPs separados por espaços)';
+$wb['spf_invalid_ip_txt'] = 'Endereço IP inválido.';
 $wb['spf_hostname_txt'] = 'Qualquer outro servidor pode entregar ou retransmitir e-mails para este domínio';
-$wb['spf_hostname_note_txt'] = '(servidors separados por espaço em branco)';
-$wb['spf_invalid_hostname_txt'] = 'Hospedeiro inválido';
+$wb['spf_hostname_note_txt'] = '(servidores separados por espaço)';
+$wb['spf_invalid_hostname_txt'] = 'O nome do host é inválido.';
 $wb['spf_domain_txt'] = 'Qualquer domínio pode entregar ou retransmitir e-mails para este domínio';
-$wb['spf_domain_note_txt'] = '(domínios separados por espaço em branco)';
-$wb['spf_invalid_domain_txt'] = 'Domínio é inválido.';
+$wb['spf_domain_note_txt'] = '(domínios separados por espaço)';
+$wb['spf_invalid_domain_txt'] = 'O domínio é inválido.';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['record_exists_txt'] = 'Registro DS já existe.';
+$wb['record_exists_txt'] = 'Registro dns já existe.';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_srv.lng b/interface/web/dns/lib/lang/br_dns_srv.lng
index fefec736eeb527b369066a3ce853ecc5e5680168..97d26048960fad7a18e7fc28f273d444ccc86c49 100644
--- a/interface/web/dns/lib/lang/br_dns_srv.lng
+++ b/interface/web/dns/lib/lang/br_dns_srv.lng
@@ -1,20 +1,20 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['target_txt'] = 'Alvo';
 $wb['weight_txt'] = 'Peso';
 $wb['port_txt'] = 'Porta';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Servidor está em branco.';
-$wb['data_error_regex'] = 'Servidor é inválido.';
-$wb['srv_error_regex'] = 'Registro do servidor é inválido. São necessários 3 textos separados por espaços.';
 $wb['aux_txt'] = 'Prioridade';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'Registro SVR está em branco.';
+$wb['data_error_regex'] = 'Registro SVR possui formato inválido.';
+$wb['srv_error_regex'] = 'O formato do registro SVR é inválido. O registro SVR deve conter 3 cadeias de texto separados por espaços.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_template.lng b/interface/web/dns/lib/lang/br_dns_template.lng
index 9d7331b79551cb30afbda2c99e1ae9bc49dec0b7..81a8f190edee515f752d87a1307b99a7ee6e0633 100644
--- a/interface/web/dns/lib/lang/br_dns_template.lng
+++ b/interface/web/dns/lib/lang/br_dns_template.lng
@@ -1,6 +1,7 @@
 <?php
 $wb['name_txt'] = 'Nome';
-$wb['fields_txt'] = 'Campos';
+$wb['fields_txt'] = 'O campos';
 $wb['template_txt'] = 'Gabarito';
 $wb['visible_txt'] = 'Visível';
+$wb['placeholder_txt'] = 'Área Reservada';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_template_list.lng b/interface/web/dns/lib/lang/br_dns_template_list.lng
index f6455314d6266bbeb0c78e1e1cf19fe9c6a6e9ff..8ec480d727f18fe2a1f0e584376080d0123f054b 100644
--- a/interface/web/dns/lib/lang/br_dns_template_list.lng
+++ b/interface/web/dns/lib/lang/br_dns_template_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Assistente de gabaritos dns';
+$wb['list_head_txt'] = 'Gabarito do Assistente DNS';
 $wb['visible_txt'] = 'Visível';
 $wb['name_txt'] = 'Nome';
-$wb['add_new_record_txt'] = 'Adicionar novo gabarito';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_tlsa.lng b/interface/web/dns/lib/lang/br_dns_tlsa.lng
index c78c6fd1904e9192bebecc0ccfa8e326698d71b7..4037ebe595902514de0652fc7f2100c0a58eb2f8 100644
--- a/interface/web/dns/lib/lang/br_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/br_dns_tlsa.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Descritor de serviço';
+$wb['name_txt'] = 'Descritor do serviço';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Dados TLSA';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Descritor de serviço está em branco.';
-$wb['name_error_regex'] = 'Descritor de serviço é inválido. Formato correto: \"_&lt;port&gt;._(tcp|udp).&lt;hostname&gt;\".';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados). Correto: _&lt;port&gt;._(tcp|udp).&lt;hostname&gt;';
 $wb['data_error_empty'] = 'Dados TLSA está em branco.';
-$wb['data_error_regex'] = 'Dados TLSA são inválidos. Formato correto: \"n n n HASH\".';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
+$wb['data_error_regex'] = 'Formato dos dados TLSA inválido. Correto: n n n HASH';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_txt.lng b/interface/web/dns/lib/lang/br_dns_txt.lng
index 356bbfa5f24a7be15ad2e01890b6250f5bd8780c..641cb9f2e199290a32bbb9ab1bfda2c905e25940 100644
--- a/interface/web/dns/lib/lang/br_dns_txt.lng
+++ b/interface/web/dns/lib/lang/br_dns_txt.lng
@@ -1,19 +1,19 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['zone_txt'] = 'Zona';
-$wb['name_txt'] = 'Nome';
+$wb['name_txt'] = 'Nome do host';
 $wb['type_txt'] = 'Tipo';
 $wb['data_txt'] = 'Texto';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_dns_record_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
-$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros a esta zona dns.';
-$wb['name_error_empty'] = 'Nome está em branco.';
-$wb['name_error_regex'] = 'Nome é inválido.';
-$wb['data_error_empty'] = 'Endereço IP está em branco.';
-$wb['data_error_regex'] = 'Endereço IP é inválido.';
-$wb['ttl_range_error'] = 'O ttl mínimo são 60 segundos.';
-$wb['invalid_type_dkim'] = 'DKIM não permitido. Use o botão DKIM.';
-$wb['invalid_type_dmarc'] = 'DMARC não permitido. Use o botão DMARC.';
-$wb['invalid_type_spf'] = 'SPF não permitido. Use o botão SPF.';
+$wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
+$wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
+$wb['name_error_empty'] = 'O nome do host está em branco.';
+$wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
+$wb['data_error_empty'] = 'O texto está em branco.';
+$wb['data_error_regex'] = 'O texto é inválido.';
+$wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+$wb['invalid_type_dkim'] = 'Sem permissão para DKIM. Use o botão DKIM.';
+$wb['invalid_type_dmarc'] = 'Sem permissão para DMARC. Use o botão DMARC.';
+$wb['invalid_type_spf'] = 'Sem permissão para SPF. Use o botão SPF.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_wizard.lng b/interface/web/dns/lib/lang/br_dns_wizard.lng
index 5e20f0559304983e2c7fbaf9352bf8351faf8f8d..d132d4646b341a958d7f2d1c5bdf2d96452a4bcf 100644
--- a/interface/web/dns/lib/lang/br_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/br_dns_wizard.lng
@@ -1,45 +1,45 @@
 <?php
+$wb['list_head_txt'] = 'Assistente de zona dns';
+$wb['list_desc_txt'] = 'Adicionar zona dns através do assistente';
+$wb['dns_zone_txt'] = 'Zona DNS';
 $wb['template_id_txt'] = 'Gabarito';
 $wb['server_id_txt'] = 'Servidor';
 $wb['client_txt'] = 'Cliente';
-$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_save_txt'] = 'Adicionar zona dns';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['domain_txt'] = 'Domínio';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
+$wb['dkim_txt'] = 'DKIM';
+$wb['dnssec_txt'] = 'Assinar zona (DNSSEC)';
 $wb['ns1_txt'] = 'NS 1';
 $wb['ns2_txt'] = 'NS 2';
 $wb['ip_txt'] = 'Endereço IP';
 $wb['ipv6_txt'] = 'Endereço IPv6';
-$wb['error_origin_empty'] = 'Origem está em branco.';
+$wb['error_origin_empty'] = 'Origin está em branco.';
 $wb['error_ns_empty'] = 'NS está em branco.';
-$wb['error_mbox_empty'] = 'Endereço de e-mail está em branco.';
-$wb['error_refresh_empty'] = 'Atualizar está em branco.';
-$wb['error_retry_empty'] = 'Atualizar está em branco.';
-$wb['error_expire_empty'] = 'Expirar está em branco.';
-$wb['error_minimum_empty'] = 'Minímo está em branco.';
-$wb['error_ttl_empty'] = 'TTL está em branco.';
+$wb['error_mbox_empty'] = 'conta de e-mail (mbox) está em branco.';
+$wb['error_refresh_empty'] = 'Atualizar (refresh) está em branco.';
+$wb['error_retry_empty'] = 'Repetir (retry) está em branco.';
+$wb['error_expire_empty'] = 'Expirar (expire) está em branco.';
+$wb['error_minimum_empty'] = 'Mínimo (minimum) está em branco.';
+$wb['error_ttl_empty'] = 'Tempo (TTL) está em branco.';
 $wb['error_domain_empty'] = 'Domínio está em branco.';
-$wb['error_ip_empty'] = 'IP está em branco.';
-$wb['error_ipv6_empty'] = 'IPv6 está em branco.';
+$wb['error_ip_empty'] = 'Endereço IP está em branco.';
+$wb['error_ipv6_empty'] = 'Endereço IPv6 está em branco.';
 $wb['error_ns1_empty'] = 'NS1 está em branco.';
 $wb['error_ns2_empty'] = 'NS2 está em branco.';
 $wb['error_email_empty'] = 'Endereço de e-mail está em branco.';
-$wb['error_domain_regex'] = 'Domínio contém caracteres inválidos.';
-$wb['error_ns1_regex'] = 'NS1 contém caracteres inválidos.';
-$wb['error_ns2_regex'] = 'NS2 contém caracteres inválidos.';
-$wb['error_email_regex'] = 'Endereço de e-mail é inválido.';
-$wb['dns_zone_txt'] = 'Zona dns';
+$wb['error_domain_regex'] = 'O domínio possui caracteres inválidos.';
+$wb['error_ns1_regex'] = 'NS1 possui caracteres inválidos.';
+$wb['error_ns2_regex'] = 'NS2 possui caracteres inválidos.';
+$wb['error_email_regex'] = 'O endereço de e-mail não possui um endereço válido.';
 $wb['globalsearch_resultslimit_of_txt'] = 'de';
 $wb['globalsearch_resultslimit_results_txt'] = 'resultados';
-$wb['globalsearch_noresults_text_txt'] = 'Sem resultados';
-$wb['globalsearch_noresults_limit_txt'] = '0 resultados';
+$wb['globalsearch_noresults_text_txt'] = 'Sem resultados.';
+$wb['globalsearch_noresults_limit_txt'] = '0 resultado(s)';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Pesquisar';
 $wb['globalsearch_suggestions_text_txt'] = 'Sugestões';
-$wb['list_head_txt'] = 'Assistente de zona dns';
-$wb['list_desc_txt'] = 'Adicionar zona dns através do assistente';
-$wb['dkim_txt'] = 'DKIM ativo';
 $wb['error_no_server_id'] = 'Nenhum servidor selecionado.';
 $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido para esta conta.';
-$wb['dnssec_txt'] = 'Zona assinada (DNSSEC)';
 $wb['limit_dns_zone_txt'] = 'O limite de zonas dns para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_caa.lng b/interface/web/dns/lib/lang/ca_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..973a97ceb6870404d7c8107002e1738b373362a0
--- /dev/null
+++ b/interface/web/dns/lib/lang/ca_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnamen';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ca_dns_template.lng b/interface/web/dns/lib/lang/ca_dns_template.lng
index 1202cfd76840adc991a7ebd7148c396b30395c3a..ff1b0a8e74d2f8f054733d3783c6d63c27ebdf25 100644
--- a/interface/web/dns/lib/lang/ca_dns_template.lng
+++ b/interface/web/dns/lib/lang/ca_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Nom';
 $wb['fields_txt'] = 'Champs';
 $wb['template_txt'] = 'Modèle';
 $wb['visible_txt'] = 'Visible';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_caa.lng b/interface/web/dns/lib/lang/cz_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f4ba690c5a210bf522ad9bad83af731448272fa1
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifikační autorita';
+$wb['ca_domain_txt'] = 'Doména';
+$wb['ca_hostname_txt'] = 'Omezit na názvy hostitelů';
+$wb['ca_hostname_note_txt'] = '(Oddělený seznam s čárkami - prázdný pro všechna jména hostitelů)';
+$wb['ca_options_txt'] = 'Další možnosti názvu hostitele';
+$wb['ca_options_note_txt'] = 'requested by the CA (Oddělený seznam s čárkami)';
+$wb['ca_wildcard_txt'] = 'Použití Wildcard (*) SSL';
+$wb['ca_critical_txt'] = 'Přísná kontrola';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktivní';
+$wb['select_txt'] = 'Vyberte certifikační autoritu';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['ca_error_txt'] = 'Nebyla vybrána žádná certifikační autorita';
+$wb['caa_exists_error'] = 'CAA záznam již existuje';
+$wb['ca_option_error'] = 'Neplatný formát pro další možnosti; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL čas je 60 sekund.';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_dmarc.lng b/interface/web/dns/lib/lang/cz_dns_dmarc.lng
index c5952552a62dec226fdb07d0ebbf321dd2c04703..c4c3bb4f241f768ec4f75ed0054542832cffa39a 100644
--- a/interface/web/dns/lib/lang/cz_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/cz_dns_dmarc.lng
@@ -44,7 +44,7 @@ $wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
 $wb['dmarc_invalid_email_txt'] = 'Neplatný e-mail';
 $wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
 $wb['record_exists_txt'] = 'DNS záznam již existuje';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_ds.lng b/interface/web/dns/lib/lang/cz_dns_ds.lng
index 3d25095d3be2ffcb604e0f1b5c1ff940bf631104..f7dd779ef817a2d3d5a4dae72446ae7b0e9f880c 100644
--- a/interface/web/dns/lib/lang/cz_dns_ds.lng
+++ b/interface/web/dns/lib/lang/cz_dns_ds.lng
@@ -6,8 +6,8 @@ $wb['type_txt'] = 'Typ';
 $wb['data_txt'] = 'Data';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'Text empty';
diff --git a/interface/web/dns/lib/lang/cz_dns_import.lng b/interface/web/dns/lib/lang/cz_dns_import.lng
index 3b41baa1be8493dca50745ea9754fe4c93262b1f..fc90d3cf3ca7a085406b899d6d6199e719b996bf 100644
--- a/interface/web/dns/lib/lang/cz_dns_import.lng
+++ b/interface/web/dns/lib/lang/cz_dns_import.lng
@@ -12,5 +12,5 @@ $wb['title'] = 'Importovat soubory zón';
 $wb['no_file_uploaded_error'] = 'Nelze odeslat DNS zonový soubor';
 $wb['zone_file_import_txt'] = 'Importovat DNS zonový soubor';
 $wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_loc.lng b/interface/web/dns/lib/lang/cz_dns_loc.lng
index 90ddd3533bb1294d5c844f9cebacb293710c9c74..4ed9018152ceeb842f33116f29034f9fc75f22f4 100644
--- a/interface/web/dns/lib/lang/cz_dns_loc.lng
+++ b/interface/web/dns/lib/lang/cz_dns_loc.lng
@@ -6,8 +6,8 @@ $wb['type_txt'] = 'Typ';
 $wb['data_txt'] = 'Data';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'Text empty';
diff --git a/interface/web/dns/lib/lang/cz_dns_soa.lng b/interface/web/dns/lib/lang/cz_dns_soa.lng
index 7dfbb0e91b1afa9ac428eb044e9dd4e05dcf8fec..5e4a0c2bb3b9a21ca19897551f5e643dd1d9d664 100644
--- a/interface/web/dns/lib/lang/cz_dns_soa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_soa.lng
@@ -38,7 +38,7 @@ $wb['xfer_error_regex'] = 'Také oznámí: Prosím, použijte IP adresu.';
 $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry';
 $wb['dnssec_wanted_txt'] = 'Podepsat zónu (DNSSEC)';
 $wb['dnssec_wanted_info'] = 'Když deaktivujete DNSSEC klíče nebudou odstraněny, ale DNS záznamy (zóna) již nebudou propagovány v podepsaném formátu. Pokud používáte PowerDNS, budou klíče WILL vymazány!';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
 $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.';
 $wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_spf.lng b/interface/web/dns/lib/lang/cz_dns_spf.lng
index 755e01f11ebd086181051f9b3e41cc4a071c83a0..3086454c34e87cff4a5c722ab48b0c7963632c14 100644
--- a/interface/web/dns/lib/lang/cz_dns_spf.lng
+++ b/interface/web/dns/lib/lang/cz_dns_spf.lng
@@ -19,7 +19,7 @@ $wb['spf_invalid_domain_txt'] = 'Neplatné doménové jméno';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
 $wb['record_exists_txt'] = 'DNS záznam již existuje';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_template.lng b/interface/web/dns/lib/lang/cz_dns_template.lng
index be4ac0e9491d74bd68c6a744791e4efa4bb47c04..5927faef5378ee48f8212310fcc6a69070c94eb7 100644
--- a/interface/web/dns/lib/lang/cz_dns_template.lng
+++ b/interface/web/dns/lib/lang/cz_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Název';
 $wb['fields_txt'] = 'Pole';
 $wb['template_txt'] = 'Å ablona';
 $wb['visible_txt'] = 'Viditelný';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_tlsa.lng b/interface/web/dns/lib/lang/cz_dns_tlsa.lng
index b92da1d45b9a76b5dab24eaa815c664a59129a37..3891ad37c7a8cb1965453a6eab585eedd9734327 100644
--- a/interface/web/dns/lib/lang/cz_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_tlsa.lng
@@ -6,8 +6,8 @@ $wb['type_txt'] = 'Typ';
 $wb['data_txt'] = 'TLSA-Data';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
+$wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'The hostname has the wrong format. Correct: _&lt;port&gt;._(tcp|udp).&lt;hostname&gt;';
 $wb['data_error_empty'] = 'TLSA-Data empty';
diff --git a/interface/web/dns/lib/lang/cz_dns_wizard.lng b/interface/web/dns/lib/lang/cz_dns_wizard.lng
index 548b90d702ceb461a0819e37551f8763b0892169..a4a1ddf53946f4e90396df441afba9e08a0cacbf 100644
--- a/interface/web/dns/lib/lang/cz_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/cz_dns_wizard.lng
@@ -39,7 +39,7 @@ $wb['list_head_txt'] = 'Průvodce vytvořením DNS zóny';
 $wb['list_desc_txt'] = 'Vytvoření DNS zóny pomocí průvodce';
 $wb['dkim_txt'] = 'DKIM povolen';
 $wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
 $wb['dnssec_txt'] = 'Podepsat zónu (DNSSEC)';
 $wb['limit_dns_zone_txt'] = 'The max. number of DNS zones for your account is reached.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_caa.lng b/interface/web/dns/lib/lang/de_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..a7110236841a59c70a22f0600f2e614b9257cf9f
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Zertifizierungsstelle';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'zusätzliche Hostnamen';
+$wb['ca_hostname_note_txt'] = '(mit Komma getrennte Liste - leer für alle Namen)';
+$wb['ca_options_txt'] = 'zusätzliche Angaben';
+$wb['ca_options_note_txt'] = 'von der Zertifizierungsstelle vorgegeben (mit Komma getrennte Liste)';
+$wb['ca_wildcard_txt'] = 'Wildcard verwenden';
+$wb['ca_critical_txt'] = 'Strikte Überprüfung durch die Zertifizierungsstelle';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Aktiv';
+$wb['select_txt'] = 'Zertifizierungstelle auswählen';
+$wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
+$wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
+$wb['ca_error_txt'] = 'Keine Zertifizierungsstelle gewählt';
+$wb['caa_exists_error'] = 'Eintrag bereits vorhanden';
+$wb['ca_option_error'] = 'Ungültiges Format für zusätzliche Angaben. OPTION=WERT';
+$wb['ttl_range_error'] = 'Min. TTL ist 60 Sekunden.';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_template.lng b/interface/web/dns/lib/lang/de_dns_template.lng
index 33d1090cbaa7f556a9caf3f8e8225c9c6807a80c..f35b22fd09e472903e32276fdee6373cf635b013 100644
--- a/interface/web/dns/lib/lang/de_dns_template.lng
+++ b/interface/web/dns/lib/lang/de_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Name';
 $wb['fields_txt'] = 'Felder';
 $wb['template_txt'] = 'Vorlage';
 $wb['visible_txt'] = 'Sichtbar';
+$wb['placeholder_txt'] = 'Platzhalter';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_caa.lng b/interface/web/dns/lib/lang/dk_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..973a97ceb6870404d7c8107002e1738b373362a0
--- /dev/null
+++ b/interface/web/dns/lib/lang/dk_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnamen';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/dk_dns_template.lng b/interface/web/dns/lib/lang/dk_dns_template.lng
index c9e8e7b28b0fd804d796218b60fb86ac6f44c88a..e444295eda36a278722026df35fdccff7b7c2a87 100644
--- a/interface/web/dns/lib/lang/dk_dns_template.lng
+++ b/interface/web/dns/lib/lang/dk_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Navn';
 $wb['fields_txt'] = 'Felter';
 $wb['template_txt'] = 'Skabelon';
 $wb['visible_txt'] = 'Synlig';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_caa.lng b/interface/web/dns/lib/lang/el_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..973a97ceb6870404d7c8107002e1738b373362a0
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnamen';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_template.lng b/interface/web/dns/lib/lang/el_dns_template.lng
index 20e9bf81bcea73806408854cfdf5b1ab1d948bab..7d00994bb126fe6914334c03796b8df862fa178a 100644
--- a/interface/web/dns/lib/lang/el_dns_template.lng
+++ b/interface/web/dns/lib/lang/el_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Όνομα';
 $wb['fields_txt'] = 'Πεδία';
 $wb['template_txt'] = 'Πρότυπο';
 $wb['visible_txt'] = 'Ενεργό';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_caa.lng b/interface/web/dns/lib/lang/en_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check'; //For future use.  At this time, CAAs do not recognize any other flag values as described in RFC 6844
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_template.lng b/interface/web/dns/lib/lang/en_dns_template.lng
index 37643e11926ee198f77d9ab54f79468dcb72ec83..426ff2c42015ce4c9327c022be1931e13b234eaf 100644
--- a/interface/web/dns/lib/lang/en_dns_template.lng
+++ b/interface/web/dns/lib/lang/en_dns_template.lng
@@ -3,4 +3,5 @@ $wb["name_txt"] = 'Name';
 $wb["fields_txt"] = 'Fields';
 $wb["template_txt"] = 'Template';
 $wb["visible_txt"] = 'Visible';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/es_dns_caa.lng b/interface/web/dns/lib/lang/es_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_template.lng b/interface/web/dns/lib/lang/es_dns_template.lng
index b0fa12ba02aec8cf3dd2df043df9f34e0aa47acf..ffab71445f2b6b0a4b0cc74f3a736e2b36e1ced7 100755
--- a/interface/web/dns/lib/lang/es_dns_template.lng
+++ b/interface/web/dns/lib/lang/es_dns_template.lng
@@ -3,4 +3,5 @@ $wb['fields_txt'] = 'Campos';
 $wb['name_txt'] = 'Nombre';
 $wb['template_txt'] = 'Plantilla';
 $wb['visible_txt'] = 'Visible';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_caa.lng b/interface/web/dns/lib/lang/fi_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_template.lng b/interface/web/dns/lib/lang/fi_dns_template.lng
index b34a92d6a9e45fc952fadedf5defae9602e60b1f..57910455ec331eee4b781aacb7e2a342514a74e7 100755
--- a/interface/web/dns/lib/lang/fi_dns_template.lng
+++ b/interface/web/dns/lib/lang/fi_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Nimi';
 $wb['fields_txt'] = 'Kentät';
 $wb['template_txt'] = 'Malli';
 $wb['visible_txt'] = 'Näkyvissä';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_caa.lng b/interface/web/dns/lib/lang/fr_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_template.lng b/interface/web/dns/lib/lang/fr_dns_template.lng
index 1202cfd76840adc991a7ebd7148c396b30395c3a..ff1b0a8e74d2f8f054733d3783c6d63c27ebdf25 100644
--- a/interface/web/dns/lib/lang/fr_dns_template.lng
+++ b/interface/web/dns/lib/lang/fr_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Nom';
 $wb['fields_txt'] = 'Champs';
 $wb['template_txt'] = 'Modèle';
 $wb['visible_txt'] = 'Visible';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_caa.lng b/interface/web/dns/lib/lang/hr_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_template.lng b/interface/web/dns/lib/lang/hr_dns_template.lng
index 100c5c823920e2e272dec4134e88c81649d71560..b55a0138f3608fe1df10551349682d5b1b857ab4 100644
--- a/interface/web/dns/lib/lang/hr_dns_template.lng
+++ b/interface/web/dns/lib/lang/hr_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Naziv';
 $wb['fields_txt'] = 'Polja';
 $wb['template_txt'] = 'Predložak';
 $wb['visible_txt'] = 'Vidljivo';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_caa.lng b/interface/web/dns/lib/lang/hu_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_template.lng b/interface/web/dns/lib/lang/hu_dns_template.lng
index 22589ea24f40473a2c3c958e0a2156c253b7ff44..8bbf0fcf208cb1af5b27c2ead4878f5db3b00bbc 100644
--- a/interface/web/dns/lib/lang/hu_dns_template.lng
+++ b/interface/web/dns/lib/lang/hu_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Név';
 $wb['fields_txt'] = 'Mezők';
 $wb['template_txt'] = 'Template';
 $wb['visible_txt'] = 'Látható';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_caa.lng b/interface/web/dns/lib/lang/id_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_template.lng b/interface/web/dns/lib/lang/id_dns_template.lng
index b0451ce1bb7530a2b46083ae2d2875f55b8b4532..4337e82879c9103cfe3e7144a3cfc495865885ba 100644
--- a/interface/web/dns/lib/lang/id_dns_template.lng
+++ b/interface/web/dns/lib/lang/id_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Nama';
 $wb['fields_txt'] = 'Kolom';
 $wb['template_txt'] = 'Template';
 $wb['visible_txt'] = 'Terlihat';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_caa.lng b/interface/web/dns/lib/lang/it_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_template.lng b/interface/web/dns/lib/lang/it_dns_template.lng
index 290cf3e4b96765cae06d03ac9e116dfe9f2b8817..ee07983b288f7c321f2db10efeb68428e294715d 100644
--- a/interface/web/dns/lib/lang/it_dns_template.lng
+++ b/interface/web/dns/lib/lang/it_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Nome';
 $wb['fields_txt'] = 'Fields';
 $wb['template_txt'] = 'Template';
 $wb['visible_txt'] = 'Visible';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_caa.lng b/interface/web/dns/lib/lang/ja_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_template.lng b/interface/web/dns/lib/lang/ja_dns_template.lng
index 7c05ae1cc4fc62dac1fb6d48124a9690212854fb..e2c2e840599288841fd8b750adb9bf303d108a36 100644
--- a/interface/web/dns/lib/lang/ja_dns_template.lng
+++ b/interface/web/dns/lib/lang/ja_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = '名前';
 $wb['fields_txt'] = 'フィールド';
 $wb['template_txt'] = 'テンプレート';
 $wb['visible_txt'] = '公開する';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_caa.lng b/interface/web/dns/lib/lang/nl_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_template.lng b/interface/web/dns/lib/lang/nl_dns_template.lng
index ebf45549afc705ad5007ff984cdce3200b01f402..6bfa3a12ddf3841df6caad19cde9db913569a604 100644
--- a/interface/web/dns/lib/lang/nl_dns_template.lng
+++ b/interface/web/dns/lib/lang/nl_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Naam';
 $wb['fields_txt'] = 'Velden';
 $wb['template_txt'] = 'Template';
 $wb['visible_txt'] = 'Zichtbaar';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_caa.lng b/interface/web/dns/lib/lang/pl_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_template.lng b/interface/web/dns/lib/lang/pl_dns_template.lng
index f3e756357728ab5538d7c01600bc25c23439c1bc..042f11823ba39d77ee35b8e944ef8d77e0a081fd 100644
--- a/interface/web/dns/lib/lang/pl_dns_template.lng
+++ b/interface/web/dns/lib/lang/pl_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Nazwa';
 $wb['fields_txt'] = 'Pola';
 $wb['template_txt'] = 'Szablon';
 $wb['visible_txt'] = 'Widoczność';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_caa.lng b/interface/web/dns/lib/lang/pt_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_template.lng b/interface/web/dns/lib/lang/pt_dns_template.lng
index c3cc3a13d588189d54bba9666c003da54a8ad5a8..211e319076228cbbc81a12b912d453fed28d1e12 100644
--- a/interface/web/dns/lib/lang/pt_dns_template.lng
+++ b/interface/web/dns/lib/lang/pt_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Nome';
 $wb['fields_txt'] = 'Campos';
 $wb['template_txt'] = 'Template';
 $wb['visible_txt'] = 'Visível';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_caa.lng b/interface/web/dns/lib/lang/ro_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_template.lng b/interface/web/dns/lib/lang/ro_dns_template.lng
index f097bb3a0085359889aa24e5e5c23f996370e1d7..13db8c7a223592f666c98e8fff531eaad3809f0c 100644
--- a/interface/web/dns/lib/lang/ro_dns_template.lng
+++ b/interface/web/dns/lib/lang/ro_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Nume';
 $wb['fields_txt'] = 'Campuri';
 $wb['template_txt'] = 'Template';
 $wb['visible_txt'] = 'Vizibil';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_caa.lng b/interface/web/dns/lib/lang/ru_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_hinfo.lng b/interface/web/dns/lib/lang/ru_dns_hinfo.lng
index 830576fdf6843fe77fc75b601936323849603c79..363ed0eef5800611eae6b4eada8cf217e8ffb8a1 100644
--- a/interface/web/dns/lib/lang/ru_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/ru_dns_hinfo.lng
@@ -11,6 +11,6 @@ $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту за
 $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
 $wb['data_error_empty'] = 'Информация об узле отсутсвует';
-$wb['data_error_regex'] = 'Поле \"Информация о хосте\" имеет неправильный формат';
+$wb['data_error_regex'] = 'Поле \\"Информация о хосте\\" имеет неправильный формат';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_template.lng b/interface/web/dns/lib/lang/ru_dns_template.lng
index a187abdad31e886af9a755289c85ba6d1d9a14ac..e3cee369dbaa2b6804e63a349432bd1845c6cd19 100644
--- a/interface/web/dns/lib/lang/ru_dns_template.lng
+++ b/interface/web/dns/lib/lang/ru_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Имя';
 $wb['fields_txt'] = 'Поля';
 $wb['template_txt'] = 'Шаблон';
 $wb['visible_txt'] = 'Видимый';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_caa.lng b/interface/web/dns/lib/lang/se_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_template.lng b/interface/web/dns/lib/lang/se_dns_template.lng
index 516d5c2759e0e0a2796d4248fedd32859056b0d1..9a3e01c9f32977b23a4ab33ac685ddf81b722684 100644
--- a/interface/web/dns/lib/lang/se_dns_template.lng
+++ b/interface/web/dns/lib/lang/se_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Namn';
 $wb['fields_txt'] = 'Fält';
 $wb['template_txt'] = 'Mall';
 $wb['visible_txt'] = 'Synlig';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_caa.lng b/interface/web/dns/lib/lang/sk_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_template.lng b/interface/web/dns/lib/lang/sk_dns_template.lng
index dab503e9b4baf1e13b217adfd9356be362d38870..bcd50f15d22fcfd3611621f52c2409dcf972ccc4 100644
--- a/interface/web/dns/lib/lang/sk_dns_template.lng
+++ b/interface/web/dns/lib/lang/sk_dns_template.lng
@@ -3,4 +3,5 @@ $wb['name_txt'] = 'Meno';
 $wb['fields_txt'] = 'Polia';
 $wb['template_txt'] = 'Šablóna';
 $wb['visible_txt'] = 'Viditeľné';
+$wb['placeholder_txt'] = 'Placeholder';
 ?>
diff --git a/interface/web/dns/lib/lang/tr.lng b/interface/web/dns/lib/lang/tr.lng
index a101cf7b2bd9115b01a782669b2df4fb9d4ba5bb..a291a5af0807f718f6fc67171a4a28bba1cb69de 100644
--- a/interface/web/dns/lib/lang/tr.lng
+++ b/interface/web/dns/lib/lang/tr.lng
@@ -1,4 +1,5 @@
 <?php
+
 $wb['DNS'] = 'DNS';
 $wb['Zones'] = 'Bölgeler';
 $wb['DNS A'] = 'DNS A';
@@ -17,6 +18,6 @@ $wb['DNS TXT'] = 'DNS TXT';
 $wb['DNS Wizard'] = 'DNS Yardımcısı';
 $wb['Add DNS Zone'] = 'DNS Bölgesi Ekle';
 $wb['Templates'] = 'Kalıplar';
-$wb['Secondary Zones'] = 'İkincil Bölgeler';
-$wb['Import Zone File'] = 'Bölge Dosyası Alma';
+$wb['Secondary Zones'] = 'İkincil DNS Bölgeleri';
+$wb['Import Zone File'] = 'Bölge Dosyası İçe Aktarma';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_a.lng b/interface/web/dns/lib/lang/tr_dns_a.lng
index 0cf1414fd81acd71c870c4510e7d530bdc34b351..905ff04744011e49434a526c4378e17b3636335e 100644
--- a/interface/web/dns/lib/lang/tr_dns_a.lng
+++ b/interface/web/dns/lib/lang/tr_dns_a.lng
@@ -2,16 +2,16 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'IP Adresi';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
 $wb['data_error_duplicate'] = 'Bu A DNS kaydı zaten var';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
-$wb['ip_error_wrong'] = 'IP-Address format invalid';
+$wb['ip_error_wrong'] = 'IP adresi biçimi geçersiz';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_a_list.lng b/interface/web/dns/lib/lang/tr_dns_a_list.lng
index 129b32fdb2cb573e967ae72ef1f35d5a3c7ecad3..61a4e2a7d3e0aaeed41cfd04a1fa77ff396c1394 100644
--- a/interface/web/dns/lib/lang/tr_dns_a_list.lng
+++ b/interface/web/dns/lib/lang/tr_dns_a_list.lng
@@ -7,7 +7,7 @@ $wb['name_txt'] = 'Ad';
 $wb['data_txt'] = 'Veri';
 $wb['aux_txt'] = 'Öncelik';
 $wb['ttl_txt'] = 'TTL Süresi';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['add_new_record_txt'] = 'DNS A Kaydı Ekle';
 $wb['page_txt'] = 'Sayfa';
 $wb['page_of_txt'] = '/';
diff --git a/interface/web/dns/lib/lang/tr_dns_aaaa.lng b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
index b0c28aed41b0288a2f4b630dfa262d964715f93f..1726f80a8ff6c45979e06548ce7a01425b311dd2 100644
--- a/interface/web/dns/lib/lang/tr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
@@ -2,15 +2,15 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'IPv6 Adresleri';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
-$wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
+$wb['name_error_regex'] = 'Sunucu adının biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
+$wb['ip_error_wrong'] = 'IP adresinin biçimi geçersiz';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
-$wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_alias.lng b/interface/web/dns/lib/lang/tr_dns_alias.lng
index 9bd6e72ce6d0bad2068fe99d8eee0c70d40e44ab..ce78fcf3032004a93aa77a3ec5277c945b2bb912 100644
--- a/interface/web/dns/lib/lang/tr_dns_alias.lng
+++ b/interface/web/dns/lib/lang/tr_dns_alias.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Hedef Sunucu Adı';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adının biçimi geçersiz.';
 $wb['data_error_empty'] = 'Hedef sunucu adı boş olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_caa.lng b/interface/web/dns/lib/lang/tr_dns_caa.lng
new file mode 100644
index 0000000000000000000000000000000000000000..82de234d6e545c0912f0694f63b07182429bfa58
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_caa.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['ca_list_txt'] = 'Certifiction Authority';
+$wb['ca_domain_txt'] = 'Domain';
+$wb['ca_hostname_txt'] = 'Additional Hostnames';
+$wb['ca_hostname_note_txt'] = '(Sepearated list with commas - empty for all hostnames)';
+$wb['ca_options_txt'] = 'Additional Options';
+$wb['ca_options_note_txt'] = 'requested by the CA (Sepearated list with commas)';
+$wb['ca_wildcard_txt'] = 'Use Wildcard SSL';
+$wb['ca_critical_txt'] = 'Strict check';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = 'Active';
+$wb['select_txt'] = 'Select Certifiction Authority';
+$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
+$wb['ca_error_txt'] = 'No Certifiction Authority selected';
+$wb['caa_exists_error'] = 'CAA Record already exists';
+$wb['ca_option_error'] = 'Invalid format for additional options; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_cname.lng b/interface/web/dns/lib/lang/tr_dns_cname.lng
index 00366b969565dfbfdd8156be5d0b46e08f82cd6d..fa9a497e12050c2ad2ae8ff69d3b84bd83377cb1 100644
--- a/interface/web/dns/lib/lang/tr_dns_cname.lng
+++ b/interface/web/dns/lib/lang/tr_dns_cname.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Hedef Sunucu Adı';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölge kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Hedef sunucu adı boş olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_dkim.lng b/interface/web/dns/lib/lang/tr_dns_dkim.lng
index 4d45fb4fe95d87134331a593c81c6994bafab57c..b7ffb1930f000eb893ba097ef3e3dad77001997c 100644
--- a/interface/web/dns/lib/lang/tr_dns_dkim.lng
+++ b/interface/web/dns/lib/lang/tr_dns_dkim.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['public_key_txt'] = 'Public-Key';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['record_exists_txt'] = 'DNS-Record already exists';
-$wb['dkim_disabled_txt'] = 'DKIM disabled for this mail-domain';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-$wb['selector_txt'] = 'DKIM-Selector';
-$wb['data_error_empty'] = 'Public-Key missing';
-$wb['dkim_selector_empty_txt'] = 'DKIM-Selector is empty';
+$wb['public_key_txt'] = 'Herkese Açık Anahtar';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['record_exists_txt'] = 'DNS kaydı zaten var';
+$wb['dkim_disabled_txt'] = 'Bu e-posta etki alanı için DKIM devre dışı bırakılmış.';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+$wb['selector_txt'] = 'DKIM Seçici';
+$wb['data_error_empty'] = 'Herkese açık anahtar eksik';
+$wb['dkim_selector_empty_txt'] = 'DKIM Seçici boş olamaz';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_dmarc.lng b/interface/web/dns/lib/lang/tr_dns_dmarc.lng
index cf78bb8eed902817caf1e80e9e6e77d9d64b9ab3..6e98e9466368a9acd03b7afe8c2fa44a13dfc76f 100644
--- a/interface/web/dns/lib/lang/tr_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/tr_dns_dmarc.lng
@@ -1,50 +1,50 @@
 <?php
-$wb['data_txt'] = 'DMARC Record';
-$wb['domain_txt'] = 'Domain';
-$wb['dmarc_policy_txt'] = 'Mail Receiver Policy';
-$wb['dmarc_policy_note_txt'] = 'How ISPs should handle messages that failed SPF or DKIM (DMARC).';
-$wb['dmarc_policy_none_txt'] = 'none';
-$wb['dmarc_policy_quarantine_txt'] = 'quarantine';
-$wb['dmarc_policy_reject_txt'] = 'reject';
-$wb['dmarc_rua_txt'] = 'Aggregate Data Reporting Address';
-$wb['dmarc_rua_note_txt'] = 'Email to receive reports from ISPs aboute messages which failed DMARC checks for the domain (separated by whitespaces).';
-$wb['dmarc_ruf_txt'] = 'Forensic Data Reporting Address';
-$wb['dmarc_ruf_note_txt'] = 'Email to receive sample messages that are failing DMARC checks for the domain (separated by whitespaces).';
-$wb['dmarc_fo_txt'] = 'Forensic reporting options';
-$wb['dmarc_fo0_txt'] = 'Generate reports if all underlying authentication mechanisms fail to produce a DMARC \'pass\' result.';
-$wb['dmarc_fo1_txt'] = 'Generate reports if any mechanisms fail.';
-$wb['dmarc_fod_txt'] = 'Generate report if DKIM signature failed to verify.';
-$wb['dmarc_fos_txt'] = 'Generate report if SPF failed.';
-$wb['dmarc_adkim_txt'] = 'DKIM identifier alignment';
-$wb['dmarc_adkim_note_txt'] = '\'strict\' requires exact matching between DKIM domain and email\'s from';
-$wb['dmarc_adkim_r_txt'] = 'relaxed';
-$wb['dmarc_adkim_s_txt'] = 'strict';
-$wb['dmarc_aspf_txt'] = 'SPF identifier alignment';
-$wb['dmarc_aspf_note_txt'] = '\'strict\' requires exact matching between SPF domain and email\'s from';
-$wb['dmarc_aspf_r_txt'] = 'relaxed';
-$wb['dmarc_aspf_s_txt'] = 'strict';
-$wb['dmarc_rf_txt'] = 'Report Format';
-$wb['dmarc_rf_afrf_txt'] = 'Authentication Failure Reporting Format';
-$wb['dmarc_rf_iodef_txt'] = 'Incident Object Description Exchange Format';
-$wb['dmarc_pct_txt'] = 'Apply Policy to this Percentage';
-$wb['dmarc_pct_note_txt'] = '% (100 default). Messages in percent from the domain you want ISPs to check.';
-$wb['dmarc_ri_txt'] = 'Reporting Interval';
-$wb['dmarc_ri_note_txt'] = 'Seconds (default=86400). The time in seconds that aggregate reports should be generate (86400 represents 1 day).';
-$wb['dmarc_sp_txt'] = 'Subdomain Policy (Defaults to same as domain).';
-$wb['dmarc_sp_same_txt'] = 'same as domain';
-$wb['dmarc_sp_none_txt'] = 'none';
-$wb['dmarc_sp_quarantine_txt'] = 'quarantine';
-$wb['dmarc_sp_reject_txt'] = 'reject';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['dmarc_policy_error_txt'] = 'Only policy \'none\' is allowed without DKIM-signed emails.';
-$wb['dmarc_no_dkim_txt'] = 'No active DKIM Record.';
-$wb['dmarc_no_spf_txt'] = 'No active SPF Record.';
-$wb['dmarc_more_spf_txt'] = 'More than one active SPF Record';
-$wb['dmarc_invalid_email_txt'] = 'Invalid Email';
-$wb['dmarc_empty_txt'] = 'DMARC Record empty - specify at least one option';
-$wb['record_exists_txt'] = 'DNS-Record already exists';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['data_txt'] = 'DMARC Kaydı';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['dmarc_policy_txt'] = 'E-posta Alma Ä°lkesi';
+$wb['dmarc_policy_note_txt'] = 'SPF ya da DKIM (DMARC) doğrulaması yapılamadığında İnternet Hizmeti Sağlayıcıların iletileri nasıl işleyeceği.';
+$wb['dmarc_policy_none_txt'] = 'işlem yapılmasın';
+$wb['dmarc_policy_quarantine_txt'] = 'karantinaya alınsın';
+$wb['dmarc_policy_reject_txt'] = 'reddedilsin';
+$wb['dmarc_rua_txt'] = 'Verilerin BildirileceÄŸi Adres';
+$wb['dmarc_rua_note_txt'] = 'Etki alanı için DMARC doğrulamasını geçemeyen iletiler hakkında İnternet Hizmeti Sağlayıcılardan gelen bildirimlerin alınacağı e-posta adresleri (boşluk ile ayırarak yazın).';
+$wb['dmarc_ruf_txt'] = 'Adli BiliÅŸim Verilerinin BildirileceÄŸi Adres';
+$wb['dmarc_ruf_note_txt'] = 'Etki alanı için DMARC doğrulamasını geçemeyen örnek iletilerin alınacağı e-posta adresleri (boşluk ile ayırarak yazın).';
+$wb['dmarc_fo_txt'] = 'Adli bilişim bildirim seçenekleri';
+$wb['dmarc_fo0_txt'] = 'Belirtilen hiç bir kimlik doğrulama yöntemi bir DMARC  sonucu alamazsa bildirimler üretilsin.';
+$wb['dmarc_fo1_txt'] = 'Yöntemlerden biri doğrulama yapamazsa bildirimler üretilsin.';
+$wb['dmarc_fod_txt'] = 'DKIM imzası doğrulanamazsa bildirim üretilsin.';
+$wb['dmarc_fos_txt'] = 'SPF başarısız olursa bildirim gönderilsin.';
+$wb['dmarc_adkim_txt'] = 'DKIM belirteci deÄŸerlendirmesi';
+$wb['dmarc_adkim_note_txt'] = ' seçeneğinde DKIM etki alanı ile e-postanın geldiği etki alanının bire bir eşleşmesi gerekir';
+$wb['dmarc_adkim_r_txt'] = 'gevÅŸek';
+$wb['dmarc_adkim_s_txt'] = 'sıkı';
+$wb['dmarc_aspf_txt'] = 'SPF belirteci deÄŸerlendirmesi';
+$wb['dmarc_aspf_note_txt'] = ' seçeneğinde SPF etki alanı ile e-postanın geldiği etki alanının bire bir eşleşmesi gerekir';
+$wb['dmarc_aspf_r_txt'] = 'gevÅŸek';
+$wb['dmarc_aspf_s_txt'] = 'sıkı';
+$wb['dmarc_rf_txt'] = 'Bildirim Biçimi';
+$wb['dmarc_rf_afrf_txt'] = 'Kimlik Doğrulama Sorunlarını Bildirme Biçimi';
+$wb['dmarc_rf_iodef_txt'] = 'Olay Nesnesi Açıklama Değişimi Biçimi';
+$wb['dmarc_pct_txt'] = 'İlkenin Uygulanacağı Yüzde';
+$wb['dmarc_pct_note_txt'] = 'İnternet Hizmeti sağlayıcı tarafından denetlenmesini istediğiniz iletilerin yüzdesi (varsayılan %100).';
+$wb['dmarc_ri_txt'] = 'Bildirim Sıklığı';
+$wb['dmarc_ri_note_txt'] = 'Saniye cinsinden bildirim raporlarının üretilme sıklığı (varsayılan değer, bir güne karşılık 86400).';
+$wb['dmarc_sp_txt'] = 'Alt Etki Alanı İlkesi (Varsayılan değerler etki alanı ile aynıdır).';
+$wb['dmarc_sp_same_txt'] = 'etki alanı ile aynı';
+$wb['dmarc_sp_none_txt'] = 'işlem yapılmasın';
+$wb['dmarc_sp_quarantine_txt'] = 'karantiya atılsın';
+$wb['dmarc_sp_reject_txt'] = 'reddedilsin';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['dmarc_policy_error_txt'] = 'DKIM ile imzalanmış e-postalar için yalnız  ilkesi seçilebilir.';
+$wb['dmarc_no_dkim_txt'] = 'Etkin bir DKIM kaydı yok.';
+$wb['dmarc_no_spf_txt'] = 'Etkin bir SPF kaydı yok.';
+$wb['dmarc_more_spf_txt'] = 'Birden çok etkin SPF kaydı var';
+$wb['dmarc_invalid_email_txt'] = 'E-posta Adresi Geçersiz';
+$wb['dmarc_empty_txt'] = 'DMARC kaydı boş - en az bir seçenek seçin';
+$wb['record_exists_txt'] = 'DNS kaydı zaten var';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_ds.lng b/interface/web/dns/lib/lang/tr_dns_ds.lng
index c3622dc5b5eaa71ee71e573b6bb83da16aba3892..4ab7447d0ae55b9dda2bcd5542016dff226eb81f 100644
--- a/interface/web/dns/lib/lang/tr_dns_ds.lng
+++ b/interface/web/dns/lib/lang/tr_dns_ds.lng
@@ -1,17 +1,18 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
-$wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Data';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname is empty.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Text empty';
-$wb['data_error_regex'] = 'Text format invalid';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-$wb['invalid_type_ds'] = 'DS-Record has a wrong format.';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['zone_txt'] = 'Bölge';
+$wb['name_txt'] = 'Sunucu Adı';
+$wb['type_txt'] = 'tür';
+$wb['data_txt'] = 'Veri';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
+$wb['name_error_regex'] = 'Sunucu adının biçimi hatalı.';
+$wb['data_error_empty'] = 'Metin boÅŸ olamaz';
+$wb['data_error_regex'] = 'Metin biçimi geçersiz';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+$wb['invalid_type_ds'] = 'DS kaydının biçimi hatalı.';
+
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_hinfo.lng b/interface/web/dns/lib/lang/tr_dns_hinfo.lng
index 9082420e045920df1937a54d5915c83c01f1cb97..c47718c63c966ad273c43c7405e62ceba741335b 100644
--- a/interface/web/dns/lib/lang/tr_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/tr_dns_hinfo.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Sunucu Bilgisi';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Sunucu bilgisi boÅŸ olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_import.lng b/interface/web/dns/lib/lang/tr_dns_import.lng
index 64073d2b49dc5a2167de5340ba759b4bad375180..0f95a3131f76190b4277ceb9cd6e6d9b08f02d79 100644
--- a/interface/web/dns/lib/lang/tr_dns_import.lng
+++ b/interface/web/dns/lib/lang/tr_dns_import.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['zone_file_import_txt'] = 'Bölge Dosyası Alma';
+$wb['zone_file_import_txt'] = 'Bölge Dosyası İçe Aktarma';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['client_txt'] = 'Müşteri';
-$wb['btn_save_txt'] = 'Bölge Dosyasını Al';
+$wb['btn_save_txt'] = 'Bölge Dosyasını İçe Aktar';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['zone_file_successfully_imported_txt'] = 'Bölge dosyası alındı!';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['zone_file_successfully_imported_txt'] = 'Bölge dosyası içe aktarıldı!';
 $wb['error_no_valid_zone_file_txt'] = 'Bu bölge dosyası geçersiz görünüyor!';
 $wb['zonefile_to_import_txt'] = 'Bölge Dosyası';
-$wb['domain_field_desc_txt'] = 'Alan adı dosya adında ya da bölge dosyasının içeriğinde bulunuyor ise boş bırakılabilir.';
-$wb['title'] = 'Bölge Dosyalarını Al';
+$wb['domain_field_desc_txt'] = 'Etki alanı dosya adında ya da bölge dosyasının içeriğinde bulunuyor ise boş bırakılabilir.';
+$wb['title'] = 'Bölge Dosyalarını İçe Aktar';
 $wb['no_file_uploaded_error'] = 'Hiçbir bölge dosyası yüklenmedi';
-$wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['error_no_server_id'] = 'Sunucu belirtilmemiÅŸ.';
+$wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_loc.lng b/interface/web/dns/lib/lang/tr_dns_loc.lng
index dc9ad9a00634513f03aec6da53682d2842bae7b6..25350c9aa8ef17276875fc4b31da8cc1a1e88cd2 100644
--- a/interface/web/dns/lib/lang/tr_dns_loc.lng
+++ b/interface/web/dns/lib/lang/tr_dns_loc.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
-$wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Data';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname is empty.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Text empty';
-$wb['data_error_regex'] = 'Text format invalid';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['zone_txt'] = 'Bölge';
+$wb['name_txt'] = 'Sunucu Adı';
+$wb['type_txt'] = 'Tür';
+$wb['data_txt'] = 'Veri';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
+$wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
+$wb['data_error_empty'] = 'Metin boÅŸ';
+$wb['data_error_regex'] = 'Metin biçimi geçersiz';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_mx.lng b/interface/web/dns/lib/lang/tr_dns_mx.lng
index b3efeab1bbce8ff7edd3fab5df657843fe43dbe8..6f39e991bc84c8684d6598e60852d2fffa7a8b50 100644
--- a/interface/web/dns/lib/lang/tr_dns_mx.lng
+++ b/interface/web/dns/lib/lang/tr_dns_mx.lng
@@ -2,17 +2,17 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
-$wb['data_txt'] = 'Posta sunucusu adı';
+$wb['type_txt'] = 'Tür';
+$wb['data_txt'] = 'E-posta Sunucusu Adı';
 $wb['aux_txt'] = 'Öncelik';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
-$wb['data_error_empty'] = 'Posta sunucusu adı boş olamaz';
-$wb['data_error_regex'] = 'Posta sunucusu adı biçimi geçersiz';
+$wb['data_error_empty'] = 'E-posta sunucusu adı boş olamaz';
+$wb['data_error_regex'] = 'E-posta sunucusu adı biçimi geçersiz';
 $wb['duplicate_mx_record_txt'] = 'Bu MX kaydı zaten var.';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_ns.lng b/interface/web/dns/lib/lang/tr_dns_ns.lng
index 03975af5faf368347d1c6ef652936a2643699d16..e32b086091bcdcd405412770f13f6a2800d49cef 100644
--- a/interface/web/dns/lib/lang/tr_dns_ns.lng
+++ b/interface/web/dns/lib/lang/tr_dns_ns.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Bölge';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'tür';
 $wb['data_txt'] = 'Ad Sunucusu Adı';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Bölge boş olamaz.';
 $wb['name_error_regex'] = 'Bölge biçimi geçersiz.';
 $wb['data_error_empty'] = 'Ad sunucusu boÅŸ olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_rp.lng b/interface/web/dns/lib/lang/tr_dns_rp.lng
index 0a01c2dbe8937460d818785fe656308d202f49a3..56c10cb7e4331b08ddf2a57901d6e0e74f81e78f 100644
--- a/interface/web/dns/lib/lang/tr_dns_rp.lng
+++ b/interface/web/dns/lib/lang/tr_dns_rp.lng
@@ -2,12 +2,12 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Ä°lgili KiÅŸi';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Ä°lgili kiÅŸi boÅŸ olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_slave.lng b/interface/web/dns/lib/lang/tr_dns_slave.lng
index d6c83a92fa40548a7163a31570326132108e3e0c..8c83c1591c5e43fce049f7582a8e0c9016f9177b 100644
--- a/interface/web/dns/lib/lang/tr_dns_slave.lng
+++ b/interface/web/dns/lib/lang/tr_dns_slave.lng
@@ -13,5 +13,5 @@ $wb['origin_error_unique'] = 'Bu bölge için zaten bir kayıt var.';
 $wb['origin_error_regex'] = 'Bölge biçimi geçersiz.';
 $wb['ns_error_regex'] = 'NS biçimi geçersiz.';
 $wb['eg_domain_tld'] = 'Örnek: domain.tld.';
-$wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
+$wb['ipv4_form_txt'] = 'Birden çok IP adresini virgül ile ayırarak yazın';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa.lng b/interface/web/dns/lib/lang/tr_dns_soa.lng
index 02e325e42785d7dc5bc789daad75de10d7125ff5..fd39de04f5e9742c3717bb77a33e6d25908a1a16 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa.lng
@@ -9,11 +9,14 @@ $wb['retry_txt'] = 'Yinelenme';
 $wb['expire_txt'] = 'Sona erme';
 $wb['minimum_txt'] = 'En düşük';
 $wb['ttl_txt'] = 'TTL Süresi';
-$wb['xfer_txt'] = 'Şu IP adreslerine (virgülle ayrılmış)<br />bölge aktarımı yapılabilsin';
+$wb['xfer_txt'] = 'Şu IP adreslerine (virgül ile ayrırak yazın)<br />bölge aktarımı yapılabilsin';
 $wb['active_txt'] = 'Etkin';
+$wb['dnssec_info_txt'] = 'Kayıt defteri için DNSSEC DS verisi';
+$wb['dnssec_wanted_txt'] = 'İmza bölgesi (DNSSEC)';
+$wb['dnssec_wanted_info'] = 'Devre dışı bırakıldığında DNSSEC daha önce etkinleştirilmiş ve anahtarlar üretilmiş ise DNSSEC anahtarları silinir. Ancak bölge bundan sonra imzalanmış biçimde aktarılmaz.';
 $wb['limit_dns_zone_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS bölgesi sayısına ulaştınız.';
 $wb['client_txt'] = 'Müşteri';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['server_id_error_empty'] = 'Sunucu seçilmemiş';
 $wb['origin_error_empty'] = 'Bölge boş olamaz.';
 $wb['origin_error_unique'] = 'Bu bölge için bir kayıt zaten var.';
@@ -21,24 +24,21 @@ $wb['origin_error_regex'] = 'Bölge biçimi geçersiz.';
 $wb['ns_error_regex'] = 'NS geçersiz formatta.';
 $wb['mbox_error_empty'] = 'E-posta boÅŸ olamaz.';
 $wb['mbox_error_regex'] = 'E-posta biçimi geçersiz.';
-$wb['also_notify_txt'] = 'Ayrıca Bildir';
-$wb['also_notify_error_regex'] = 'Lütfen bir IP adresi kullanın.';
-$wb['xfer_error_regex'] = 'Ayrıca bildir: Lütfen bir IP adresi kullanın.';
+$wb['also_notify_txt'] = 'Ayrıca Bildirilsin';
+$wb['also_notify_error_regex'] = 'Ayrıca Bildirilsin: Lütfen bir IP adresi kullanın.';
+$wb['xfer_error_regex'] = 'Aktarılsın: Bir ya da , ile ayrılmış birkaç IP adresi ya da any sözcüğünü kullanın.';
 $wb['update_acl_txt'] = 'EDL Güncelle';
 $wb['seconds_txt'] = 'Saniye';
 $wb['eg_domain_tld'] = 'Örnek: domain.tld';
 $wb['eg_ns1_domain_tld'] = 'Örnek: ns1.domain.tld';
 $wb['eg_webmaster_domain_tld'] = 'Örnek: webmaster@domain.tld';
-$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'Alan adı değiştirilemedi. Lütfen alan adını değiştirmek için sistem yöneticisi ile görüşün.';
+$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'Etki alanı değiştirilemedi. Lütfen etki alanını değiştirmek için sistem yöneticisi ile görüşün.';
 $wb['refresh_range_error'] = 'En kısa yenilenme süresi 60 saniyedir.';
 $wb['retry_range_error'] = 'En kısa yinelenme süresi 60 saniyedir.';
 $wb['expire_range_error'] = 'En kısa sona erme süresi 60 saniyedir.';
 $wb['minimum_range_error'] = 'En kısa en kısa süre 60 saniyedir.';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
-$wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry';
-$wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)';
-$wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
-$wb['soa_cannot_be_changed_txt'] = 'The Zone (SOA) can not be changed. Please contact your administrator to change the zone.';
-$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
+$wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
+$wb['soa_cannot_be_changed_txt'] = 'Bölge (SOA) değiştirilemez. Lütfen bölgeyi değiştirmek için yöneticiniz ile görüşün.';
+$wb['configuration_error_txt'] = 'YAPILANDIRMA SORUNU';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
index d8e56c17ee27c0be5510e44ed12bed51d0a76fee..490cdc7b4fbe0a4b332e9221098793a56082ab86 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
@@ -5,7 +5,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['origin_txt'] = 'Bölge';
 $wb['ns_txt'] = 'Ad Sunucusu';
 $wb['mbox_txt'] = 'E-posta';
-$wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS bölgesi ekle';
+$wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS Bölgesi Ekle';
 $wb['add_new_record_txt'] = 'El ile DNS Bölgesi Ekle';
 $wb['sys_groupid_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa_list.lng b/interface/web/dns/lib/lang/tr_dns_soa_list.lng
index 8f7ed985ee0d03e829b1bc2c0e8ebf66ab45f11c..831ff6afd7ae3666ca0f2e061e446d57f6c01783 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa_list.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa_list.lng
@@ -5,7 +5,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['origin_txt'] = 'Bölge';
 $wb['ns_txt'] = 'Ad Sunucusu';
 $wb['mbox_txt'] = 'E-posta';
-$wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS bölgesi ekle';
+$wb['add_new_record_wizard_txt'] = 'Yardımcı ile DNS Bölgesi Ekle';
 $wb['add_new_record_txt'] = 'DNS Bölgesi (SOA) Ekle';
-$wb['import_zone_file_txt'] = 'Import Zone File';
+$wb['import_zone_file_txt'] = 'Bölge Dosyasını İçe Aktar';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_spf.lng b/interface/web/dns/lib/lang/tr_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..40cad402a461aff5e9fe8ce0d5c94e6f4257e727 100644
--- a/interface/web/dns/lib/lang/tr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/tr_dns_spf.lng
@@ -1,25 +1,25 @@
 <?php
-$wb['data_txt'] = 'SPF-Record';
-$wb['spf_mechanism_txt'] = 'SPF Mechanism';
-$wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
-$wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
-$wb['spf_mechanism_softfail_txt'] = 'SoftFail - allow mail from other senders but mark the email';
-$wb['spf_mechanism_neutral_txt'] = 'Neutral - do nothing';
-$wb['spf_mx_txt'] = 'Allow servers listed as MX to send email for this domain';
-$wb['spf_a_txt'] = 'Allow current IP address of the domain to send email for this domain';
-$wb['spf_ip_txt'] = 'Additional IP addresses in CIDR format that deliver or relay mail for this domain';
-$wb['spf_ip_note_txt'] = '(Sepearate IPs with whitespaces)';
-$wb['spf_invalid_ip_txt'] = 'Invalid IP-address';
-$wb['spf_hostname_txt'] = 'Any other server hostname that may deliver or relay mail for this domain';
-$wb['spf_hostname_note_txt'] = '(Sepearate hostnames with whitespaces)';
-$wb['spf_invalid_hostname_txt'] = 'Invalid hostname';
-$wb['spf_domain_txt'] = 'Any domains that may deliver or relay mail for this domain';
-$wb['spf_domain_note_txt'] = '(Sepearate domains with whitespaces)';
-$wb['spf_invalid_domain_txt'] = 'Invalid domainname';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['record_exists_txt'] = 'DNS-Record already exists';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['data_txt'] = 'SPF Kaydı';
+$wb['spf_mechanism_txt'] = 'SPF Yöntemi';
+$wb['spf_mechanism_pass_txt'] = 'Kabul - Diğer göndericilerden gelen e-postalar kabul edilsin';
+$wb['spf_mechanism_fail_txt'] = 'Red - Diğer göndericilerden gelen e-postalar reddedilsin';
+$wb['spf_mechanism_softfail_txt'] = 'Yazılımsal Red - Diğer göndericilerden gelen e-postalar kabul edilsin ancak e-posta işaretlensin';
+$wb['spf_mechanism_neutral_txt'] = 'Tepkisiz - Hiç bir şey yapılmasın';
+$wb['spf_mx_txt'] = 'MX olarak listelenen sunucular bu etki alanı adına e-posta gönderebilsin';
+$wb['spf_a_txt'] = 'Etki alanının geçerli IP adresleri bu etki alanı adına e-posta gönderebilsin';
+$wb['spf_ip_txt'] = 'CIDR biçiminde, bu etki alanı için e-posta gönderebilecek ya da aktarabilecek IP adresleri';
+$wb['spf_ip_note_txt'] = '(IP adreslerini boşluk ile ayırarak yazın)';
+$wb['spf_invalid_ip_txt'] = 'IP adresi geçersiz';
+$wb['spf_hostname_txt'] = 'Bu etki alanı için e-posta gönderebilecek ya da aktarabilecek diğer sunucuların adları';
+$wb['spf_hostname_note_txt'] = '(Sunucu adlarını boşluk ile ayırarak yazın)';
+$wb['spf_invalid_hostname_txt'] = 'Sunucu adı geçersiz';
+$wb['spf_domain_txt'] = 'Bu etki alanı için e-posta gönderebilecek ya da aktarabilecek etki alanı adları';
+$wb['spf_domain_note_txt'] = '(Etki alanı adlarını boşluk ile ayırarak yazın)';
+$wb['spf_invalid_domain_txt'] = 'Etki alanı adı geçersiz';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['record_exists_txt'] = 'DNS kaydı zaten var';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_srv.lng b/interface/web/dns/lib/lang/tr_dns_srv.lng
index c7ad55a852f42925b830e5e1c6a1755b3b48deec..8af151db87f2478488c9cc1d19bc1559ab5080f5 100644
--- a/interface/web/dns/lib/lang/tr_dns_srv.lng
+++ b/interface/web/dns/lib/lang/tr_dns_srv.lng
@@ -2,7 +2,7 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['target_txt'] = 'Hedef';
 $wb['weight_txt'] = 'Ağırlık';
 $wb['port_txt'] = 'Kapı';
@@ -10,7 +10,7 @@ $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['aux_txt'] = 'Öncelik';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS Bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Sunucu kaydı boş olamaz';
diff --git a/interface/web/dns/lib/lang/tr_dns_tlsa.lng b/interface/web/dns/lib/lang/tr_dns_tlsa.lng
index 3b87e2ad5987236e2159ce12b7494c89d15a6250..1fe0310d3a9273a35a856a604678fdc2671c358c 100644
--- a/interface/web/dns/lib/lang/tr_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_tlsa.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
-$wb['name_txt'] = 'Service-Descriptor';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'TLSA-Data';
-$wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname is empty.';
-$wb['name_error_regex'] = 'The hostname has the wrong format. Correct: _&lt;port&gt;._(tcp|udp).&lt;hostname&gt;';
-$wb['data_error_empty'] = 'TLSA-Data empty';
-$wb['data_error_regex'] = 'TLSA dataformat is wrong. Correct: n n n HASH';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['zone_txt'] = 'Bölge';
+$wb['name_txt'] = 'Hizmet Belirteci';
+$wb['type_txt'] = 'tür';
+$wb['data_txt'] = 'TLSA Verisi';
+$wb['ttl_txt'] = 'TTL Süresi';
+$wb['active_txt'] = 'Etkin';
+$wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
+$wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
+$wb['name_error_regex'] = 'Sunucu adının biçimi hatalı. Doğru biçim: _&lt;kapı&gt;._(tcp|udp).&lt;sunucuadı&gt;';
+$wb['data_error_empty'] = 'TLSA verisi boÅŸ olamaz.';
+$wb['data_error_regex'] = 'TLSA veri biçimi hatalı. Doğru biçim: n n n HASH';
+$wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_txt.lng b/interface/web/dns/lib/lang/tr_dns_txt.lng
index 7b77bae7f9ec781b29b0cd68f9614a21cd6b9164..632b1e7b69f5606b053669fa3b7b3c43b6901397 100644
--- a/interface/web/dns/lib/lang/tr_dns_txt.lng
+++ b/interface/web/dns/lib/lang/tr_dns_txt.lng
@@ -2,18 +2,18 @@
 $wb['server_id_txt'] = 'Sunucu';
 $wb['zone_txt'] = 'Bölge';
 $wb['name_txt'] = 'Sunucu Adı';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['data_txt'] = 'Metin';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
-$wb['no_zone_perm'] = 'Bu DNS bölgesi kaydını ekleme izniniz yok.';
+$wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adı biçimi geçersiz.';
 $wb['data_error_empty'] = 'Metin boÅŸ olamaz';
 $wb['data_error_regex'] = 'Metin biçimi geçersiz';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
-$wb['invalid_type_dkim'] = 'DKIM is not allowed. Use the DKIM button';
-$wb['invalid_type_dmarc'] = 'DMARC is not allowed. Use the DMARC button';
-$wb['invalid_type_spf'] = 'SPF is not allowed. Use the SPF button.';
+$wb['invalid_type_dkim'] = 'DKIM yazılamaz. DKIM düğmesini kullanın';
+$wb['invalid_type_dmarc'] = 'DMARC yazılamaz. DMARC düğmesini kullanın';
+$wb['invalid_type_spf'] = 'SPF yazılamaz. SPF düğmesini kullanın.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_wizard.lng b/interface/web/dns/lib/lang/tr_dns_wizard.lng
index 1a96393914823a3afdcc8d8053229e92e2421e54..f0a8b38980b82b64c91c66e69ae5195def8835c6 100644
--- a/interface/web/dns/lib/lang/tr_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/tr_dns_wizard.lng
@@ -7,11 +7,14 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['client_txt'] = 'Müşteri';
 $wb['btn_save_txt'] = 'DNS Kaydı Ekle';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['email_txt'] = 'E-posta';
-$wb['ns1_txt'] = 'Ad Sunucusu 1';
-$wb['ns2_txt'] = 'Ad Sunucusu 2';
+$wb['dkim_txt'] = 'DKIM';
+$wb['dnssec_txt'] = 'İmza bölgesi (DNSSEC)';
+$wb['ns1_txt'] = '1. Ad Sunucusu';
+$wb['ns2_txt'] = '2. Ad Sunucusu';
 $wb['ip_txt'] = 'IP Adresi';
+$wb['ipv6_txt'] = 'IPv6 Adresi';
 $wb['error_origin_empty'] = 'Kaynak boÅŸ olamaz.';
 $wb['error_ns_empty'] = 'Ad sunucusu boÅŸ olamaz.';
 $wb['error_mbox_empty'] = 'Mbox boÅŸ olamaz.';
@@ -20,14 +23,15 @@ $wb['error_retry_empty'] = 'Yinelenme boÅŸ olamaz.';
 $wb['error_expire_empty'] = 'Sona erme boÅŸ olamaz.';
 $wb['error_minimum_empty'] = 'En az boÅŸ olamaz.';
 $wb['error_ttl_empty'] = 'TTL süresi boş olamaz.';
-$wb['error_domain_empty'] = 'Alan adı boş olamaz';
+$wb['error_domain_empty'] = 'Etki alanı boş olamaz';
 $wb['error_ip_empty'] = 'IP boÅŸ olamaz.';
-$wb['error_ns1_empty'] = 'As Sunucusu 1 boÅŸ olamaz.';
-$wb['error_ns2_empty'] = 'Ad Sunucusu 2 boÅŸ olamaz.';
+$wb['error_ipv6_empty'] = 'IPv6 boÅŸ olamaz.';
+$wb['error_ns1_empty'] = '1. Ad Sunucusu boÅŸ olamaz.';
+$wb['error_ns2_empty'] = '2. Ad Sunucusu boÅŸ olamaz.';
 $wb['error_email_empty'] = 'E-posta boÅŸ olamaz.';
-$wb['error_domain_regex'] = 'Alan adında geçersiz karakterler var.';
-$wb['error_ns1_regex'] = 'Ad Sunucusu 1 adında geçersiz karakterler var.';
-$wb['error_ns2_regex'] = 'Ad Sunucusu 2 adında geçersiz karakterler var.';
+$wb['error_domain_regex'] = 'Etki alanı adında geçersiz karakterler var.';
+$wb['error_ns1_regex'] = '1. Ad Sunucusu adında geçersiz karakterler var.';
+$wb['error_ns2_regex'] = '2. Ad Sunucusu adında geçersiz karakterler var.';
 $wb['error_email_regex'] = 'E-posta adresi geçersiz.';
 $wb['globalsearch_resultslimit_of_txt'] = '/';
 $wb['globalsearch_resultslimit_results_txt'] = 'sonuç';
@@ -35,11 +39,7 @@ $wb['globalsearch_noresults_text_txt'] = 'Sonuç yok.';
 $wb['globalsearch_noresults_limit_txt'] = '0 sonuç';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Arama';
 $wb['globalsearch_suggestions_text_txt'] = 'Öneriler';
-$wb['dkim_txt'] = 'DKIM';
-$wb['dnssec_txt'] = 'Sign zone (DNSSEC)';
-$wb['ipv6_txt'] = 'IPv6 Address';
-$wb['error_ipv6_empty'] = 'IPv6 empty.';
-$wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
-$wb['limit_dns_zone_txt'] = 'The max. number of DNS zones for your account is reached.';
+$wb['error_no_server_id'] = 'Bir sunucu belirtilmemiÅŸ.';
+$wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
+$wb['limit_dns_zone_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS bölgesi sayısına ulaştınız.';
 ?>
diff --git a/interface/web/dns/list/dns_a.list.php b/interface/web/dns/list/dns_a.list.php
index 748bc405d82072d25aa4183b2259368c04f58ed2..1c6999511d1280b8c015b422bed9435a6cf5485b 100644
--- a/interface/web/dns/list/dns_a.list.php
+++ b/interface/web/dns/list/dns_a.list.php
@@ -132,7 +132,7 @@ $liste["item"][] = array( 'field'  => "type",
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
+	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
 
 
 ?>
diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm
index b8d57401bb63e78a5fd168b7297690301d6c2325..5a4a5eeb683309e2e4287644c64ecf12d4b65388 100644
--- a/interface/web/dns/templates/dns_a_list.htm
+++ b/interface/web/dns/templates/dns_a_list.htm
@@ -20,6 +20,7 @@
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_a_edit.php?zone={tmpl_var name='parent_id'}">A</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_aaaa_edit.php?zone={tmpl_var name='parent_id'}">AAAA</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_alias_edit.php?zone={tmpl_var name='parent_id'}">ALIAS</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_caa_edit.php?zone={tmpl_var name='parent_id'}">CAA</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_cname_edit.php?zone={tmpl_var name='parent_id'}">CNAME</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_dkim_edit.php?zone={tmpl_var name='parent_id'}">DKIM</button>
 			<button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_ds_edit.php?zone={tmpl_var name='parent_id'}">DS</button>
@@ -74,7 +75,7 @@
                         <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="aux"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ttl"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_rr_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_rr_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_caa_edit.htm b/interface/web/dns/templates/dns_caa_edit.htm
new file mode 100644
index 0000000000000000000000000000000000000000..3de64818b4936ae902004b53de139742c3187e81
--- /dev/null
+++ b/interface/web/dns/templates/dns_caa_edit.htm
@@ -0,0 +1,74 @@
+<div class='page-header'><h1><tmpl_var name="list_head_txt"></h1></div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="form-group">
+	<label for="ca_list" class="col-sm-2 control-label">{tmpl_var name='ca_list_txt'}</label>
+	<div class="col-sm-4"><select name="ca_list" id="ca_list" class="form-control">{tmpl_var name='ca_list'}</select></div>
+</div>
+
+<div class="wildcard form-group">
+	<label class="col-sm-2 control-label">{tmpl_var name='ca_wildcard_txt'}</label>
+	<div class="col-sm-4"> <input type="checkbox" id="allow_wildcard" name="allow_wildcard" {tmpl_var name='allow_wildcard'}/></div>
+</div>
+
+<!--
+For future use.  At this time, CA’s do not recognize any other flag values as described in RFC 6844
+<div class="critical form-group">
+	<label class="col-sm-2 control-label">{tmpl_var name='ca_critical_txt'}</label>
+	<div class="col-sm-4"> <input type="checkbox" id="allow_critical" name="allow_critical" {tmpl_var name='allow_critical'}/></div>
+</div>
+-->
+
+<div class="form-group">
+	<label for="name" class="col-sm-2 control-label">{tmpl_var name='ca_domain_txt'}</label>
+	<div class="col-sm-4"><input disabled type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div>
+</div>
+
+<div class="form-group">
+	<label for="name" class="col-sm-2 control-label">{tmpl_var name='ca_hostname_txt'}</label>
+	<div class="col-sm-4"><input type="text" name="additional" id="additional" value="{tmpl_var name='additional'}" class="form-control" <tmpl_if name="edit_disabled">readonly</tmpl_if> /> </div>
+	<div class="input-sm">{tmpl_var name='ca_hostname_note_txt'}</div>
+</div>
+
+<div class="form-group">
+	<label for="name" class="col-sm-2 control-label">{tmpl_var name='ca_options_txt'}</label>
+	<div class="col-sm-4"><input type="text" name="options" id="options" value="{tmpl_var name='options'}" class="form-control" /></div>
+	<div class="input-sm">{tmpl_var name='ca_options_note_txt'}</div>
+</div>
+
+<div class="form-group">
+	<label for="ttl" class="col-sm-2 control-label">{tmpl_var name='ttl_txt'}</label>
+	<div class="col-sm-4"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div>
+</div>
+
+<div class="form-group">
+	<label class="col-sm-2 control-label">{tmpl_var name='active_txt'}</label>
+	<div class="col-sm-4">{tmpl_var name='active'}</div>
+</div>
+
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<input type="hidden" name="zone" value="{tmpl_var name='zone'}" id="zone">
+<input type="hidden" name="type" value="{tmpl_var name='type'}">
+<input type="hidden" name="ca_issue" value="{tmpl_var name='ca_issue'}">
+<input type="hidden" name="ca_critical" value="{tmpl_var name='ca_critical'}">
+
+<div class="clear"><div class="right">
+	<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_caa_edit.php">{tmpl_var name='btn_save_txt'}</button>
+	<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+</div></div>
+
+<script language="JavaScript" type="text/javascript">
+	$(document).ready(function() { reloadForm(); });
+	jQuery('#ca_list').change(function(){ reloadForm(); });
+	function reloadForm(){
+		var caID = jQuery('#ca_list').val();
+		jQuery.getJSON('dns/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {ca_id : caID, type : "ca_wildcard"}, function(data) {
+			if(data.ca_wildcard == "Y"){ jQuery('.wildcard').show(); } else { jQuery('.wildcard').hide(); }
+			if(data.ca_critical == "1"){ jQuery('.critical').show(); } else { jQuery('.critical').hide(); }
+			$('input[name="ca_issue"]').val(data.ca_issue);
+			$('input[name="ca_critical"]').val(data.ca_critical);
+		});
+	}
+</script>
+
+
diff --git a/interface/web/dns/templates/dns_dmarc_edit.htm b/interface/web/dns/templates/dns_dmarc_edit.htm
index 630c18559b9ffe25449cdd504cd1f527778209cf..4b7646a398d41ea6ddaffe3651f782b1efd55070 100644
--- a/interface/web/dns/templates/dns_dmarc_edit.htm
+++ b/interface/web/dns/templates/dns_dmarc_edit.htm
@@ -147,7 +147,7 @@
             <div class="form-group">
                 <label class="col-sm-2 control-label">{tmpl_var name='active_txt'}</label>
                 <div class="col-sm-3">
-					<input type="checkbox" value="1" id="active" name="active" {tmpl_var name='active'} />
+					{tmpl_var name='active'}
                 </div>
             </div>
 
diff --git a/interface/web/dns/templates/dns_slave_admin_list.htm b/interface/web/dns/templates/dns_slave_admin_list.htm
index f4395849be181b2c9c3f7faecb0025f5d5874804..3afaa91175c0e2bea00792d99ddd70ef1559ccc8 100644
--- a/interface/web/dns/templates/dns_slave_admin_list.htm
+++ b/interface/web/dns/templates/dns_slave_admin_list.htm
@@ -59,7 +59,7 @@
                         <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_slave_list.htm b/interface/web/dns/templates/dns_slave_list.htm
index 27916f4b25976827f1c342742f81f7c63b22e1d7..799f14ba28700ce1d454813a407a71372b8ad78e 100644
--- a/interface/web/dns/templates/dns_slave_list.htm
+++ b/interface/web/dns/templates/dns_slave_list.htm
@@ -56,7 +56,7 @@
                         <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_slave_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_slave_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
index fbdc0398ed2ee42c60be9905e62c278b314b9794..79faa645fe607fb9adee9e3ebf3e15d85c9f6f42 100644
--- a/interface/web/dns/templates/dns_soa_admin_list.htm
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -64,7 +64,7 @@
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
                         <td class="text-right">   
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm
index 22cd19484e1ee29d95ea60e936fee92f4a1319dc..df579e852aa3424bcbdb084340a0163a23a2f76d 100644
--- a/interface/web/dns/templates/dns_soa_list.htm
+++ b/interface/web/dns/templates/dns_soa_list.htm
@@ -61,7 +61,7 @@
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
                         <td class="text-right">   
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/dns/templates/dns_template_edit.htm b/interface/web/dns/templates/dns_template_edit.htm
index 132cc92810846675e769c56decc87ac4df8df314..9de8c93447f466f0394ba52fb82a972886b7ce06 100644
--- a/interface/web/dns/templates/dns_template_edit.htm
+++ b/interface/web/dns/templates/dns_template_edit.htm
@@ -16,7 +16,10 @@
             </div>
             <div class="form-group">
                 <label for="template" class="col-sm-3 control-label">{tmpl_var name='template_txt'}</label>
-                <div class="col-sm-9"><textarea class="form-control" name="template" id="template" rows='15' cols='40'>{tmpl_var name='template'}</textarea></div>
+                <div class="col-sm-9"><textarea class="form-control" name="template" id="template" rows='15' cols='40'>{tmpl_var name='template'}</textarea>
+                &nbsp; DNS {tmpl_var name='placeholder_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOMAIN}</a>, <a href="javascript:void(0);" class="addPlaceholder">{IP}</a>, <a href="javascript:void(0);" class="addPlaceholder">{IPV6}</a>, <a href="javascript:void(0);" class="addPlaceholder">{NS1}</a>, <a href="javascript:void(0);" class="addPlaceholder">{NS2}</a>, <a href="javascript:void(0);" class="addPlaceholder">{EMAIL}</a>
+
+</div>
             </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='visible_txt'}</label>
@@ -31,4 +34,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_template_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_template_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dns/templates/dns_template_list.htm b/interface/web/dns/templates/dns_template_list.htm
index f7816cf4d8aed22884545a539eb007e8e14e7560..7622666940936551cabc7da72b3c4d4d5829547c 100644
--- a/interface/web/dns/templates/dns_template_list.htm
+++ b/interface/web/dns/templates/dns_template_list.htm
@@ -34,7 +34,7 @@
                         <td><a href="#" data-load-content="dns/dns_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="visible"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/help/form/support_message.tform.php b/interface/web/help/form/support_message.tform.php
index caf1a010c60b355acf77a6e79eaca63556bd3bc9..6313b4da674376b021a07af493b49cf980b3a3bc 100644
--- a/interface/web/help/form/support_message.tform.php
+++ b/interface/web/help/form/support_message.tform.php
@@ -136,7 +136,7 @@ $form["tabs"]['message'] = array (
 			'maxlength' => '30'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/help/lib/lang/br.lng b/interface/web/help/lib/lang/br.lng
index a745e60960fbdc6aa849dec27f86fea2e592cc56..217d3afa148487947cd79e9546a8e8bba8a97425 100644
--- a/interface/web/help/lib/lang/br.lng
+++ b/interface/web/help/lib/lang/br.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['Support Message'] = 'Mensagem do suporte';
+$wb['Support Message'] = 'Mensagem de suporte';
 $wb['Message'] = 'Mensagem';
 $wb['Send message'] = 'Enviar mensagem';
-$wb['View messages'] = 'Visualizar mensagem';
+$wb['View messages'] = 'Visualizar mensagens';
 $wb['Support'] = 'Suporte';
 $wb['About ISPConfig'] = 'Sobre o ISPConfig';
 $wb['Version'] = 'Versão';
-$wb['Frequently Asked Questions'] = 'Perguntas frequentes (FAQ)';
-$wb['FAQ Sections'] = 'Sessões FAQ';
-$wb['Manage Sections'] = 'Gerenciar sessões';
-$wb['Add a Question & Answer Pair'] = 'Adicionar par pergunta/resposta';
-$wb['Manage Questions'] = 'Gerenciar perguntas';
+$wb['Frequently Asked Questions'] = 'Questões Frequentes - FAQ';
+$wb['FAQ Sections'] = 'Seções FAQ';
+$wb['Manage Sections'] = 'Gerenciar seções';
+$wb['Add a Question & Answer Pair'] = 'Adicionar novo par questão/resposta';
+$wb['Manage Questions'] = 'Gerenciar questões';
 ?>
diff --git a/interface/web/help/lib/lang/br_faq_form.lng b/interface/web/help/lib/lang/br_faq_form.lng
index 331268a7229d41bc4b7b7db229c1b4da4ead8bbf..b24ec1c58fbd389599e3e87e48d859c106bb542c 100644
--- a/interface/web/help/lib/lang/br_faq_form.lng
+++ b/interface/web/help/lib/lang/br_faq_form.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['faq_faq_txt'] = 'Perguntas Mais Frequentes (FAQ)';
-$wb['faq_question_txt'] = 'Pergunta';
+$wb['faq_faq_txt'] = 'Questões Frequentes';
+$wb['faq_question_txt'] = 'Questão';
 $wb['faq_answer_txt'] = 'Resposta';
-$wb['faq_section_txt'] = 'Sessão';
+$wb['faq_section_txt'] = 'Seção';
 ?>
diff --git a/interface/web/help/lib/lang/br_faq_manage_questions_list.lng b/interface/web/help/lib/lang/br_faq_manage_questions_list.lng
index 8bda9d7f42644f3c0118a244b295aeb7c3fa60b3..ee9f769d91b241416324754c305ce761f162b959 100644
--- a/interface/web/help/lib/lang/br_faq_manage_questions_list.lng
+++ b/interface/web/help/lib/lang/br_faq_manage_questions_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['faq_question_txt'] = 'Pergunta';
-$wb['faq_section_name_txt'] = 'Sessão';
+$wb['faq_question_txt'] = 'Questão';
+$wb['faq_section_name_txt'] = 'Seção';
 $wb['faq_delete_txt'] = 'Remover';
 $wb['faq_edit_txt'] = 'Editar';
-$wb['faq_sections_txt'] = 'Sessão';
-$wb['faq_faq_questions_txt'] = 'Perguntas frequentes (FAQ)';
-$wb['faq_new_question_txt'] = 'Adicionar par pergunta/resposta';
+$wb['faq_sections_txt'] = 'Seção';
+$wb['faq_faq_questions_txt'] = 'Questões Frequentes';
+$wb['faq_new_question_txt'] = 'Adicionar novo par questão/resposta';
 ?>
diff --git a/interface/web/help/lib/lang/br_faq_sections_form.lng b/interface/web/help/lib/lang/br_faq_sections_form.lng
index f3f9f9f583355a863452b1dc44875bd356d67ef8..2fb709cbd2378c11cbb5dd7eefe4a1d3351bb17d 100644
--- a/interface/web/help/lib/lang/br_faq_sections_form.lng
+++ b/interface/web/help/lib/lang/br_faq_sections_form.lng
@@ -1,3 +1,3 @@
 <?php
-$wb['faq_section_name_txt'] = 'Nome da Sessão';
+$wb['faq_section_name_txt'] = 'Nome da seção';
 ?>
diff --git a/interface/web/help/lib/lang/br_help_faq_sections_list.lng b/interface/web/help/lib/lang/br_help_faq_sections_list.lng
index f1f549e6154df18679ed80089bd3e31fc7f6259d..aec81d7b59292fa6aae7452ada45e625dc199cfc 100644
--- a/interface/web/help/lib/lang/br_help_faq_sections_list.lng
+++ b/interface/web/help/lib/lang/br_help_faq_sections_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['faq_section_name_txt'] = 'Nome da Sessão';
+$wb['faq_section_name_txt'] = 'Nome da seção';
 $wb['faq_delete_txt'] = 'Remover';
 $wb['faq_edit_txt'] = 'Editar';
-$wb['faq_sections_txt'] = 'Sessões';
-$wb['faq_faq_sections_txt'] = 'Sessões FAQ';
-$wb['faq_new_section_txt'] = 'Adicionar nova sessão';
+$wb['faq_sections_txt'] = 'Seções';
+$wb['faq_faq_sections_txt'] = 'Seções FAQ';
+$wb['faq_new_section_txt'] = 'Adicionar nova seção';
 ?>
diff --git a/interface/web/help/lib/lang/br_support_message.lng b/interface/web/help/lib/lang/br_support_message.lng
index 83097915bf345a5cd62ab30fd8debbcc24151e16..dad8ce7fd574d0d48873df37d5899b298d9fbc52 100644
--- a/interface/web/help/lib/lang/br_support_message.lng
+++ b/interface/web/help/lib/lang/br_support_message.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['recipient_id_txt'] = 'Para';
-$wb['sender_id_txt'] = 'De';
+$wb['recipient_id_txt'] = 'ID do destinatário';
+$wb['sender_id_txt'] = 'ID do remetente';
 $wb['subject_txt'] = 'Assunto';
 $wb['message_txt'] = 'Mensagem';
-$wb['tstamp_txt'] = 'Dados';
+$wb['tstamp_txt'] = 'Data/Hora';
 $wb['reply_txt'] = 'Responder';
 $wb['date_txt'] = 'Data';
-$wb['support_request_subject_txt'] = 'Requisição para Suporte';
-$wb['support_request_txt'] = 'Você tem uma nova requisição para suporte. Por favor, não responda esse e-mail, mas processe a requisição de suporte dentro do ISPConfig.';
-$wb['answer_to_support_request_txt'] = 'Você tem uma nova resposta para requisição de suporte. Por favor, não responda esse e-mail, mas processe a requisição de suporte dentro do ISPConfig.';
-$wb['answer_to_support_request_sent_txt'] = 'Sua resposta para requisição de suporte foi enviada. Por favor, não responda esse e-mail.';
-$wb['support_request_sent_txt'] = 'Sua requisição de suporte foi enviada. Por favor não responda este e-mail.';
-$wb['recipient_or_sender_email_address_not_valid_txt'] = 'A mensagem não foi enviada porque o e-mail do destinatário e/ou remetente não é válido.';
-$wb['subject_is_empty'] = 'Não é permitido o campo \"Assunto\" em branco.';
+$wb['support_request_subject_txt'] = 'Requisição de Suporte';
+$wb['support_request_txt'] = 'Você recebeu uma requisição de suporte. Por favor, não responda este e-mail, mas processe a requisição dentro do ISPConfig.';
+$wb['answer_to_support_request_txt'] = 'Você recebeu uma resposta à sua requisição de suporte. Por favor, não responda este e-mail, mas processe a mensagem dentro do ISPConfig.';
+$wb['answer_to_support_request_sent_txt'] = 'Sua resposta à requisição de suporte foi enviada. Por favor, não responda este e-mail.';
+$wb['support_request_sent_txt'] = 'Sua requisição de suporte foi enviada. Por favor, não responda este e-mail.';
+$wb['recipient_or_sender_email_address_not_valid_txt'] = 'A mensagem não pôde ser enviada porque o remetente e/ou destinatário são e-mails inválidos.';
+$wb['subject_is_empty'] = 'O assunto está em branco.';
 ?>
diff --git a/interface/web/help/lib/lang/br_support_message_list.lng b/interface/web/help/lib/lang/br_support_message_list.lng
index 7d888659d84eb6e6dbf4425299e26ecc4b672e01..e4add42b799839edd88f5761d09a8ecbeb1cf9a5 100644
--- a/interface/web/help/lib/lang/br_support_message_list.lng
+++ b/interface/web/help/lib/lang/br_support_message_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Mensagens do Suporte';
-$wb['sender_id_txt'] = 'De';
+$wb['list_head_txt'] = 'Mensagens de Suporte';
+$wb['sender_id_txt'] = 'Remetente';
 $wb['subject_txt'] = 'Assunto';
-$wb['add_new_record_txt'] = 'Adicionar uma nova mensagem de suporte';
+$wb['add_new_record_txt'] = 'Adicionar nova mensagem de suporte';
 $wb['date_txt'] = 'Data';
 ?>
diff --git a/interface/web/help/lib/lang/tr.lng b/interface/web/help/lib/lang/tr.lng
index 4aeaa0ac0fe81488a1b47f9ca59c1eb1b122b1ec..c6b0877af53222562f0bdec07e332ce7b8d9d84e 100644
--- a/interface/web/help/lib/lang/tr.lng
+++ b/interface/web/help/lib/lang/tr.lng
@@ -11,4 +11,5 @@ $wb['FAQ Sections'] = 'SSS Bölümleri';
 $wb['Manage Sections'] = 'Bölüm Yönetimi';
 $wb['Add a Question & Answer Pair'] = 'Soru-Yanıt Ekle';
 $wb['Manage Questions'] = 'Soru Yönetimi';
+
 ?>
diff --git a/interface/web/help/lib/lang/tr_support_message.lng b/interface/web/help/lib/lang/tr_support_message.lng
index fcd785e627bd52ec59458995e89f09a79e2faafe..ae60d28a196ff19a9eab2ea98b06a90c5d4e8cb3 100644
--- a/interface/web/help/lib/lang/tr_support_message.lng
+++ b/interface/web/help/lib/lang/tr_support_message.lng
@@ -7,10 +7,10 @@ $wb['tstamp_txt'] = 'Zaman damgası';
 $wb['reply_txt'] = 'Yanıt';
 $wb['date_txt'] = 'Tarih';
 $wb['support_request_subject_txt'] = 'Destek Ä°steÄŸi';
-$wb['support_request_txt'] = 'Bir destek isteğinde bulundunuz. Lütfen bu e-postay yanıtlamayın. Destek isteğinizi ISPConfig üzerinden izleyin.';
+$wb['support_request_txt'] = 'Bir destek isteğinde bulundunuz. Lütfen bu e-postayı yanıtlamayın. Destek isteğinizi ISPConfig üzerinden izleyin.';
 $wb['answer_to_support_request_txt'] = 'Destek isteğiniz yanıtlandı. Lütfen bu e-postayı yanıtlamayın. Destek isteğinizi ISPConfig üzerinden izleyin.';
 $wb['answer_to_support_request_sent_txt'] = 'Destek isteğinize yazdığınız yanıt gönderildi. Lütfen bu e-potayı yanıtlamayın.';
 $wb['support_request_sent_txt'] = 'Destek isteğiniz gönderildi. Lütfen bu e-postayı yanıtlamayın.';
 $wb['recipient_or_sender_email_address_not_valid_txt'] = 'Gönderen ya da alıcı adresi geçersiz olduğundan bu ileti gönderilemedi.';
-$wb['subject_is_empty'] = 'The subject can not be empty.';
+$wb['subject_is_empty'] = 'Konu boÅŸ olamaz.';
 ?>
diff --git a/interface/web/help/templates/support_message_list.htm b/interface/web/help/templates/support_message_list.htm
index 3094b96728705129dbc112494e666631ef4559c1..c0b4b75d744964b600b634f51f4bd14b5e6f4c12 100644
--- a/interface/web/help/templates/support_message_list.htm
+++ b/interface/web/help/templates/support_message_list.htm
@@ -37,7 +37,7 @@
                             <td><a href="#" data-load-content="help/support_message_edit.php?id={tmpl_var name='id'}">{tmpl_var name="subject"}</a></td>
 							<td><a href="#" data-load-content="help/support_message_edit.php?id={tmpl_var name='id'}">{tmpl_var name="tstamp"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/support_message_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/support_message_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/login/lib/lang/br.lng b/interface/web/login/lib/lang/br.lng
index 379b719f4da95cce95203cb9671ae3134d95e64b..9baaf55212a4c2bc9bc25666b66ed8dfb40a1ca9 100644
--- a/interface/web/login/lib/lang/br.lng
+++ b/interface/web/login/lib/lang/br.lng
@@ -13,18 +13,18 @@ $wb['user_regex_error'] = 'O nome do usuário contém menos de 1 ou mais de 64 c
 $wb['pw_error_length'] = 'Tamanho da senha não pode ser maior do que 64 caracteres.';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
-$wb['login_button_txt'] = 'Entrar';
+$wb['login_button_txt'] = 'Acessar';
 $wb['pw_lost_txt'] = 'Esqueceu a senha?';
 $wb['error_maintenance_mode'] = 'Esta instalação do ISPConfig atualmente está sob manutenção. Nós retornaremos em breve. Obrigado por sua paciência.';
-$wb['login_txt'] = 'Acesso';
+$wb['login_txt'] = 'Acessar';
 $wb['pw_reset_txt'] = 'Redefinir senha';
 $wb['pw_button_txt'] = 'Reenviar senha';
 $wb['email_txt'] = 'E-mail';
-$wb['theme_not_compatible'] = 'O tema escolhido não é compatível com a versão atual do ISPConfig. Por favor, procure por uma nova versão deste tema compatível com ISPConfig.<br />O tema padrão foi configurado automaticamente.';
+$wb['theme_not_compatible'] = 'O tema escolhido não é compatível com a versão atual do ISPConfig. Por favor, procure por uma nova versão deste tema, compatível com ISPConfig.<br />O tema padrão foi configurado automaticamente.';
 $wb['back_txt'] = 'Voltar';
 $wb['email_error'] = 'O e-mail contém caracteres não permitidos ou formato é inválido.';
 $wb['stay_logged_in_txt'] = 'Manter-me conectado';
-$wb['lost_password_function_disabled_txt'] = 'Função de redefinir senha indisponível para este usuário.';
+$wb['lost_password_function_disabled_txt'] = 'Função "redefinir senha" indisponível para este usuário.';
 $wb['pw_reset_act'] = 'Você receberá um link de ativação. Por favor, acesse o link de ativação para confirmar sua nova senha.';
 $wb['pw_reset_act_mail_title'] = 'Confirmar nova senha para o painel de controle ISPConfig';
 $wb['pw_reset_act_mail_msg'] = 'Por favor, confirme se você deseja reiniciar sua senha do painel de controle ISPConfig, acessando o link de ativação: ';
diff --git a/interface/web/login/lib/lang/br_login_as.lng b/interface/web/login/lib/lang/br_login_as.lng
index 4c02c963c2bf51eff7fca0391abe787126a9d01d..72c2c97e408f995aedce3bff5c0b461d535f80e8 100644
--- a/interface/web/login/lib/lang/br_login_as.lng
+++ b/interface/web/login/lib/lang/br_login_as.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['login_1_txt'] = 'Você deseja acessar como usuário';
-$wb['login_2_txt'] = 'Para retornar ao administrador, você pode \"voltar\" selecionando sair.';
+$wb['login_1_txt'] = 'Gostaria de acessar como cliente?';
+$wb['login_2_txt'] = 'Se confirmar, poderá "voltar" clicando em sair.';
 $wb['btn_yes_txt'] = 'Sim, acessar como cliente';
-$wb['btn_back_txt'] = 'Não, voltar a lista';
+$wb['btn_back_txt'] = 'Não, voltar para a lista';
 $wb['udp_port_help_txt'] = 'Separado por vírgula';
 $wb['active_txt'] = 'Ativo';
-$wb['firewall_error_unique'] = 'Já existe um registro de firewall igual para este servidor.';
-$wb['tcp_ports_error_regex'] = 'Caractere não permitido para atribuição numa porta TCP. Caracteres permitidos são: números, \':\' e \',\'.';
-$wb['udp_ports_error_regex'] = 'Caractere não permitido para atribuição numa porta UDP. Caracteres permitidos são: números, \':\' e \',\'.';
-$wb['login_as_or_logout_txt'] = 'Você deseja acessar novamente como {UTYPE} ou sair?';
+$wb['firewall_error_unique'] = 'Já existe uma regra de firewall idêntica para este servidor.';
+$wb['tcp_ports_error_regex'] = 'Caractere não permitido para porta tcp. Caracteres permitidos são números, ":" e ",".';
+$wb['udp_ports_error_regex'] = 'Caractere não permitido para porta udp. Caracteres permitidos são números, ":" e ",".';
+$wb['login_as_or_logout_txt'] = 'Gostaria de realizar acesso novamente como {UTYPE} ou sair?';
 ?>
diff --git a/interface/web/login/lib/lang/ru_login_as.lng b/interface/web/login/lib/lang/ru_login_as.lng
index 46a3eab288473b2380d365fe6845a339dc33a725..63031d4d09acfffe0ab3bc0f64997949a92294cd 100644
--- a/interface/web/login/lib/lang/ru_login_as.lng
+++ b/interface/web/login/lib/lang/ru_login_as.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['login_1_txt'] = 'Вы хотите войти как пользователь';
-$wb['login_2_txt'] = 'Если вы это сделаете, вы можете \"вернуться\", нажав на \"выход\".';
+$wb['login_2_txt'] = 'Если вы это сделаете, вы можете \\"вернуться\\", нажав на \\"выход\\".';
 $wb['btn_yes_txt'] = 'Да, войти как Клиент';
 $wb['btn_back_txt'] = 'Нет, назад к списку';
 $wb['udp_port_help_txt'] = 'Перечислить через запятую';
 $wb['active_txt'] = 'Активно';
 $wb['firewall_error_unique'] = 'Уже есть такая запись бредмауэра для этого сервера.';
-$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \":\" и \",\"';
-$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \":\" и \",\"';
+$wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
+$wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
 $wb['login_as_or_logout_txt'] = 'Вы хотите заново войти как {UTYPE} или выйти?';
 ?>
diff --git a/interface/web/login/lib/lang/tr.lng b/interface/web/login/lib/lang/tr.lng
index c50ea5c8a2f2d5e4ab91f95e4427160c630ac021..863a6310d57e5d692bbf7fd8003c3c2f9633163b 100644
--- a/interface/web/login/lib/lang/tr.lng
+++ b/interface/web/login/lib/lang/tr.lng
@@ -3,12 +3,15 @@ $wb['error_user_password_empty'] = 'Kullanıcı adı ya da parola boş';
 $wb['error_user_password_incorrect'] = 'Kullanıcı adı ya da parola hatalı';
 $wb['error_user_blocked'] = 'Kullanıcı engellenmiş.';
 $wb['error_user_too_many_logins'] = 'Fazla sayıda hatalı oturum açmayı denediniz, Lütfen 15 dakika sonra yeniden deneyin.';
-$wb['pass_reset_txt'] = 'Yazdığınız e-posta adresi hesabınızdakine uyarsa, yeni bir parola oluşturularak e-posta adresinize gönderilir.';
+$wb['pass_reset_txt'] = 'Yazdığınız e-posta adresi hesabınızdakine uyarsa, yeni bir parola üretilerek e-posta adresinize gönderilir.';
 $wb['pw_reset'] = 'Parolanız sıfırlandı ve e-posta adresinize gönderildi.';
+$wb['pw_reset_act'] = 'Size bir etkinleştirme bağlantısı gönderildi. Parola isteğinizi onaylamak için bağlantıya tıklayın.';
 $wb['pw_error'] = 'Kullanıcı adı ya da e-posta adresiniz doğru değil.';
 $wb['pw_error_noinput'] = 'Lütfen e-posta adresinizi ya da kullanıcı adınızı yazın.';
 $wb['pw_reset_mail_msg'] = 'ISPConfig 3 Kontrol Paneli parolanız sıfırlandı. Yeni parolanız: ';
 $wb['pw_reset_mail_title'] = 'ISPConfig 3 Kontrol Paneli parolanız sıfırlandı';
+$wb['pw_reset_act_mail_title'] = 'ISPConfig 3 Control Panel parola sıfırlama isteğini onaylayın';
+$wb['pw_reset_act_mail_msg'] = 'Lütfen ISPConfig 3 Control Panel hesabınızın parolasını sıfırlamak için şu bağlantıya tıklayın: ';
 $wb['user_regex_error'] = 'Kullanıcı adınız izin verilmeyen karakterlerden oluşuyor ya da 64 karakterden uzun.';
 $wb['pw_error_length'] = 'Parola 64 karakterden uzun.';
 $wb['email_error'] = 'E-posta adresi izin verilmeyen karakterlerden oluşuyor ya da biçimi hatalı.';
@@ -24,11 +27,8 @@ $wb['back_txt'] = 'Geri';
 $wb['error_maintenance_mode'] = 'ISPConfig bakımda. Kısa bir süre sonra yeniden çalışıyor olacak, sabrınız için teşekkürler.';
 $wb['theme_not_compatible'] = 'Seçilmiş tema geçerli ISPConfig sürümü ile uyumlu değil. Lütfen temanın yeni sürümünü araştırın.<br />Varsayılan tema etkinleştirildi.';
 $wb['stay_logged_in_txt'] = 'Oturumum açık kalsın';
-$wb['pw_reset_act'] = 'You have been sent an activation link. Please visit the link to confirm your password request.';
-$wb['pw_reset_act_mail_title'] = 'Confirm ISPConfig 3 Control panel password reset';
-$wb['pw_reset_act_mail_msg'] = 'Please confirm that your want to reset your ISPConfig 3 control panel account password by visiting the following activation link: ';
-$wb['lost_password_function_disabled_txt'] = 'The lost password function is not available for this user.';
-$wb['lost_password_function_wait_txt'] = 'You cannot request a new password, yet. Please wait a few minutes.';
-$wb['lost_password_function_expired_txt'] = 'This activation link has expired. Please request a new one.';
-$wb['lost_password_function_denied_txt'] = 'This activation link is not valid.';
+$wb['lost_password_function_disabled_txt'] = 'Bu kullanıcı parolamı unuttum özelliğini kullanamaz.';
+$wb['lost_password_function_wait_txt'] = 'Henüz yeni parola isteğinde bulunamazsınız. Lütfen bir kaç dakika bekleyin.';
+$wb['lost_password_function_expired_txt'] = 'Bu etkinleştirme bağlantısının süresi geçmiş. Lütfen yeni bir parola sıfırlama isteğinde bulunun.';
+$wb['lost_password_function_denied_txt'] = 'Bu etkinleştirme bağlantısı geçersiz.';
 ?>
diff --git a/interface/web/login/lib/lang/tr_login_as.lng b/interface/web/login/lib/lang/tr_login_as.lng
index f7f12feeff4124ca933211de12edd708dd0ec508..8a54a8efd9889f48caeebf2555d79c9ea66782f6 100644
--- a/interface/web/login/lib/lang/tr_login_as.lng
+++ b/interface/web/login/lib/lang/tr_login_as.lng
@@ -1,12 +1,13 @@
 <?php
 $wb['login_1_txt'] = 'Bu kullanıcı olarak oturum açmak ister misiniz';
-$wb['login_2_txt'] = '\\"Geri dönmek\\" için oturumu kapat üzerine tıklayın.';
+$wb['login_2_txt'] = 'Oturumu Kapat üzerine tıklayarak "Geri Dönebilirsiniz".';
 $wb['btn_yes_txt'] = 'Evet, Müşteri olarak oturum aç';
 $wb['btn_back_txt'] = 'Hayır, listeye geri dön';
 $wb['udp_port_help_txt'] = 'Virgül ile ayırarak yazın';
 $wb['active_txt'] = 'Etkin';
 $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zaten var.';
-$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
-$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.';
-$wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['active_txt'] = 'Etkin';
+$wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+$wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
+$wb['login_as_or_logout_txt'] = '{UTYPE} olarak oturum açmak ya da oturumunuzu kapatmak ister misiniz?';
 ?>
diff --git a/interface/web/login/login_as.php b/interface/web/login/login_as.php
index 159f15b77ea390805c8f4f8ba3e5a855cb421459..4c2fb33393e6d6e555d350515750ebd5bf66972d 100644
--- a/interface/web/login/login_as.php
+++ b/interface/web/login/login_as.php
@@ -90,10 +90,8 @@ echo '
 	<br /> <br />	<br /> <br />
 	'.$wb['login_1_txt'].' ' .  $dbData['username'] . '?<br />
 	'.$wb['login_2_txt'].'<br />
-	<div style="visibility:hidden">
-		<input type="text" name="username" value="' . $dbData['username'] . '" />
-		<input type="password" name="password" value="' . $dbData['passwort'] .'" />
-	</div>
+	<input type="hidden" name="username" value="' . $dbData['username'] . '" />
+	<input type="hidden" name="password" value="' . $dbData['passwort'] .'" />
 	<input type="hidden" name="s_mod" value="dashboard" />
 	<input type="hidden" name="s_pg" value="dashboard" />
 	<input type="hidden" name="login_as" value="1" />
diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php
index dc1c9e4a422055d1d3bdf450136d40b53c682887..dadd871bab6214d2214058f125492eed78d664b4 100644
--- a/interface/web/login/logout.php
+++ b/interface/web/login/logout.php
@@ -48,10 +48,8 @@ if ((isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin'
 	echo '
 		<br /> <br />	<br /> <br />
 		'.str_replace('{UTYPE}', $utype, $wb['login_as_or_logout_txt']).'<br />
-		<div style="visibility:hidden">
-			<input type="text" name="username" value="' . $_SESSION['s_old']['user']['username'] . '" />
-			<input type="password" name="password" value="' . $_SESSION['s_old']['user']['passwort'] .'" />
-		</div>
+		<input type="hidden" name="username" value="' . $_SESSION['s_old']['user']['username'] . '" />
+		<input type="hidden" name="password" value="' . $_SESSION['s_old']['user']['passwort'] .'" />
 		<input type="hidden" name="s_mod" value="login" />
 		<input type="hidden" name="s_pg" value="index" />
 		<input type="hidden" name="login_as" value="1" />
diff --git a/interface/web/login/templates/index.htm b/interface/web/login/templates/index.htm
index 9a75a66cbda5003c367ceda39aaa93d34c22a23c..e03e58f1f1451c0716e433f63ae557534f2137ed 100644
--- a/interface/web/login/templates/index.htm
+++ b/interface/web/login/templates/index.htm
@@ -4,7 +4,7 @@
 					<form accept-charset="UTF-8" role="form" method="post" action="index.php">
                     <fieldset>
 			    	  	<div class="form-group">
-			    		    <input class="form-control" placeholder="{tmpl_var name='username_txt'}" name="username" id="username" type="text">
+			    		    <input class="form-control" placeholder="{tmpl_var name='username_txt'}" name="username" id="username" type="text" autofocus>
 			    		</div>
 			    		<div class="form-group">
 			    			<input class="form-control" placeholder="{tmpl_var name='password_txt'}" name="password" id="password" type="password" value="">
diff --git a/interface/web/login/templates/password_reset.htm b/interface/web/login/templates/password_reset.htm
index 66faf490f420d2a6a577811ad3ee0fd02a640b81..49fa528834e2c9c81b091aae132855b044ce3e61 100644
--- a/interface/web/login/templates/password_reset.htm
+++ b/interface/web/login/templates/password_reset.htm
@@ -9,7 +9,7 @@
 <form accept-charset="UTF-8" role="form" method="post" action="password_reset.php">
 <fieldset>
 	<div class="form-group">
-		<input class="form-control" placeholder="{tmpl_var name='email_txt'}" name="email" id="email" type="text">
+		<input class="form-control" placeholder="{tmpl_var name='email_txt'}" name="email" id="email" type="text" autofocus>
 	</div>
 	<div class="form-group">
 		<input class="form-control" placeholder="{tmpl_var name='username_txt'}" name="username" id="username" type="text">
diff --git a/interface/web/mail/ajax_get_json.php b/interface/web/mail/ajax_get_json.php
index 2a1a7561677d8195e823e0ed487f8d71447d7c75..412958a31500cacaa5cebf5d61a7c133a2973519 100644
--- a/interface/web/mail/ajax_get_json.php
+++ b/interface/web/mail/ajax_get_json.php
@@ -40,7 +40,11 @@ $domain_id = $_GET['domain_id'];
 if($type == 'create_dkim' && $domain_id != ''){
 	$dkim_public = $_GET['dkim_public'];
 	$dkim_selector = $_GET['dkim_selector'];
-	$domain=@(is_numeric($domain_id))?$app->db->queryOneRecord("SELECT domain FROM domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), $domain_id)['domain']:$domain_id;
+	$domain = $domain_id;
+	if(is_numeric($domain_id)) {
+		$temp = $app->db->queryOneRecord("SELECT domain FROM domain WHERE domain_id = ? AND ".$app->tform->getAuthSQL('r'), $domain_id);
+		$domain = $temp['domain'];
+	}
 	$rec = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = ?", $domain);
 	$server_id = $rec['server_id'];
 	$maildomain = $rec['domain'];
@@ -50,8 +54,9 @@ if($type == 'create_dkim' && $domain_id != ''){
 	if ($dkim_strength=='') $dkim_strength = 2048;
 	
 	$rnd_val = $dkim_strength * 10;
-	exec('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null', $output, $result);
-	exec('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null', $privkey, $result);
+	$app->system->exec_safe('openssl rand -out ../../temp/random-data.bin '.$rnd_val.' 2> /dev/null');
+	$app->system->exec_safe('openssl genrsa -rand ../../temp/random-data.bin '.$dkim_strength.' 2> /dev/null');
+	$privkey = $app->system->last_exec_out();
 	unlink("../../temp/random-data.bin");
 	$dkim_private='';
 	foreach($privkey as $values) $dkim_private=$dkim_private.$values."\n";
@@ -75,12 +80,14 @@ if($type == 'create_dkim' && $domain_id != ''){
 			$selector = 'invalid domain or selector';
 		}
 		unset($dkim_public);
-		exec('echo '.escapeshellarg($dkim_private).'|openssl rsa -pubout -outform PEM 2> /dev/null',$pubkey,$result);
+		$app->system->exec_safe('echo ?|openssl rsa -pubout -outform PEM 2> /dev/null', $dkim_private);
+		$pubkey = $app->system->last_exec_out();
 		foreach($pubkey as $values) $dkim_public=$dkim_public.$values."\n";
 		$selector = $dkim_selector;
 	} else {
 		unset($dkim_public);
-		exec('echo '.escapeshellarg($dkim_private).'|openssl rsa -pubout -outform PEM 2> /dev/null',$pubkey,$result);
+		$app->system->exec_safe('echo ?|openssl rsa -pubout -outform PEM 2> /dev/null', $dkim_private);
+		$pubkey = $app->system->last_exec_out();
 		foreach($pubkey as $values) $dkim_public=$dkim_public.$values."\n";
 		$selector = $dkim_selector;
 	}
diff --git a/interface/web/mail/form/mail_alias.tform.php b/interface/web/mail/form/mail_alias.tform.php
index a004203622d3c6df0e6b9186a1f8829fa0ee0e66..9434ba3eecc080c588fc8527974805bf0ba73c44 100644
--- a/interface/web/mail/form/mail_alias.tform.php
+++ b/interface/web/mail/form/mail_alias.tform.php
@@ -137,7 +137,7 @@ $form["tabs"]['alias'] = array (
 			'value'  => array(1 => 'y', 0 => 'n')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_aliasdomain.tform.php b/interface/web/mail/form/mail_aliasdomain.tform.php
index 66db01e5aa51c5823670826acae8398372239036..a0d10249898695f4d3b8dd124684f167adb4045f 100644
--- a/interface/web/mail/form/mail_aliasdomain.tform.php
+++ b/interface/web/mail/form/mail_aliasdomain.tform.php
@@ -128,7 +128,7 @@ $form["tabs"]['alias'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_blacklist.tform.php b/interface/web/mail/form/mail_blacklist.tform.php
index 8b268147fb0a18301d33da51722729f7585187c4..957f35b95bfad2bb6263b79afd4f3e4f62104941 100644
--- a/interface/web/mail/form/mail_blacklist.tform.php
+++ b/interface/web/mail/form/mail_blacklist.tform.php
@@ -107,7 +107,7 @@ $form["tabs"]['blacklist'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_content_filter.tform.php b/interface/web/mail/form/mail_content_filter.tform.php
index 550ae6b5d695743184d99859790a52445eb222f3..88f16298f75fabfd4af8407b4eedd9b7a9b44919 100644
--- a/interface/web/mail/form/mail_content_filter.tform.php
+++ b/interface/web/mail/form/mail_content_filter.tform.php
@@ -107,7 +107,7 @@ $form["tabs"]['filter'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_domain.tform.php b/interface/web/mail/form/mail_domain.tform.php
index 06fb0906c34e693f994c088274c03b265b61abb7..5c8fa0185ac9bf0364315836152b1e7e87ff0548 100644
--- a/interface/web/mail/form/mail_domain.tform.php
+++ b/interface/web/mail/form/mail_domain.tform.php
@@ -143,7 +143,7 @@ $form["tabs"]['domain'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_domain_catchall.tform.php b/interface/web/mail/form/mail_domain_catchall.tform.php
index 8d0c0296bdcbe756479d3a127316b6fc4702178f..34d26088cd78ecdacd1093231b756752a26098a2 100644
--- a/interface/web/mail/form/mail_domain_catchall.tform.php
+++ b/interface/web/mail/form/mail_domain_catchall.tform.php
@@ -131,8 +131,14 @@ $form["tabs"]['catchall'] = array (
 			'default' => 'y',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'greylisting' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(1 => 'y', 0 => 'n')
+		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_forward.tform.php b/interface/web/mail/form/mail_forward.tform.php
index 3c902b4221f717c456133c748238c8e1d77304cd..003e678455ec6929921bd333f31e9546c0600fd2 100644
--- a/interface/web/mail/form/mail_forward.tform.php
+++ b/interface/web/mail/form/mail_forward.tform.php
@@ -133,7 +133,7 @@ $form["tabs"]['forward'] = array (
 			'value'  => array(1 => 'y', 0 => 'n')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_get.tform.php b/interface/web/mail/form/mail_get.tform.php
index 9f7de76e013273ad615082307b38f2b518c4a09b..9082c368664a2df1598c4b69e78e1bc1a94d6ea4 100644
--- a/interface/web/mail/form/mail_get.tform.php
+++ b/interface/web/mail/form/mail_get.tform.php
@@ -173,7 +173,7 @@ $form["tabs"]['mailget'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_relay_recipient.tform.php b/interface/web/mail/form/mail_relay_recipient.tform.php
index 34c23861e47fbfd5f8b01fded64c9f62f643c4b4..e3d8faa1edc8f83bdbd58358be28c06b90383405 100644
--- a/interface/web/mail/form/mail_relay_recipient.tform.php
+++ b/interface/web/mail/form/mail_relay_recipient.tform.php
@@ -107,7 +107,7 @@ $form["tabs"]['relay_recipient'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_spamfilter.tform.php b/interface/web/mail/form/mail_spamfilter.tform.php
index fb9a3c311be5679cc1f2d963cf4e16d00da2ceca..2890cfb8b634f9531631f09010bb33d6938e00fb 100644
--- a/interface/web/mail/form/mail_spamfilter.tform.php
+++ b/interface/web/mail/form/mail_spamfilter.tform.php
@@ -114,7 +114,7 @@ $form["tabs"]['spamfilter'] = array (
 					1 => array( 'event' => 'SAVE',
 					'type' => 'STRIPNL')
 			),
-			'default' => '***SPAM***',
+			'default' => '***SPAM*** ',
 			'value'  => '',
 			'width'  => '30',
 			'maxlength' => '255'
@@ -145,7 +145,7 @@ $form["tabs"]['spamfilter'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_transport.tform.php b/interface/web/mail/form/mail_transport.tform.php
index f55541346ce171beba72964a13499e4a248c3722..b40ad86e8ad15a590f0f57efcd961fa272020776 100644
--- a/interface/web/mail/form/mail_transport.tform.php
+++ b/interface/web/mail/form/mail_transport.tform.php
@@ -122,7 +122,7 @@ $form["tabs"]['transport'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 631c507f900be8866843cb02c9d2bb509fcea648..da386f584415d1b5bdf9e23c17618b036317e576 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -472,7 +472,7 @@ if ($backup_available) {
 				'value'         => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')
 			),
 		##################################
-		# ENDE Datatable fields
+		# END Datatable fields
 		##################################
 		),
 		'plugins' => array (
diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index becb09351e869b3e4e3ccfd73ab635a1de40beff..be5fba3ed7fdbbefed342b303458bb6620f58990 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -88,13 +88,12 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt')
+			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'List-Id'=>'list_id_txt')
 		),
 		'op' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			//'value'  => array('contains'=>'contains_txt','is' => 'Is','begins'=>'Begins with','ends'=>'Ends with')
 			'value'  => array('contains'=>'contains_txt', 'is' => 'is_txt', 'begins'=>'begins_with_txt', 'ends'=>'ends_with_txt')
 		),
 		'searchterm' => array (
@@ -137,7 +136,7 @@ $form["tabs"]['filter'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/mail_whitelist.tform.php b/interface/web/mail/form/mail_whitelist.tform.php
index 00fc971647ef9c87fea815e4f2fb958d03f182c0..edd32483712bedea9b430d2f5cba5de346a73fb7 100644
--- a/interface/web/mail/form/mail_whitelist.tform.php
+++ b/interface/web/mail/form/mail_whitelist.tform.php
@@ -113,7 +113,7 @@ $form["tabs"]['whitelist'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_blacklist.tform.php b/interface/web/mail/form/spamfilter_blacklist.tform.php
index 3514eed4344fa049149bc32ec96d9dd40addffb9..7d212d9317303a894e9150c54bb8a540a3f5bde6 100644
--- a/interface/web/mail/form/spamfilter_blacklist.tform.php
+++ b/interface/web/mail/form/spamfilter_blacklist.tform.php
@@ -127,7 +127,7 @@ $form["tabs"]['blacklist'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_config.tform.php b/interface/web/mail/form/spamfilter_config.tform.php
index 39c1b35621575c1f7c1f4d5e8f0ba20e70176e83..2217cbbd314c35b36d7fa1307421518df587b5a0 100644
--- a/interface/web/mail/form/spamfilter_config.tform.php
+++ b/interface/web/mail/form/spamfilter_config.tform.php
@@ -121,7 +121,7 @@ $form["tabs"]['server'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -247,7 +247,7 @@ $form["tabs"]['mail'] = array (
 			'maxlength' => '15'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -272,7 +272,7 @@ $form["tabs"]['getmail'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_policy.tform.php b/interface/web/mail/form/spamfilter_policy.tform.php
index 31e8b8092a0833023f677dc7ea9a6ccef7e40a0a..ef777a8884e079575f46b5a10df10a1e3a1ac6c6 100644
--- a/interface/web/mail/form/spamfilter_policy.tform.php
+++ b/interface/web/mail/form/spamfilter_policy.tform.php
@@ -87,6 +87,21 @@ $form["tabs"]['policy'] = array (
 			'default' => 'N',
 			'value'  => array('N' => 'No', 'Y' => 'Yes')
 		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+
+$form["tabs"]['amavis'] = array (
+	'title'  => "Amavis",
+	'width'  => 100,
+	'template'  => "templates/spamfilter_amavis_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
 		'banned_files_lover' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
@@ -117,21 +132,6 @@ $form["tabs"]['policy'] = array (
 			'default' => 'N',
 			'value'  => array('N' => 'No', 'Y' => 'Yes')
 		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-$form["tabs"]['quarantine'] = array (
-	'title'  => "Quarantine",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_quarantine_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
 		'virus_quarantine_to' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -216,20 +216,6 @@ $form["tabs"]['quarantine'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-$form["tabs"]['taglevel'] = array (
-	'title'  => "Tag-Level",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_taglevel_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
 		'spam_tag_level' => array (
 			'datatype' => 'DOUBLE',
 			'formtype' => 'TEXT',
@@ -304,21 +290,6 @@ $form["tabs"]['taglevel'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
-		//#################################
-		// ENDE Datatable fields
-		//#################################
-	)
-);
-
-
-$form["tabs"]['other'] = array (
-	'title'  => "Other",
-	'width'  => 100,
-	'template'  => "templates/spamfilter_other_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
 		'addr_extension_virus' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -486,11 +457,52 @@ $form["tabs"]['other'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
-
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
 
-?>
+$form["tabs"]['rspamd'] = array (
+	'title'  => "Rspamd",
+	'width'  => 100,
+	'template'  => "templates/spamfilter_rspamd_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'rspamd_spam_greylisting_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'rspamd_spam_tag_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		'rspamd_spam_tag_method' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'rewrite_subject',
+			'value'  => array('add_header' => $app->lng('add_header_txt'), 'rewrite_subject' => $app->lng('rewrite_subject_txt'))
+		),
+		'rspamd_spam_kill_level' => array (
+			'datatype' => 'DOUBLE',
+			'formtype' => 'TEXT',
+			'default' => '0',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '255'
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
diff --git a/interface/web/mail/form/spamfilter_users.tform.php b/interface/web/mail/form/spamfilter_users.tform.php
index 8ef3c4e131872ca1bba7cc0458ca133d71d4e870..65f196b9879be55f37d170b3a447f8395f0ec946 100644
--- a/interface/web/mail/form/spamfilter_users.tform.php
+++ b/interface/web/mail/form/spamfilter_users.tform.php
@@ -133,7 +133,7 @@ $form["tabs"]['users'] = array (
 		),
 
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/form/spamfilter_whitelist.tform.php b/interface/web/mail/form/spamfilter_whitelist.tform.php
index f0802fa4912c2e8f298f221e3387470f963bc0f8..202a3c6810a9d48ef2e1c73074bba182ec88511c 100644
--- a/interface/web/mail/form/spamfilter_whitelist.tform.php
+++ b/interface/web/mail/form/spamfilter_whitelist.tform.php
@@ -127,7 +127,7 @@ $form["tabs"]['whitelist'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mail/lib/lang/ar.lng b/interface/web/mail/lib/lang/ar.lng
index e12b05e27821ca1d7c92da82a9ce411396bf041f..3d15a518a14f6aafd76f24677f0792d27922caef 100644
--- a/interface/web/mail/lib/lang/ar.lng
+++ b/interface/web/mail/lib/lang/ar.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Global Filters';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
index af8e42f24b43389d54a12266d528a9ef6372bd08..d1b54151d2c9d6c97134b3e52fd99ccc6be2102e 100644
--- a/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Invalid domain name od domain contains invalid char
 $wb['limit_mailcatchall_txt'] = 'The max. number of email catchall accounts for your account is reached.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ar_mail_user_filter.lng b/interface/web/mail/lib/lang/ar_mail_user_filter.lng
index b5d31b589cc1a7b118c1f9516a9d895d4f3037bb..9a15472e88734a485d954d89d58944a8a72a4516 100644
--- a/interface/web/mail/lib/lang/ar_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/ar_spamfilter_policy.lng b/interface/web/mail/lib/lang/ar_spamfilter_policy.lng
index e876330a68c7c365b12bf9a3f3cf6b5a652a6093..683b378c21e0eebc93556c6914165bc708521c02 100644
--- a/interface/web/mail/lib/lang/ar_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ar_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/bg.lng b/interface/web/mail/lib/lang/bg.lng
index a1299f4472da747979ee1231b57a193761e113ba..c117c863a2d6bf4cc86bc55ed66bee0f0331d7c5 100644
--- a/interface/web/mail/lib/lang/bg.lng
+++ b/interface/web/mail/lib/lang/bg.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Глобални филтри';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng b/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng
index 5db26b11a1eadd45e0132c6916b0b6697eb99401..06f1f01e11708e8921c96e39290bc03d8f6fa33d 100644
--- a/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Грешен домейн или непозволе
 $wb['limit_mailcatchall_txt'] = 'Максималният брой записи за catchall в твоят акоунт е достигнат.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_spamfilter_policy.lng b/interface/web/mail/lib/lang/bg_spamfilter_policy.lng
index e876330a68c7c365b12bf9a3f3cf6b5a652a6093..683b378c21e0eebc93556c6914165bc708521c02 100644
--- a/interface/web/mail/lib/lang/bg_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/bg_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/br.lng b/interface/web/mail/lib/lang/br.lng
index 3ae45b5db0c1c101eb97653392d025b27fa2d361..77483426122e7ec99a4b746bf78d35b24a5865a4 100644
--- a/interface/web/mail/lib/lang/br.lng
+++ b/interface/web/mail/lib/lang/br.lng
@@ -1,48 +1,56 @@
 <?php
-$wb['Email Alias'] = 'Apelidos de e-mail';
-$wb['Email Blacklist'] = 'Lista negra';
-$wb['Blacklist'] = 'Lista negra';
-$wb['Mail Content Filter'] = 'Filtro de conteúdo';
+$wb['Email Alias'] = 'Alias de e-mail';
+$wb['Email Blacklist'] = 'Lista Negra';
+$wb['Blacklist'] = 'Lista Negra';
+$wb['Mail Content Filter'] = 'Filtro de conteúdo de e-mail';
 $wb['Filter'] = 'Filtro';
-$wb['Mail Domain'] = 'Domínio';
-$wb['Domain'] = 'Domínios';
-$wb['Email Catchall'] = 'Contas cata tudo';
-$wb['Email Forward'] = 'Encaminhamento';
+$wb['Mail Domain'] = 'Domínio de e-mail';
+$wb['Domain'] = 'Domínio';
+$wb['Email Catchall'] = 'Contas cata-tudo';
+$wb['Email Forward'] = 'Encaminhamento de e-mail';
 $wb['Get Email'] = 'Busca de e-mail';
 $wb['Spamfilter'] = 'Filtro anti-spam';
-$wb['Email Routing'] = 'Transportes';
+$wb['Email Routing'] = 'Rotas de e-mail';
+$wb['Mailing List'] = 'Listas de e-mail';
 $wb['Email transport'] = 'Transportes';
 $wb['Mailbox'] = 'Contas de e-mail';
-$wb['Autoresponder'] = 'Resposta automática';
-$wb['Mail Filter'] = 'Filtros';
+$wb['Autoresponder'] = 'Auto-resposta';
+$wb['Mail Filter'] = 'Filtro de e-mail';
 $wb['Custom Rules'] = 'Regras personalizadas';
-$wb['Email filter'] = 'Filtro';
-$wb['Email Whitelist'] = 'Lista branca';
-$wb['Whitelist'] = 'Lista branca';
-$wb['Spamfilter blacklist'] = 'Filtro anti-spam (lista negra)';
-$wb['Spamfilter Config'] = 'Configuração do filtro anti-spam';
-$wb['Spamfilter policy'] = 'Políticas de filtro anti-spam';
+$wb['Email filter'] = 'Filtro de e-mail';
+$wb['Email Whitelist'] = 'Lista Branca de e-mails';
+$wb['Whitelist'] = 'Lista Branca';
+$wb['Spamfilter blacklist'] = 'Filtros anti-spam - lista negra';
+$wb['Blacklist'] = 'Lista Negra';
+$wb['Spamfilter Config'] = 'Configurações de filtros anti-spam';
+$wb['Servidor'] = 'Servidor';
+$wb['Spamfilter policy'] = 'Políticas de filtros anti-spam';
 $wb['Policy'] = 'Política';
 $wb['Quarantine'] = 'Quarentena';
 $wb['Tag-Level'] = 'Nível de marcação';
 $wb['Other'] = 'Outros';
-$wb['Spamfilter users'] = 'Usuários de filtro anti-spam';
-$wb['Users'] = 'Usuários';
-$wb['Spamfilter Whitelist'] = 'Filtro anti-spam (lista branca)';
-$wb['Email'] = 'e-mail';
-$wb['Email Mailbox'] = 'Contas de e-mail';
+$wb['Spamfilter users'] = 'Contas de e-mail para filtros anti-spam';
+$wb['Users'] = 'Contas de e-mail';
+$wb['Spamfilter Whitelist'] = 'Filtros anti-spam - lista branca';
+$wb['Whitelist'] = 'Lista Branca';
+$wb['Email'] = 'e-Mail';
+$wb['Email Mailbox'] = 'Conta de e-mail';
 $wb['Email Accounts'] = 'Contas de e-mail';
-$wb['User / Domain'] = 'Usuário/domínio';
-$wb['Server Settings'] = 'Configurações do servidor';
-$wb['Fetchmail'] = 'Contas de busca';
-$wb['Mailbox traffic'] = 'Tráfego';
+$wb['User / Domain'] = 'Usuário/Domínio';
+$wb['Server Settings'] = 'Configurações do Servidor';
+$wb['Spamfilter'] = 'Filtros anti-spam';
+$wb['Fetchmail'] = 'Busca de e-mails';
+$wb['XMPP Domain'] = 'Domínios xmpp';
+$wb['XMPP Account'] = 'Contas xmpp';
+$wb['Mailbox traffic'] = 'Tráfego de e-mails';
 $wb['Statistics'] = 'Estatísticas';
-$wb['Postfix Whitelist'] = 'Postfix (lista branca)';
-$wb['Postfix Blacklist'] = 'Postfix (lista negra)';
-$wb['Content Filter'] = 'Filtros de conteúdo';
-$wb['Global Filters'] = 'Filtros globais';
-$wb['Domain Alias'] = 'Apelidos de domínio';
+$wb['Backup Stats'] = 'Estatísticas de backup';
+$wb['Postfix Whitelist'] = 'Lista Branca do Postfix';
+$wb['Postfix Blacklist'] = 'Lista Negra do Postfix';
+$wb['Content Filter'] = 'Filtro de Conteúdo';
+$wb['Global Filters'] = 'Filtros Globais';
+$wb['Domain Alias'] = 'Alias de domínio';
 $wb['Relay Recipients'] = 'Destinatários de retransmissão';
-$wb['Mailbox quota'] = 'Cota para contas de e-mails';
-$wb['Server'] = 'Servidor';
-?>
+$wb['Mailbox quota'] = 'Cota da conta de e-mail';
+$wb['add_header_txt'] = 'Cabeçalho (adicionar "X-Spam: Yes")';
+$wb['rewrite_subject_txt'] = 'Assunto (adicionar "***SPAM***" no início)';
diff --git a/interface/web/mail/lib/lang/br_backup_stats_list.lng b/interface/web/mail/lib/lang/br_backup_stats_list.lng
index 9d078177121655157423d9747625715849760ef5..482e9132003ec55606af23a18c4e7b31ad5ad968 100644
--- a/interface/web/mail/lib/lang/br_backup_stats_list.lng
+++ b/interface/web/mail/lib/lang/br_backup_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Estatísticas de backup';
+$wb['list_head_txt'] = 'Backup de Estatísticas';
 $wb['active_txt'] = 'Ativo';
-$wb['domain_txt'] = 'e-mail';
-$wb['backup_count_txt'] = 'Contador de backup';
+$wb['domain_txt'] = 'Domínio';
+$wb['backup_count_txt'] = 'Contador de backups';
 $wb['backup_server_txt'] = 'Servidor';
-$wb['backup_interval_txt'] = 'Intervalo/contador';
-$wb['backup_size_txt'] = 'Tamanho';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_size_txt'] = 'Tamanho do backup';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_alias.lng b/interface/web/mail/lib/lang/br_mail_alias.lng
index 993dd71d2a0e7d35b3d2ca589ef51a9b2693e320..636195718062c6c89109f1e457f36069a1535a71 100644
--- a/interface/web/mail/lib/lang/br_mail_alias.lng
+++ b/interface/web/mail/lib/lang/br_mail_alias.lng
@@ -1,17 +1,17 @@
 <?php
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'Alias de e-mail';
 $wb['destination_txt'] = 'Destino';
 $wb['active_txt'] = 'Ativo';
 $wb['email_error_isemail'] = 'Endereço de e-mail é inválido.';
 $wb['email_error_unique'] = 'Endereço de e-mail duplicado.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
-$wb['destination_error_isemail'] = 'Endereço de destino inválido';
-$wb['limit_mailalias_txt'] = 'O limite de apelidos de domínio para esta conta foi alcançado.';
-$wb['duplicate_mailbox_txt'] = 'Já existe uma conta de e-mail com este endereço.';
+$wb['destination_error_isemail'] = 'Endereço de e-mail de destino é inválido.';
+$wb['limit_mailalias_txt'] = 'O limite de alias de e-mail para esta conta foi alcançado.';
+$wb['duplicate_mailbox_txt'] = 'Já existe um endereço de e-mail idêntico.';
 $wb['domain_txt'] = 'Domínio';
-$wb['duplicate_email_alias_txt'] = 'Este apelido de e-mail já existe.';
-$wb['source_txt'] = 'Apelido';
-$wb['greylisting_txt'] = 'Habilitar greylist';
+$wb['duplicate_email_alias_txt'] = 'Este alias de e-mail já existe.';
+$wb['source_txt'] = 'Alias';
 $wb['send_as_txt'] = 'Enviar como';
-$wb['send_as_exp'] = 'Permite o alvo enviar e-mails usando este endereço como origem';
+$wb['send_as_exp'] = 'Permitir o destino enviar e-mails usando este alias como origem';
+$wb['greylisting_txt'] = 'Habilitar greylist';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_alias_list.lng b/interface/web/mail/lib/lang/br_mail_alias_list.lng
index 69fb77a779c9f0bbeafa56ac660bd986a12a879c..5e96f0fb303640c12f6642cf7ce6c9e62299382d 100644
--- a/interface/web/mail/lib/lang/br_mail_alias_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_alias_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Apelidos de e-mail';
+$wb['list_head_txt'] = 'Alias de e-mail';
 $wb['active_txt'] = 'Ativo';
-$wb['source_txt'] = 'origem';
+$wb['source_txt'] = 'Origem';
 $wb['destination_txt'] = 'Destino';
-$wb['email_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar novo apelido';
+$wb['email_txt'] = 'e-Mail';
+$wb['add_new_record_txt'] = 'Adicionar novo alias de e-mail';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_aliasdomain.lng b/interface/web/mail/lib/lang/br_mail_aliasdomain.lng
index 68986f536ee8bff0f678240b611967f24f6e2d78..a0f4e5067e578b2e3b3916efa39e5df99a71ce5d 100644
--- a/interface/web/mail/lib/lang/br_mail_aliasdomain.lng
+++ b/interface/web/mail/lib/lang/br_mail_aliasdomain.lng
@@ -3,9 +3,9 @@ $wb['source_txt'] = 'Origem';
 $wb['destination_txt'] = 'Destino';
 $wb['active_txt'] = 'Ativo';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
-$wb['limit_mailaliasdomain_txt'] = 'O limite de apelidos de domínios para esta conta foi alcançado.';
+$wb['limit_mailaliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
 $wb['source_destination_identical_txt'] = 'Origem e destino são os mesmos.';
-$wb['source_error_empty'] = 'Origem está em branco.';
-$wb['source_error_unique'] = 'Origem duplicada.';
-$wb['source_error_regex'] = 'Origem inválida.';
+$wb['source_error_empty'] = 'O domínio de origem está em branco.';
+$wb['source_error_unique'] = 'Domínio de origem duplicado.';
+$wb['source_error_regex'] = 'Domínio de origem é inválido.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/br_mail_aliasdomain_list.lng
index 4849c3cb6b742facb01f17b443068cb7373dd04f..ddf1ea0a96bda75f53e48d6e85392491c37a5ecb 100644
--- a/interface/web/mail/lib/lang/br_mail_aliasdomain_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_aliasdomain_list.lng
@@ -1,7 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Apelido de domínio';
+$wb['list_head_txt'] = 'Alias de domínio';
 $wb['active_txt'] = 'Ativo';
 $wb['source_txt'] = 'Origem';
 $wb['destination_txt'] = 'Destino';
-$wb['add_new_record_txt'] = 'Adicionar novo apelido';
+$wb['source_txt'] = 'Origem';
+$wb['add_new_record_txt'] = 'Adicionar novo alias de domínio';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_backup_list.lng b/interface/web/mail/lib/lang/br_mail_backup_list.lng
index 8ef31a0769aac843d4ed56f08dcf70461c452579..b8e4f82300fb73a2cc2f9850a9b2283cf4591b0b 100644
--- a/interface/web/mail/lib/lang/br_mail_backup_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_backup_list.lng
@@ -3,14 +3,14 @@ $wb['list_head_txt'] = 'Backups existentes';
 $wb['date_txt'] = 'Data';
 $wb['backup_type_txt'] = 'Tipo';
 $wb['filename_txt'] = 'Arquivo de backup';
-$wb['restore_backup_txt'] = 'Restaurar backup';
-$wb['restore_info_txt'] = 'Restauração do backup iniciada. Esta ação poderá levar vários minutos para ser concluída. Aguarde.';
-$wb['restore_confirm_txt'] = 'A restauração do backup reescreverá os arquivos existentes das suas caixas postais. Tem certeza que deseja restaurar este backup?';
-$wb['download_pending_txt'] = 'Já existe um download deste backup em execução.';
-$wb['restore_pending_txt'] = 'Já existe uma restauração deste backup em execução.';
-$wb['delete_backup_txt'] = 'Remover backup';
-$wb['delete_info_txt'] = 'Remoção do backup iniciada. Esta ação poderá levar vários minutos para ser concluída. Aguarde.';
-$wb['delete_confirm_txt'] = 'Tem certeza que deseja remover este backup?';
-$wb['delete_pending_txt'] = 'Já existe uma remoção deste backup em execução.';
-$wb['filesize_txt'] = 'Tamanho';
+$wb['restore_backup_txt'] = 'Restaurar';
+$wb['restore_info_txt'] = 'A restauração do backup está em andamento. Esta ação demora vários minutos para concluir.';
+$wb['restore_confirm_txt'] = 'A restauração do backup pode sobrescrever arquivos das contas de e-mail. Você tem certeza que deseja restaurar este backup?';
+$wb['download_pending_txt'] = 'Já existe um download de backup em andamento.';
+$wb['restore_pending_txt'] = 'Já existe uma restauração de backup em andamento.';
+$wb['delete_backup_txt'] = 'Remover Backup';
+$wb['delete_info_txt'] = 'A remoção do backup está em andamento. Esta ação demora vários minutos para concluir.';
+$wb['delete_confirm_txt'] = 'Deseja remover este backup?';
+$wb['delete_pending_txt'] = 'Já existe uma remoção de backup em andamento.';
+$wb['filesize_txt'] = 'Tamanho do arquivo';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_blacklist.lng b/interface/web/mail/lib/lang/br_mail_blacklist.lng
index 4c52e77d23c0807962afd79eb20b2211bd08e14c..14c323c3420a4429d5de83543f1aaefd5384dc93 100644
--- a/interface/web/mail/lib/lang/br_mail_blacklist.lng
+++ b/interface/web/mail/lib/lang/br_mail_blacklist.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'Lista negra';
+$wb['source_txt'] = 'Lista Negra';
 $wb['recipient_txt'] = 'Destinatário';
 $wb['active_txt'] = 'Ativo';
-$wb['source_error_notempty'] = 'Endereço está em branco.';
+$wb['source_error_notempty'] = 'Destinatário está em branco.';
 $wb['type_txt'] = 'Tipo';
 $wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_blacklist_list.lng b/interface/web/mail/lib/lang/br_mail_blacklist_list.lng
index d561cea6b69c63107fadddfd05621a1403102479..319a3540166b756a41c756c904c0f69481688cb6 100644
--- a/interface/web/mail/lib/lang/br_mail_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_blacklist_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Lista Negra';
+$wb['list_head_txt'] = 'Lista negra';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'e-mail';
+$wb['source_txt'] = 'Endereço de e-mail';
 $wb['type_txt'] = 'Tipo';
 $wb['recipient_txt'] = 'Destinatário';
-$wb['add_new_record_txt'] = 'Adicionar novo e-mail à lista';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 $wb['access_txt'] = 'acesso';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_content_filter.lng b/interface/web/mail/lib/lang/br_mail_content_filter.lng
index dc85d4e78eed6fb9e1deff3f491a727ec72202fe..b0a7c15b12f3c62406460583e410633d9a19b3ef 100644
--- a/interface/web/mail/lib/lang/br_mail_content_filter.lng
+++ b/interface/web/mail/lib/lang/br_mail_content_filter.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['type_txt'] = 'Filtro';
-$wb['pattern_txt'] = 'Padrão de expressão regular.';
-$wb['data_txt'] = 'Data';
+$wb['pattern_txt'] = 'Padrão da expressão regular';
+$wb['data_txt'] = 'Dados';
 $wb['action_txt'] = 'Ação';
 $wb['active_txt'] = 'Ativo';
-$wb['pattern_error_empty'] = 'Padrão da expressão regular está em branco';
+$wb['pattern_error_empty'] = 'Padrão da expressão regular está em branco.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_content_filter_list.lng b/interface/web/mail/lib/lang/br_mail_content_filter_list.lng
index 4d35bd6352a3ff3bc83e112e772067d3f1df5266..65674a903d34f837fada7e587fd47e213bd0e0f4 100644
--- a/interface/web/mail/lib/lang/br_mail_content_filter_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_content_filter_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Cabeçalhos postfix e body checks';
+$wb['list_head_txt'] = 'Verificações de cabeçalho e corpo de e-mail - Postfix';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['pattern_txt'] = 'Padrão';
diff --git a/interface/web/mail/lib/lang/br_mail_domain.lng b/interface/web/mail/lib/lang/br_mail_domain.lng
index 87cdd1287cfbf03aab1b6fdc5e56ff2b8f7f02dc..0bdb473095f8ba0d364612e4a71b7462c8c3ac6c 100644
--- a/interface/web/mail/lib/lang/br_mail_domain.lng
+++ b/interface/web/mail/lib/lang/br_mail_domain.lng
@@ -3,21 +3,21 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['type_txt'] = 'Tipo';
 $wb['active_txt'] = 'Ativo';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Domínio duplicado';
-$wb['domain_error_regex'] = 'Nome de domínio inválido';
-$wb['client_txt'] = 'Cliente';
-$wb['limit_maildomain_txt'] = 'O limite de contas de e-mail para este domínio foi alcançado.';
-$wb['policy_txt'] = 'Filtro anti-spam';
-$wb['no_policy'] = '- desabilitado -';
-$wb['dkim_txt'] = 'habilitar DKIM';
+$wb['dkim_txt'] = 'Habilitar DKIM';
 $wb['dkim_private_txt'] = 'Chave privada DKIM';
-$wb['dkim_public_txt'] = 'Somente chave pública/nfor DKIM';
+$wb['dkim_public_txt'] = 'Chave pública DKIMapenas para informação';
 $wb['dkim_generate_txt'] = 'Gerar chave privada DKIM';
 $wb['dkim_dns_txt'] = 'Registro dns';
-$wb['dkim_private_key_error'] = 'Chave privada DKIM inválida';
-$wb['dkim_selector_txt'] = 'Seletor DKIM';
-$wb['dkim_selector_error'] = 'Seletor DKIM é inválido. Use apenas caracteres minúsculos e alfanuméricos (\'az\' ou \'0-9\') até o máximo de 63 caracteres';
-$wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)';
+$wb['dkim_private_key_error'] = 'A chave privada DKIM é inválida.';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'O domínio está duplicado.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['dkim_settings_txt'] = 'Domínio de e-mail identificado por chaves de domínio (DKIM)';
+$wb['client_txt'] = 'Cliente';
+$wb['limit_maildomain_txt'] = 'O limite de domínios de e-mail para esta conta foi alcançado.';
+$wb['policy_txt'] = 'Filtro anti-spam';
+$wb['no_policy'] = '-desabilitado-';
 $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido para esta conta.';
+$wb['dkim_selector_txt'] = 'Seletor DKIM';
+$wb['dkim_selector_error'] = 'Seletor DKIM é inválido. Utilize apenas caracteres alfanuméricos em minúsculas (a-z ou 0-9) e no máximo 63 caracteres.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_domain_catchall.lng b/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
index df5fd39b9a82688f2ba1373a36889eea2f9b5e2f..3d4f85af8dfc1110b3bf508e3705dfb76623aff4 100644
--- a/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/br_mail_domain_catchall.lng
@@ -1,11 +1,13 @@
 <?php
 $wb['domain_txt'] = 'Domínio';
-$wb['destination_txt'] = 'Destino';
+$wb['destination_txt'] = 'Endereço de e-mail de destino';
 $wb['active_txt'] = 'Ativo';
-$wb['domain_error_unique'] = 'Já existe uma conta cata tudo para este domínio.';
+$wb['domain_error_unique'] = 'Já existe uma conta cata-tudo para este domínio.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
-$wb['domain_error_regex'] = 'O domínio contém caracteres inválidos';
-$wb['limit_mailcatchall_txt'] = 'O limite de contas cata tudo para este domínio foi alcançado.';
+$wb['domain_error_regex'] = 'O domínio é inválido ou contêm caracteres inválidos.';
+$wb['limit_mailcatchall_txt'] = 'O limite de contas cata-tudo para esta conta foi alcançado.';
+$wb['domain_txt'] = 'Domínio';
 $wb['source_txt'] = 'Origem';
-$wb['destination_error_isemail'] = 'Destino não é um e-mail válido.';
+$wb['destination_error_isemail'] = 'Endereço de e-mail de destino é inválido.';
+$wb['greylisting_txt'] = 'Habilitar greylist';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng
index 57c1f3a11ac1012652866f510dd4e987eb7c0ac2..2d5747826ce17e7b8f545ef27b3cb6032936c646 100644
--- a/interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Contas cata tudo';
+$wb['list_head_txt'] = 'Conta cata-tudo';
 $wb['active_txt'] = 'Ativo';
-$wb['source_txt'] = 'Origem';
-$wb['destination_txt'] = 'Endereço de destino';
+$wb['source_txt'] = 'origem';
+$wb['destination_txt'] = 'Endereço de e-mail de destino';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['add_new_record_txt'] = 'Adicionar nova conta';
diff --git a/interface/web/mail/lib/lang/br_mail_forward.lng b/interface/web/mail/lib/lang/br_mail_forward.lng
index 8f9864638d83816ca88f878ddab81b0f1eb74011..5a2400e49b9b215f9cfd68b5a9b1b86341e3e852 100644
--- a/interface/web/mail/lib/lang/br_mail_forward.lng
+++ b/interface/web/mail/lib/lang/br_mail_forward.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['email_txt'] = 'e-mail';
-$wb['destination_txt'] = 'e-mail de destino';
+$wb['email_txt'] = 'e-Mail';
+$wb['destination_txt'] = 'Endereço e-mail de destino';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_mailforward_txt'] = 'O limite de encaminhamentos para esta conta foi alcançado.';
-$wb['duplicate_mailbox_txt'] = 'Já existe um e-mail com este endereço.';
+$wb['limit_mailforward_txt'] = 'O limite de encaminhamentos de e-mail para esta conta foi alcançado.';
+$wb['duplicate_mailbox_txt'] = 'Já existe um conta de e-mail idêntica.';
 $wb['domain_txt'] = 'Domínio';
-$wb['source_txt'] = 'Origem';
-$wb['greylisting_txt'] = 'Habilitar greylist';
-$wb['email_error_isemail'] = 'Por favor, insira um e-mail válido.';
+$wb['source_txt'] = 'Endereço de e-mail de origem';
+$wb['email_error_isemail'] = 'Por favor informe um endereço de e-mail válido.';
 $wb['send_as_txt'] = 'Enviar como';
-$wb['send_as_exp'] = 'Permite o alvo enviar e-mails usando este endereço como origem (se o alvo for interno)';
+$wb['send_as_exp'] = 'Permitir o destino enviar e-mails usando este endereço como origem (se o destino for interno)';
+$wb['greylisting_txt'] = 'Habilitar greylist';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_forward_list.lng b/interface/web/mail/lib/lang/br_mail_forward_list.lng
index 025ecc00b691caaed20c768c7ef32030a3838de6..166839e2c9a88d51a35593d39e346979bdfb6d4d 100644
--- a/interface/web/mail/lib/lang/br_mail_forward_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_forward_list.lng
@@ -2,7 +2,7 @@
 $wb['list_head_txt'] = 'Encaminhamento de e-mail';
 $wb['active_txt'] = 'Ativo';
 $wb['source_txt'] = 'Origem';
-$wb['destination_txt'] = 'Destino';
-$wb['email_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar novo encaminhamento';
+$wb['destination_txt'] = 'Destinatário';
+$wb['email_txt'] = 'e-Mail';
+$wb['add_new_record_txt'] = 'Adicionar novo encaminhamento de e-mail';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_get.lng b/interface/web/mail/lib/lang/br_mail_get.lng
index dc9d2fce87ad4360196a448f8964355200e60ec0..f3d055f6d8fb9e37b88a946865aed20bf7cb94a1 100644
--- a/interface/web/mail/lib/lang/br_mail_get.lng
+++ b/interface/web/mail/lib/lang/br_mail_get.lng
@@ -1,19 +1,19 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
 $wb['type_txt'] = 'Tipo';
-$wb['source_server_txt'] = 'Servidor pop3/imap';
+$wb['source_server_txt'] = 'Servidor POP3/IMAP';
 $wb['source_username_txt'] = 'Usuário';
 $wb['source_password_txt'] = 'Senha';
-$wb['source_delete_txt'] = 'Remover mensagens da origem após o recebimento';
+$wb['source_delete_txt'] = 'Remover e-mails após recuperação';
+$wb['source_delete_note_txt'] = 'Verifique primeiro se a recuperação de e-mails funciona antes de ativar esta opção.';
+$wb['source_read_all_txt'] = 'Recuperar todos e-mails (inclusive e-mails lidos)';
 $wb['destination_txt'] = 'Destino';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_fetchmail_txt'] = 'O limite de contas de buscas para esta conta foi alcançado.';
-$wb['source_server_error_isempty'] = 'Servidor está em branco.';
-$wb['source_username_error_isempty'] = 'Usuário está em branco.';
-$wb['source_password_error_isempty'] = 'Senha está em branco.';
-$wb['destination_error_isemail'] = 'Destino não selecionado.';
-$wb['source_server_error_regex'] = 'Servidor pop3/imap não é um domínio válido.';
-$wb['source_read_all_txt'] = 'Receber todos os e-mails (inclusive e-mails lidos)';
-$wb['error_delete_read_all_combination'] = 'Combinação ilegal de opções. Você não pode usar \'Apagar e-mails após recebimento\' = não junto com \'Receber todos os e-mail\' = sim.';
-$wb['source_delete_note_txt'] = 'Por favor, verifique se o e-mail do para recepção está operacional, antes de ativar esta configuração.';
+$wb['limit_fetchmail_txt'] = 'O limite de registros de busca de e-mails para esta conta foi alcançado.';
+$wb['source_server_error_isempty'] = 'O servidor está em branco.';
+$wb['source_username_error_isempty'] = 'O usuário está em branco.';
+$wb['source_password_error_isempty'] = 'A senha está em branco.';
+$wb['destination_error_isemail'] = 'Nenhum destino selecionado.';
+$wb['source_server_error_regex'] = 'O servidor POP3/IMAP é inválido.';
+$wb['error_delete_read_all_combination'] = 'Combinação ilegal nas opções. Não pode ser utilizado "Remover e-mails após recuperação" = "não" e "Recuperar todos e-mail" = "sim".';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_get_list.lng b/interface/web/mail/lib/lang/br_mail_get_list.lng
index 07d28d0bd8e58a089dc4d474456225ead762dece..84b8bbd33e9a99810396e5fc6b87a0103f56eb1a 100644
--- a/interface/web/mail/lib/lang/br_mail_get_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_get_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Busca de mensagens de um servidor POP3/IMAP';
+$wb['list_head_txt'] = 'Busca de e-mails de servidores externos - POP3/IMAP';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['source_server_txt'] = 'Servidor externo';
diff --git a/interface/web/mail/lib/lang/br_mail_mailinglist.lng b/interface/web/mail/lib/lang/br_mail_mailinglist.lng
index a34dca7f35a65222ed8ab152108ccea42097d891..87f5bcbb641e2e6ce4e713b8cafb75daea4f2714 100644
--- a/interface/web/mail/lib/lang/br_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/br_mail_mailinglist.lng
@@ -1,22 +1,22 @@
 <?php
-$wb['limit_mailmailinglist_txt'] = 'Limite alcançado';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['listname_error_empty'] = 'Nome da lista está em branco.';
-$wb['domain_error_regex'] = 'Domínio é inválido.';
-$wb['email_in_use_txt'] = 'e-mail está em uso';
+$wb['mailinglist_txt'] = 'Lista de e-mail';
+$wb['limit_mailmailinglist_txt'] = 'O limite foi alcançado.';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['listname_error_empty'] = 'O nome da lista está em branco.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['email_in_use_txt'] = 'O e-mail já está em uso.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
-$wb['listname_txt'] = 'Nome da lista';
+$wb['listname_txt'] = 'Lista';
 $wb['client_txt'] = 'Cliente';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['password_txt'] = 'Senha';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['listname_error_unique'] = 'Já existe uma lista com o mesmo nome neste servidor. Por favor, insira outro nome.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['listname_error_unique'] = 'Já existe uma lista de e-mails idêntica para este servidor. Por favor escolha um nome diferente.';
 $wb['email_error_isemail'] = 'Endereço de e-mail é inválido.';
-$wb['mailinglist_txt'] = 'Lista de e-mails';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/br_mail_mailinglist_list.lng
index 08fd204fbba37183d94172feb98567558711c2be..d7dcf02c012e2f4d2cd4a1bd9f2c854341a58599 100644
--- a/interface/web/mail/lib/lang/br_mail_mailinglist_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_mailinglist_list.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['list_head_txt'] = 'Lista de e-mails';
 $wb['domain_txt'] = 'Domínio';
-$wb['listname_txt'] = 'Nome';
+$wb['listname_txt'] = 'Nome da lista';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_relay_recipient.lng b/interface/web/mail/lib/lang/br_mail_relay_recipient.lng
index 0ce921b1a1efa90b40dfd5da394a41d016dcfc32..637788ce48baca6f1c7a6926e5c966eabf846326 100644
--- a/interface/web/mail/lib/lang/br_mail_relay_recipient.lng
+++ b/interface/web/mail/lib/lang/br_mail_relay_recipient.lng
@@ -3,7 +3,7 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['source_txt'] = 'Destinatário de retransmissão';
 $wb['recipient_txt'] = 'Destinatário';
 $wb['active_txt'] = 'Ativo';
-$wb['source_error_notempty'] = 'Endereço está em branco.';
+$wb['source_error_notempty'] = 'Destinatário de retransmissão está em branco.';
 $wb['type_txt'] = 'Tipo';
-$wb['limit_mailfilter_txt'] = 'O limite de filtros para esta conta foi alcançado.';
+$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_relay_recipient_list.lng b/interface/web/mail/lib/lang/br_mail_relay_recipient_list.lng
index b6ca775e5e0424d3f047086c76aba61aa40ff30b..d96bab59ebc78a3a20854ec9e89cae2ed9b34371 100644
--- a/interface/web/mail/lib/lang/br_mail_relay_recipient_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_relay_recipient_list.lng
@@ -2,8 +2,8 @@
 $wb['list_head_txt'] = 'Destinatários de retransmissão';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'Remetente';
+$wb['source_txt'] = 'Endereço do destinatário';
 $wb['recipient_txt'] = 'Destinatário';
-$wb['add_new_record_txt'] = 'Adicionar novo destinatário';
+$wb['add_new_record_txt'] = 'Adicionar novo destinatário de retransmissão';
 $wb['access_txt'] = 'acesso';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_spamfilter.lng b/interface/web/mail/lib/lang/br_mail_spamfilter.lng
index 3e7201b95d2a1c1a5b3ed68f887978dfad8d58d4..e38894fde375486c82c657d50397a481400d3c1c 100644
--- a/interface/web/mail/lib/lang/br_mail_spamfilter.lng
+++ b/interface/web/mail/lib/lang/br_mail_spamfilter.lng
@@ -1,17 +1,17 @@
 <?php
-$wb['email_txt'] = 'E-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['spam_rewrite_score_int_txt'] = 'Pontuação de reescrita';
-$wb['spam_redirect_score_int_txt'] = 'Pontuação de redirecionamento';
+$wb['spam_redirect_score_int_txt'] = 'Redirecionar pontuação';
 $wb['spam_delete_score_int_txt'] = 'Remover pontuação';
 $wb['spam_rewrite_subject_txt'] = 'Reescrever assunto';
 $wb['spam_redirect_maildir_txt'] = 'Redirecionar conta de e-mail';
 $wb['active_txt'] = 'Ativo';
-$wb['spam_rewrite_txt'] = 'Reescrever assunto da mensagem depois desta pontuação.';
-$wb['spam_redirect_txt'] = 'Redirecione esta mensagem depois desta pontuação para esta conta de e-mail';
-$wb['spam_delete_txt'] = 'Remover esta mensagem depois desta pontuação.';
-$wb['disable_txt'] = 'Dica: Para desabilitar uma opção de filtro, configure a pontuação como 0.00.';
+$wb['spam_rewrite_txt'] = 'Reescrever assunto do e-mail acima desta pontuação.';
+$wb['spam_redirect_txt'] = 'Redirecionar e-mail acima desta pontuação para a conta de e-mail selecionada.';
+$wb['spam_delete_txt'] = 'Remover e-mail acima desta pontuação.';
+$wb['disable_txt'] = 'Dica: Para desabilitar uma opção de filtragem, configure a pontuação para 0.00';
 $wb['email_error_isemail'] = 'Endereço de e-mail é inválido.';
-$wb['email_error_unique'] = 'Já existem registros iguais de filtros anti-spam para este e-mail.';
-$wb['spam_redirect_maildir_purge_txt'] = 'Remover Maildir depois';
-$wb['days_txt'] = 'Dias';
+$wb['email_error_unique'] = 'Já existe um filtro anti-spam igual para este endereço de e-mail.';
+$wb['spam_redirect_maildir_purge_txt'] = 'Remover diretório de e-mail após';
+$wb['days_txt'] = 'dias.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/br_mail_spamfilter_list.lng
index 40c680da72f1252a341b63fd0a1864fc213ab91e..51044a3beca5723a41319788b1a2d626bef69519 100644
--- a/interface/web/mail/lib/lang/br_mail_spamfilter_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_spamfilter_list.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['list_head_txt'] = 'Filtro anti-spam';
 $wb['active_txt'] = 'Ativo';
-$wb['server_id_txt'] = 'Servidor';
-$wb['server_name_txt'] = 'Nome';
-$wb['email_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar novo filtro anti-spam';
+$wb['server_id_txt'] = 'ID do servidor';
+$wb['server_name_txt'] = 'Nome do servidor';
+$wb['email_txt'] = 'e-Mail';
+$wb['add_new_record_txt'] = 'Adicionar filtro anti-spam';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_transport.lng b/interface/web/mail/lib/lang/br_mail_transport.lng
index 7b080493c2014e35187b7ee594e840dea04d2aec..cf59e244bbb4fb22f8c676d4ef0e2e4840067940 100644
--- a/interface/web/mail/lib/lang/br_mail_transport.lng
+++ b/interface/web/mail/lib/lang/br_mail_transport.lng
@@ -3,9 +3,9 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['destination_txt'] = 'Destino';
 $wb['type_txt'] = 'Tipo';
-$wb['mx_txt'] = 'Sem MX lookup';
+$wb['mx_txt'] = 'Sem pesquisa MX';
 $wb['sort_order_txt'] = 'Ordenar por';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_mailrouting_txt'] = 'O limite de transportes para esta conta foi alcançado.';
+$wb['limit_mailrouting_txt'] = 'O limite de rotas de e-mail para esta conta foi alcançado.';
 $wb['transport_txt'] = 'Transporte';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_transport_list.lng b/interface/web/mail/lib/lang/br_mail_transport_list.lng
index 1e824b345aa398dab72842a57ff74548deaee89e..4597742bef7b3eb3f60268b476f241c01ce6db09 100644
--- a/interface/web/mail/lib/lang/br_mail_transport_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_transport_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Transporte de e-mails';
-$wb['active_txt'] = 'Ativa';
+$wb['list_head_txt'] = 'Roteamento avançado de e-mail';
+$wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['transport_txt'] = 'Transporte';
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index a786566277f1b6ef13de16713847e8b2e27c839c..ed6e35ef617d5c3c04fdc38c1a5029aef873c359 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -1,65 +1,65 @@
 <?php
-$wb['custom_mailfilter_txt'] = 'Fórmula de filtro de e-mail';
-$wb['email_txt'] = 'e-mail';
+$wb['custom_mailfilter_txt'] = 'Modelo de filtro de e-mail personalizado';
+$wb['email_txt'] = 'e-Mail';
 $wb['cryptpwd_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['active_txt'] = 'Ativo';
 $wb['email_error_isemail'] = 'Endereço de e-mail é inválido.';
 $wb['email_error_unique'] = 'Endereço de e-mail duplicado.';
+$wb['autoresponder_subject_txt'] = 'Assunto do e-mail';
+$wb['autoresponder_subject'] = 'Resposta Automática';
 $wb['autoresponder_text_txt'] = 'Texto';
-$wb['autoresponder_txt'] = 'Autoresposta';
-$wb['no_domain_perm'] = 'Sem permissão para este domínio.';
-$wb['error_no_pwd'] = 'Senha está em branco.';
-$wb['quota_error_isint'] = 'O tamanho do e-mail deve ser um número.';
-$wb['quota_txt'] = 'Cota';
+$wb['autoresponder_txt'] = 'Ativo';
+$wb['autoresponder_start_date_txt'] = 'Iniciar em';
+$wb['autoresponder_start_date_ispast'] = 'O campo "Iniciar em" não pode ser menor que a data atual.';
+$wb['autoresponder_end_date_txt'] = 'Terminar em';
+$wb['autoresponder_end_date_isgreater'] = 'O campo "Terminar em" deve ser configurado e não pode ser menor ou igual a data atual.';
+$wb['autoresponder_start_date_is_required'] = 'Data iniciar deve ser configurado quando a opção de auto-resposta estiver habilitada.';
+$wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
+$wb['error_no_pwd'] = 'A senha está em branco.';
+$wb['quota_error_isint'] = 'O tamanho da conta de e-mail deve ser um número.';
+$wb['quota_txt'] = 'Cota (0 para ilimitado)';
 $wb['server_id_txt'] = 'ID do servidor';
 $wb['password_txt'] = 'Senha';
-$wb['maildir_txt'] = 'Caixa Postal';
+$wb['password_click_to_set_txt'] = 'Clique para configurar';
+$wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Habilitar recebimento';
 $wb['greylisting_txt'] = 'Habilitar greylist';
 $wb['access_txt'] = 'Habilitar acesso';
-$wb['policy_txt'] = 'Filtro anti-spam';
-$wb['no_policy'] = '- desabilitado -';
+$wb['policy_txt'] = 'Filtros anti-spam';
+$wb['no_policy'] = '-desabilitado-';
 $wb['limit_mailbox_txt'] = 'O limite de contas de e-mail para esta conta foi alcançado.';
-$wb['limit_mailquota_txt'] = 'O espaço em disco disponível para criação de contas de e-mail foi alcançado.';
-$wb['disableimap_txt'] = 'Desabilitar imap';
-$wb['disablepop3_txt'] = 'Desabilitar pop3';
-$wb['duplicate_alias_or_forward_txt'] = 'Já existe um apelido ou encaminhamento com este endereço de e-mail.';
-$wb['quota_error_value'] = 'Valor da cota é inválido. Valores válidos são: 0 para ilimitado ou número > 1';
-$wb['autoresponder_start_date_txt'] = 'Início:';
-$wb['autoresponder_start_date_ispast'] = 'A data de início não pode ser menor que a data atual.';
-$wb['autoresponder_end_date_txt'] = 'Término:';
-$wb['autoresponder_end_date_isgreater'] = 'A data de término não pode ser menor que a data de início.';
-$wb['move_junk_txt'] = 'Mover spam para o diretório junk';
-$wb['name_txt'] = 'Nome real';
+$wb['limit_mailquota_txt'] = 'O limite de tamanho para as contas de e-mails foi alcançado. O espaço disponível em MB é';
+$wb['disablesmtp_txt'] = 'Desabilitar SMTP (envio)';
+$wb['disableimap_txt'] = 'Desabilitar IMAP';
+$wb['disablepop3_txt'] = 'Desabilitar POP3';
+$wb['duplicate_alias_or_forward_txt'] = 'Já existe um alias ou encaminhamento para este endereço de e-mail.';
+$wb['quota_error_value'] = 'Valor da cota é inválido. Valores permitidos são: 0 para ilimitado ou números > 1.';
+$wb['move_junk_txt'] = 'Mover e-mails marcados como spam para o diretório junk.';
+$wb['name_txt'] = 'Nome';
 $wb['name_optional_txt'] = '(Opcional)';
-$wb['autoresponder_active'] = 'Ativar autoresposta';
+$wb['autoresponder_active'] = 'Habilitar auto-resposta';
 $wb['cc_txt'] = 'Enviar cópia para';
-$wb['cc_error_isemail'] = 'O campo \"Enviar cópia para\" deve conter um endereço de e-mail válido';
+$wb['sender_cc_txt'] = 'Enviar cópia oculta (BCC) para';
+$wb['cc_error_isemail'] = 'O campo "Enviar cópia para" contém um endereço de e-mail inválido.';
+$wb['sender_cc_error_isemail'] = 'O campo "Enviar cópia oculta para" contém um endereço de e-mail inválido.';
 $wb['domain_txt'] = 'Domínio';
 $wb['now_txt'] = 'Agora';
-$wb['login_error_unique'] = 'O acesso já está em uso.';
-$wb['login_error_regex'] = 'Caracteres válidos são: \'A-Z\', \'a-z\', \'0-9\', \'.\', \'_\' e \'-\'.';
-$wb['login_txt'] = 'Acesso (opcional)';
-$wb['error_login_email_txt'] = 'Este acesso não é permitido. Por favor, insira um usuário diferente ou use o endereço de e-mail.';
-$wb['autoresponder_subject_txt'] = 'Assunto do e-mail';
-$wb['autoresponder_subject'] = 'Resposta de ausência temporária';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['email_error_isascii'] = 'Por favor não use caracteres \"unicode\" para a senha. Esta ação poderá causar problemas com seu cliente de e-mail (mua).';
-$wb['cc_note_txt'] = '(Múltiplos e-mails separados por vírgulas)';
-$wb['disablesmtp_txt'] = 'Desabilitar smtp (envio)';
-$wb['autoresponder_start_date_is_required'] = 'Data de início deve ser configurada quando \'autoresposta\' é habilitada.';
-$wb['sender_cc_txt'] = 'Enviar cópia para';
-$wb['sender_cc_error_isemail'] = 'O campo \'Enviar cópia para\' não contém um endereço de e-mail válido';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias do backup';
+$wb['login_error_unique'] = 'O acesso já foi realizado.';
+$wb['login_error_regex'] = 'Caracteres válidos são "A-Z", "a-z", "0-9", ".", "_" e "-".';
+$wb['login_txt'] = 'Acesso';
+$wb['error_login_email_txt'] = 'Este acesso não é permitido. Por favor, forneça um nome de usuário ou endereço de e-mail diferente para acessar.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['no_backup_txt'] = 'Sem backup';
 $wb['daily_backup_txt'] = 'Diário';
 $wb['weekly_backup_txt'] = 'Semanal';
 $wb['monthly_backup_txt'] = 'Mensal';
-$wb['sender_cc_note_txt'] = '(Múltiplos e-mails separados por vírgulas)';
-$wb['password_click_to_set_txt'] = 'Configurar';
+$wb['email_error_isascii'] = 'Por favor, não use caracteres especiais para a senha. Isto poderá causar problemas no cliente de e-mail.';
+$wb['cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
+$wb['sender_cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user_filter.lng b/interface/web/mail/lib/lang/br_mail_user_filter.lng
index 7dca140ceeb7f80402b0c1f3060fa00e6699eb38..54ae96d6928405c3340ae39329810eee1308092f 100644
--- a/interface/web/mail/lib/lang/br_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_filter.lng
@@ -4,23 +4,23 @@ $wb['action_txt'] = 'Ação';
 $wb['target_txt'] = 'Pasta';
 $wb['active_txt'] = 'Ativo';
 $wb['rulename_error_empty'] = 'Nome está em branco.';
-$wb['searchterm_is_empty'] = 'Termo de busca está em branco.';
+$wb['searchterm_is_empty'] = 'Termo de pesquisa está em branco.';
 $wb['source_txt'] = 'Origem';
-$wb['target_error_regex'] = 'O alvo não pode conter os caracteres: \'a-z\', \'0-9\', \'-\', \'.\', \'_\', e \'{espaço}\'.';
-$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
+$wb['target_error_regex'] = 'O alvo pode conter apenas os caracteres: "a-z", "0-9", "-", ".", "_", e {espaço}';
+$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail foi alcançado.';
 $wb['subject_txt'] = 'Assunto';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Para';
-$wb['contains_txt'] = 'Contém';
+$wb['contains_txt'] = 'Contêm';
 $wb['is_txt'] = 'é';
-$wb['begins_with_txt'] = 'Começa com';
-$wb['ends_with_txt'] = 'Termina com';
-$wb['delete_txt'] = 'Remover';
+$wb['begins_with_txt'] = 'Iniciando com';
+$wb['ends_with_txt'] = 'Terminando com';
 $wb['move_stop_txt'] = 'Mover para';
+$wb['delete_txt'] = 'Remover';
 $wb['header_txt'] = 'Cabeçalho';
-$wb['size_over_txt'] = 'Tamanho máximo do e-mail (KB)';
-$wb['size_under_txt'] = 'Tamanho mínimo do e-mail (KB)';
-$wb['localpart_txt'] = 'Local';
+$wb['size_over_txt'] = 'Tamanho do e-mail acima de (KB)';
+$wb['size_under_txt'] = 'Tamanho do e-mail abaixo de (KB)';
+$wb['localpart_txt'] = 'Parte local';
 $wb['domain_txt'] = 'Domínio';
 $wb['keep_txt'] = 'Manter';
 $wb['reject_txt'] = 'Rejeitar';
diff --git a/interface/web/mail/lib/lang/br_mail_user_filter_list.lng b/interface/web/mail/lib/lang/br_mail_user_filter_list.lng
index feae1f4bb7cacb05a6f984dec9d76d16ab86aff0..516478f9f62694be2773e131f5a0ef5ed2c9e04b 100644
--- a/interface/web/mail/lib/lang/br_mail_user_filter_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_filter_list.lng
@@ -3,5 +3,5 @@ $wb['rulename_txt'] = 'Nome';
 $wb['add_new_record_txt'] = 'Adicionar novo filtro';
 $wb['page_txt'] = 'Página';
 $wb['page_of_txt'] = 'de';
-$wb['delete_confirmation'] = 'Tem certeza que gostaria de remover este filtro?';
+$wb['delete_confirmation'] = 'Você tem certeza que deseja remover este filtro?';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user_stats_list.lng b/interface/web/mail/lib/lang/br_mail_user_stats_list.lng
index 370ce3520fca56f77e343e703fa2d4b3d2153aea..f0305edac35ee7140875616202fb96301d735812 100644
--- a/interface/web/mail/lib/lang/br_mail_user_stats_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_stats_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Tráfego de e-mail';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['this_month_txt'] = 'Este mês';
 $wb['last_month_txt'] = 'Último mês';
 $wb['this_year_txt'] = 'Este ano';
diff --git a/interface/web/mail/lib/lang/br_mail_whitelist.lng b/interface/web/mail/lib/lang/br_mail_whitelist.lng
index 344338700363159164b496e82bc4aca9499613a8..4d3eb1e21945db5c2a33063949571c4e0b40d66b 100644
--- a/interface/web/mail/lib/lang/br_mail_whitelist.lng
+++ b/interface/web/mail/lib/lang/br_mail_whitelist.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'Lista Branca';
+$wb['source_txt'] = 'Endereço - lista branca';
 $wb['recipient_txt'] = 'Destinatário';
 $wb['active_txt'] = 'Ativo';
-$wb['source_error_notempty'] = 'Endereço em Branco.';
+$wb['source_error_notempty'] = 'Endereço de e-mail está em branco.';
 $wb['type_txt'] = 'Tipo';
-$wb['limit_mailfilter_txt'] = 'O limite de filtros para esta conta foi alcançado.';
+$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_whitelist_list.lng b/interface/web/mail/lib/lang/br_mail_whitelist_list.lng
index 40eced2d2cf68a92511133ea6a1ec2f646791181..0c7d3c717d349782912b8274d46e5321b1305573 100644
--- a/interface/web/mail/lib/lang/br_mail_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_whitelist_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Lista branca';
+$wb['list_head_txt'] = 'Filtros de e-mail - lista branca';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
-$wb['source_txt'] = 'e-mails na lista branca';
+$wb['source_txt'] = 'Endereços de e-mail - lista branca';
 $wb['type_txt'] = 'Tipo';
 $wb['recipient_txt'] = 'Destinatário';
-$wb['add_new_record_txt'] = 'Adicionar novo registro à lista';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 $wb['access_txt'] = 'acesso';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/br_spamfilter_blacklist.lng
index df01dd30bab7280bb35aba5b6c5efe97d21fbbf0..ec3dc5f66e81748cb82714bf6bee594cd5687cb0 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_blacklist.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_blacklist.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['wb_txt'] = 'wb';
+$wb['wb_txt'] = 'Lista branca/negra';
 $wb['rid_txt'] = 'Usuário';
-$wb['email_txt'] = 'Endereço de e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['priority_txt'] = 'Prioridade';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_spamfilter_wblist_txt'] = 'O limite de registros na lista branca/negra para esta conta foi alcançado.';
+$wb['limit_spamfilter_wblist_txt'] = 'O limite de filtros anti-spam "lista branca ou negra" para esta conta foi alcançado.';
 $wb['10 - highest'] = '10 - alta';
 $wb['5 - medium'] = '5 - média';
 $wb['1 - lowest'] = '1 - baixa';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng
index 527a1b43d91cdf5bdd9b4f4b79976b02b351f432..624cebfc51fb5e75064fabba693f3ee89bc6242b 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Filtro anti-spam (lista negra) ';
+$wb['list_head_txt'] = 'Filtro anti-spam - lista negra';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['priority_txt'] = 'Prioridade';
 $wb['rid_txt'] = 'Usuário';
-$wb['email_txt'] = 'Endereço de e-mail na lista negra';
-$wb['add_new_record_txt'] = 'Adicionar novo registro à lista';
+$wb['email_txt'] = 'Endereço de e-mail - lista negra';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_config.lng b/interface/web/mail/lib/lang/br_spamfilter_config.lng
index 9a12279a4a1b7b1ee66ce0635b86a1e053559a20..6182e8b788d21183f9824395912f48dbe14748d3 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_config.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_config.lng
@@ -1,20 +1,20 @@
 <?php
-$wb['getmail_config_dir_txt'] = 'Caminho de configuração getmail ';
+$wb['getmail_config_dir_txt'] = 'Caminho das configurações do getmail';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['netmask_txt'] = 'Máscara de rede';
+$wb['netmask_txt'] = 'Máscara';
 $wb['gateway_txt'] = 'Gateway';
-$wb['hostname_txt'] = 'Nome do servidor';
-$wb['nameservers_txt'] = 'Servidor de nomes';
+$wb['hostname_txt'] = 'Nome do host';
+$wb['nameservers_txt'] = 'Servidor(es) dns';
 $wb['module_txt'] = 'Módulo do servidor';
-$wb['maildir_path_txt'] = 'Caminho do Maildir';
-$wb['homedir_path_txt'] = 'Caminho do Homedir';
-$wb['mailuser_uid_txt'] = 'Usuário de e-mail (UID)';
-$wb['mailuser_gid_txt'] = 'Grupo de e-mail (GID)';
-$wb['mailuser_name_txt'] = 'Nome do usuário de e-mail';
-$wb['mailuser_group_txt'] = 'Grupo do usuário de e-mail';
-$wb['relayhost_txt'] = 'Host Relay';
-$wb['relayhost_user_txt'] = 'Usuário host relay';
-$wb['relayhost_password_txt'] = 'Senha host relay';
-$wb['mailbox_size_limit_txt'] = 'Tamanho da conta de e-mail';
-$wb['message_size_limit_txt'] = 'Tamanho da mensagem';
+$wb['maildir_path_txt'] = 'Caminho do maildir';
+$wb['homedir_path_txt'] = 'Caminho do homedir';
+$wb['mailuser_uid_txt'] = 'UID do mailuser';
+$wb['mailuser_gid_txt'] = 'GID do mailuser';
+$wb['mailuser_name_txt'] = 'Nome do mailuser';
+$wb['mailuser_group_txt'] = 'Grupo do mailuser';
+$wb['relayhost_txt'] = 'Host de retransmissão';
+$wb['relayhost_user_txt'] = 'Usuário de retransmissão';
+$wb['relayhost_password_txt'] = 'Senha do host de retransmissão';
+$wb['mailbox_size_limit_txt'] = 'Limite da conta de e-mail';
+$wb['message_size_limit_txt'] = 'Limite do tamanho da mensagem';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_config_list.lng b/interface/web/mail/lib/lang/br_spamfilter_config_list.lng
index 300e210b15748fb439291e6eef8c727dc9451147..6d4c1cf0e1ff4aced723addfadd5c90ee73f7981 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_config_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_config_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Configurações do servidor';
+$wb['list_head_txt'] = 'Configuração do Servidor';
 $wb['server_name_txt'] = 'Servidor';
-$wb['server_id_txt'] = 'ID do servidor';
+$wb['server_id_txt'] = 'ID do Servidor';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_policy.lng b/interface/web/mail/lib/lang/br_spamfilter_policy.lng
index 998f36d8fa776b612faeb3d95ac9a01f169c4fbc..476b27e5652bedc9f7914e1e76a59140442aca42 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_policy.lng
@@ -1,38 +1,51 @@
 <?php
-$wb['policy_name_txt'] = 'Nome da regra';
-$wb['virus_lover_txt'] = 'Permitir vírus';
-$wb['spam_lover_txt'] = 'Permitir spam';
-$wb['banned_files_lover_txt'] = 'Permitir arquivos banidos';
-$wb['bad_header_lover_txt'] = 'Permitir cabeçalho inválido';
-$wb['bypass_virus_checks_txt'] = 'Ignorar verificação de vírus';
-$wb['bypass_banned_checks_txt'] = 'Ignorar verificação de arquivos banidos';
-$wb['bypass_header_checks_txt'] = 'Ignorar verificação de cabeçalho inválido';
-$wb['virus_quarantine_to_txt'] = 'Encaminhar o vírus para o e-mail';
-$wb['spam_quarantine_to_txt'] = 'Encaminhar o spam para o e-mail';
+$wb['policy_name_txt'] = 'Nome da política';
+$wb['virus_lover_txt'] = 'Receber vírus';
+$wb['spam_lover_txt'] = 'Receber spam';
+$wb['banned_files_lover_txt'] = 'Receber arquivos banidos';
+$wb['bad_header_lover_txt'] = 'Receber cabeçalho inválido';
+$wb['bypass_virus_checks_txt'] = 'Ignorar verificações de vírus';
+$wb['bypass_banned_checks_txt'] = 'Ignorar verificações de arquivos banidos';
+$wb['bypass_header_checks_txt'] = 'Ignorar verificações de cabeçalho inválido';
+$wb['virus_quarantine_to_txt'] = 'Encaminhar vírus para o e-mail';
+$wb['spam_quarantine_to_txt'] = 'Encaminhar spam para o e-mail';
 $wb['banned_quarantine_to_txt'] = 'Encaminhar arquivos banidos para o e-mail';
 $wb['bad_header_quarantine_to_txt'] = 'Encaminhar cabeçalho inválido para o e-mail';
 $wb['clean_quarantine_to_txt'] = 'Encaminhar mensagens/arquivos em quarentena para o e-mail';
-$wb['other_quarantine_to_txt'] = 'Encaminhar para outro e-mail';
+$wb['other_quarantine_to_txt'] = 'Encaminhar mensagens/arquivos em quarentena para outro e-mail';
 $wb['spam_tag_level_txt'] = 'Nível 1 de marcação anti-spam';
 $wb['spam_tag2_level_txt'] = 'Nível 2 de marcação anti-spam';
 $wb['spam_kill_level_txt'] = 'Nível máximo de marcação anti-spam';
-$wb['spam_dsn_cutoff_level_txt'] = 'Nível de corte de dns anti-spam';
-$wb['spam_quarantine_cutoff_level_txt'] = 'Nível de corte de quarentena anti-spam';
-$wb['spam_modifies_subj_txt'] = 'Modificar assunto de mensagem com spam';
-$wb['spam_subject_tag_txt'] = 'Marcação de assunto spam 1';
-$wb['spam_subject_tag2_txt'] = 'Marcação de assunto spam 2';
-$wb['addr_extension_virus_txt'] = 'Adicionar extensão de vírus';
-$wb['addr_extension_spam_txt'] = 'Adicionar extensão de spam';
-$wb['addr_extension_banned_txt'] = 'Adicionar extensão de arquivos banidos';
-$wb['addr_extension_bad_header_txt'] = 'Adicionar extensão de cabeçalho inválido';
-$wb['warnvirusrecip_txt'] = 'Aviso de destinatário de vírus.';
-$wb['warnbannedrecip_txt'] = 'Aviso de destinatário de arquivos banidos.';
-$wb['warnbadhrecip_txt'] = 'Aviso de destinatário de cabeçalho é inválido.';
+$wb['spam_dsn_cutoff_level_txt'] = 'Nível de corte dsn anti-spam';
+$wb['spam_quarantine_cutoff_level_txt'] = 'Nível de corte para quarentena anti-spam';
+$wb['spam_modifies_subj_txt'] = 'Modificar assunto de mensagens marcadas como spam';
+$wb['spam_subject_tag_txt'] = 'Marcar assunto - SPAM 1';
+$wb['spam_subject_tag2_txt'] = 'Marcar assunto - SPAM 2';
+$wb['addr_extension_virus_txt'] = 'Adicionar extensão caso detecte vírus';
+$wb['addr_extension_spam_txt'] = 'Adicionar extensão caso detecte SPAM';
+$wb['addr_extension_banned_txt'] = 'Adicionar extensão caso detecte arquivo banido';
+$wb['addr_extension_bad_header_txt'] = 'Adicionar extensão caso detecte cabeçalho inválido';
+$wb['warnvirusrecip_txt'] = 'Aviso de vírus para o destinatário';
+$wb['warnbannedrecip_txt'] = 'Aviso de arquivo banido para destinatário';
+$wb['warnbadhrecip_txt'] = 'Aviso cabeçalho inválido para destinatário';
 $wb['newvirus_admin_txt'] = 'Administrador para novo vírus';
 $wb['virus_admin_txt'] = 'Administrador para vírus';
-$wb['banned_admin_txt'] = 'Administrador para arquivos banidos';
-$wb['bad_header_admin_txt'] = 'Administrador para cabeçalhos inválidos';
+$wb['banned_admin_txt'] = 'Administrador para arquivo banido';
+$wb['bad_header_admin_txt'] = 'Administrador para cabeçalho inválido';
 $wb['spam_admin_txt'] = 'Administrador para spam';
-$wb['message_size_limit_txt'] = 'Tamanho máximo da mensagem';
-$wb['banned_rulenames_txt'] = 'Regras de banimento';
-?>
+$wb['message_size_limit_txt'] = 'Limite de tamanho da mensagem';
+$wb['banned_rulenames_txt'] = 'Nome da regra para arquivo banido';
+$wb['rspamd_greylisting_txt'] = 'Habilitar greylist';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Nível da greylist';
+$wb['rspamd_spam_tag_level_txt'] = 'Nível da marcação anti-spam';
+$wb['rspamd_spam_tag_method_txt'] = 'Método da marcação anti-spam';
+$wb['rspamd_spam_kill_level_txt'] = 'Nível para rejeição de spam';
+$wb['btn_save_txt'] = 'Salvar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+
+$wb['amavis_settings_txt'] = 'Configurações';
+$wb['amavis_taglevel_txt'] = 'Nível de marcação';
+$wb['amavis_quarantine_txt'] = 'Quarentena';
+$wb['amavis_other_txt'] = 'Outro';
+$wb['add_header_txt'] = 'Adicionar cabeçalho';
+$wb['rewrite_subject_txt'] = 'Reescrever assunto';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/br_spamfilter_policy_list.lng
index 38d91f16d8afb682e4959b70d3d7af7eee77a077..269862fe99412f09c56c8a0b5443b02ee27e1653 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_policy_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_policy_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Políticas anti-spam';
+$wb['list_head_txt'] = 'Política anti-spam';
 $wb['policy_name_txt'] = 'Nome';
-$wb['virus_lover_txt'] = 'Permitir vírus';
-$wb['spam_lover_txt'] = 'Permitir spam';
-$wb['banned_files_lover_txt'] = 'Permitir arquivos banidos';
-$wb['bad_header_lover_txt'] = 'Permitir cabeçalho inválido';
+$wb['virus_lover_txt'] = 'Receber vírus';
+$wb['spam_lover_txt'] = 'Receber spam';
+$wb['banned_files_lover_txt'] = 'Receber arquivos banidos';
+$wb['bad_header_lover_txt'] = 'Receber cabeçalho inválido';
 $wb['add_new_record_txt'] = 'Adicionar registro';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_users.lng b/interface/web/mail/lib/lang/br_spamfilter_users.lng
index 2c33cd3552c1306f4c423a2246c249aa4ad1aedb..3b34351adbf5531d4eade5bd57545b7daa573c71 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_users.lng
@@ -2,7 +2,7 @@
 $wb['server_id_txt'] = 'Servidor';
 $wb['priority_txt'] = 'Prioridade';
 $wb['policy_id_txt'] = 'Política';
-$wb['email_txt'] = 'e-mail (padrão)';
+$wb['email_txt'] = 'e-Mail (padrão)';
 $wb['fullname_txt'] = 'Nome';
 $wb['local_txt'] = 'Local';
 $wb['email_error_notempty'] = 'Endereço de e-mail está em branco.';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_users_list.lng b/interface/web/mail/lib/lang/br_spamfilter_users_list.lng
index cf1f4900f92b170af0c10446426cfc35bf09ce97..fe3feb25cde7f161aed91bb6e1be74b058a112e2 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_users_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_users_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Usuários de filtro anti-spam';
+$wb['list_head_txt'] = 'Filtros anti-spam para contas de e-mail';
 $wb['local_txt'] = 'Local';
 $wb['server_id_txt'] = 'Servidor';
 $wb['priority_txt'] = 'Prioridade';
-$wb['policy_id_txt'] = 'Políticas';
+$wb['policy_id_txt'] = 'Política';
 $wb['fullname_txt'] = 'Nome';
-$wb['email_txt'] = 'e-mail';
-$wb['add_new_record_txt'] = 'Adicionar novo usuário';
+$wb['email_txt'] = 'e-Mail';
+$wb['add_new_record_txt'] = 'Adicionar novo filtro';
 ?>
diff --git a/interface/web/mail/lib/lang/br_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/br_spamfilter_whitelist.lng
index 0161d716aed23093855d38b86e11d1117e604a78..bcb9491cf0725e6c19f12a8d73b7fdf1ad6731e2 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_whitelist.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_whitelist.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['server_id_txt'] = 'Servidor';
-$wb['wb_txt'] = 'wb';
-$wb['rid_txt'] = 'Usuário';
-$wb['email_txt'] = 'e-mail';
+$wb['wb_txt'] = 'Lista branca/negra';
+$wb['rid_txt'] = 'Usário';
+$wb['email_txt'] = 'e-Mail';
 $wb['priority_txt'] = 'Prioridade';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_spamfilter_wblist_txt'] = 'O limite de registros na lista branca/negra para esta conta foi alcançado.';
diff --git a/interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng
index 8ef65dbfa23322fc22a8ce6e041c636221142640..e6d48491ee4a2e1a2f002819de4f69ca6df5011b 100644
--- a/interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Lista branca (anti-spam)';
+$wb['list_head_txt'] = 'Filtros anti-spam - Lista Branca';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['priority_txt'] = 'Prioridade';
 $wb['rid_txt'] = 'Usuário';
-$wb['email_txt'] = 'e-mail na lista branca';
-$wb['add_new_record_txt'] = 'Adicionar novo e-mail';
+$wb['email_txt'] = 'Lista Branca de e-mails';
+$wb['add_new_record_txt'] = 'Adicionar registro';
 ?>
diff --git a/interface/web/mail/lib/lang/br_user_quota_stats_list.lng b/interface/web/mail/lib/lang/br_user_quota_stats_list.lng
index a756443205585dd2e4940cb372ba26d0a3100a04..ee156b23a75928127cfad38206d329709f1c73c4 100755
--- a/interface/web/mail/lib/lang/br_user_quota_stats_list.lng
+++ b/interface/web/mail/lib/lang/br_user_quota_stats_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Cota para contas de e-mail';
+$wb['list_head_txt'] = 'Cota da conta de e-mail';
 $wb['quota_txt'] = 'Cota';
 $wb['name_txt'] = 'Nome';
 $wb['email_txt'] = 'Endereço de e-mail';
 $wb['used_txt'] = 'Espaço utilizado';
-$wb['percentage_txt'] = 'Percentual utilizado %';
+$wb['percentage_txt'] = 'Utilizado %';
 ?>
diff --git a/interface/web/mail/lib/lang/br_xmpp_domain.lng b/interface/web/mail/lib/lang/br_xmpp_domain.lng
index 1a9a42f0c1efdecbcb5d14a0dfb9f569205777da..1fd96ba13201149c3f47851e62e81ee69fe0e684 100644
--- a/interface/web/mail/lib/lang/br_xmpp_domain.lng
+++ b/interface/web/mail/lib/lang/br_xmpp_domain.lng
@@ -5,31 +5,31 @@ $wb['domain_txt'] = 'Domínio';
 $wb['type_txt'] = 'Tipo';
 $wb['active_txt'] = 'Ativo';
 $wb['client_txt'] = 'Cliente';
-$wb['management_method_txt'] = 'Gerenciamento de contas de usuários';
+$wb['management_method_txt'] = 'Gerenciar contas de usuário';
 $wb['public_registration_txt'] = 'Habilitar registro público';
 $wb['registration_url_txt'] = 'URL de registro';
 $wb['registration_message_txt'] = 'Mensagem de registro';
-$wb['domain_admins_txt'] = 'Administradores de domínio (JIDs)';
-$wb['use_pubsub_txt'] = 'Habilitar Pubsub';
-$wb['use_proxy_txt'] = 'Habilitar proxy Bytestream';
+$wb['domain_admins_txt'] = 'Administradores de domínios (JIDs)';
+$wb['use_pubsub_txt'] = 'Habilitar pubsub';
+$wb['use_proxy_txt'] = 'Habilitar proxy bytestream';
 $wb['use_anon_host_txt'] = 'Habilitar host anônimo';
-$wb['use_vjud_txt'] = 'Habilitar diretório de usuário VJUD';
-$wb['vjud_opt_mode_txt'] = 'Modo de operação VJUD';
-$wb['use_muc_host_txt'] = 'Habilitar chats multiusuários';
-$wb['muc_name_txt'] = 'Nome na descoberta do MUC';
-$wb['muc_restrict_room_creation_txt'] = 'Permissão para criar salas de chat';
-$wb['muc_admins_txt'] = 'Administradores de MUC (JIDs)';
-$wb['use_pastebin_txt'] = 'Habilitar Pastebin';
-$wb['pastebin_expire_after_txt'] = 'Colagens expiram após (horas)';
-$wb['pastebin_trigger_txt'] = 'Gatilho Pastebin';
-$wb['use_http_archive_txt'] = 'Habilitar arquivo HTTP em salas de chat';
-$wb['http_archive_show_join_txt'] = 'Exibir mensagens de participação em arquivos';
-$wb['http_archive_show_status_txt'] = 'Exibir estado de mudança em arquivos';
-$wb['use_status_host_txt'] = 'Habilitar estado XML do host';
-$wb['cant_change_domainname_txt'] = 'O nome domínio XMPP existente não pode ser modificado.';
-$wb['about_registration_url_txt'] = 'Link para o página de registro.';
-$wb['about_registration_message_txt'] = 'Descrição sobre seu processo de registro de conta.';
-$wb['no_corresponding_maildomain_txt'] = 'O domínio de e-mail correspondente para gerenciamento de usuário não foi encontrado. Por favor crie o domínio de e-mail primeiro.';
+$wb['use_vjud_txt'] = 'Habilitar diretório de usuário (VJUD)';
+$wb['vjud_opt_mode_txt'] = 'Modo opcional do VJUD';
+$wb['use_muc_host_txt'] = 'Habilitar chat multiusuário (MUC)';
+$wb['muc_name_txt'] = 'Nome no serviço de descoberta do MUC';
+$wb['muc_restrict_room_creation_txt'] = 'Permissão para adicionar salas de chat';
+$wb['muc_admins_txt'] = 'Administradores MUC (JIDs)';
+$wb['use_pastebin_txt'] = 'Habilitar pastebin';
+$wb['pastebin_expire_after_txt'] = 'Patas expira após (horas)';
+$wb['pastebin_trigger_txt'] = 'Desencadear pastebin';
+$wb['use_http_archive_txt'] = 'Habilitar arquivos HTTP em salas de chat';
+$wb['http_archive_show_join_txt'] = 'Exibir mensagens de ingresso no arquivo';
+$wb['http_archive_show_status_txt'] = 'Exibir estado da mudanças no arquivo';
+$wb['use_status_host_txt'] = 'Habilitar estado do XML do host';
+$wb['cant_change_domainname_txt'] = 'O nome existente do domínio xmpp não pode ser alterado.';
+$wb['about_registration_url_txt'] = 'Ligar ao seu formulário de registro.';
+$wb['about_registration_message_txt'] = 'Descrição sobre o processo de registro da sua conta.';
+$wb['no_corresponding_maildomain_txt'] = 'O domínio de e-mail correspondente para gerenciamento de usuários não foi encontrado. Por favor, crie um domínio de e-mail primeiro.';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
@@ -38,25 +38,25 @@ $wb['ssl_country_txt'] = 'País';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_email_txt'] = 'Endereço de e-mail';
 $wb['ssl_txt'] = 'SSL';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' está em branco.';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
+$wb['ssl_state_error_regex'] = 'Campo "Estado" é inválido. São caracteres válidos: "a-z", "0-9" e ".,-_".';
+$wb['ssl_locality_error_regex'] = 'Campo "Cidade" é inválido. São caracteres válidos: "a-z", "0-9" e ".,-_".';
+$wb['ssl_organisation_error_regex'] = 'Campo "Empresa" é inválido. São caracteres válidos: "a-z", "0-9" e ".,-_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'Campo "Departamento" é inválido. São caracteres válidos: "a-z", "0-9" e ".,-_".';
+$wb['ssl_country_error_regex'] = 'Campo "País" é inválido. São caracteres válidos: "A-Z".';
 $wb['none_txt'] = 'Nenhum';
-$wb['save_certificate_txt'] = 'Salvar certificado';
-$wb['create_certificate_txt'] = 'Adicionar certificado';
-$wb['delete_certificate_txt'] = 'Remover certificado';
-$wb['ssl_error_isemail'] = 'Por favor, insira um e-mail válido para gerar o certificado SSL.';
+$wb['save_certificate_txt'] = 'Salvar Certificado';
+$wb['create_certificate_txt'] = 'Adicionar Certificado';
+$wb['delete_certificate_txt'] = 'Remover Certificado';
+$wb['ssl_error_isemail'] = 'Por favor, insira um endereço de e-mail válido para geração do certificado SSL.';
 $wb['limit_xmppdomain_txt'] = 'O limite de domínios xmpp para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_xmpp_domain_list.lng b/interface/web/mail/lib/lang/br_xmpp_domain_list.lng
index ab8f3a90874e3cc5b0a50502611fe7e525b8676f..e0ff3a6fc6bf060f26bbad4387eb7191d033fc18 100644
--- a/interface/web/mail/lib/lang/br_xmpp_domain_list.lng
+++ b/interface/web/mail/lib/lang/br_xmpp_domain_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Domínio XMPP';
+$wb['list_head_txt'] = 'Domínios xmpp';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['add_new_record_txt'] = 'Adicionar novo domínio';
diff --git a/interface/web/mail/lib/lang/br_xmpp_user.lng b/interface/web/mail/lib/lang/br_xmpp_user.lng
index 8f2306814f270ac72d55b608372d2f67cddd0dce..5e7628dab2c5fe32c666427af40cbf5d2978e1ef 100644
--- a/interface/web/mail/lib/lang/br_xmpp_user.lng
+++ b/interface/web/mail/lib/lang/br_xmpp_user.lng
@@ -1,15 +1,15 @@
 <?php
-$wb['list_head_txt'] = 'Usuários XMPP';
+$wb['list_head_txt'] = 'Contas de usuários xmpp';
 $wb['jid_txt'] = 'ID do Jabber';
 $wb['active_txt'] = 'Ativo';
 $wb['cryptpwd_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['error_no_pwd'] = 'Senha está em branco.';
 $wb['password_txt'] = 'Senha';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
-$wb['limit_xmpp_user_txt'] = 'O limite de usuários xmpp para esta conta foi alcançando.';
+$wb['limit_xmpp_user_txt'] = 'O limite de usuários xmpp para esta conta foi alcançado.';
 ?>
diff --git a/interface/web/mail/lib/lang/br_xmpp_user_list.lng b/interface/web/mail/lib/lang/br_xmpp_user_list.lng
index 13d71a05a8e0439333afd1636a3ca453c9798715..0aefe11709c211178f71c0eb4c0a4ba28d522b71 100644
--- a/interface/web/mail/lib/lang/br_xmpp_user_list.lng
+++ b/interface/web/mail/lib/lang/br_xmpp_user_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Contas de usuário XMPP';
+$wb['list_head_txt'] = 'Contas de usuários xmpp';
 $wb['jid_txt'] = 'ID do Jabber';
 $wb['is_domain_admin_txt'] = 'Administrador do domínio';
 $wb['is_muc_admin_txt'] = 'Administrador MUC';
diff --git a/interface/web/mail/lib/lang/ca.lng b/interface/web/mail/lib/lang/ca.lng
index 1665346a8229117d70e7129747ffa0d8698c7cd7..0531f19bd0e5ca604c5d63922990664da48012bc 100644
--- a/interface/web/mail/lib/lang/ca.lng
+++ b/interface/web/mail/lib/lang/ca.lng
@@ -45,4 +45,6 @@ $wb['Mailbox traffic'] = 'Trafic de la boite courriels';
 $wb['Domain Alias'] = 'Alias de domaine';
 $wb['Relay Recipients'] = 'Destinataires de relais';
 $wb['Mailbox quota'] = 'Quota courriel';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng
index 7e82c34ca2b351e8582e37748c847cf14dcc64fa..feafd436f6bb47963d8429b11ae4ae80ab686458 100644
--- a/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Nom de domaine invalide, ou contient des caractère
 $wb['limit_mailcatchall_txt'] = 'Le nombre maximal de comptes collecteurs pour votre compte a été atteint.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'La destination n\'est pas valide.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ca_mail_user_filter.lng b/interface/web/mail/lib/lang/ca_mail_user_filter.lng
index 14b80ee07b28c5872b66bf88c70526ced7be0154..8744b2ab79209f4a27b1d36681be930a0bde220a 100644
--- a/interface/web/mail/lib/lang/ca_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Le nombre max de filtres courriel est atteint.';
 $wb['subject_txt'] = 'Sujet';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Pour';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contient';
 $wb['is_txt'] = 'Est';
 $wb['begins_with_txt'] = 'Commence par';
diff --git a/interface/web/mail/lib/lang/ca_spamfilter_policy.lng b/interface/web/mail/lib/lang/ca_spamfilter_policy.lng
index d07b382ddf7781c993f3382dddc875e4e7738c00..7b593f0a1697c9b78dc1f64dd0da707abf33de0f 100644
--- a/interface/web/mail/lib/lang/ca_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ca_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Admin mauvais entête';
 $wb['spam_admin_txt'] = 'Admin SPAM';
 $wb['message_size_limit_txt'] = 'Limite de taille de message';
 $wb['banned_rulenames_txt'] = 'Noms des règles bannir';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/cz.lng b/interface/web/mail/lib/lang/cz.lng
index d0f6157cb4291c525d8b049a249fc664a5c63792..040a6d0de8d29e595de36e0987cdbbb36eb2daec 100644
--- a/interface/web/mail/lib/lang/cz.lng
+++ b/interface/web/mail/lib/lang/cz.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Přezdívky e-mailových domén';
 $wb['Relay Recipients'] = 'Relay adresáti';
 $wb['Statistics'] = 'Statistiky';
 $wb['Mailbox quota'] = 'Kvóty pro e-mailové schránky';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_backup_list.lng b/interface/web/mail/lib/lang/cz_mail_backup_list.lng
index 91ea1ad49f00bb49edcb5a92658d928ca3f0abd1..d4f941a4cdfd75b4ba2975f613a5eba31b6844c3 100644
--- a/interface/web/mail/lib/lang/cz_mail_backup_list.lng
+++ b/interface/web/mail/lib/lang/cz_mail_backup_list.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['list_head_txt'] = 'Stávající zálohy';
+$wb['list_head_txt'] = 'Dostupné zálohy';
 $wb['date_txt'] = 'Datum';
 $wb['backup_type_txt'] = 'Typ';
 $wb['filename_txt'] = 'Záloha souborů';
 $wb['restore_backup_txt'] = 'Obnovit';
-$wb['restore_info_txt'] = 'Restore of the backup has been started. This action takes several minutes to be completed.';
-$wb['restore_confirm_txt'] = 'Restoring may overwrite existing files in your mailbox. Do you really want to restore this backup?';
-$wb['download_pending_txt'] = 'There is already a pending backup download job.';
-$wb['restore_pending_txt'] = 'There is already a pending backup restore job.';
+$wb['restore_info_txt'] = 'Obnovení zálohy bylo zahájeno. Dokončení této akce může trvat několik minut.';
+$wb['restore_confirm_txt'] = 'Obnovení může přepsat existující soubory ve vaší poštovní schránce. Opravdu chcete tuto zálohu obnovit ?';
+$wb['download_pending_txt'] = 'Již existuje čekající úloha pro stažení zálohy.';
+$wb['restore_pending_txt'] = 'Již existuje čekající úloha pro obnovu zálohy.';
 $wb['delete_backup_txt'] = 'Smazat zálohu';
 $wb['delete_info_txt'] = 'Bylo zahájeno odstranění zálohy. Tato akce může trvat několik minut než bude dokončena.';
 $wb['delete_confirm_txt'] = 'Opravdu chcete smazat tuto zálohu ?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
+$wb['delete_pending_txt'] = 'Již existuje čekající úloha pro odstranění zálohy.';
 $wb['filesize_txt'] = 'Velikost souboru';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng b/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng
index ab4006df0c6d1c7da5063606e6e790e18e214b24..d0ae7c7e4b6952da35f4a18d0de9bcda5137b538 100644
--- a/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Chybné doménové jméno nebo doména obsahuje chy
 $wb['limit_mailcatchall_txt'] = 'Byl dosažen maximální počet košů účtů pro Váš účet.';
 $wb['source_txt'] = 'Zdroj';
 $wb['destination_error_isemail'] = 'Cílová e-mailová adresa není platná.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_spamfilter_policy.lng b/interface/web/mail/lib/lang/cz_spamfilter_policy.lng
index c5765e807f561f242aab4e3114cb85887f780475..b8b8a2e78f17c837831a66c797aedf34eec3d8fb 100644
--- a/interface/web/mail/lib/lang/cz_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/cz_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Špatná hlavička admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Limit velikosti zprávy';
 $wb['banned_rulenames_txt'] = 'Název pravidel zabanované';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/de.lng b/interface/web/mail/lib/lang/de.lng
index 91418972dd0c69f73d0d4f1aba6d1d2e218f0ced..e0f1e7cd3b30e0022f142cada3ef0a713c2182d3 100644
--- a/interface/web/mail/lib/lang/de.lng
+++ b/interface/web/mail/lib/lang/de.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Globale Filter';
 $wb['Domain Alias'] = 'E-Mail Domain Alias';
 $wb['Relay Recipients'] = 'Relay Empfänger';
 $wb['Mailbox quota'] = 'E-Mail Konto Speichernutzung';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_domain_catchall.lng b/interface/web/mail/lib/lang/de_mail_domain_catchall.lng
index 9f37e56697126ed078d799f3c9ce4faeed8155c1..bef241e0ea6aabea07f902ff7529ac431de75c08 100644
--- a/interface/web/mail/lib/lang/de_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/de_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Ungültiger Domainname oder ungültige Zeichen im D
 $wb['limit_mailcatchall_txt'] = 'Die maximale Anzahl an Catchall Einträgen für Ihr Konto wurde erreicht.';
 $wb['source_txt'] = 'Quelle';
 $wb['destination_error_isemail'] = 'Das Ziel ist keine gültige E-Mail Adresse.';
+$wb['greylisting_txt'] = 'Aktiviere Greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/de_spamfilter_policy.lng b/interface/web/mail/lib/lang/de_spamfilter_policy.lng
index 32acca46860822f960c1d03ce316e047a29a3afc..1036fbf91c8f09bb6a263b729b39c72dfb5c92b1 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad Header Administrator';
 $wb['spam_admin_txt'] = 'SPAM Administrator';
 $wb['message_size_limit_txt'] = 'Nachrichtengrößen Limit';
 $wb['banned_rulenames_txt'] = 'Banned Richtliniennamen';
+$wb['rspamd_greylisting_txt'] = 'Greylisting nutzen';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting-Level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM-Markierungslevel';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM-Markierungsmethode';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM-Reject-Level';
+$wb['btn_save_txt'] = 'Speichern';
+$wb['btn_cancel_txt'] = 'Abbrechen';
+$wb['amavis_settings_txt'] = 'Einstellungen';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantäne';
+$wb['amavis_other_txt'] = 'Sonstiges';
+$wb['add_header_txt'] = 'Header hinzufügen';
+$wb['rewrite_subject_txt'] = 'Betreff ändern';
 ?>
diff --git a/interface/web/mail/lib/lang/dk.lng b/interface/web/mail/lib/lang/dk.lng
index 7330253c23385ff1b231c6baa9fc530d43fc673e..3fe8d568ae39076d9d2268ddc46f945cd8955c6d 100644
--- a/interface/web/mail/lib/lang/dk.lng
+++ b/interface/web/mail/lib/lang/dk.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Global Filtere';
 $wb['Domain Alias'] = 'Domæne Alias';
 $wb['Relay Recipients'] = 'Relay Modtagere';
 $wb['Mailbox quota'] = 'Postboks kvota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng b/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng
index 0cdcad2098a2ed022ceebc9474d487c36511638d..8c0be4977599589207235c7a56a99e9a326182f7 100644
--- a/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Ugyldigt domæne navn eller domæne, indeholder ugy
 $wb['limit_mailcatchall_txt'] = 'Max. antal af e-mail catchall konti for din konto er nået.';
 $wb['source_txt'] = 'Kilde';
 $wb['destination_error_isemail'] = 'Destinationen er ikke en gyldig e-mail adresse.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_mail_user_filter.lng b/interface/web/mail/lib/lang/dk_mail_user_filter.lng
index d43af17ffb11cffe672b573c75ccec3ad2fa3bf7..ef8be2a0c97f46b8aa3ae9442f41ad8c45db9ea6 100644
--- a/interface/web/mail/lib/lang/dk_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Max. antal af mailfiltere er nået.';
 $wb['subject_txt'] = 'Emne';
 $wb['from_txt'] = 'Fra';
 $wb['to_txt'] = 'Til';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Indeholder';
 $wb['is_txt'] = 'Er';
 $wb['begins_with_txt'] = 'Begynder med';
diff --git a/interface/web/mail/lib/lang/dk_spamfilter_policy.lng b/interface/web/mail/lib/lang/dk_spamfilter_policy.lng
index b225eb48ac99a1a1d57ce7e577448a90a28d9854..97b02923d82718f6fc748c1812408b0c4aea10ad 100644
--- a/interface/web/mail/lib/lang/dk_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/dk_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Meddelelses størrelse grænse';
 $wb['banned_rulenames_txt'] = 'Bandlyste reglnavne';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/el.lng b/interface/web/mail/lib/lang/el.lng
index f8cadc62f009b1763e9c1ce6e0d7efc720834792..cb873eac2a3ab46f81813deaba0405598f169b4d 100644
--- a/interface/web/mail/lib/lang/el.lng
+++ b/interface/web/mail/lib/lang/el.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Καθολικά Φίλτρα';
 $wb['Domain Alias'] = 'Ψευδώνυμο Domain';
 $wb['Relay Recipients'] = 'Παραλήπτες Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_domain_catchall.lng b/interface/web/mail/lib/lang/el_mail_domain_catchall.lng
index 43c0bdf5658a522b34f3badebc2ddec1849d5c5d..b04b43cfcce3e4f179a14d74e02ac30c82dc5d63 100644
--- a/interface/web/mail/lib/lang/el_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/el_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Μη έγκρυρο όνομα domain ή το όν
 $wb['limit_mailcatchall_txt'] = 'Το μέγιστο πλήθος των email catchall για τον λογαριασμό σας, έχει εξαντληθεί.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/el_spamfilter_policy.lng b/interface/web/mail/lib/lang/el_spamfilter_policy.lng
index 4ab7291697d37d7932f3a1ce950b641116258d46..0eed35023946f2d04adb1c1fd50ccc0c6a150d71 100644
--- a/interface/web/mail/lib/lang/el_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/el_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Όριο μεγέθους μηνύματος';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/en.lng b/interface/web/mail/lib/lang/en.lng
index e5f9e678c79eda6a4741562f06f1b337cfedeaef..22c67a286b0d3d7d40ab647f87aa0b067a5d9e0b 100644
--- a/interface/web/mail/lib/lang/en.lng
+++ b/interface/web/mail/lib/lang/en.lng
@@ -48,4 +48,5 @@ $wb['Global Filters'] = 'Global Filters';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb["Relay Recipients"] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
-?>
\ No newline at end of file
+$wb['add_header_txt'] = 'Header (adds "X-Spam: Yes")';
+$wb['rewrite_subject_txt'] = 'Subject (adds "***SPAM***" at the beginning)';
diff --git a/interface/web/mail/lib/lang/en_mail_domain_catchall.lng b/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
index 1f1726e54094dfe36f6979ee4b534abbc4105457..a49722802eb6c80bb13831621f838a0c44812f1b 100644
--- a/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/en_mail_domain_catchall.lng
@@ -9,4 +9,5 @@ $wb["limit_mailcatchall_txt"] = 'The max. number of email catchall accounts for
 $wb['domain_txt'] = 'Domain';
 $wb["source_txt"] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_user_filter.lng b/interface/web/mail/lib/lang/en_mail_user_filter.lng
index e78f808efa8a4a8df9e9d889581b57e6199ad790..462ee6d93653f8fd07abf97f2f7b82d23b053f39 100644
--- a/interface/web/mail/lib/lang/en_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/en_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb["limit_mailfilter_txt"] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/en_spamfilter_policy.lng b/interface/web/mail/lib/lang/en_spamfilter_policy.lng
index 2e0f05d6c0019511862054456e91a503b60a29af..af1aac5d7f6d3172de2d07e1b215a25d173b01b3 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb["bad_header_admin_txt"] = 'Bad header admin';
 $wb["spam_admin_txt"] = 'SPAM admin';
 $wb["message_size_limit_txt"] = 'Message size limit';
 $wb["banned_rulenames_txt"] = 'Banned rulenames';
-?>
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/es.lng b/interface/web/mail/lib/lang/es.lng
index 797aeeeb60db992af2a0f93ac0a6cfb3f7b85897..fdf4e5b00dc53d9b1ff7fa0d0de35c425a54499f 100755
--- a/interface/web/mail/lib/lang/es.lng
+++ b/interface/web/mail/lib/lang/es.lng
@@ -45,4 +45,6 @@ $wb['Tag-Level'] = 'Nivel de etiqueta';
 $wb['User / Domain'] = 'Usuario / Dominio';
 $wb['Users'] = 'Usuarios';
 $wb['Whitelist'] = 'Lista blanca';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
index 48ead68ac16742c12d73f9ab35b8413d1159e029..68e03c8c3712d4e5730303d782022fc2fd31bcc6 100755
--- a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_txt'] = 'Dominio';
 $wb['limit_mailcatchall_txt'] = 'Ha alcanzado el número máx. de correo \\"recoge-todo\\" para correo permitidos para su cuenta.';
 $wb['no_domain_perm'] = 'No tiene permisos para usar este dominio.';
 $wb['source_txt'] = 'Origen';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/es_mail_user_filter.lng b/interface/web/mail/lib/lang/es_mail_user_filter.lng
index 94100ef7a3c6a3d38f01eb68a970d295236791d1..ed221d5cb30a702fa181b27ecf4969f43299e045 100755
--- a/interface/web/mail/lib/lang/es_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/es_mail_user_filter.lng
@@ -25,5 +25,6 @@ $wb['subject_txt'] = 'Asunto';
 $wb['target_error_regex'] = 'El destino solo puede contener los siguientes caracteres: a-z, 0-9, -, ., _, y {espacio}';
 $wb['target_txt'] = 'Carpeta';
 $wb['to_txt'] = 'Para';
+$wb['list_id_txt'] = 'List ID';
 $wb['move_to_txt'] = 'Move to';
 ?>
diff --git a/interface/web/mail/lib/lang/es_spamfilter_policy.lng b/interface/web/mail/lib/lang/es_spamfilter_policy.lng
index 1cb1d436305bc088cc4ef1df46f5432f5f88d583..b7a168c9834566eba572e3abd0f56089b48c58d7 100755
--- a/interface/web/mail/lib/lang/es_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/es_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['virus_quarantine_to_txt'] = 'Reenviar virus al correo';
 $wb['warnbadhrecip_txt'] = 'Avisar al receptor de la cabecera incorrecta.';
 $wb['warnbannedrecip_txt'] = 'Avisar al receptor del bloqueo.';
 $wb['warnvirusrecip_txt'] = 'Avisar al receptor del virus.';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/fi.lng b/interface/web/mail/lib/lang/fi.lng
index 3738c7fd64154b1ca086d9fc5afa49a9cfff1b6f..78a4328336db951c351d5385aaa78d7370c3ba90 100755
--- a/interface/web/mail/lib/lang/fi.lng
+++ b/interface/web/mail/lib/lang/fi.lng
@@ -45,4 +45,6 @@ $wb['Server'] = 'Palvelin';
 $wb['Domain Alias'] = 'Aliasverkkotunnus';
 $wb['Relay Recipients'] = 'Välityksen vastaanottajat';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng b/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng
index f835f5667a8fa4f6f268f21b28a7c123c7bb0761..085a116c2c76ae262b97e7220c6e9a8813965eae 100755
--- a/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Vääränlainen verkkotunnus tai se sisältää kie
 $wb['limit_mailcatchall_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä CatchAll-tunnuksia.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/fi_mail_user_filter.lng b/interface/web/mail/lib/lang/fi_mail_user_filter.lng
index 1a4e7218a2807cf2f2e6ea293cbdfeb7880ab1c2..1238dc86fd79bc1a85fbf911121b65fabcc04488 100755
--- a/interface/web/mail/lib/lang/fi_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/fi_spamfilter_policy.lng b/interface/web/mail/lib/lang/fi_spamfilter_policy.lng
index 8f61ba411b64d7bc3b9541af4d39f086e488c7fa..4f720210773d06530551f13ae152049ebf461591 100755
--- a/interface/web/mail/lib/lang/fi_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/fi_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Otsikkovirhetunnisteiden ylläpitäjä';
 $wb['spam_admin_txt'] = 'Roskapostitunnisteiden ylläpitäjä';
 $wb['message_size_limit_txt'] = 'Viestin kokoraja';
 $wb['banned_rulenames_txt'] = 'Estojen sääntönimet';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/fr.lng b/interface/web/mail/lib/lang/fr.lng
index 3437d371003e1c6036001e26c0c099a0211a8a5a..a70f08029586cbe971d32de21e57c56fc90c2dcd 100644
--- a/interface/web/mail/lib/lang/fr.lng
+++ b/interface/web/mail/lib/lang/fr.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Alias de domaine';
 $wb['Relay Recipients'] = 'Destinataires de relais';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['Email'] = 'Email';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng
index b7c4b607601e0f4d9a0df31ec12bb3939330e246..199cd47224810f26214d75b82615ddb4b8ec5bfc 100644
--- a/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Nom de domaine invalide, ou contient des caractère
 $wb['limit_mailcatchall_txt'] = 'Le nombre maximal de comptes collecteurs pour votre compte a été atteint.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid e-mail address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_user_filter.lng b/interface/web/mail/lib/lang/fr_mail_user_filter.lng
index 49c5076d954656178667b5b42d1a08f192e5f7b5..b5cacf2e98628f05d922532ef14e023f12d9ee08 100644
--- a/interface/web/mail/lib/lang/fr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Le nombre max de filtres e-mail est atteint.';
 $wb['subject_txt'] = 'Sujet';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Pour';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contient';
 $wb['is_txt'] = 'Est';
 $wb['begins_with_txt'] = 'Commence par';
diff --git a/interface/web/mail/lib/lang/fr_spamfilter_policy.lng b/interface/web/mail/lib/lang/fr_spamfilter_policy.lng
index d07b382ddf7781c993f3382dddc875e4e7738c00..7b593f0a1697c9b78dc1f64dd0da707abf33de0f 100644
--- a/interface/web/mail/lib/lang/fr_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/fr_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Admin mauvais entête';
 $wb['spam_admin_txt'] = 'Admin SPAM';
 $wb['message_size_limit_txt'] = 'Limite de taille de message';
 $wb['banned_rulenames_txt'] = 'Noms des règles bannir';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/hr.lng b/interface/web/mail/lib/lang/hr.lng
index 882f6d2b7e1174df778c2e01a26dd91c7ed73064..877f8827f5bd5de291022b96528d15afb92109ec 100644
--- a/interface/web/mail/lib/lang/hr.lng
+++ b/interface/web/mail/lib/lang/hr.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Alias domena';
 $wb['Relay Recipients'] = 'Relay primatelji';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['Domain'] = 'Domain';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng
index 2c8d23e2184db732dd9ae9d3f91696fcf4880e7b..1c8da72ab3ee0107c9b09b518cfc5e6c677a5ba7 100644
--- a/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Neispravan naziv domene ili naziv sadrži nedozvolj
 $wb['limit_mailcatchall_txt'] = 'Iskorišten ja maksimalan broj email catchall računa.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_spamfilter_policy.lng b/interface/web/mail/lib/lang/hr_spamfilter_policy.lng
index e876330a68c7c365b12bf9a3f3cf6b5a652a6093..683b378c21e0eebc93556c6914165bc708521c02 100644
--- a/interface/web/mail/lib/lang/hr_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/hr_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/hu.lng b/interface/web/mail/lib/lang/hu.lng
index 752f4003a8f4683f53dedc7e4e30c061f443b92b..f3ffa4aef0414529a3048700bb37e983663842fc 100644
--- a/interface/web/mail/lib/lang/hu.lng
+++ b/interface/web/mail/lib/lang/hu.lng
@@ -45,4 +45,6 @@ $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Server'] = 'Server';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng b/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng
index 8331f2210178793142f38498dc0c334c8f559f2e..e26795953dc06ac0ae227577a9bdbaaefc06f72b 100644
--- a/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Érvénytelen domain vagy a domain érvénytelen ka
 $wb['limit_mailcatchall_txt'] = 'Nincs több catchall lehetőség.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_spamfilter_policy.lng b/interface/web/mail/lib/lang/hu_spamfilter_policy.lng
index 391d4ab43aee0e05aabd367c850527eebb81e2ea..c2b6b9244c4fd14d4328ae39f9c70f8956c32bdc 100644
--- a/interface/web/mail/lib/lang/hu_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/hu_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Hibás fejléc admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Levél méret limit';
 $wb['banned_rulenames_txt'] = 'Tiltószabály nevek';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/id.lng b/interface/web/mail/lib/lang/id.lng
index c9acaf27f169e12d7bada6a4f21bc960bc753bf3..3a2b5dfe452b76e838f7b3d4f2cc180861247af2 100644
--- a/interface/web/mail/lib/lang/id.lng
+++ b/interface/web/mail/lib/lang/id.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Penyaringan Global';
 $wb['Domain Alias'] = 'Alias Domain';
 $wb['Relay Recipients'] = 'Penerima Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_domain_catchall.lng b/interface/web/mail/lib/lang/id_mail_domain_catchall.lng
index 435856c1059e8900ca00d218853009449be044cd..c380957fdc210a831adacd6059a232378ee4fe79 100644
--- a/interface/web/mail/lib/lang/id_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/id_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Nama domain tidak valid atau domain mengandung kara
 $wb['limit_mailcatchall_txt'] = 'Jumlah maks akun catchall email untuk akun Anda sudah tercapai.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_user_filter.lng b/interface/web/mail/lib/lang/id_mail_user_filter.lng
index 0def30d1a8db3e0ee6f1137af335d36edf72a348..93f45979f39348b4af6d623eb201895daee9775e 100644
--- a/interface/web/mail/lib/lang/id_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/id_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/id_spamfilter_policy.lng b/interface/web/mail/lib/lang/id_spamfilter_policy.lng
index afa0ba1a0918c4401d61716d29627b25a0208906..9813dec470d870a8c507f0d343ff9de4c38c335b 100644
--- a/interface/web/mail/lib/lang/id_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/id_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Admin Bad header';
 $wb['spam_admin_txt'] = 'Admin SPAM';
 $wb['message_size_limit_txt'] = 'Batasan ukuran pesan';
 $wb['banned_rulenames_txt'] = 'Nama aturan Banned';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/it.lng b/interface/web/mail/lib/lang/it.lng
index 715e2efb8e43c73aa3679293b213e4a8f2af527a..15bc87ea3f470e39913aa49780cbe5a356e8a41f 100644
--- a/interface/web/mail/lib/lang/it.lng
+++ b/interface/web/mail/lib/lang/it.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Filtri globali';
 $wb['Domain Alias'] = 'Alias dominio';
 $wb['Relay Recipients'] = 'Destinatari inoltro';
 $wb['Mailbox quota'] = 'Quota Casella di Posta';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_domain_catchall.lng b/interface/web/mail/lib/lang/it_mail_domain_catchall.lng
index 6ff4cbdf1c9304d990b8092d050d8789bfef08e3..3345bed9c7e646b0cdab80cee00daa478c60a9cf 100644
--- a/interface/web/mail/lib/lang/it_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/it_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Invalid domain name od domain contiene caratteri no
 $wb['limit_mailcatchall_txt'] = 'The max. number of email catchall accounts raggiunto per il tuo account.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/it_spamfilter_policy.lng b/interface/web/mail/lib/lang/it_spamfilter_policy.lng
index e876330a68c7c365b12bf9a3f3cf6b5a652a6093..683b378c21e0eebc93556c6914165bc708521c02 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/ja.lng b/interface/web/mail/lib/lang/ja.lng
index f8289d49070912e680894b451d301ea189a02fc7..818a3ed126e4c3823692a00db81cb1983f9d3ceb 100644
--- a/interface/web/mail/lib/lang/ja.lng
+++ b/interface/web/mail/lib/lang/ja.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'グローバルフィルター';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng
index cb430fefe650083a1b65cabf1e3b8a298f1626eb..6da7d05c5608ab897af68322f7c5a6e1203a84fd 100644
--- a/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'ドメイン名が不正です。無効な文字を
 $wb['limit_mailcatchall_txt'] = 'キャッチオールアカウントが最大数に達したため、これ以上追加できません。';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_user_filter.lng b/interface/web/mail/lib/lang/ja_mail_user_filter.lng
index 847640fee4a1f01ccdb0e3af6377026b8b29e1b9..8ee3801cc8d146ab6086a6c66f082dc0d5902a14 100644
--- a/interface/web/mail/lib/lang/ja_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/ja_spamfilter_policy.lng b/interface/web/mail/lib/lang/ja_spamfilter_policy.lng
index 89d377a38429c6870ab5fccff09de4cf92cb7cc5..a23f28a7668c21998b91267daefb3e03dbd33502 100644
--- a/interface/web/mail/lib/lang/ja_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ja_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/nl.lng b/interface/web/mail/lib/lang/nl.lng
index e47cc658114c9dfd015e145fd4a36b3bc24ee6dc..6664809b46c0df078a6b3caa4bd20713bcd694fb 100644
--- a/interface/web/mail/lib/lang/nl.lng
+++ b/interface/web/mail/lib/lang/nl.lng
@@ -13,7 +13,7 @@ $wb['Spamfilter'] = 'Spamfilter';
 $wb['Email Routing'] = 'Email routing';
 $wb['Email transport'] = 'Email transport';
 $wb['Mailbox'] = 'Mailbox';
-$wb['Autoresponder'] = 'Autoresponder';
+$wb['Autoresponder'] = 'Autobeantwoorden';
 $wb['Mail Filter'] = 'Mail filter';
 $wb['Custom Rules'] = 'Custom rules';
 $wb['Email filter'] = 'E-mail filter';
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Globale filters';
 $wb['Domain Alias'] = 'Domein alias';
 $wb['Relay Recipients'] = 'Relay ontvangers';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng b/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng
index 06ad66c9bee5e0956fc4c12592dda50dae85f405..ee9c1f7678ae28fb04365a245a331d5848c1397f 100644
--- a/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Ongeldige domeinnaam of domein bevat ongeldige kara
 $wb['limit_mailcatchall_txt'] = 'Het max. aantal e-mail catchall accounts voor uw account is bereikt.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_get.lng b/interface/web/mail/lib/lang/nl_mail_get.lng
index 5cbeab14e71c65c41eed389fae10e3dda398b44f..738f93e663f6a1cd26fe86fef7cf1941a27f5564 100644
--- a/interface/web/mail/lib/lang/nl_mail_get.lng
+++ b/interface/web/mail/lib/lang/nl_mail_get.lng
@@ -13,7 +13,7 @@ $wb['source_username_error_isempty'] = 'Gebruikersnaam is niet ingvuld.';
 $wb['source_password_error_isempty'] = 'Wachtwoord is niet ingvuld.';
 $wb['destination_error_isemail'] = 'Geen bestemming geselecteerd.';
 $wb['source_server_error_regex'] = 'Pop3/Imap server is geen geldige domeinnaam.';
-$wb['source_read_all_txt'] = 'Retrieve all emails (incl. read mails)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \\"Delete emails after retrieval\\" = no together with \\"Retrieve all emails\\" = yes';
-$wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
+$wb['source_read_all_txt'] = 'Haal alle berichten op (incl. reeds gelezen)';
+$wb['error_delete_read_all_combination'] = 'Ongeldige combinatie van opties. \\"Verwijder e-mails na ontvangst\\" en \\"Haal alle berichten op (incl. reeds gelezen)\\" werken niet samen.';
+$wb['source_delete_note_txt'] = 'Controleer voor het activeren van deze optie of het ophalen van berichten naar verwachting werkt.';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 94dd0183329ea6a9d369f939763c9f70c7e836c7..65d89a32afa938b07d3fc066e6152f2c299b63d7 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -9,7 +9,6 @@ $wb['email_error_unique'] = 'Duplicaat e-mail adres.';
 $wb['autoresponder_text_txt'] = 'Tekst';
 $wb['autoresponder_txt'] = 'Actief';
 $wb['autoresponder_start_date_txt'] = 'Start op';
-$wb['autoresponder_start_date_ispast'] = 'Start datum mag niet in het verleden liggen.';
 $wb['autoresponder_end_date_txt'] = 'Eindigt op';
 $wb['autoresponder_end_date_isgreater'] = 'Einddatum moet later zijn dan de startdatum.';
 $wb['no_domain_perm'] = 'U heeft geen toestemming voor dit domein.';
@@ -34,11 +33,11 @@ $wb['quota_error_value'] = 'Ongeldige quota waarde. Toegestane waarden zijn: 0 =
 $wb['move_junk_txt'] = 'Verplaats SPAM e-mails naar junk folder';
 $wb['name_txt'] = 'Echte naam';
 $wb['name_optional_txt'] = '(Optioneel)';
-$wb['autoresponder_active'] = 'Inschakelen autoresponder';
+$wb['autoresponder_active'] = 'Inschakelen autobeantwoorden';
 $wb['cc_txt'] = 'Stuur kopie naar';
 $wb['cc_error_isemail'] = 'Het \\"Stuur kopie naar\\" veld bevat geen geldig e-mail adres';
 $wb['domain_txt'] = 'Domain';
-$wb['now_txt'] = 'Now';
+$wb['now_txt'] = 'Nu';
 $wb['login_error_unique'] = 'Login is already taken.';
 $wb['login_error_regex'] = 'Valid characters are A-Z, a-z, 0-9, ., _ and -.';
 $wb['login_txt'] = 'Login (optional)';
@@ -58,7 +57,7 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 $wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
+$wb['autoresponder_start_date_is_required'] = 'Een startdatun is vereist voor het inschakelen van Autobeantwoorden.';
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
 $wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
 $wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
diff --git a/interface/web/mail/lib/lang/nl_mail_user_filter.lng b/interface/web/mail/lib/lang/nl_mail_user_filter.lng
index 903b61072928c03f49e88a7d56ff92660364116b..95af45d96e51577b7f1c5fd1db3f3fe43889cf27 100644
--- a/interface/web/mail/lib/lang/nl_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user_filter.lng
@@ -7,23 +7,23 @@ $wb['rulename_error_empty'] = 'Naam is niet ingvuld.';
 $wb['searchterm_is_empty'] = 'Zoekterm is niet ingvuld.';
 $wb['source_txt'] = 'Bron';
 $wb['target_error_regex'] = 'Het doel mag alleen de volgende karakters bevatten: a-z, 0-9, -, ., _, en {spatie}';
-$wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
-$wb['subject_txt'] = 'Subject';
-$wb['from_txt'] = 'From';
-$wb['to_txt'] = 'To';
-$wb['contains_txt'] = 'Contains';
+$wb['limit_mailfilter_txt'] = 'Het max. aantal e-mail filters voor uw account is bereikt.';
+$wb['subject_txt'] = 'Onderwerp';
+$wb['from_txt'] = 'Afzender';
+$wb['to_txt'] = 'Bestemming';
+$wb['contains_txt'] = 'Bevat';
 $wb['is_txt'] = 'Is';
-$wb['begins_with_txt'] = 'Begins with';
-$wb['ends_with_txt'] = 'Ends with';
-$wb['delete_txt'] = 'Delete';
-$wb['move_stop_txt'] = 'Move to';
+$wb['begins_with_txt'] = 'Begint met';
+$wb['ends_with_txt'] = 'Eindigt in';
+$wb['delete_txt'] = 'Verwijderen';
+$wb['move_stop_txt'] = 'Verplaatsen naar';
 $wb['header_txt'] = 'Header';
-$wb['size_over_txt'] = 'Email size over (KB)';
-$wb['size_under_txt'] = 'Email size under (KB)';
+$wb['size_over_txt'] = 'Email grootte bove (KB)';
+$wb['size_under_txt'] = 'Email grootte onder (KB)';
 $wb['localpart_txt'] = 'Localpart';
-$wb['domain_txt'] = 'Domain';
-$wb['keep_txt'] = 'Keep';
-$wb['reject_txt'] = 'Reject';
+$wb['domain_txt'] = 'Domein';
+$wb['keep_txt'] = 'Behouden';
+$wb['reject_txt'] = 'Afwijzen';
 $wb['stop_txt'] = 'Stop';
-$wb['move_to_txt'] = 'Move to';
+$wb['move_to_txt'] = 'Verplaatsen naar';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user_list.lng b/interface/web/mail/lib/lang/nl_mail_user_list.lng
index e421af0ecc6d674117e75721b808b96c9c70afaa..39125af2e0b544140587ca56ab95376a837351d5 100644
--- a/interface/web/mail/lib/lang/nl_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user_list.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['list_head_txt'] = 'Mailbox';
 $wb['email_txt'] = 'E-mail';
-$wb['autoresponder_txt'] = 'Autoresponder';
+$wb['autoresponder_txt'] = 'Autobeantwoorden';
 $wb['add_new_record_txt'] = 'Toevoegen mailbox';
 $wb['name_txt'] = 'Echte naam';
 $wb['login_txt'] = 'Login';
-$wb['postfix_txt'] = 'Receiving';
+$wb['postfix_txt'] = 'Ontvangen';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
diff --git a/interface/web/mail/lib/lang/nl_spamfilter_policy.lng b/interface/web/mail/lib/lang/nl_spamfilter_policy.lng
index 84d5242da9f0676242a33a2630a5d9d43dc8e471..4a7ab96152fb78be0bd8936d36d3abd53e7f524a 100644
--- a/interface/web/mail/lib/lang/nl_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/nl_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Bericht grootte limiet';
 $wb['banned_rulenames_txt'] = 'Verbannen rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_spamfilter_users.lng b/interface/web/mail/lib/lang/nl_spamfilter_users.lng
index 4b7144b1f30d6baff0b0c3be6b66fdbcd1186126..697e130b35b684598ec557f33e87614e51ad65b5 100644
--- a/interface/web/mail/lib/lang/nl_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/nl_spamfilter_users.lng
@@ -4,7 +4,7 @@ $wb['priority_txt'] = 'Prioriteit';
 $wb['policy_id_txt'] = 'Policy';
 $wb['email_txt'] = 'E-mail (Patroon)';
 $wb['fullname_txt'] = 'Naam';
-$wb['local_txt'] = 'Locaal';
+$wb['local_txt'] = 'Lokaal';
 $wb['email_error_notempty'] = 'The email address must not be empty.';
 $wb['fullname_error_notempty'] = 'The name must not be empty.';
 $wb['10 - highest'] = '10 - highest';
diff --git a/interface/web/mail/lib/lang/pl.lng b/interface/web/mail/lib/lang/pl.lng
index 93861b784d051e3bf1f0136b7d2b611ab517c327..17b77019928c2b11d7eb14812ffb29ed7b56f8ee 100644
--- a/interface/web/mail/lib/lang/pl.lng
+++ b/interface/web/mail/lib/lang/pl.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Globalne filtry';
 $wb['Domain Alias'] = 'Alias domeny';
 $wb['Relay Recipients'] = 'Odbiorcy przekierowania';
 $wb['Mailbox quota'] = 'Użycie skrzynek email';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng b/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng
index 3630b954bfe00f3dccaeb2b8d61e9cb53ea7de6d..fad83875ca1b49db9b09a750e13b07c08348e2e6 100644
--- a/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Nieprawidłowa nazwa domeny. Domena zawiera niedozo
 $wb['limit_mailcatchall_txt'] = 'Maksymalna ilość kont e-mail catchall dla Twojej domeny została przekroczona.';
 $wb['source_txt'] = 'Źródło';
 $wb['destination_error_isemail'] = 'Cel nie jest poprawnym adresem email.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_spamfilter_policy.lng b/interface/web/mail/lib/lang/pl_spamfilter_policy.lng
index 8a825b55946b39c68fb62b2fd44339a978b00561..8291102308654357da915677a39d56430e350eb5 100644
--- a/interface/web/mail/lib/lang/pl_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/pl_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Admin obsługi złych nagłowków';
 $wb['spam_admin_txt'] = 'Admin obsługi spamu';
 $wb['message_size_limit_txt'] = 'Limit wielkości wiadomości';
 $wb['banned_rulenames_txt'] = 'Zabronione nazwy zasad';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/pt.lng b/interface/web/mail/lib/lang/pt.lng
index 7a9a69cf838c9e80ea109927e7d7061df11b93ce..d47eb6183bdcfe5f10c3a579c545034d9649a4c4 100644
--- a/interface/web/mail/lib/lang/pt.lng
+++ b/interface/web/mail/lib/lang/pt.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Filtros Globais';
 $wb['Domain Alias'] = 'Domínios Alias';
 $wb['Relay Recipients'] = 'Recipientes de Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng b/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng
index 1fde21c02051139d5c116dd393227a1788075fe2..e81afd74b904f757edfe264b9146c95d64099ce3 100644
--- a/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'O nome do domínio contém caracteres inválidos';
 $wb['limit_mailcatchall_txt'] = 'O número máximo de catchall para este domínio foi atingido.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_user_filter.lng b/interface/web/mail/lib/lang/pt_mail_user_filter.lng
index 42a7481d70fd920312f11f51706a6fe19097e0ac..906c27ecd2d6e523b6b8ec5c255383e1d065f33e 100644
--- a/interface/web/mail/lib/lang/pt_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/pt_spamfilter_policy.lng b/interface/web/mail/lib/lang/pt_spamfilter_policy.lng
index 1610aebdcaf6814a35a9b5938f55438eed093227..af960c99f610a4800f4e0a323ad8b00d98b5df83 100644
--- a/interface/web/mail/lib/lang/pt_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/pt_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Administrador de Bad header';
 $wb['spam_admin_txt'] = 'Administrador SPAM';
 $wb['message_size_limit_txt'] = 'Tamanho limite da mensagem';
 $wb['banned_rulenames_txt'] = 'Regras de Banimento';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/ro.lng b/interface/web/mail/lib/lang/ro.lng
index dbfa06bcc8510e898890dbe6267abf5db66d82b2..0c0e85995eadbea6e8b9024dfcadd4f3d3744ee0 100644
--- a/interface/web/mail/lib/lang/ro.lng
+++ b/interface/web/mail/lib/lang/ro.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Filtre Global';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng
index 97add765ab27660b2057353b254679e74a66a95f..c0689ca04465f0174fae8f64c43df4ef5d9d7d21 100644
--- a/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'nume de domeniu invalid sau caractere nepermise';
 $wb['limit_mailcatchall_txt'] = 'numarul maxim de CATCHALL pe contul dumneavoatra a fost atins';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_user_filter.lng b/interface/web/mail/lib/lang/ro_mail_user_filter.lng
index 7c5c72ad72a34bca4e01c691e2014f1d0f2a7309..22435d9e91524bfa0167dd2a79a4940e828cc404 100644
--- a/interface/web/mail/lib/lang/ro_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/ro_spamfilter_policy.lng b/interface/web/mail/lib/lang/ro_spamfilter_policy.lng
index 3645b3e1d1c444f8cfc66b514cd7ff847069952b..f77d0f3e5a9f08cedd95c2f319e2fbfbb5b25923 100644
--- a/interface/web/mail/lib/lang/ro_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ro_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = ' header defect  admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned nume reguli';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/ru.lng b/interface/web/mail/lib/lang/ru.lng
index 124441ffa9ee2153460f68e3b3e28325ab8fda8f..1b7995e024a5f4366b544ec2cb74ced8e7664523 100644
--- a/interface/web/mail/lib/lang/ru.lng
+++ b/interface/web/mail/lib/lang/ru.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Глобальные фильтры';
 $wb['Domain Alias'] = 'Алиасы доменов';
 $wb['Relay Recipients'] = 'Relay получатели';
 $wb['Mailbox quota'] = 'Квота почтового ящика';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng
index 60d3ebd326e87ae26ce931316aefa05e1a3c8e25..25349ca4972447406c55fcfa33558bbd548286a7 100644
--- a/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Некорректное имя домена.';
 $wb['limit_mailcatchall_txt'] = 'Максимальное число Макс. количество учётных записей сводных почтовых ящиков достигнуто.';
 $wb['source_txt'] = 'Источник';
 $wb['destination_error_isemail'] = 'Не выбран получатель или запись некорректна.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_get.lng b/interface/web/mail/lib/lang/ru_mail_get.lng
index 0ce613cd0538cd1f020b538c1b1a111c5e7edc51..b3f2f0b6bf993b5ea160c822947364ff2ef426c2 100644
--- a/interface/web/mail/lib/lang/ru_mail_get.lng
+++ b/interface/web/mail/lib/lang/ru_mail_get.lng
@@ -14,6 +14,6 @@ $wb['source_password_error_isempty'] = 'Пустой пароль.';
 $wb['destination_error_isemail'] = 'Не выбран получатель или запись некорректна.';
 $wb['source_server_error_regex'] = 'Некорректное доменное имя для сервера POP3/IMAP.';
 $wb['source_read_all_txt'] = 'Получать все сообщения электронной почты (включая прочитанные письма)';
-$wb['error_delete_read_all_combination'] = 'Недопустимая комбинация параметров. Вы не можете использовать \"Удалить письма после получения\" = НЕТ вместе с \"Получить все письма\" = ДА';
+$wb['error_delete_read_all_combination'] = 'Недопустимая комбинация параметров. Вы не можете использовать \\"Удалить письма после получения\\" = НЕТ вместе с \\"Получить все письма\\" = ДА';
 $wb['source_delete_note_txt'] = 'Пожалуйста, прежде чем активировать этот параметр, убедитесь в том, что сборщик почты работает.';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_user_filter.lng b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
index ecc2d25b9de7fad9ee7bc584aea3c7ec8013c1f4..c8306f9838ece9c91db26e241b3ae531bbe04464 100644
--- a/interface/web/mail/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
@@ -6,7 +6,7 @@ $wb['active_txt'] = 'Активно';
 $wb['rulename_error_empty'] = 'Имя пустое.';
 $wb['searchterm_is_empty'] = 'Поле поиска пустое.';
 $wb['source_txt'] = 'Источник';
-$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \"a-z\", \"0-9\", \"-\", \".\", \"_\" и {пробел}';
+$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \\"a-z\\", \\"0-9\\", \\"-\\", \\".\\", \\"_\\" и {пробел}';
 $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.';
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
diff --git a/interface/web/mail/lib/lang/ru_spamfilter_policy.lng b/interface/web/mail/lib/lang/ru_spamfilter_policy.lng
index 7bae8a0fd0b2ef0b5490bfbb3a1b436a6b5c4a7e..bab0a9ba0c96072796ba75fe397fc1b117d0b636 100644
--- a/interface/web/mail/lib/lang/ru_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/ru_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Админ: кривые заголовки';
 $wb['spam_admin_txt'] = 'Админ: СПАМ';
 $wb['message_size_limit_txt'] = 'Превышен размер сообщения';
 $wb['banned_rulenames_txt'] = 'Правила банов';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/se.lng b/interface/web/mail/lib/lang/se.lng
index 3edc2034d007c8f49e8ee0d6f9eb2da5b37021bb..7a415aa9011c8b1375d81419670403ff2c4b3dc0 100644
--- a/interface/web/mail/lib/lang/se.lng
+++ b/interface/web/mail/lib/lang/se.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Global Filters';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
index 7ef1116390f8acddcd7d556415746b566757c5d7..39c6e6c55943bb69f20f95d8aee594becf10e700 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Ogiltig domän eller domänen innehåller ogiltiga
 $wb['limit_mailcatchall_txt'] = 'Det maximala antalet catchall-adresser för ditt konto är uppnått.';
 $wb['source_txt'] = 'Källa';
 $wb['destination_error_isemail'] = 'Destinationen när inte en giltig epostadress.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/se_spamfilter_policy.lng b/interface/web/mail/lib/lang/se_spamfilter_policy.lng
index e876330a68c7c365b12bf9a3f3cf6b5a652a6093..683b378c21e0eebc93556c6914165bc708521c02 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Bad header admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/sk.lng b/interface/web/mail/lib/lang/sk.lng
index 22773a574a1ef64778d0d885701ea0c999d8f414..7b00f9d52c575ad9c4713751c9f83b177c907536 100644
--- a/interface/web/mail/lib/lang/sk.lng
+++ b/interface/web/mail/lib/lang/sk.lng
@@ -45,4 +45,6 @@ $wb['Global Filters'] = 'Globálne Filtere';
 $wb['Domain Alias'] = 'Domain Alias';
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
+$wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
+$wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng b/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng
index 38c37544e6411712ded4afd018d5503060885dc4..03c701c6db9edef1841ce6f03cc7d85059d486b9 100644
--- a/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng
@@ -8,4 +8,5 @@ $wb['domain_error_regex'] = 'Neplatný názov domény alebo doména obsahuje nep
 $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových doménových košov pre Váš účet je dosiahnutý.';
 $wb['source_txt'] = 'Source';
 $wb['destination_error_isemail'] = 'Destination is no valid email address.';
+$wb['greylisting_txt'] = 'Enable greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_user_filter.lng b/interface/web/mail/lib/lang/sk_mail_user_filter.lng
index 20904653c65588524f931debd9eb890d8f5569eb..7546cd6afa278c1cf57224c389335b9ee147f6dc 100644
--- a/interface/web/mail/lib/lang/sk_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/sk_spamfilter_policy.lng b/interface/web/mail/lib/lang/sk_spamfilter_policy.lng
index b58988d60b992ae6e1935c5f08feb4ad9e57f6a1..6a4d6362595b5df63fa9a54467ff6e7b7e6a3e73 100644
--- a/interface/web/mail/lib/lang/sk_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/sk_spamfilter_policy.lng
@@ -35,4 +35,17 @@ $wb['bad_header_admin_txt'] = 'Zlé hlavičky admin';
 $wb['spam_admin_txt'] = 'SPAM admin';
 $wb['message_size_limit_txt'] = 'Limit veľkosti správy';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
+$wb['rspamd_greylisting_txt'] = 'Use greylisting';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Greylisting level';
+$wb['rspamd_spam_tag_level_txt'] = 'SPAM tag level';
+$wb['rspamd_spam_tag_method_txt'] = 'SPAM tag method';
+$wb['rspamd_spam_kill_level_txt'] = 'SPAM reject level';
+$wb['btn_save_txt'] = 'Save';
+$wb['btn_cancel_txt'] = 'Cancel';
+$wb['amavis_settings_txt'] = 'Settings';
+$wb['amavis_taglevel_txt'] = 'Tag-Level';
+$wb['amavis_quarantine_txt'] = 'Quarantine';
+$wb['amavis_other_txt'] = 'Other';
+$wb['add_header_txt'] = 'Add header';
+$wb['rewrite_subject_txt'] = 'Rewrite subject';
 ?>
diff --git a/interface/web/mail/lib/lang/tr.lng b/interface/web/mail/lib/lang/tr.lng
index e2deaca006ce30b6fb2e01b73c017c7f53a6b575..52d1868b3eb79a95f935fd6913e74b64bf6ba6a2 100644
--- a/interface/web/mail/lib/lang/tr.lng
+++ b/interface/web/mail/lib/lang/tr.lng
@@ -4,45 +4,48 @@ $wb['Email Blacklist'] = 'E-posta Kara Listesi';
 $wb['Blacklist'] = 'Kara Liste';
 $wb['Mail Content Filter'] = 'E-posta İçerik Süzgeci';
 $wb['Filter'] = 'Süzgeç';
-$wb['Mail Domain'] = 'E-posta Alan Adı';
-$wb['Domain'] = 'Alan Adı';
+$wb['Mail Domain'] = 'E-posta Etki Alanı';
+$wb['Domain'] = 'Etki Alanı';
 $wb['Email Catchall'] = 'E-posta Tümünü Alma';
 $wb['Email Forward'] = 'E-posta Yönlendirme';
 $wb['Get Email'] = 'E-posta Al';
-$wb['Spamfilter'] = 'Önemsiz Posta Süzgeci';
+$wb['Spamfilter'] = 'Önemsiz İleti Süzgeci';
 $wb['Email Routing'] = 'E-posta Yöneltme';
 $wb['Email transport'] = 'E-posta Aktarma';
-$wb['Mailbox'] = 'Posta Kutusu';
+$wb['Mailbox'] = 'E-posta Kutusu';
 $wb['Autoresponder'] = 'Otomatik Yanıtlayıcı';
-$wb['Mail Filter'] = 'Posta Süzgeci';
+$wb['Mail Filter'] = 'E-posta Süzgeci';
 $wb['Custom Rules'] = 'Özel Kurallar';
 $wb['Email filter'] = 'E-posta Süzgeci';
 $wb['Email Whitelist'] = 'E-posta Beyaz Listesi';
 $wb['Whitelist'] = 'Beyaz Liste';
-$wb['Spamfilter blacklist'] = 'Önemsiz Posta Süzgeci Kara Listesi';
-$wb['Spamfilter Config'] = 'Önemsiz Posta Süzgeci Ayarları';
+$wb['Spamfilter blacklist'] = 'Önemsiz İleti Süzgeci Kara Listesi';
+$wb['Blacklist'] = 'Kara Liste';
+$wb['Spamfilter Config'] = 'Önemsiz İleti Süzgeci Ayarları';
 $wb['Server'] = 'Sunucu';
-$wb['Spamfilter policy'] = 'Önemsiz Posta Süzgeci Kuralları';
+$wb['Spamfilter policy'] = 'Önemsiz İleti Süzgeci Kuralları';
 $wb['Policy'] = 'Kural';
 $wb['Quarantine'] = 'Karantina';
 $wb['Tag-Level'] = 'Etiket Düzeyi';
 $wb['Other'] = 'DiÄŸer';
-$wb['Spamfilter users'] = 'Önemsiz Posta Süzgeci Kullanıcıları';
+$wb['Spamfilter users'] = 'Önemsiz İleti Süzgeci Kullanıcıları';
 $wb['Users'] = 'Kullanıcılar';
-$wb['Spamfilter Whitelist'] = 'Önemsiz Posta Beyaz Listesi';
+$wb['Spamfilter Whitelist'] = 'Önemsiz İleti Beyaz Listesi';
+$wb['Whitelist'] = 'Beyaz Liste';
 $wb['Email'] = 'E-posta';
 $wb['Email Mailbox'] = 'E-posta Kutusu';
 $wb['Email Accounts'] = 'E-posta Hesapları';
-$wb['User / Domain'] = 'Kullanıcı / Alan Adı';
+$wb['User / Domain'] = 'Kullanıcı / Etki Alanı';
 $wb['Server Settings'] = 'Sunucu Ayarları';
-$wb['Fetchmail'] = 'Posta Alma';
-$wb['Mailbox traffic'] = 'Posta Kutusu TrafiÄŸi';
+$wb['Spamfilter'] = 'Önemsiz İleti Süzgeci';
+$wb['Fetchmail'] = 'E-posta Alma';
+$wb['Mailbox traffic'] = 'E-posta Kutusu TrafiÄŸi';
 $wb['Statistics'] = 'Ä°statistikler';
 $wb['Postfix Whitelist'] = 'Postfix Beyaz Liste';
 $wb['Postfix Blacklist'] = 'Postfix Kara Liste';
 $wb['Content Filter'] = 'İçerik Süzgeci';
 $wb['Global Filters'] = 'Genel Süzgeçler';
-$wb['Domain Alias'] = 'Takma Alan Adı';
+$wb['Domain Alias'] = 'Takma Etki Alanı';
 $wb['Relay Recipients'] = 'Aktarılan Alıcılar';
-$wb['Mailbox quota'] = 'Posta Kutusu Kotası';
+$wb['Mailbox quota'] = 'E-posta Kutusu Kotası';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_backup_stats_list.lng b/interface/web/mail/lib/lang/tr_backup_stats_list.lng
index 79cd6c9a63589ba43dd7772821c3d63f7b7a8394..125bfc8284c22feda733a6e37db8ae1cdf5a05b4 100644
--- a/interface/web/mail/lib/lang/tr_backup_stats_list.lng
+++ b/interface/web/mail/lib/lang/tr_backup_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Backup Stats';
-$wb['active_txt'] = 'Active';
-$wb['domain_txt'] = 'Email';
-$wb['backup_count_txt'] = 'Backup count';
-$wb['backup_server_txt'] = 'Server';
-$wb['backup_interval_txt'] = 'Interval / cnt.';
-$wb['backup_size_txt'] = 'Backupsize';
+$wb['list_head_txt'] = 'Yedekleme Ä°statistikleri';
+$wb['active_txt'] = 'Etkin';
+$wb['domain_txt'] = 'E-posta';
+$wb['backup_count_txt'] = 'Yedek Sayısı';
+$wb['backup_server_txt'] = 'Sunucu';
+$wb['backup_interval_txt'] = 'Sıklık / Sayı';
+$wb['backup_size_txt'] = 'Yedek Boyutu';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_alias.lng b/interface/web/mail/lib/lang/tr_mail_alias.lng
index d3fd3f1271fd5bc078118526b82644db4c11dc64..ea440b2e63004a783c017a9c6580106493e34cd8 100644
--- a/interface/web/mail/lib/lang/tr_mail_alias.lng
+++ b/interface/web/mail/lib/lang/tr_mail_alias.lng
@@ -4,14 +4,14 @@ $wb['destination_txt'] = 'Hedef';
 $wb['active_txt'] = 'Etkin';
 $wb['email_error_isemail'] = 'E-posta adresi geçersiz.';
 $wb['email_error_unique'] = 'Bu e-posta adresi zaten var';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
 $wb['destination_error_isemail'] = 'Hedef e-posta adresi geçersiz.';
 $wb['limit_mailalias_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma e-posta adresi sayısına ulaştınız.';
-$wb['duplicate_mailbox_txt'] = 'Bu e-posta adresini kullanan bir posta kutusu zaten var';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['duplicate_mailbox_txt'] = 'Bu adresi kullanan bir e-posta kutusu zaten var';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['duplicate_email_alias_txt'] = 'Bu takma e-posta adresi zaten var.';
 $wb['source_txt'] = 'Takma Ad';
-$wb['send_as_txt'] = 'Send as';
-$wb['send_as_exp'] = 'Allow target to send mail using this alias as origin';
-$wb['greylisting_txt'] = 'Enable greylisting';
+$wb['send_as_txt'] = 'Gönderen';
+$wb['send_as_exp'] = 'Hedef bu adresi kaynak olarak göstererek e-posta gönderebilsin';
+$wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_aliasdomain.lng b/interface/web/mail/lib/lang/tr_mail_aliasdomain.lng
index d39c6f46a37f0b0371ff5b82e704c811792ec878..f6cd98261b171071ea21f50418bf7f2f892f660b 100644
--- a/interface/web/mail/lib/lang/tr_mail_aliasdomain.lng
+++ b/interface/web/mail/lib/lang/tr_mail_aliasdomain.lng
@@ -2,10 +2,10 @@
 $wb['source_txt'] = 'Kaynak';
 $wb['destination_txt'] = 'Hedef';
 $wb['active_txt'] = 'Etkin';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
-$wb['limit_mailaliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma alan adı sayısına ulaştınız.';
-$wb['source_destination_identical_txt'] = 'Kaynak ve Hedef alan adları aynı.';
-$wb['source_error_empty'] = 'Kaynak alan adı boş olamaz.';
-$wb['source_error_unique'] = 'Bu kaynak alan adı zaten var.';
-$wb['source_error_regex'] = 'Kaynak alan adı geçersiz.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
+$wb['limit_mailaliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['source_destination_identical_txt'] = 'Kaynak ve Hedef etki alanları aynı.';
+$wb['source_error_empty'] = 'Kaynak etki alanı boş olamaz.';
+$wb['source_error_unique'] = 'Bu kaynak etki alanı zaten var.';
+$wb['source_error_regex'] = 'Kaynak etki alanı geçersiz.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/tr_mail_aliasdomain_list.lng
index a6d3dfc3b98ad4a51a12e0ca5187e4bf19b0fef3..7cbc3aef9e72b8dae796c55eeaef9d56306d3cd1 100644
--- a/interface/web/mail/lib/lang/tr_mail_aliasdomain_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_aliasdomain_list.lng
@@ -1,7 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Takma Alan Adı';
+$wb['list_head_txt'] = 'Takma Etki Alanı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_txt'] = 'Kaynak';
 $wb['destination_txt'] = 'Hedef';
-$wb['add_new_record_txt'] = 'Takma Alan Adı Ekle';
+$wb['source_txt'] = 'Kaynak';
+$wb['add_new_record_txt'] = 'Takma Etki Alanı Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_backup_list.lng b/interface/web/mail/lib/lang/tr_mail_backup_list.lng
index 73286a0737103be7877ad8d6c3f4aaa669042224..1a5ae7227b7ecc08956e808a98d1cac7b900889c 100644
--- a/interface/web/mail/lib/lang/tr_mail_backup_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_backup_list.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['list_head_txt'] = 'Existing backups';
-$wb['date_txt'] = 'Date';
-$wb['backup_type_txt'] = 'Type';
-$wb['filename_txt'] = 'Backup file';
-$wb['restore_backup_txt'] = 'Restore';
-$wb['restore_info_txt'] = 'Restore of the backup has been started. This action takes several minutes to be completed.';
-$wb['restore_confirm_txt'] = 'Restoring may overwrite existing files in your mailbox. Do you really want to restore this backup?';
-$wb['download_pending_txt'] = 'There is already a pending backup download job.';
-$wb['restore_pending_txt'] = 'There is already a pending backup restore job.';
-$wb['delete_backup_txt'] = 'Delete Backup';
-$wb['delete_info_txt'] = 'Delete of the backup has been started. This action takes several minutes to be completed.';
-$wb['delete_confirm_txt'] = 'Really delete this backup?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
-$wb['filesize_txt'] = 'Filesize';
+$wb['list_head_txt'] = 'Var Olan Yedekler';
+$wb['date_txt'] = 'Tarih';
+$wb['backup_type_txt'] = 'Tür';
+$wb['filename_txt'] = 'Yedek Dosyası';
+$wb['restore_backup_txt'] = 'Geri Yükle';
+$wb['restore_info_txt'] = 'Yedekten geri yükleme işlemi başlatıldı. Bu işlemin tamamlanması bir kaç dakika sürebilir.';
+$wb['restore_confirm_txt'] = 'Geri yükleme işlemi sırasında e-posta kutunuzda var olan iletilerin üzerine yazılabilir. Bu yedeği geri yüklemek istediğinize emin misiniz?';
+$wb['download_pending_txt'] = 'Zaten bekleyen bir yedekleme indirme iÅŸlemi var.';
+$wb['restore_pending_txt'] = 'Zaten bekleyen bir yedek geri yükleme işlemi var.';
+$wb['delete_backup_txt'] = 'YedeÄŸi Sil';
+$wb['delete_info_txt'] = 'Yedeği silme işlemi başlatıldı. Bu işlemin tamamlanması bir kaç dakika sürebilir.';
+$wb['delete_confirm_txt'] = 'Bu yedeÄŸi silmek istediÄŸinize emin misiniz?';
+$wb['delete_pending_txt'] = 'Zaten bekleyen bir yedek silme iÅŸlemi var.';
+$wb['filesize_txt'] = 'Dosya Boyutu';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_blacklist.lng b/interface/web/mail/lib/lang/tr_mail_blacklist.lng
index ecdca0b1a5b390899b2c0ffe20c58d43475bdf4b..381a11fa98c2f651fd77a823bff5c88e4cb0ebda 100644
--- a/interface/web/mail/lib/lang/tr_mail_blacklist.lng
+++ b/interface/web/mail/lib/lang/tr_mail_blacklist.lng
@@ -4,6 +4,6 @@ $wb['source_txt'] = 'Kara Listedeki Adres';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_error_notempty'] = 'Adres boÅŸ olamaz.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_blacklist_list.lng b/interface/web/mail/lib/lang/tr_mail_blacklist_list.lng
index b9bf6ff92c1ee35879b86c488eb8294d810629d3..9446569f4f48683b7b057b44c89d4d61b1846d33 100644
--- a/interface/web/mail/lib/lang/tr_mail_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_blacklist_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'E-posta Kara Listesi';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['source_txt'] = 'Kara Listedeki Adres';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['add_new_record_txt'] = 'Kara Liste Kaydı Ekle';
 $wb['access_txt'] = 'EriÅŸim';
diff --git a/interface/web/mail/lib/lang/tr_mail_content_filter.lng b/interface/web/mail/lib/lang/tr_mail_content_filter.lng
index f13b01a680adeec05acb4472a1504c3941a43ac8..df2d4d5c431278891289998d15333408d3600e85 100644
--- a/interface/web/mail/lib/lang/tr_mail_content_filter.lng
+++ b/interface/web/mail/lib/lang/tr_mail_content_filter.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
 $wb['type_txt'] = 'Süzgeç';
-$wb['pattern_txt'] = 'Kurallı İfade Deseni';
+$wb['pattern_txt'] = 'Kurallı İfade Örüntüsü';
 $wb['data_txt'] = 'Veri';
 $wb['action_txt'] = 'Ä°ÅŸlem';
 $wb['active_txt'] = 'Etkin';
-$wb['pattern_error_empty'] = 'Desen boÅŸ olamaz.';
+$wb['pattern_error_empty'] = 'Örüntü boş olamaz.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain.lng b/interface/web/mail/lib/lang/tr_mail_domain.lng
index 4ee4aa50fa54f3a56fbd8ad649f1fd5bba1f2454..3e7d9cc4122771cb73fdcf4d7e212007959b37fb 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain.lng
@@ -1,23 +1,23 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['type_txt'] = 'Tip';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['type_txt'] = 'Tür';
 $wb['active_txt'] = 'Etkin';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Bu alan adı zaten var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Bu etki alanı zaten var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_maildomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['policy_txt'] = 'Önemsiz Posta Süzgeci';
+$wb['limit_maildomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
 $wb['no_policy'] = '- devre dışı -';
-$wb['dkim_txt'] = 'enable DKIM';
-$wb['dkim_private_txt'] = 'DKIM Private-key';
-$wb['dkim_public_txt'] = 'DKIM Public-key\nfor information only';
-$wb['dkim_generate_txt'] = 'Generate DKIM Private-key';
-$wb['dkim_dns_txt'] = 'DNS-Record';
-$wb['dkim_private_key_error'] = 'Invalid DKIM-Private key';
-$wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)';
-$wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.';
-$wb['dkim_selector_txt'] = 'DKIM-Selector';
-$wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars';
+$wb['dkim_txt'] = 'DKIM Kullanılsın';
+$wb['dkim_private_txt'] = 'Özel DKIM Anahtarı';
+$wb['dkim_public_txt'] = 'Herkese açık DKIM anahtarı' . "\n" . 'yalnız bilgilendirme için';
+$wb['dkim_generate_txt'] = 'Özel DKIM Anahtarı Üret';
+$wb['dkim_dns_txt'] = 'DNS Kaydı';
+$wb['dkim_private_key_error'] = 'Özel DKIM Anahtarı Geçersiz';
+$wb['dkim_settings_txt'] = 'DomainKeys Tanımlı E-posta (DKIM)';
+$wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
+$wb['dkim_selector_txt'] = 'DKIM Seçici';
+$wb['dkim_selector_error'] = 'DKIM seçici geçersiz. En fazla 63 karakter uzunluğunda, yalnız küçük İngilizce harf ve rakamları kullanın (a-z ya da 0-9)';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_admin_list.lng b/interface/web/mail/lib/lang/tr_mail_domain_admin_list.lng
index 7d56618eef6a061be68efceb10bd2017e711ccdf..f6937ab382c8b1dd5cc2896a8a4e86129268951d 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_admin_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_admin_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'E-posta Alan Adı';
+$wb['list_head_txt'] = 'E-posta Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['add_new_record_txt'] = 'Alan Adı Ekle';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
 $wb['active_txt'] = 'Etkin';
 $wb['sys_groupid_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
index 037d2ad16e295bba7ff12cbe315b68584a130356..bcdf6298469c4abae5b2785636387d18a12f73cd 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng
@@ -1,11 +1,12 @@
 <?php
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['destination_txt'] = 'Hedef';
 $wb['active_txt'] = 'Etkin';
-$wb['domain_error_unique'] = 'Bu alan adı için zaten bir tümünü al kayıdı var.';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz ya da geçersiz karakterler içeriyor.';
+$wb['domain_error_unique'] = 'Bu etki alanı için zaten bir tümünü al kayıdı var.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz ya da geçersiz karakterler içeriyor.';
 $wb['limit_mailcatchall_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla tümünü al hesabı sayısına ulaştınız.';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['source_txt'] = 'Kaynak';
 $wb['destination_error_isemail'] = 'Hedef e-posta adresi geçersiz.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/tr_mail_domain_catchall_list.lng
index 596e2dbdaed1447bb1ec374a2be070da081e9370..45a59fe831c628121c0b0305cc989e8a31bc391c 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_catchall_list.lng
@@ -2,8 +2,8 @@
 $wb['list_head_txt'] = 'E-posta Tümünü Al Hesabı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_txt'] = 'Kaynak';
-$wb['destination_txt'] = 'Hedef e-posta adresi';
+$wb['destination_txt'] = 'Hedef E-posta Adresi';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['add_new_record_txt'] = 'Tümünü Al Hesabı Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_domain_list.lng b/interface/web/mail/lib/lang/tr_mail_domain_list.lng
index 7a4a1f2b64a1c25e7451f57942e55aad2a4b9f6f..06a44455ebea967a1250c3cb7c51e73e93d409c4 100644
--- a/interface/web/mail/lib/lang/tr_mail_domain_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_domain_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'E-posta Alan Adı';
+$wb['list_head_txt'] = 'E-posta Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['add_new_record_txt'] = 'Alan Adı Ekle';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
 $wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_forward.lng b/interface/web/mail/lib/lang/tr_mail_forward.lng
index f96a0e4c070a1230606778be23f5fa806360a584..2352cd945f1922157886698000a7d5637f5681d0 100644
--- a/interface/web/mail/lib/lang/tr_mail_forward.lng
+++ b/interface/web/mail/lib/lang/tr_mail_forward.lng
@@ -3,11 +3,11 @@ $wb['email_txt'] = 'E-posta';
 $wb['destination_txt'] = 'Hedef E-posta';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_mailforward_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta yönlendirme sayısına ulaştınız.';
-$wb['duplicate_mailbox_txt'] = 'Bu e-posta adresini kullanan bir posta kutusu zaten var';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['duplicate_mailbox_txt'] = 'Bu e-posta adresini kullanan bir e-posta kutusu zaten var';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['source_txt'] = 'Kaynak E-posta';
-$wb['email_error_isemail'] = 'Please enter a valid email address.';
-$wb['send_as_txt'] = 'Send as';
-$wb['send_as_exp'] = 'Allow target to send mail using this address as origin (if target is internal)';
-$wb['greylisting_txt'] = 'Enable greylisting';
+$wb['email_error_isemail'] = 'Lütfen geçerli bir e-posta adresi yazın.';
+$wb['send_as_txt'] = 'Gönderen';
+$wb['send_as_exp'] = 'Hedef bu adresi kaynak olarak göstererek e-posta gönderebilsin (hedef iç kullanıcı ise)';
+$wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_get.lng b/interface/web/mail/lib/lang/tr_mail_get.lng
index b82b6c8c9a7f441d3bfc9da60b17ae97232b0f4f..2ad34342658f2d25e7bb4ac2cceb4c79f799679d 100644
--- a/interface/web/mail/lib/lang/tr_mail_get.lng
+++ b/interface/web/mail/lib/lang/tr_mail_get.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['source_server_txt'] = 'POP3/IMAP Sunucusu';
 $wb['source_username_txt'] = 'Kullanıcı Adı';
 $wb['source_password_txt'] = 'Parola';
@@ -9,11 +9,11 @@ $wb['source_delete_note_txt'] = 'Lütfen bu seçeneği etkinleştirmeden önce,
 $wb['source_read_all_txt'] = 'Tüm e-postalar alınsın (okunmuşlar dahil)';
 $wb['destination_txt'] = 'Hedef';
 $wb['active_txt'] = 'Etkin';
-$wb['limit_fetchmail_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla posta alma kaydı sayısına ulaştınız.';
+$wb['limit_fetchmail_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta alma kaydı sayısına ulaştınız.';
 $wb['source_server_error_isempty'] = 'Sunucu boÅŸ olamaz.';
 $wb['source_username_error_isempty'] = 'Kullanıcı adı boş olamaz.';
 $wb['source_password_error_isempty'] = 'Parola boÅŸ olamaz.';
 $wb['destination_error_isemail'] = 'Hedef seçilmemiş.';
-$wb['source_server_error_regex'] = 'POP3/IMAP Sunucu alan adı geçersiz.';
-$wb['error_delete_read_all_combination'] = 'Seçenek kombinasyonu geçersiz. You can not use \\"E-postalar alındıktan sonra silinsin\\" = Hayır iken \\"Tüm e-postalar alınsın\\" = Evet olamaz';
+$wb['source_server_error_regex'] = 'POP3/IMAP Sunucu etki alanı geçersiz.';
+$wb['error_delete_read_all_combination'] = 'Seçenek kombinasyonu geçersiz. "E-postalar Alındıktan Sonra Silinsin" seçeneği devre dışı iken "Tüm E-postalar Alınsın" seçeneği etkin olamaz';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_mailinglist.lng b/interface/web/mail/lib/lang/tr_mail_mailinglist.lng
index 17bfab31dcfce0b251f4a1ae22498a25bcf208be..4bd52db75e65b96c2fa8320e8408ee60e215e288 100644
--- a/interface/web/mail/lib/lang/tr_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/tr_mail_mailinglist.lng
@@ -1,19 +1,19 @@
 <?php
-$wb['mailinglist_txt'] = 'Posta Listesi';
+$wb['mailinglist_txt'] = 'E-posta Listesi';
 $wb['limit_mailmailinglist_txt'] = 'Sınıra ulaşıldı';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
 $wb['listname_error_empty'] = 'Liste adı boş olamaz.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
 $wb['email_in_use_txt'] = 'E-posta kullanımda';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['listname_txt'] = 'Liste Adı';
 $wb['client_txt'] = 'Müşteri';
 $wb['email_txt'] = 'E-posta';
 $wb['password_txt'] = 'Parola';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
diff --git a/interface/web/mail/lib/lang/tr_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/tr_mail_mailinglist_list.lng
index c605dd2442b4e0903c92639c5dd453378572f3e8..8070d1983df96b84048048cc9a9284fa244d1bcd 100644
--- a/interface/web/mail/lib/lang/tr_mail_mailinglist_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_mailinglist_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Posta Listesi';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['list_head_txt'] = 'E-posta Listesi';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['listname_txt'] = 'Liste Adı';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_relay_recipient.lng b/interface/web/mail/lib/lang/tr_mail_relay_recipient.lng
index 90153f8c4dc0944f2677bd129f074e702292caf0..a7d83620cb8bc5054d44f3cfbe8d0015c16d8f7e 100644
--- a/interface/web/mail/lib/lang/tr_mail_relay_recipient.lng
+++ b/interface/web/mail/lib/lang/tr_mail_relay_recipient.lng
@@ -4,6 +4,6 @@ $wb['source_txt'] = 'Aktarılan Alıcı';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_error_notempty'] = 'Adres boÅŸ olamaz.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_spamfilter.lng b/interface/web/mail/lib/lang/tr_mail_spamfilter.lng
index be63f712007019d7c8a10ea4e885fe432ac1ed10..6a708982f1bd8ab960a80cef9e4a972cc81de67a 100644
--- a/interface/web/mail/lib/lang/tr_mail_spamfilter.lng
+++ b/interface/web/mail/lib/lang/tr_mail_spamfilter.lng
@@ -7,11 +7,11 @@ $wb['spam_rewrite_subject_txt'] = 'Konuyu yeniden yaz';
 $wb['spam_redirect_maildir_txt'] = 'Mail kutusuna yönlendir';
 $wb['active_txt'] = 'Etkin';
 $wb['spam_rewrite_txt'] = 'Bu puanın üzerindeki e-posta konusunu yeniden yaz.';
-$wb['spam_redirect_txt'] = 'Bu puanın üzerindeki e-postayı seçilmiş posta kutusuna yönlendir.';
+$wb['spam_redirect_txt'] = 'Bu puanın üzerindeki e-postayı seçilmiş e-posta kutusuna yönlendir.';
 $wb['spam_delete_txt'] = 'Bu puanın üzerindeki e-postayı sil.';
 $wb['disable_txt'] = 'İpucu: Bir süzgeç seçeneğini devre dışı bırakmak için, puanı 0.00 olarak yazın.';
 $wb['email_error_isemail'] = 'E-posta adresi geçersiz.';
-$wb['email_error_unique'] = 'Bu e-posta adresi için önemiz posta süzgeci kaydı zaten var.';
-$wb['spam_redirect_maildir_purge_txt'] = 'Posta klasörü';
+$wb['email_error_unique'] = 'Bu e-posta adresi için önemiz  e-posta süzgeci kaydı zaten var.';
+$wb['spam_redirect_maildir_purge_txt'] = 'E-posta Klasörü';
 $wb['days_txt'] = ' gün aralıklarla temizlensin.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/tr_mail_spamfilter_list.lng
index 90981ad8fe48984c13ffde8e724205c408e6a4af..6901f541bd06a5d9988301bbb588f8bdbbe9f755 100644
--- a/interface/web/mail/lib/lang/tr_mail_spamfilter_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_spamfilter_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Süzgeci';
+$wb['list_head_txt'] = 'Önemsiz İleti Süzgeci';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['server_name_txt'] = 'server_name';
 $wb['email_txt'] = 'E-posta';
-$wb['add_new_record_txt'] = 'Önemsiz Posta Süzgeci Ekle';
+$wb['add_new_record_txt'] = 'Önemsiz İleti Süzgeci Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_transport.lng b/interface/web/mail/lib/lang/tr_mail_transport.lng
index f268fd5475855bd3e7421835c312dc07f903f83b..0b417703924b126b2dcfbf5a46fd13d30861844c 100644
--- a/interface/web/mail/lib/lang/tr_mail_transport.lng
+++ b/interface/web/mail/lib/lang/tr_mail_transport.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['destination_txt'] = 'Hedef';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['mx_txt'] = 'MX taraması yok';
 $wb['sort_order_txt'] = 'Sıralama';
 $wb['active_txt'] = 'Etkin';
diff --git a/interface/web/mail/lib/lang/tr_mail_transport_list.lng b/interface/web/mail/lib/lang/tr_mail_transport_list.lng
index f9608f64dc35d9caa40cb6c14fe492ded3396d6f..75c5962ece69a6c4c88686e74bd0b0eca04ed4e9 100644
--- a/interface/web/mail/lib/lang/tr_mail_transport_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_transport_list.lng
@@ -2,7 +2,7 @@
 $wb['list_head_txt'] = 'Gelişmiş E-posta Yöneltme';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['transport_txt'] = 'Aktarım';
 $wb['sort_order_txt'] = 'Sıralama';
 $wb['add_new_record_txt'] = 'Yöneltme Ekle';
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 6853b9619dcde8e4aa54da0f3ead62e825298334..99e98603963a0c70843cb364bce11c5dd985a26b 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -1,65 +1,65 @@
 <?php
-$wb['custom_mailfilter_txt'] = 'Özel posta süzgeci';
+$wb['custom_mailfilter_txt'] = 'Özel E-posta Süzgeci';
 $wb['email_txt'] = 'E-posta';
 $wb['cryptpwd_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['active_txt'] = 'Etkin';
 $wb['email_error_isemail'] = 'E-posta adresi geçersiz.';
 $wb['email_error_unique'] = 'Bu e-posta adresi zaten var.';
 $wb['autoresponder_subject_txt'] = 'E-posta Konusu';
-$wb['autoresponder_subject'] = 'Ofis dışında yanıtı';
+$wb['autoresponder_subject'] = 'Ofis Dışında Yanıtı';
 $wb['autoresponder_text_txt'] = 'Metin';
 $wb['autoresponder_txt'] = 'Etkin';
 $wb['autoresponder_start_date_txt'] = 'Başlangıç';
 $wb['autoresponder_start_date_ispast'] = 'Başlangıç zamanı geçmişte olamaz.';
 $wb['autoresponder_end_date_txt'] = 'BitiÅŸ';
 $wb['autoresponder_end_date_isgreater'] = 'Bitiş zamanı başlangıç zamanından sonra olmalıdır.';
-$wb['no_domain_perm'] = 'Bu alan adı için izniniz yok.';
+$wb['autoresponder_start_date_is_required'] = 'Otoyanıtlayıcı kullanıldığında başlangıç tarihi belirtilmelidir.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
 $wb['error_no_pwd'] = 'Parola boÅŸ olamaz.';
-$wb['quota_error_isint'] = 'Posta kutusunun boyutu bir sayı olmalıdır.';
+$wb['quota_error_isint'] = 'E-posta kutusunun boyutu bir sayı olmalıdır.';
 $wb['quota_txt'] = 'Kota (sınırsız için 0 yazın)';
-$wb['server_id_txt'] = 'Sunucu kodu';
+$wb['server_id_txt'] = 'Sunucu Kodu';
 $wb['password_txt'] = 'Parola';
-$wb['maildir_txt'] = 'Posta Klasörü';
+$wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
+$wb['maildir_txt'] = 'E-posta Klasörü';
 $wb['postfix_txt'] = 'Alım Etkin';
+$wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 $wb['access_txt'] = 'EriÅŸim Etkin';
-$wb['policy_txt'] = 'Önemsiz Posta Süzgeci';
+$wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
 $wb['no_policy'] = '- devre dışı -';
-$wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla posta kutusu sayısına ulaştınız.';
-$wb['limit_mailquota_txt'] = 'Posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
+$wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta kutusu sayısına ulaştınız.';
+$wb['limit_mailquota_txt'] = 'E-posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
 $wb['disablesmtp_txt'] = 'SMTP Kullanılmasın (gönderim)';
 $wb['disableimap_txt'] = 'IMAP Kullanılmasın';
 $wb['disablepop3_txt'] = 'POP3 Kullanılmasın';
 $wb['duplicate_alias_or_forward_txt'] = 'Bu e-posta adresi zaten takma ya da yönlendirilmiş.';
 $wb['quota_error_value'] = 'Kota değeri geçersiz. Değer sınırsız için 0 ya da 1 değerinden büyük olmalı';
-$wb['move_junk_txt'] = 'Önemsiz Epostalar Junk Klasörüne Taşınsın';
+$wb['move_junk_txt'] = 'Önemsiz İletiler Junk Klasörüne Taşınsın';
 $wb['name_txt'] = 'Ad';
 $wb['name_optional_txt'] = '(İsteğe bağlı)';
 $wb['autoresponder_active'] = 'Otoyanıtlayıcı kullanılsın';
 $wb['cc_txt'] = 'Kopyası şuraya gönderilsin';
+$wb['sender_cc_txt'] = 'Gidenin Gizli Kopyası Şuraya Gönderilsin';
 $wb['cc_error_isemail'] = 'Kopyası şuraya gönderilsin alanına geçerli bir e-posta adresi yazılmalı';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['sender_cc_error_isemail'] = 'Gidenin gizli kopyası şuraya gönderilsin alanındaki e-posta adresi geçersiz';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['now_txt'] = 'Åžimdi';
 $wb['login_error_unique'] = 'Kullanıcı adı zaten var.';
 $wb['login_error_regex'] = 'Kullanılabilecek karakterler: A-Z, a-z, 0-9, ., _ ve -.';
-$wb['login_txt'] = 'Kullanıcı adı (isteğe bağlı)';
+$wb['login_txt'] = 'Kullanıcı Adı (İsteğe Bağlı)';
 $wb['error_login_email_txt'] = 'Bu kullanıcı adı kullanılamaz. Lütfen farklı bir kullanıcı adı yazın ya da e-posta adresini kullanın.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
+$wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
+$wb['backup_copies_txt'] = 'Yedek kopyalarının sayısı';
+$wb['no_backup_txt'] = 'Yedek yok';
+$wb['daily_backup_txt'] = 'Günlük';
+$wb['weekly_backup_txt'] = 'Haftalık';
+$wb['monthly_backup_txt'] = 'Aylık';
 $wb['email_error_isascii'] = 'E-posta istemcinizde sorun yaşamamak için lütfen parolanızda dile özel unikod karakterler kullanmayın.';
 $wb['cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
-$wb['password_click_to_set_txt'] = 'Click to set';
-$wb['greylisting_txt'] = 'Enable greylisting';
-$wb['sender_cc_txt'] = 'Send outgoing BCC to';
-$wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
-$wb['backup_interval_txt'] = 'Backup interval';
-$wb['backup_copies_txt'] = 'Number of backup copies';
-$wb['no_backup_txt'] = 'No backup';
-$wb['daily_backup_txt'] = 'Daily';
-$wb['weekly_backup_txt'] = 'Weekly';
-$wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_user_filter.lng b/interface/web/mail/lib/lang/tr_mail_user_filter.lng
index 8897a9d18b472f2968e2389d3da6f9f5fa4bb06d..ba55be63dcb89295da8d59729da755fad6bd1e02 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_filter.lng
@@ -7,7 +7,7 @@ $wb['rulename_error_empty'] = 'Ad boÅŸ olamaz.';
 $wb['searchterm_is_empty'] = 'Aranacak ifade boÅŸ olamaz.';
 $wb['source_txt'] = 'Kaynak';
 $wb['target_error_regex'] = 'Hedef için yalnız şu karakterler kullanılabilir: a-z, 0-9, -, ., _, ve {boşluk}';
-$wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla posta süzgeci sayısına ulaştınız.';
+$wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.';
 $wb['subject_txt'] = 'Konu';
 $wb['from_txt'] = 'Kimden';
 $wb['to_txt'] = 'Kime';
@@ -25,5 +25,5 @@ $wb['domain_txt'] = 'Etki alanı';
 $wb['keep_txt'] = 'Tut';
 $wb['reject_txt'] = 'Reddet';
 $wb['stop_txt'] = 'Durdur';
-$wb['move_to_txt'] = 'Move to';
+$wb['move_to_txt'] = 'Şuraya Taşı';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_user_list.lng b/interface/web/mail/lib/lang/tr_mail_user_list.lng
index 6310ce40380f0c9e29f593a113b5a188bc61b76b..66d33becae6743af9de7d590b72237b97af9851b 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_list.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['list_head_txt'] = 'Posta Kutusu';
+$wb['list_head_txt'] = 'E-posta Kutusu';
 $wb['email_txt'] = 'E-posta';
 $wb['autoresponder_txt'] = 'Otomatik Yanıtlayıcı';
-$wb['add_new_record_txt'] = 'Posta Kutusu Ekle';
+$wb['add_new_record_txt'] = 'E-posta Kutusu Ekle';
 $wb['name_txt'] = 'Gerçek Ad';
 $wb['login_txt'] = 'Oturum Aç';
-$wb['postfix_txt'] = 'Receiving';
+$wb['postfix_txt'] = 'Alınıyor';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
diff --git a/interface/web/mail/lib/lang/tr_mail_user_stats_list.lng b/interface/web/mail/lib/lang/tr_mail_user_stats_list.lng
index 326f69f69872780e41522a8be0f0fbd9aec5be2d..b28a9f09b99749eb50f8c5fb9b9ffecd90516c74 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_stats_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_stats_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Posta TrafiÄŸi';
+$wb['list_head_txt'] = 'E-posta TrafiÄŸi';
 $wb['email_txt'] = 'E-posta';
 $wb['this_month_txt'] = 'Bu ay';
 $wb['last_month_txt'] = 'Geçen ay';
diff --git a/interface/web/mail/lib/lang/tr_mail_whitelist.lng b/interface/web/mail/lib/lang/tr_mail_whitelist.lng
index 84df2143c03de32641274f3083ad03cbc7302029..c6272a9ede18c272efb8036cc8b7022ffebec0f4 100644
--- a/interface/web/mail/lib/lang/tr_mail_whitelist.lng
+++ b/interface/web/mail/lib/lang/tr_mail_whitelist.lng
@@ -4,6 +4,6 @@ $wb['source_txt'] = 'Beyaz Listedeki Adres';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['active_txt'] = 'Etkin';
 $wb['source_error_notempty'] = 'Adres boÅŸ olamaz.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_whitelist_list.lng b/interface/web/mail/lib/lang/tr_mail_whitelist_list.lng
index 7809a24fe87d858e17cc2e51d7313549dfe81f5f..736b395ca0af6e7e2fc73758217cfa17918cd3f0 100644
--- a/interface/web/mail/lib/lang/tr_mail_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_whitelist_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'E-posta Beyaz Listesi';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['source_txt'] = 'Beyaz Listedeki Adres';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['recipient_txt'] = 'Alıcı';
 $wb['add_new_record_txt'] = 'Beyaz Liste Kaydı Ekle';
 $wb['access_txt'] = 'EriÅŸim';
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_blacklist_list.lng
index 1e0f673474eca86e236788bc45068a24d22bd648..40e3c5fb141dd0f6ee767b0ed4931ed5bb507da3 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_blacklist_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Kara Listesi';
+$wb['list_head_txt'] = 'Önemsiz İleti Kara Listesi';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['priority_txt'] = 'Öncelik';
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_config.lng b/interface/web/mail/lib/lang/tr_spamfilter_config.lng
index 7ccd927773807dc6772dfb3b155a6bc52a5c1af2..93f14174832d3917f1622a4debb11e8fe7d1c6c8 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_config.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_config.lng
@@ -6,15 +6,15 @@ $wb['gateway_txt'] = 'Ağ Geçidi';
 $wb['hostname_txt'] = 'Sunucu Adı';
 $wb['nameservers_txt'] = 'Ad Sunucuları';
 $wb['module_txt'] = 'Sunucu Modülü';
-$wb['maildir_path_txt'] = 'Posta Klasörü Yolu';
+$wb['maildir_path_txt'] = 'E-posta Klasörü Yolu';
 $wb['homedir_path_txt'] = 'Kullanıcı Klasörü Yolu';
-$wb['mailuser_uid_txt'] = 'Posta Kullanıcısı UID';
-$wb['mailuser_gid_txt'] = 'Posta Kullanıcısı GID';
-$wb['mailuser_name_txt'] = 'Posta Kullanıcısı Adı';
-$wb['mailuser_group_txt'] = 'Posta Kullanıcısı Grubu';
+$wb['mailuser_uid_txt'] = 'E-posta Kullanıcısı UID';
+$wb['mailuser_gid_txt'] = 'E-posta Kullanıcısı GID';
+$wb['mailuser_name_txt'] = 'E-posta Kullanıcısı Adı';
+$wb['mailuser_group_txt'] = 'E-posta Kullanıcısı Grubu';
 $wb['relayhost_txt'] = 'Aktarım Sunucusu';
 $wb['relayhost_user_txt'] = 'Aktarım Sunucu Kullanıcı Adı';
 $wb['relayhost_password_txt'] = 'Aktarım Sunucu Parolası';
-$wb['mailbox_size_limit_txt'] = 'Posta Kutusu Boyutu';
+$wb['mailbox_size_limit_txt'] = 'E-posta Kutusu Boyutu';
 $wb['message_size_limit_txt'] = 'İleti Boyutu Sınırı';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_config_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_config_list.lng
index 2b6e0b3c18ce550c38b4a5ceb243d31d8faefeca..dc30cf868a26b78dab30fb4268ba7cfdf91df060 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_config_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_config_list.lng
@@ -1,5 +1,5 @@
 <?php
 $wb['list_head_txt'] = 'Sunucu Ayarları';
 $wb['server_name_txt'] = 'Sunucu';
-$wb['server_id_txt'] = 'sunucu_kodu';
+$wb['server_id_txt'] = 'server_id';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_policy.lng b/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
index 721b0490f7eb6ad5d7ceb7e8ebee01a63cb5b059..45a52ffc92ffdd4b808a2f32209c3feb15f59d2c 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_policy.lng
@@ -1,38 +1,38 @@
 <?php
 $wb['policy_name_txt'] = 'Kural Adı';
 $wb['virus_lover_txt'] = 'Virüs Koruması';
-$wb['spam_lover_txt'] = 'Önemsiz Posta Koruması';
-$wb['banned_files_lover_txt'] = 'Yasak Dosya Koruması';
-$wb['bad_header_lover_txt'] = 'Kötü Üstbilgi Koruması';
-$wb['bypass_virus_checks_txt'] = 'Virüs korumasını atla';
-$wb['bypass_banned_checks_txt'] = 'Yasak dosya korumasını atla';
-$wb['bypass_header_checks_txt'] = 'Üstbilgi korumasını atla';
-$wb['virus_quarantine_to_txt'] = 'Virüsü e-postaya ilet';
-$wb['spam_quarantine_to_txt'] = 'Önemsiz postayı e-postaya ilet';
-$wb['banned_quarantine_to_txt'] = 'Yasak dosyaları e-postaya ilet';
-$wb['bad_header_quarantine_to_txt'] = 'Kötü üstbilgiyi e-postaya ilet';
-$wb['clean_quarantine_to_txt'] = 'Temiz postaların iletileceği e-posta';
-$wb['other_quarantine_to_txt'] = 'Diğer postaların iletileceği e-posta';
-$wb['spam_tag_level_txt'] = 'Önemsiz posta etiket düzeyi';
-$wb['spam_tag2_level_txt'] = 'Önemsiz posta etiket2 düzeyi';
-$wb['spam_kill_level_txt'] = 'Önemsiz posta yok etme düzeyi';
-$wb['spam_dsn_cutoff_level_txt'] = 'Önemsiz posta DNS durdurma limiti';
-$wb['spam_quarantine_cutoff_level_txt'] = 'Önemsiz posta karantina durdurma düzeyi';
-$wb['spam_modifies_subj_txt'] = 'Önemsiz posta konu değişikliği';
-$wb['spam_subject_tag_txt'] = 'Önemsiz posta konu etiketi';
-$wb['spam_subject_tag2_txt'] = 'Önemsiz posta konu etiketi2';
-$wb['addr_extension_virus_txt'] = 'Adres Virus eki';
-$wb['addr_extension_spam_txt'] = 'Adres SPAM eki';
-$wb['addr_extension_banned_txt'] = 'Adres Yasak eki';
-$wb['addr_extension_bad_header_txt'] = 'Adres Kötü üstbilfi eki';
-$wb['warnvirusrecip_txt'] = 'Virus alıcısını uyar';
-$wb['warnbannedrecip_txt'] = 'Yasak dosya alıcısını uyar';
-$wb['warnbadhrecip_txt'] = 'Kötü üstbilgi alıcısını uyar';
+$wb['spam_lover_txt'] = 'Önemsiz İleti Koruması';
+$wb['banned_files_lover_txt'] = 'Yasaklanmış Dosya Koruması';
+$wb['bad_header_lover_txt'] = 'Kötü Üst Bilgi Koruması';
+$wb['bypass_virus_checks_txt'] = 'Virüs koruması atlansın';
+$wb['bypass_banned_checks_txt'] = 'Yasaklanmış dosya koruması atlansın';
+$wb['bypass_header_checks_txt'] = 'Üst bilgi koruması atlansın';
+$wb['virus_quarantine_to_txt'] = 'Virüs e-postaya iletilsin';
+$wb['spam_quarantine_to_txt'] = 'Önemsiz ileti e-postaya iletilsin';
+$wb['banned_quarantine_to_txt'] = 'Yasak dosya e-postaya iletilsin';
+$wb['bad_header_quarantine_to_txt'] = 'Kötü üst bilgi e-postaya iletilsin';
+$wb['clean_quarantine_to_txt'] = 'Temiz e-postaların iletileceği e-posta';
+$wb['other_quarantine_to_txt'] = 'Diğer e-postaların iletileceği e-posta';
+$wb['spam_tag_level_txt'] = 'Önemsiz ileti etiket düzeyi';
+$wb['spam_tag2_level_txt'] = 'Önemsiz ileti etiket2 düzeyi';
+$wb['spam_kill_level_txt'] = 'Önemsiz ileti yok etme düzeyi';
+$wb['spam_dsn_cutoff_level_txt'] = 'Önemsiz ileti DNS durdurma limiti';
+$wb['spam_quarantine_cutoff_level_txt'] = 'Önemsiz ileti karantina durdurma düzeyi';
+$wb['spam_modifies_subj_txt'] = 'Önemsiz ileti konu değişikliği';
+$wb['spam_subject_tag_txt'] = 'Önemsiz ileti konu etiketi';
+$wb['spam_subject_tag2_txt'] = 'Önemsiz ileti konu etiketi2';
+$wb['addr_extension_virus_txt'] = 'Adres virus uzantısı';
+$wb['addr_extension_spam_txt'] = 'Adres önemsiz ileti uzantısı';
+$wb['addr_extension_banned_txt'] = 'Adres yasaklanmış uzantısı';
+$wb['addr_extension_bad_header_txt'] = 'Adres kötü üst bilgi uzantısı';
+$wb['warnvirusrecip_txt'] = 'Virus alıcısı uyarılsın';
+$wb['warnbannedrecip_txt'] = 'Yasak dosya alıcısı uyarılsın';
+$wb['warnbadhrecip_txt'] = 'Kötü üst bilgi alıcısı uyarılsın';
 $wb['newvirus_admin_txt'] = 'Yeni virus yönetici';
 $wb['virus_admin_txt'] = 'Virus yönetici';
 $wb['banned_admin_txt'] = 'Yasak dosya yönetici';
-$wb['bad_header_admin_txt'] = 'Kötü üstbilgi yönetici';
-$wb['spam_admin_txt'] = 'Önemsiz posta yönetici';
+$wb['bad_header_admin_txt'] = 'Kötü üst bilgi yönetici';
+$wb['spam_admin_txt'] = 'Önemsiz ileti yönetici';
 $wb['message_size_limit_txt'] = 'İleti boyutu sınırı';
 $wb['banned_rulenames_txt'] = 'Yasak kural adları';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_policy_list.lng
index 78459c3f238285d4d59f94e172249493461eede6..cb5b9b83afa6d245fe96c179132a7ba5d0423ff8 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_policy_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_policy_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Süzgeci Kuralları';
+$wb['list_head_txt'] = 'Önemsiz İleti Süzgeci Kuralları';
 $wb['policy_name_txt'] = 'Ad';
 $wb['virus_lover_txt'] = 'Virüs Koruması';
-$wb['spam_lover_txt'] = 'Önemsiz Posta Koruması';
+$wb['spam_lover_txt'] = 'Önemsiz İleti Koruması';
 $wb['banned_files_lover_txt'] = 'Yasaklı Dosya Koruması';
-$wb['bad_header_lover_txt'] = 'Kötü Üstbilgi Koruması';
+$wb['bad_header_lover_txt'] = 'Kötü Üst Bilgi Koruması';
 $wb['add_new_record_txt'] = 'Kural Kaydı Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_users_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_users_list.lng
index 847c5bdf4fd79412bc4e0a81b95cf0f41d793c2c..bee9372cbf2665a1256e633fd38e724a38fe3e43 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_users_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_users_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Süzgeci Kullanıcıları';
+$wb['list_head_txt'] = 'Önemsiz İleti Süzgeci Kullanıcıları';
 $wb['local_txt'] = 'Yerel';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['priority_txt'] = 'Öncelik';
 $wb['policy_id_txt'] = 'Kural';
 $wb['fullname_txt'] = 'Ad';
 $wb['email_txt'] = 'E-posta';
-$wb['add_new_record_txt'] = 'Önemsiz Posta Süzgeci Kullanıcısı Ekle';
+$wb['add_new_record_txt'] = 'Önemsiz İleti Süzgeci Kullanıcısı Ekle';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/tr_spamfilter_whitelist_list.lng
index c29bf003c5cbbf1e07dc4ec22eb938cf95bebd92..5e1f95da1c83f0c858ef60b4077d23f0cb274f2e 100644
--- a/interface/web/mail/lib/lang/tr_spamfilter_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/tr_spamfilter_whitelist_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Önemsiz Posta Beyaz Listesi';
+$wb['list_head_txt'] = 'Önemsiz İleti Beyaz Listesi';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['priority_txt'] = 'Öncelik';
diff --git a/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng b/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng
index d97ab317f6dc54b2b90c2a31a692966606891c4c..ecab0f7735c025bb727f5ca76bbf53d3d2578d7d 100755
--- a/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng
+++ b/interface/web/mail/lib/lang/tr_user_quota_stats_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Posta Kutusu Kotası';
+$wb['list_head_txt'] = 'E-posta Kutusu Kotası';
 $wb['quota_txt'] = 'Kota';
 $wb['name_txt'] = 'Ad';
 $wb['email_txt'] = 'E-posta Adresi';
diff --git a/interface/web/mail/lib/lang/tr_xmpp_domain.lng b/interface/web/mail/lib/lang/tr_xmpp_domain.lng
index 0541203b2e19bc1658e140470cb0375f774c7e0a..5c0c1acd05c028ddf00cd94c93fed64525f5c46a 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_domain.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_domain.lng
@@ -1,62 +1,62 @@
 <?php
-$wb['server_id_txt'] = 'Server';
-$wb['client_group_id_txt'] = 'Client';
-$wb['domain_txt'] = 'Domain';
-$wb['type_txt'] = 'Type';
-$wb['active_txt'] = 'Active';
-$wb['client_txt'] = 'Client';
-$wb['management_method_txt'] = 'Management of user accounts';
-$wb['public_registration_txt'] = 'Enable public registration';
-$wb['registration_url_txt'] = 'Registration URL';
-$wb['registration_message_txt'] = 'Registration Message';
-$wb['domain_admins_txt'] = 'Domain Admins (JIDs)';
-$wb['use_pubsub_txt'] = 'Enable Pubsub';
-$wb['use_proxy_txt'] = 'Enable Bytestream Proxy';
-$wb['use_anon_host_txt'] = 'Enable Anonymous Host';
-$wb['use_vjud_txt'] = 'Enable VJUD User Directory';
-$wb['vjud_opt_mode_txt'] = 'VJUD Opt Mode';
-$wb['use_muc_host_txt'] = 'Enable Multi User Chatrooms';
-$wb['muc_name_txt'] = 'Name in MUC Service Discovery';
-$wb['muc_restrict_room_creation_txt'] = 'Permission to create chatrooms';
-$wb['muc_admins_txt'] = 'MUC Admins (JIDs)';
-$wb['use_pastebin_txt'] = 'Enable Pastebin';
-$wb['pastebin_expire_after_txt'] = 'Pastes expire after (hours)';
-$wb['pastebin_trigger_txt'] = 'Pastebin trigger';
-$wb['use_http_archive_txt'] = 'Enable HTTP chatroom archive';
-$wb['http_archive_show_join_txt'] = 'Show join messages in archive';
-$wb['http_archive_show_status_txt'] = 'Show status changes in archive';
-$wb['use_status_host_txt'] = 'Enable XML Status host';
-$wb['cant_change_domainname_txt'] = 'The Domain name of existing XMPP domain cannot be changed.';
-$wb['about_registration_url_txt'] = 'Link to your registration form.';
-$wb['about_registration_message_txt'] = 'Description about your account registration process.';
-$wb['no_corresponding_maildomain_txt'] = 'Corresponding mail domain for user management not found. Please create the mail domain first.';
-$wb['ssl_state_txt'] = 'State';
-$wb['ssl_locality_txt'] = 'Locality';
-$wb['ssl_organisation_txt'] = 'Organisation';
-$wb['ssl_organisation_unit_txt'] = 'Organisation Unit';
-$wb['ssl_country_txt'] = 'Country';
-$wb['ssl_key_txt'] = 'SSL Key';
-$wb['ssl_request_txt'] = 'SSL Request';
-$wb['ssl_cert_txt'] = 'SSL Certificate';
-$wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
-$wb['ssl_email_txt'] = 'Email Address';
-$wb['ssl_txt'] = 'SSL';
-$wb['error_ssl_state_empty'] = 'SSL State is empty.';
-$wb['error_ssl_locality_empty'] = 'SSL Locality is empty.';
-$wb['error_ssl_organisation_empty'] = 'SSL Organisation is empty.';
-$wb['error_ssl_organisation_unit_empty'] = 'SSL Organisation Unit is empty.';
-$wb['error_ssl_country_empty'] = 'SSL Country is empty.';
-$wb['error_ssl_cert_empty'] = 'SSL Certificate field is empty';
-$wb['ssl_state_error_regex'] = 'Invalid SSL State. Valid characters are: a-z, 0-9 and .,-_&äöüÄÖÜ';
-$wb['ssl_locality_error_regex'] = 'Invalid SSL Locality. Valid characters are: a-z, 0-9 and .,-_&äöüÄÖÜ';
-$wb['ssl_organisation_error_regex'] = 'Invalid SSL Organisation. Valid characters are: a-z, 0-9 and .,-_&äöüÄÖÜ';
-$wb['ssl_organistaion_unit_error_regex'] = 'Invalid SSL Organisation Unit. Valid characters are: a-z, 0-9 and .,-_&äöüÄÖÜ';
-$wb['ssl_country_error_regex'] = 'Invalid SSL Country. Valid characters are: A-Z';
-$wb['none_txt'] = 'None';
-$wb['save_certificate_txt'] = 'Save certificate';
-$wb['create_certificate_txt'] = 'Create certificate';
-$wb['delete_certificate_txt'] = 'Delete certificate';
-$wb['ssl_error_isemail'] = 'Please enter a valid email adress for generation of the SSL certificate';
-$wb['limit_xmppdomain_txt'] = 'The max. number of XMPP domains for your account is reached.';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['client_group_id_txt'] = 'Müşteri';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['type_txt'] = 'Tür';
+$wb['active_txt'] = 'Etkin';
+$wb['client_txt'] = 'Müşteri';
+$wb['management_method_txt'] = 'Kullanıcı Hesabı Yönetimi';
+$wb['public_registration_txt'] = 'Herkes Kayıt Olabilsin';
+$wb['registration_url_txt'] = 'Kayıt Adresi';
+$wb['registration_message_txt'] = 'Kayıt İletisi';
+$wb['domain_admins_txt'] = 'Etki Alanı Yöneticileri (JID)';
+$wb['use_pubsub_txt'] = 'Pubsub Kullanılsın';
+$wb['use_proxy_txt'] = 'Bytestream Vekil Sunucusu Kullanılsın';
+$wb['use_anon_host_txt'] = 'Anonim Sunucu Kullanılsın';
+$wb['use_vjud_txt'] = 'VJUD Kullanıcı Klasörü Kullanılsın';
+$wb['vjud_opt_mode_txt'] = 'VJUD Opt Kipi';
+$wb['use_muc_host_txt'] = 'Çok Kullanıcılı Sohbet Kullanılsın';
+$wb['muc_name_txt'] = 'MUC Hizmet KeÅŸfindeki Ad';
+$wb['muc_restrict_room_creation_txt'] = 'Sohbet Odaları Oluşturma İzni';
+$wb['muc_admins_txt'] = 'MUC Yöneticileri (JID)';
+$wb['use_pastebin_txt'] = 'Pastebin Kullanılsın';
+$wb['pastebin_expire_after_txt'] = 'Yapıştırmaların geçersizlik süresi (saat)';
+$wb['pastebin_trigger_txt'] = 'Pastebin Tetikleyici';
+$wb['use_http_archive_txt'] = 'HTTP Sohbet Odası Arşivi Kullanılsın';
+$wb['http_archive_show_join_txt'] = 'Katılma iletileri arşivde görüntülensin';
+$wb['http_archive_show_status_txt'] = 'Durum değişiklikleri arşivde görüntülensin';
+$wb['use_status_host_txt'] = 'XML Durum Sunucusu Kullanılsın';
+$wb['cant_change_domainname_txt'] = 'Var olan XMPP etki alanının adı değiştirilemez.';
+$wb['about_registration_url_txt'] = 'Kayıt formunuzun bağlantısı.';
+$wb['about_registration_message_txt'] = 'Hesap kaydı işlemi ile ilgili açıklama.';
+$wb['no_corresponding_maildomain_txt'] = 'Kullanıcı yönetimi için uygun e-posta etki alanı bulunamadı. Lütfen önce bir e-posta etki alanı ekleyin.';
+$wb['ssl_state_txt'] = 'Ä°l';
+$wb['ssl_locality_txt'] = 'Konum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
+$wb['ssl_organisation_unit_txt'] = 'KuruluÅŸ Birimi';
+$wb['ssl_country_txt'] = 'Ãœlke';
+$wb['ssl_key_txt'] = 'SSL Anahtarı';
+$wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
+$wb['ssl_cert_txt'] = 'SSL Sertifikası';
+$wb['ssl_bundle_txt'] = 'SSL Bağlantısı';
+$wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
+$wb['ssl_email_txt'] = 'E-posta Adresi';
+$wb['ssl_txt'] = 'SSL Süresi';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
+$wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL kuruluÅŸ birimi boÅŸ olamaz.';
+$wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
+$wb['error_ssl_cert_empty'] = 'SSL sertifika alanı boş olamaz.';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
+$wb['none_txt'] = 'Yok';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
+$wb['ssl_error_isemail'] = 'Lütfen SSL sertifikasının oluşturulması için geçerli bir e-posta adresi yazın';
+$wb['limit_xmppdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla XMPP etki alanı sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_xmpp_domain_admin_list.lng b/interface/web/mail/lib/lang/tr_xmpp_domain_admin_list.lng
index af643eab5aee3835de27ff78c851d0048052fefe..0a0c7abe6071c0dd0a876fcba1987a63313f26de 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_domain_admin_list.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_domain_admin_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'XMPP Domain';
-$wb['server_id_txt'] = 'Server';
-$wb['domain_txt'] = 'Domain';
-$wb['add_new_record_txt'] = 'Add new Domain';
-$wb['active_txt'] = 'Active';
-$wb['sys_groupid_txt'] = 'Client';
+$wb['list_head_txt'] = 'XMPP Etki Alanı';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
+$wb['active_txt'] = 'Etkin';
+$wb['sys_groupid_txt'] = 'Müşteri';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_xmpp_domain_list.lng b/interface/web/mail/lib/lang/tr_xmpp_domain_list.lng
index ebfebab7d50cc92cd87be46e8de665ba2bfb6f23..50a7d55cd22bfbef355a7ba53e3f57c94baf8185 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_domain_list.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_domain_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'XMPP Domain';
-$wb['server_id_txt'] = 'Server';
-$wb['domain_txt'] = 'Domain';
-$wb['add_new_record_txt'] = 'Add new Domain';
-$wb['active_txt'] = 'Active';
+$wb['list_head_txt'] = 'XMPP Etki Alanı';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Etki Alanı Ekle';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_xmpp_user.lng b/interface/web/mail/lib/lang/tr_xmpp_user.lng
index 6ab739d98b9ad877f9f9de5f04530b7add424fd5..c83f1ecef04c507a50a55c4bb3a93ddad3b2b93d 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_user.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_user.lng
@@ -1,15 +1,15 @@
 <?php
-$wb['list_head_txt'] = 'XMPP User Accounts';
-$wb['jid_txt'] = 'Jabber ID';
-$wb['active_txt'] = 'Active';
-$wb['cryptpwd_txt'] = 'Password';
-$wb['password_strength_txt'] = 'Password strength';
-$wb['error_no_pwd'] = 'Password is empty.';
-$wb['password_txt'] = 'Password';
-$wb['generate_password_txt'] = 'Generate Password';
-$wb['repeat_password_txt'] = 'Repeat Password';
-$wb['password_mismatch_txt'] = 'The passwords do not match.';
-$wb['password_match_txt'] = 'The passwords do match.';
-$wb['no_domain_perm'] = 'You have no permission for this domain.';
-$wb['limit_xmpp_user_txt'] = 'The max. number of xmpp accounts for your account is reached.';
+$wb['list_head_txt'] = 'XMPP Kullanıcı Adı';
+$wb['jid_txt'] = 'Jabber Kodu';
+$wb['active_txt'] = 'Etkin';
+$wb['cryptpwd_txt'] = 'Parola';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
+$wb['error_no_pwd'] = 'Paroal boÅŸ olamaz.';
+$wb['password_txt'] = 'Paroal';
+$wb['generate_password_txt'] = 'Parola Ãœret';
+$wb['repeat_password_txt'] = 'Parola Onayı';
+$wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
+$wb['password_match_txt'] = 'Parolalar aynı.';
+$wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
+$wb['limit_xmpp_user_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla XMPP hesabı sayısına ulaştınız.';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_xmpp_user_list.lng b/interface/web/mail/lib/lang/tr_xmpp_user_list.lng
index f2651cb62b0cfbe55156d943e91fd7e0c33ac515..a6af23d15bb8655737cb40e563325c09f36b3173 100644
--- a/interface/web/mail/lib/lang/tr_xmpp_user_list.lng
+++ b/interface/web/mail/lib/lang/tr_xmpp_user_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'XMPP User Accounts';
-$wb['jid_txt'] = 'Jabber ID';
-$wb['is_domain_admin_txt'] = 'Domain admin';
-$wb['is_muc_admin_txt'] = 'MUC admin';
-$wb['add_new_record_txt'] = 'Add new user';
-$wb['active_txt'] = 'Active';
+$wb['list_head_txt'] = 'XMPP Kullanıcı Hesapları';
+$wb['jid_txt'] = 'Jabber Kodu';
+$wb['is_domain_admin_txt'] = 'Etki Alanı Yöneticisi';
+$wb['is_muc_admin_txt'] = 'MUC Yöneticisi';
+$wb['add_new_record_txt'] = 'Kullanıcı Ekle';
+$wb['active_txt'] = 'Etkin';
 ?>
diff --git a/interface/web/mail/mail_blacklist_del.php b/interface/web/mail/mail_blacklist_del.php
index 3cb83a50a00dcc3859335bc5f7e3df4546c1994b..d3bbc5d5d581991078d44997aa583d1550243181 100644
--- a/interface/web/mail/mail_blacklist_del.php
+++ b/interface/web/mail/mail_blacklist_del.php
@@ -42,6 +42,9 @@ $tform_def_file = "form/mail_blacklist.tform.php";
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
 
+
+if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin priveliges');
+
 //* Check permissions for module
 $app->auth->check_module_permissions('mail');
 
diff --git a/interface/web/mail/mail_blacklist_edit.php b/interface/web/mail/mail_blacklist_edit.php
index f7e2d15e3f519c1c79690b5b0fd0a47ba0107eb9..e2f284a34ed84df3a0c397aee67107eeabb15468 100644
--- a/interface/web/mail/mail_blacklist_edit.php
+++ b/interface/web/mail/mail_blacklist_edit.php
@@ -53,16 +53,7 @@ class page_action extends tform_actions {
 	function onShowNew() {
 		global $app, $conf;
 
-		// we will check only users, not admins
-		if($_SESSION["s"]["user"]["typ"] == 'user') {
-			if(!$app->tform->checkClientLimit('limit_mailfilter')) {
-				$app->error($app->tform->wordbook["limit_mailfilter_txt"]);
-			}
-			if(!$app->tform->checkResellerLimit('limit_mailfilter')) {
-				$app->error('Reseller: '.$app->tform->wordbook["limit_mailfilter_txt"]);
-			}
-		}
-
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
 		parent::onShowNew();
 	}
 
@@ -70,6 +61,8 @@ class page_action extends tform_actions {
 	function onBeforeUpdate() {
 		global $app, $conf;
 
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+
 		//* Check if the server has been changed
 		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
 		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
@@ -86,24 +79,10 @@ class page_action extends tform_actions {
 	function onSubmit() {
 		global $app, $conf;
 
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		
 		if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1);
 		
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?" , $client_group_id);
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_mailfilter"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE sys_groupid = ?", $client_group_id);
-				if($tmp["number"] >= $client["limit_mailfilter"]) {
-					$app->tform->errorMessage .= $app->tform->wordbook["limit_mailfilter_txt"]."<br>";
-				}
-				unset($tmp);
-			}
-		} // end if user is not admin
-
 		parent::onSubmit();
 	}
 
diff --git a/interface/web/mail/mail_blacklist_list.php b/interface/web/mail/mail_blacklist_list.php
index cf1e50ddaaf5a319cc605f1376ac47d0e6921a4a..2bdc1e93b8270148285eb4d705dfa7b47cadcfce 100644
--- a/interface/web/mail/mail_blacklist_list.php
+++ b/interface/web/mail/mail_blacklist_list.php
@@ -12,6 +12,8 @@ $list_def_file = "list/mail_blacklist.list.php";
 * End Form configuration
 ******************************************/
 
+if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin priveliges');
+
 //* Check permissions for module
 $app->auth->check_module_permissions('mail');
 
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index e39de91e0ffe02f90c4ec9f907c8d8e12520dab9..28d4f40917045d3f731260699baadfa26ea3fa77 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -273,7 +273,10 @@ class page_action extends tform_actions {
 		}
 
 		//* make sure that the email domain is lowercase
-		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+		if(isset($this->dataRecord["domain"])){
+			$this->dataRecord["domain"] = $app->functions->idn_encode($this->dataRecord["domain"]);
+			$this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+		}
 
 
 		parent::onSubmit();
@@ -281,11 +284,13 @@ class page_action extends tform_actions {
 
 	function onAfterInsert() {
 		global $app, $conf;
+		
+		$domain = $app->functions->idn_encode($this->dataRecord["domain"]);
 
 		// Spamfilter policy
 		$policy_id = $app->functions->intval($this->dataRecord["policy"]);
 		if($policy_id > 0) {
-			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $this->dataRecord["domain"]);
+			$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $domain);
 			if($tmp_user["id"] > 0) {
 				// There is already a record that we will update
 				$app->db->datalogUpdate('spamfilter_users', array("policy_id" => $policy_id), 'id', $tmp_user["id"]);
@@ -301,8 +306,8 @@ class page_action extends tform_actions {
 					"server_id" => $this->dataRecord["server_id"],
 					"priority" => 5,
 					"policy_id" => $policy_id,
-					"email" => '@' . $this->dataRecord["domain"],
-					"fullname" => '@' . $this->dataRecord["domain"],
+					"email" => '@' . $domain,
+					"fullname" => '@' . $domain,
 					"local" => 'Y'
 				);
 				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
@@ -315,7 +320,7 @@ class page_action extends tform_actions {
 			$soaDomain = $this->dataRecord['domain'].'.';
  			while ((!isset($soa) && (substr_count($soaDomain,'.') > 1))) {
 				$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $soaDomain);
-				$soaDomain = preg_replace("/^\w+\./","",$soaDomain);
+				$soaDomain = preg_replace("/^[^\.]+\./","",$soaDomain);
 			}
 			if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa);
 		}
@@ -324,6 +329,8 @@ class page_action extends tform_actions {
 
 	function onBeforeUpdate() {
 		global $app, $conf;
+		
+		$domain = $app->functions->idn_encode($this->dataRecord["domain"]);
 
 		//* Check if the server has been changed
 		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
@@ -339,7 +346,7 @@ class page_action extends tform_actions {
 		} else {
 			//* We do not allow users to change a domain which has been created by the admin
 			$rec = $app->db->queryOneRecord("SELECT domain from mail_domain WHERE domain_id = ?", $this->id);
-			if($rec['domain'] != $this->dataRecord["domain"] && !$app->tform->checkPerm($this->id, 'u')) {
+			if($rec['domain'] != $domain && !$app->tform->checkPerm($this->id, 'u')) {
 				//* Add a error message and switch back to old server
 				$app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
 				$this->dataRecord["domain"] = $rec['domain'];
@@ -352,9 +359,11 @@ class page_action extends tform_actions {
 	function onAfterUpdate() {
 		global $app, $conf;
 
+		$domain = $app->functions->idn_encode($this->dataRecord["domain"]);
+		
 		// Spamfilter policy
 		$policy_id = $app->functions->intval($this->dataRecord["policy"]);
-		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $this->dataRecord["domain"]);
+		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $domain);
 		if($policy_id > 0) {
 			if($tmp_user["id"] > 0) {
 				// There is already a record that we will update
@@ -371,8 +380,8 @@ class page_action extends tform_actions {
 					"server_id" => $this->dataRecord["server_id"],
 					"priority" => 5,
 					"policy_id" => $policy_id,
-					"email" => '@' . $this->dataRecord["domain"],
-					"fullname" => '@' . $this->dataRecord["domain"],
+					"email" => '@' . $domain,
+					"fullname" => '@' . $domain,
 					"local" => 'Y'
 				);
 				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
@@ -385,7 +394,7 @@ class page_action extends tform_actions {
 			}
 		} // endif spamfilter policy
 		//** If the domain name or owner has been changed, change the domain and owner in all mailbox records
-		if($this->oldDataRecord['domain'] != $this->dataRecord['domain'] || (isset($this->dataRecord['client_group_id']) && $this->oldDataRecord['sys_groupid'] != $this->dataRecord['client_group_id'])) {
+		if($this->oldDataRecord['domain'] != $domain || (isset($this->dataRecord['client_group_id']) && $this->oldDataRecord['sys_groupid'] != $this->dataRecord['client_group_id'])) {
 			$app->uses('getconf');
 			$mail_config = $app->getconf->get_server_config($this->dataRecord["server_id"], 'mail');
 
@@ -398,7 +407,7 @@ class page_action extends tform_actions {
 				foreach($mailusers as $rec) {
 					// setting Maildir, Homedir, UID and GID
 					$mail_parts = explode("@", $rec['email']);
-					$maildir = str_replace("[domain]", $this->dataRecord['domain'], $mail_config["maildir_path"]);
+					$maildir = str_replace("[domain]", $domain, $mail_config["maildir_path"]);
 					$maildir = str_replace("[localpart]", $mail_parts[0], $maildir);
 					$email = $mail_parts[0].'@'.$this->dataRecord['domain'];
 					$app->db->datalogUpdate('mail_user', array("maildir" => $maildir, "email" => $email, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailuser_id', $rec['mailuser_id']);
@@ -409,8 +418,8 @@ class page_action extends tform_actions {
 			$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source like ? OR destination like ?", '%@' . $this->oldDataRecord['domain'], '%@' . $this->oldDataRecord['domain']);
 			if(is_array($forwardings)) {
 				foreach($forwardings as $rec) {
-					$destination = str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['destination']);
-					$source = str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['source']);
+					$destination = str_replace($this->oldDataRecord['domain'], $domain, $rec['destination']);
+					$source = str_replace($this->oldDataRecord['domain'], $domain, $rec['source']);
 					$app->db->datalogUpdate('mail_forwarding', array("source" => $source, "destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'forwarding_id', $rec['forwarding_id']);
 				}
 			}
@@ -422,7 +431,7 @@ class page_action extends tform_actions {
 			$fetchmail = $app->db->queryAllRecords("SELECT * FROM mail_get WHERE destination like ?", '%@' . $this->oldDataRecord['domain']);
 			if(is_array($fetchmail)) {
 				foreach($fetchmail as $rec) {
-					$destination = str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['destination']);
+					$destination = str_replace($this->oldDataRecord['domain'], $domain, $rec['destination']);
 					$app->db->datalogUpdate('mail_get', array("destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailget_id', $rec['mailget_id']);
 				}
 			}
@@ -436,15 +445,15 @@ class page_action extends tform_actions {
 
 		//* update dns-record when the dkim record was changed
 		// NOTE: only if the domain-name was not changed
-		if ( $this->dataRecord['active'] == 'y' && $this->dataRecord['domain'] ==  $this->oldDataRecord['domain'] ) {
+		if ( $this->dataRecord['active'] == 'y' && $domain ==  $this->oldDataRecord['domain'] ) {
 			$dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false; 
 			$selector = @($this->dataRecord['dkim_selector'] != $this->oldDataRecord['dkim_selector']) ? true : false;
 			$dkim_private = @($this->dataRecord['dkim_private'] != $this->oldDataRecord['dkim_private']) ? true : false;
 			
-			$soaDomain = $this->dataRecord['domain'].'.';
+			$soaDomain = $domain.'.';
 			while ((!isset($soa) && (substr_count($soaDomain,'.') > 1))) {
 				$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $soaDomain);
-				$soaDomain = preg_replace("/^\w+\./","",$soaDomain);
+				$soaDomain = preg_replace("/^[^\.]+\./","",$soaDomain);
 			}
 
 			if ( ($selector || $dkim_private || $dkim_active) && $dkim_active )
@@ -455,7 +464,7 @@ class page_action extends tform_actions {
 			if (! $dkim_active) {
 				// updated existing dmarc-record to policy 'none'
 				$sql = "SELECT * from dns_rr WHERE name = ? AND data LIKE 'v=DMARC1%' AND " . $app->tform->getAuthSQL('r');
-				$rec = $app->db->queryOneRecord($sql, '_dmarc.'.$this->dataRecord['domain'].'.');
+				$rec = $app->db->queryOneRecord($sql, '_dmarc.'.$domain.'.');
 				if (is_array($rec))
 					if (strpos($rec['data'], 'p=none=') === false) {
 						$rec['data'] = str_replace(array('quarantine', 'reject'), 'none', $rec['data']);
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 910d7a096a5f1acb49c3e231d1966895a2eeac45..263b98ef31a6054dd0965b33157d33c09992f2f3 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -295,7 +295,7 @@ class page_action extends tform_actions {
 					"priority" => 10,
 					"policy_id" => $policy_id,
 					"email" => $this->dataRecord["email"],
-					"fullname" => $this->dataRecord["email"],
+					"fullname" => $app->functions->idn_decode($this->dataRecord["email"]),
 					"local" => 'Y'
 				);
 				$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
@@ -342,7 +342,7 @@ class page_action extends tform_actions {
 						"priority" => 10,
 						"policy_id" => $policy_id,
 						"email" => $this->dataRecord["email"],
-						"fullname" => $this->dataRecord["email"],
+						"fullname" => $app->functions->idn_decode($this->dataRecord["email"]),
 						"local" => 'Y'
 					);
 					$app->db->datalogInsert('spamfilter_users', $insert_data, 'id');
diff --git a/interface/web/mail/mail_whitelist_del.php b/interface/web/mail/mail_whitelist_del.php
index 94be228f67035481bbfc4dd24057b325ce8a8445..2294f4486806d41ffc7777d5bec207ae9c519c48 100644
--- a/interface/web/mail/mail_whitelist_del.php
+++ b/interface/web/mail/mail_whitelist_del.php
@@ -42,6 +42,8 @@ $tform_def_file = "form/mail_whitelist.tform.php";
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
 
+if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin priveliges');
+
 //* Check permissions for module
 $app->auth->check_module_permissions('mail');
 
diff --git a/interface/web/mail/mail_whitelist_edit.php b/interface/web/mail/mail_whitelist_edit.php
index 9bb04fab7a21155e9197893106ce9801751ec6e3..2cf56b1ec451626491830f41acb54196341d6505 100644
--- a/interface/web/mail/mail_whitelist_edit.php
+++ b/interface/web/mail/mail_whitelist_edit.php
@@ -53,55 +53,33 @@ class page_action extends tform_actions {
 	function onShowNew() {
 		global $app, $conf;
 
-		// we will check only users, not admins
-		if($_SESSION["s"]["user"]["typ"] == 'user') {
-			if(!$app->tform->checkClientLimit('limit_mailfilter')) {
-				$app->error($app->tform->wordbook["limit_mailfilter_txt"]);
-			}
-			if(!$app->tform->checkResellerLimit('limit_mailfilter')) {
-				$app->error('Reseller: '.$app->tform->wordbook["limit_mailfilter_txt"]);
-			}
-		}
-
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		
 		parent::onShowNew();
 	}
 
 	function onBeforeUpdate() {
 		global $app, $conf;
 
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		
 		//* Check if the server has been changed
 		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
-		if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-			$rec = $app->db->queryOneRecord("SELECT server_id from mail_access WHERE access_id = ?", $this->id);
-			if($rec['server_id'] != $this->dataRecord["server_id"]) {
-				//* Add a error message and switch back to old server
-				$app->tform->errorMessage .= $app->lng('The Server can not be changed.');
-				$this->dataRecord["server_id"] = $rec['server_id'];
-			}
-			unset($rec);
+		$rec = $app->db->queryOneRecord("SELECT server_id from mail_access WHERE access_id = ?", $this->id);
+		if($rec['server_id'] != $this->dataRecord["server_id"]) {
+			//* Add a error message and switch back to old server
+			$app->tform->errorMessage .= $app->lng('The Server can not be changed.');
+			$this->dataRecord["server_id"] = $rec['server_id'];
 		}
+		unset($rec);
 	}
 
 	function onSubmit() {
 		global $app, $conf;
 
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+
 		if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1);
-		
-		// Check the client limits, if user is not the admin
-		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
-			// Get the limits of the client
-			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-			$client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
-
-			// Check if the user may add another mailbox.
-			if($this->id == 0 && $client["limit_mailfilter"] >= 0) {
-				$tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE sys_groupid = ?", $client_group_id);
-				if($tmp["number"] >= $client["limit_mailfilter"]) {
-					$app->tform->errorMessage .= $app->tform->wordbook["limit_mailfilter_txt"]."<br>";
-				}
-				unset($tmp);
-			}
-		} // end if user is not admin
 
 		parent::onSubmit();
 	}
diff --git a/interface/web/mail/mail_whitelist_list.php b/interface/web/mail/mail_whitelist_list.php
index 4fd33dd977b0259f46c83c2f2634ff787a9f7910..1a09b6b16578dd81455536a425d110597ed99168 100644
--- a/interface/web/mail/mail_whitelist_list.php
+++ b/interface/web/mail/mail_whitelist_list.php
@@ -12,6 +12,8 @@ $list_def_file = "list/mail_whitelist.list.php";
 * End Form configuration
 ******************************************/
 
+if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin priveliges');
+
 //* Check permissions for module
 $app->auth->check_module_permissions('mail');
 
diff --git a/interface/web/mail/spamfilter_policy_edit.php b/interface/web/mail/spamfilter_policy_edit.php
index 5320506846fc3e36364a482a0e1c5c0c5d993373..572a184020c28cef8f219fae5879a6231ff69fed 100644
--- a/interface/web/mail/spamfilter_policy_edit.php
+++ b/interface/web/mail/spamfilter_policy_edit.php
@@ -49,8 +49,9 @@ $app->uses('tpl,tform,tform_actions');
 $app->load('tform_actions');
 
 class page_action extends tform_actions {
+	
 	function onShowNew() {
-		global $app, $conf;
+		global $app;
 
 		// we will check only users, not admins
 		if($_SESSION["s"]["user"]["typ"] == 'user') {
@@ -66,7 +67,7 @@ class page_action extends tform_actions {
 	}
 
 	function onSubmit() {
-		global $app, $conf;
+		global $app;
 
 		// Check the client limits, if user is not the admin
 		if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
@@ -86,11 +87,43 @@ class page_action extends tform_actions {
 
 		parent::onSubmit();
 	}
+	
+	function onAfterUpdate() {
+		global $app;
+		
+		$record_has_changed = false;
+		foreach($this->dataRecord as $key => $val) {
+			if(isset($this->oldDataRecord[$key]) && @$this->oldDataRecord[$key] != $val) {
+				// Record has changed
+				$record_has_changed = true;
+			}
+		}
 
+		if($record_has_changed){
+			$spamfilter_users = $app->db->queryAllRecords("SELECT * FROM spamfilter_users WHERE policy_id = ?", intval($this->id));
+
+			if(is_array($spamfilter_users) && !empty($spamfilter_users)){
+				foreach($spamfilter_users as $spamfilter_user){
+					$app->db->datalogUpdate('spamfilter_users', $spamfilter_user, 'id', $spamfilter_user["id"], true);
+					
+					// check if this is an email domain
+					if(substr($spamfilter_user['email'],0,1) == '@') {
+						$domain = substr($spamfilter_user['email'],1);
+						$forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source LIKE ? OR destination LIKE ?", "%@" . $domain, "%@" . $domain);
+						
+						// Force-update aliases and forwards
+						if(is_array($forwardings)) {
+							foreach($forwardings as $rec) {
+								$app->db->datalogUpdate('mail_forwarding', array("source" => $rec['source']), 'forwarding_id', $rec['forwarding_id'],true);
+							}
+						}
+					}
+					
+				}
+			}
+		}
+	}
 }
 
 $app->tform_actions = new page_action;
 $app->tform_actions->onLoad();
-
-
-?>
diff --git a/interface/web/mail/spamfilter_policy_list.php b/interface/web/mail/spamfilter_policy_list.php
index c2ab38d5f7eea35dd36a9fac367ebea1e1c443ca..2aa7c7bec132ea3bc80d59d6c4b7545284ffc052 100644
--- a/interface/web/mail/spamfilter_policy_list.php
+++ b/interface/web/mail/spamfilter_policy_list.php
@@ -16,9 +16,28 @@ $list_def_file = "list/spamfilter_policy.list.php";
 $app->auth->check_module_permissions('mail');
 
 $app->uses('listform_actions');
-//$app->listform_actions->SQLExtWhere = "wb = 'W'";
 
-$app->listform_actions->onLoad();
-
-
-?>
+class list_action extends listform_actions {
+
+	function onShow() {
+		global $app, $conf;
+		
+		// get the config
+		$app->uses('getconf');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		$content_filter = 'amavisd';
+		if($mail_config['content_filter'] == 'rspamd'){
+			$content_filter = 'rspamd';
+		}
+		$app->tpl->setVar("content_filter", $content_filter);
+
+		parent::onShow();
+	}
+
+}
+
+$list = new list_action;
+//$list->SQLExtWhere = "wb = 'W'";
+$list->onLoad();
+?>
\ No newline at end of file
diff --git a/interface/web/mail/templates/mail_alias_list.htm b/interface/web/mail/templates/mail_alias_list.htm
index 5f19fba1387bc8fba7a4cbafc191b95be3a0322d..f65e40a9083065969f9eb6d566740403c86ee59a 100644
--- a/interface/web/mail/templates/mail_alias_list.htm
+++ b/interface/web/mail/templates/mail_alias_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_alias_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_alias_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_alias_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_alias_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_aliasdomain_list.htm b/interface/web/mail/templates/mail_aliasdomain_list.htm
index 6ce208b48b62bfe3cca51292f29c9d7ecfce8d82..06166ae3c4a9bded392eff6d0d589daed21d8369 100644
--- a/interface/web/mail/templates/mail_aliasdomain_list.htm
+++ b/interface/web/mail/templates/mail_aliasdomain_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_aliasdomain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_aliasdomain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_blacklist_list.htm b/interface/web/mail/templates/mail_blacklist_list.htm
index b023f5404253eb9a8fb1927e5dd02a4fb1647ab3..a52c797e8b73f9d2181295b7733feba219df1766 100644
--- a/interface/web/mail/templates/mail_blacklist_list.htm
+++ b/interface/web/mail/templates/mail_blacklist_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="mail/mail_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_blacklist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_blacklist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_content_filter_list.htm b/interface/web/mail/templates/mail_content_filter_list.htm
index 01689aa4d6fab13d30e75ab6cd60ce5248f4c410..5dcd8e7ff969ea39cd3997de7dfa85a5f7c4ccc1 100644
--- a/interface/web/mail/templates/mail_content_filter_list.htm
+++ b/interface/web/mail/templates/mail_content_filter_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="mail/mail_content_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="pattern"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_content_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="action"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_content_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_content_filter_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_domain_admin_list.htm b/interface/web/mail/templates/mail_domain_admin_list.htm
index 1b2b41f3924a95a060ea7034cdd9de10de2cc087..69680cf30810e02db4f78cd3f36c50878259c0b2 100644
--- a/interface/web/mail/templates/mail_domain_admin_list.htm
+++ b/interface/web/mail/templates/mail_domain_admin_list.htm
@@ -39,7 +39,7 @@
                             <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_domain_catchall_edit.htm b/interface/web/mail/templates/mail_domain_catchall_edit.htm
index 63c4405de243819c80e653a8b428bdb98d99af32..5991f2aecc21ad3729cd68f7a80e8ba5100f56d7 100644
--- a/interface/web/mail/templates/mail_domain_catchall_edit.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_edit.htm
@@ -14,6 +14,12 @@
             <div class="form-group">
                 <label for="destination" class="col-sm-3 control-label">{tmpl_var name='destination_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="destination" id="destination" value="{tmpl_var name='destination'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='greylisting_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='greylisting'}
+                </div>
+            </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
                 <div class="col-sm-9">
diff --git a/interface/web/mail/templates/mail_domain_catchall_list.htm b/interface/web/mail/templates/mail_domain_catchall_list.htm
index 29483ae3d054072f6d5894ca6b8c3f68d1513e3a..a9c0d9acd700a4067a607526b060de9ff28d5b71 100644
--- a/interface/web/mail/templates/mail_domain_catchall_list.htm
+++ b/interface/web/mail/templates/mail_domain_catchall_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_domain_catchall_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_catchall_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_catchall_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_domain_list.htm b/interface/web/mail/templates/mail_domain_list.htm
index bb1eba146b9bf5d7ab63f02ae3b47720f7afcb44..f0d6e532e7c6194e064cef9c043e90fa5f0d2dfa 100644
--- a/interface/web/mail/templates/mail_domain_list.htm
+++ b/interface/web/mail/templates/mail_domain_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_forward_list.htm b/interface/web/mail/templates/mail_forward_list.htm
index bb4b95ed12fcd5d6869ebdab91311d377b7b3358..c4d7e1f60a3de4c52db37596ca2b2463a496efd4 100644
--- a/interface/web/mail/templates/mail_forward_list.htm
+++ b/interface/web/mail/templates/mail_forward_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/mail_forward_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_forward_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_forward_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_forward_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_get_list.htm b/interface/web/mail/templates/mail_get_list.htm
index 58a550a7d1d11ba54e3db2a451b978f9737979d4..747220c2dadabe790bb7ad0e20e9aa5689802583 100644
--- a/interface/web/mail/templates/mail_get_list.htm
+++ b/interface/web/mail/templates/mail_get_list.htm
@@ -59,7 +59,7 @@
                             <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source_username"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_get_edit.php?id={tmpl_var name='id'}">{tmpl_var name="destination"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_get_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_get_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_mailinglist_list.htm b/interface/web/mail/templates/mail_mailinglist_list.htm
index 7e15df3aad961490cdbd87ae4b655088125d47b0..78e216dc084e5290549834ad6865352c0b6c2061 100644
--- a/interface/web/mail/templates/mail_mailinglist_list.htm
+++ b/interface/web/mail/templates/mail_mailinglist_list.htm
@@ -52,7 +52,7 @@
                                 <tmpl_if name="mailmailinglist_link">
                                     <a class="btn btn-default formbutton-default formbutton-narrow" href="mail/mailinglist.php?id={tmpl_var name='id'}" target="mailmailinglist"><span class="icon icon-mail"></span></a>
                                 </tmpl_if>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_mailinglist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_mailinglist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_relay_recipient_list.htm b/interface/web/mail/templates/mail_relay_recipient_list.htm
index 7dac3e7ce5a4aa42f110162d9cc8423ba8664c5a..3aeeb12e6c2f7e139d0cf30c7762cd2189ccc066 100644
--- a/interface/web/mail/templates/mail_relay_recipient_list.htm
+++ b/interface/web/mail/templates/mail_relay_recipient_list.htm
@@ -52,7 +52,7 @@
                             <td><a href="#" data-load-content="mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_relay_recipient_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_relay_recipient_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_relay_recipient_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_transport_list.htm b/interface/web/mail/templates/mail_transport_list.htm
index 4b4b2d9e53d6529f5bf4bb339ab8aeb5575844cc..9795f0093e9e5e91acc1d3139cb29c2c55944f9e 100644
--- a/interface/web/mail/templates/mail_transport_list.htm
+++ b/interface/web/mail/templates/mail_transport_list.htm
@@ -59,7 +59,7 @@
                             <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="transport"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_transport_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sort_order"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_transport_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_transport_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_user_filter_list.htm b/interface/web/mail/templates/mail_user_filter_list.htm
index 990558bd11e4b13e16b61e5bf884905f9b06ca29..c38df26a8e4f86dd1a77796ae3c81bb475c7a58d 100644
--- a/interface/web/mail/templates/mail_user_filter_list.htm
+++ b/interface/web/mail/templates/mail_user_filter_list.htm
@@ -42,7 +42,7 @@
                     <tr>
                         <td><a href="#" data-load-content="mail/mail_user_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rulename"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_filter_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm
index 4e2fedd50c2af2111bef51f836925b4dc04e74fc..6d800de57e3b1397247ffb216fd3925c72b4e2ad 100644
--- a/interface/web/mail/templates/mail_user_list.htm
+++ b/interface/web/mail/templates/mail_user_list.htm
@@ -75,7 +75,7 @@
                             <tmpl_if name="mailboxlist_webmail_link">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" href="mail/webmailer.php?id={tmpl_var name='id'}" target="webmail"><span class="icon icon-mail"></span></a>
                             </tmpl_if>
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/mail/templates/mail_whitelist_list.htm b/interface/web/mail/templates/mail_whitelist_list.htm
index cb3b783e7f68c46200c4502e957b3b594090bf2e..dcc018f717de54830efdde1c29e47fd9453ee7b4 100644
--- a/interface/web/mail/templates/mail_whitelist_list.htm
+++ b/interface/web/mail/templates/mail_whitelist_list.htm
@@ -40,7 +40,7 @@
                             <td><a href="#" data-load-content="mail/mail_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="source"}</a></td>
                             <td><a href="#" data-load-content="mail/mail_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_whitelist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/mail_whitelist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_amavis_edit.htm b/interface/web/mail/templates/spamfilter_amavis_edit.htm
new file mode 100644
index 0000000000000000000000000000000000000000..41bf6b5410eb6046746f51c18e29d800fc348b82
--- /dev/null
+++ b/interface/web/mail/templates/spamfilter_amavis_edit.htm
@@ -0,0 +1,198 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
+	<!-- Settings -->
+  <div class="panel panel-default">
+    <div class="panel-heading" role="tab" id="headingSettings">
+      <h4 class="panel-title">
+        <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseSettings" aria-expanded="true" aria-controls="collapseSettings">
+          {tmpl_var name='amavis_settings_txt'}
+        </a>
+      </h4>
+    </div>
+    <div id="collapseSettings" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingWeb">
+      <div class="panel-body">
+			<div class="form-group">
+                <label for="banned_files_lover" class="col-sm-3 control-label">{tmpl_var name='banned_files_lover_txt'}</label>
+                <div class="col-sm-9"><select name="banned_files_lover" id="banned_files_lover" class="form-control">
+                    {tmpl_var name='banned_files_lover'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="bad_header_lover" class="col-sm-3 control-label">{tmpl_var name='bad_header_lover_txt'}</label>
+                <div class="col-sm-9"><select name="bad_header_lover" id="bad_header_lover" class="form-control">
+                    {tmpl_var name='bad_header_lover'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="bypass_virus_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_virus_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_virus_checks" id="bypass_virus_checks" class="form-control">
+                    {tmpl_var name='bypass_virus_checks'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="bypass_banned_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_banned_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_banned_checks" id="bypass_banned_checks" class="form-control">
+                    {tmpl_var name='bypass_banned_checks'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="bypass_header_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_header_checks_txt'}</label>
+                <div class="col-sm-9"><select name="bypass_header_checks" id="bypass_header_checks" class="form-control">
+                    {tmpl_var name='bypass_header_checks'}
+                </select></div>
+            </div>
+	  </div>
+	</div>
+  </div>
+	
+<!-- Tag Level -->
+  <div class="panel panel-default">
+    <div class="panel-heading" role="tab" id="headingTaglevel">
+      <h4 class="panel-title">
+        <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTaglevel" aria-expanded="true" aria-controls="collapseTaglevel">
+          {tmpl_var name='amavis_taglevel_txt'}
+        </a>
+      </h4>
+    </div>
+    <div id="collapseTaglevel" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTaglevel">
+      <div class="panel-body">
+
+            <div class="form-group">
+                <label for="spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_tag_level" id="spam_tag_level" value="{tmpl_var name='spam_tag_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_tag2_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag2_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_tag2_level" id="spam_tag2_level" value="{tmpl_var name='spam_tag2_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='spam_kill_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_kill_level" id="spam_kill_level" value="{tmpl_var name='spam_kill_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_dsn_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_dsn_cutoff_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_dsn_cutoff_level" id="spam_dsn_cutoff_level" value="{tmpl_var name='spam_dsn_cutoff_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_quarantine_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_cutoff_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_quarantine_cutoff_level" id="spam_quarantine_cutoff_level" value="{tmpl_var name='spam_quarantine_cutoff_level'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_modifies_subj" class="col-sm-3 control-label">{tmpl_var name='spam_modifies_subj_txt'}</label>
+                <div class="col-sm-9"><select name="spam_modifies_subj" id="spam_modifies_subj" class="form-control">
+                    {tmpl_var name='spam_modifies_subj'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="spam_subject_tag" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_subject_tag" id="spam_subject_tag" value="{tmpl_var name='spam_subject_tag'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_subject_tag2" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag2_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_subject_tag2" id="spam_subject_tag2" value="{tmpl_var name='spam_subject_tag2'}" class="form-control" /></div></div>
+	  </div>
+	</div>
+  </div>
+
+<!-- Quarantine -->
+  <div class="panel panel-default">
+    <div class="panel-heading" role="tab" id="headingQuarantine">
+      <h4 class="panel-title">
+        <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseQuarantine" aria-expanded="true" aria-controls="collapseQuarantine">
+          {tmpl_var name='amavis_quarantine_txt'}
+        </a>
+      </h4>
+    </div>
+    <div id="collapseQuarantine" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingQuarantine">
+      <div class="panel-body">
+
+
+            <div class="form-group">
+                <label for="virus_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='virus_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="virus_quarantine_to" id="virus_quarantine_to" value="{tmpl_var name='virus_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_quarantine_to" id="spam_quarantine_to" value="{tmpl_var name='spam_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="banned_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='banned_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_quarantine_to" id="banned_quarantine_to" value="{tmpl_var name='banned_quarantine_to'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bad_header_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='bad_header_quarantine_to_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bad_header_quarantine_to" id="bad_header_quarantine_to" value="{tmpl_var name='bad_header_quarantine_to'}" class="form-control" /></div></div>
+	  </div>
+	</div>
+  </div>
+
+<!-- Other -->
+  <div class="panel panel-default">
+    <div class="panel-heading" role="tab" id="headingOther">
+      <h4 class="panel-title">
+        <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOther" aria-expanded="true" aria-controls="collapseOther">
+          {tmpl_var name='amavis_other_txt'}
+        </a>
+      </h4>
+    </div>
+    <div id="collapseOther" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOther">
+      <div class="panel-body">
+
+            <div class="form-group">
+                <label for="addr_extension_virus" class="col-sm-3 control-label">{tmpl_var name='addr_extension_virus_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_virus" id="addr_extension_virus" value="{tmpl_var name='addr_extension_virus'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_spam" class="col-sm-3 control-label">{tmpl_var name='addr_extension_spam_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_spam" id="addr_extension_spam" value="{tmpl_var name='addr_extension_spam'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_banned" class="col-sm-3 control-label">{tmpl_var name='addr_extension_banned_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_banned" id="addr_extension_banned" value="{tmpl_var name='addr_extension_banned'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="addr_extension_bad_header" class="col-sm-3 control-label">{tmpl_var name='addr_extension_bad_header_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="addr_extension_bad_header" id="addr_extension_bad_header" value="{tmpl_var name='addr_extension_bad_header'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="warnvirusrecip" class="col-sm-3 control-label">{tmpl_var name='warnvirusrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnvirusrecip" id="warnvirusrecip" class="form-control">
+                    {tmpl_var name='warnvirusrecip'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="warnbannedrecip" class="col-sm-3 control-label">{tmpl_var name='warnbannedrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnbannedrecip" id="warnbannedrecip" class="form-control">
+                    {tmpl_var name='warnbannedrecip'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="warnbadhrecip" class="col-sm-3 control-label">{tmpl_var name='warnbadhrecip_txt'}</label>
+                <div class="col-sm-9"><select name="warnbadhrecip" id="warnbadhrecip" class="form-control">
+                    {tmpl_var name='warnbadhrecip'}
+                </select></div>
+            </div>
+            <div class="form-group">
+                <label for="newvirus_admin" class="col-sm-3 control-label">{tmpl_var name='newvirus_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="newvirus_admin" id="newvirus_admin" value="{tmpl_var name='newvirus_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="virus_admin" class="col-sm-3 control-label">{tmpl_var name='virus_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="virus_admin" id="virus_admin" value="{tmpl_var name='virus_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="banned_admin" class="col-sm-3 control-label">{tmpl_var name='banned_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_admin" id="banned_admin" value="{tmpl_var name='banned_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="bad_header_admin" class="col-sm-3 control-label">{tmpl_var name='bad_header_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="bad_header_admin" id="bad_header_admin" value="{tmpl_var name='bad_header_admin'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="spam_admin" class="col-sm-3 control-label">{tmpl_var name='spam_admin_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="spam_admin" id="spam_admin" value="{tmpl_var name='spam_admin'}" class="form-control" /></div></div>
+			<div class="form-group">
+                <label for="message_size_limit" class="col-sm-3 control-label">{tmpl_var name='message_size_limit_txt'}</label>
+                <div class="col-sm-9"><div class="input-group"><input type="text" name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" class="form-control" aria-describedby="message_size_limit-desc" /><span class="input-group-addon" id="message_size_limit-desc">Bytes</span></div></div>
+            </div>
+            <div class="form-group">
+                <label for="banned_rulenames" class="col-sm-3 control-label">{tmpl_var name='banned_rulenames_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="banned_rulenames" id="banned_rulenames" value="{tmpl_var name='banned_rulenames'}" class="form-control" /></div></div>
+	  </div>
+	</div>
+  </div>
+
+				
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_blacklist_list.htm b/interface/web/mail/templates/spamfilter_blacklist_list.htm
index 91a45916ba6f79632b375c18c1fa5d4d6afcdd0c..ae013bdff435b71d3e1f4dd70782f044cd836197 100644
--- a/interface/web/mail/templates/spamfilter_blacklist_list.htm
+++ b/interface/web/mail/templates/spamfilter_blacklist_list.htm
@@ -43,7 +43,7 @@
                             <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rid"}</a></td>
                             <td><a href="#" data-load-content="mail/spamfilter_blacklist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_blacklist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_blacklist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_config_list.htm b/interface/web/mail/templates/spamfilter_config_list.htm
index 486a79e6d9c017c289fb7eca2bd4e4e3c33e5511..3bcac6767a72fab4708e35c578bee9dbb650500e 100644
--- a/interface/web/mail/templates/spamfilter_config_list.htm
+++ b/interface/web/mail/templates/spamfilter_config_list.htm
@@ -31,7 +31,7 @@
                         <tr>
                             <td><a href="#" data-load-content="mail/spamfilter_config_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_config_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_config_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_other_edit.htm b/interface/web/mail/templates/spamfilter_other_edit.htm
deleted file mode 100644
index 83cd4a95c906c0d742a1ec37965feb0ba711f2ba..0000000000000000000000000000000000000000
--- a/interface/web/mail/templates/spamfilter_other_edit.htm
+++ /dev/null
@@ -1,67 +0,0 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
-            <div class="form-group">
-                <label for="addr_extension_virus" class="col-sm-3 control-label">{tmpl_var name='addr_extension_virus_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="addr_extension_virus" id="addr_extension_virus" value="{tmpl_var name='addr_extension_virus'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="addr_extension_spam" class="col-sm-3 control-label">{tmpl_var name='addr_extension_spam_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="addr_extension_spam" id="addr_extension_spam" value="{tmpl_var name='addr_extension_spam'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="addr_extension_banned" class="col-sm-3 control-label">{tmpl_var name='addr_extension_banned_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="addr_extension_banned" id="addr_extension_banned" value="{tmpl_var name='addr_extension_banned'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="addr_extension_bad_header" class="col-sm-3 control-label">{tmpl_var name='addr_extension_bad_header_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="addr_extension_bad_header" id="addr_extension_bad_header" value="{tmpl_var name='addr_extension_bad_header'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="warnvirusrecip" class="col-sm-3 control-label">{tmpl_var name='warnvirusrecip_txt'}</label>
-                <div class="col-sm-9"><select name="warnvirusrecip" id="warnvirusrecip" class="form-control">
-                    {tmpl_var name='warnvirusrecip'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="warnbannedrecip" class="col-sm-3 control-label">{tmpl_var name='warnbannedrecip_txt'}</label>
-                <div class="col-sm-9"><select name="warnbannedrecip" id="warnbannedrecip" class="form-control">
-                    {tmpl_var name='warnbannedrecip'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="warnbadhrecip" class="col-sm-3 control-label">{tmpl_var name='warnbadhrecip_txt'}</label>
-                <div class="col-sm-9"><select name="warnbadhrecip" id="warnbadhrecip" class="form-control">
-                    {tmpl_var name='warnbadhrecip'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="newvirus_admin" class="col-sm-3 control-label">{tmpl_var name='newvirus_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="newvirus_admin" id="newvirus_admin" value="{tmpl_var name='newvirus_admin'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="virus_admin" class="col-sm-3 control-label">{tmpl_var name='virus_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="virus_admin" id="virus_admin" value="{tmpl_var name='virus_admin'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="banned_admin" class="col-sm-3 control-label">{tmpl_var name='banned_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="banned_admin" id="banned_admin" value="{tmpl_var name='banned_admin'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="bad_header_admin" class="col-sm-3 control-label">{tmpl_var name='bad_header_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="bad_header_admin" id="bad_header_admin" value="{tmpl_var name='bad_header_admin'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_admin" class="col-sm-3 control-label">{tmpl_var name='spam_admin_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_admin" id="spam_admin" value="{tmpl_var name='spam_admin'}" class="form-control" /></div></div>
-			<div class="form-group">
-                <label for="message_size_limit" class="col-sm-3 control-label">{tmpl_var name='message_size_limit_txt'}</label>
-                <div class="col-sm-9"><div class="input-group"><input type="text" name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" class="form-control" aria-describedby="message_size_limit-desc" /><span class="input-group-addon" id="message_size_limit-desc">Bytes</span></div></div>
-            </div>
-            <div class="form-group">
-                <label for="banned_rulenames" class="col-sm-3 control-label">{tmpl_var name='banned_rulenames_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="banned_rulenames" id="banned_rulenames" value="{tmpl_var name='banned_rulenames'}" class="form-control" /></div></div>
-        
-
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
diff --git a/interface/web/mail/templates/spamfilter_policy_edit.htm b/interface/web/mail/templates/spamfilter_policy_edit.htm
index 317bbdb82283b5a6be84558c5e7bc9ca98a726e4..506b4d5b89fa1f1dd7062265361ce7ec79927905 100644
--- a/interface/web/mail/templates/spamfilter_policy_edit.htm
+++ b/interface/web/mail/templates/spamfilter_policy_edit.htm
@@ -3,8 +3,7 @@
 </div>
 <p><tmpl_var name="list_desc_txt"></p>
 
-
-        
+       
             <div class="form-group">
                 <label for="policy_name" class="col-sm-3 control-label">{tmpl_var name='policy_name_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="policy_name" id="policy_name" value="{tmpl_var name='policy_name'}" class="form-control" /></div></div>
@@ -20,37 +19,7 @@
                     {tmpl_var name='spam_lover'}
                 </select></div>
             </div>
-            <div class="form-group">
-                <label for="banned_files_lover" class="col-sm-3 control-label">{tmpl_var name='banned_files_lover_txt'}</label>
-                <div class="col-sm-9"><select name="banned_files_lover" id="banned_files_lover" class="form-control">
-                    {tmpl_var name='banned_files_lover'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="bad_header_lover" class="col-sm-3 control-label">{tmpl_var name='bad_header_lover_txt'}</label>
-                <div class="col-sm-9"><select name="bad_header_lover" id="bad_header_lover" class="form-control">
-                    {tmpl_var name='bad_header_lover'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="bypass_virus_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_virus_checks_txt'}</label>
-                <div class="col-sm-9"><select name="bypass_virus_checks" id="bypass_virus_checks" class="form-control">
-                    {tmpl_var name='bypass_virus_checks'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="bypass_banned_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_banned_checks_txt'}</label>
-                <div class="col-sm-9"><select name="bypass_banned_checks" id="bypass_banned_checks" class="form-control">
-                    {tmpl_var name='bypass_banned_checks'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="bypass_header_checks" class="col-sm-3 control-label">{tmpl_var name='bypass_header_checks_txt'}</label>
-                <div class="col-sm-9"><select name="bypass_header_checks" id="bypass_header_checks" class="form-control">
-                    {tmpl_var name='bypass_header_checks'}
-                </select></div>
-            </div>
-        
+
 
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
 
diff --git a/interface/web/mail/templates/spamfilter_policy_list.htm b/interface/web/mail/templates/spamfilter_policy_list.htm
index da1183d75f9af0dcbf526e0ac68cb400c33d6942..665fa613af05201c97e035e43610893d9df5c013 100644
--- a/interface/web/mail/templates/spamfilter_policy_list.htm
+++ b/interface/web/mail/templates/spamfilter_policy_list.htm
@@ -19,16 +19,20 @@
                         <th data-column="policy_name"><tmpl_var name="policy_name_txt"></th>
                         <th data-column="virus_lover"><tmpl_var name="virus_lover_txt"></th>
                         <th data-column="spam_lover"><tmpl_var name="spam_lover_txt"></th>
+						<tmpl_if name='content_filter' op='==' value='amavisd'>
                         <th data-column="banned_files_lover"><tmpl_var name="banned_files_lover_txt"></th>
                         <th data-column="bad_header_lover"><tmpl_var name="bad_header_lover_txt"></th>
+						</tmpl_if>
                         <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
                     </tr>
                     <tr>
                         <td><input class="form-control" type="text" name="search_policy_name" value="{tmpl_var name='search_policy_name'}" /></td>
                         <td><select class="form-control" name="search_virus_lover">{tmpl_var name='search_virus_lover'}</select></td>
                         <td><select class="form-control" name="search_spam_lover">{tmpl_var name='search_spam_lover'}</select></td>
+						<tmpl_if name='content_filter' op='==' value='amavisd'>
                         <td><select class="form-control" name="search_banned_files_lover">{tmpl_var name='search_banned_files_lover'}</select></td>
                         <td><select class="form-control" name="search_bad_header_lover">{tmpl_var name='search_bad_header_lover'}</select></td>
+						</tmpl_if>
                         <td class="text-right">
                             <button type="button" class="btn btn-default formbutton-default formbutton-narrow" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_list.php"><span class="icon icon-filter"></span></button>
                         </td>
@@ -40,23 +44,25 @@
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="policy_name"}</a></td>
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virus_lover"}</a></td>
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="spam_lover"}</a></td>
+						<tmpl_if name='content_filter' op='==' value='amavisd'>
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="banned_files_lover"}</a></td>
                         <td><a href="#" data-load-content="mail/spamfilter_policy_edit.php?id={tmpl_var name='id'}">{tmpl_var name="bad_header_lover"}</a></td>
+						</tmpl_if>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_policy_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_policy_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
                 <tmpl_unless name="records">
                     <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                        <td colspan="6">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                        <td colspan="{tmpl_if name='content_filter' op='==' value='amavisd'}6{/tmpl_else}4{/tmpl_if}">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
                     </tr>
                 </tmpl_unless>
                 </tbody>
 
                 <tfoot>
                     <tr>
-                        <td colspan="6"><tmpl_var name="paging"></td>
+                        <td colspan="{tmpl_if name='content_filter' op='==' value='amavisd'}6{/tmpl_else}4{/tmpl_if}"><tmpl_var name="paging"></td>
                     </tr>
                 </tfoot>
             </table>
diff --git a/interface/web/mail/templates/spamfilter_quarantine_edit.htm b/interface/web/mail/templates/spamfilter_quarantine_edit.htm
deleted file mode 100644
index 7f44b58020f1c093cb825b39b0cecacaaa399630..0000000000000000000000000000000000000000
--- a/interface/web/mail/templates/spamfilter_quarantine_edit.htm
+++ /dev/null
@@ -1,35 +0,0 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
-            <div class="form-group">
-                <label for="virus_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='virus_quarantine_to_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="virus_quarantine_to" id="virus_quarantine_to" value="{tmpl_var name='virus_quarantine_to'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_to_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_quarantine_to" id="spam_quarantine_to" value="{tmpl_var name='spam_quarantine_to'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="banned_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='banned_quarantine_to_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="banned_quarantine_to" id="banned_quarantine_to" value="{tmpl_var name='banned_quarantine_to'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="bad_header_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='bad_header_quarantine_to_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="bad_header_quarantine_to" id="bad_header_quarantine_to" value="{tmpl_var name='bad_header_quarantine_to'}" class="form-control" /></div></div>
-            <!--
-                  <div class="form-group">
-                    <label for="clean_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='clean_quarantine_to_txt'}</label>
-                    <div class="col-sm-9"><input type="text" name="clean_quarantine_to" id="clean_quarantine_to" value="{tmpl_var name='clean_quarantine_to'}" class="form-control" /></div></div>
-                  <div class="form-group">
-                    <label for="other_quarantine_to" class="col-sm-3 control-label">{tmpl_var name='other_quarantine_to_txt'}</label>
-                    <div class="col-sm-9"><input type="text" name="other_quarantine_to" id="other_quarantine_to" value="{tmpl_var name='other_quarantine_to'}" class="form-control" /></div></div>
-            -->
-        
-
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_rspamd_edit.htm b/interface/web/mail/templates/spamfilter_rspamd_edit.htm
new file mode 100644
index 0000000000000000000000000000000000000000..2f8ea0f4513592a73f2bf7dc76c59b6128b38d9c
--- /dev/null
+++ b/interface/web/mail/templates/spamfilter_rspamd_edit.htm
@@ -0,0 +1,30 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+			<div class="form-group">
+                <label for="rspamd_spam_greylisting_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_greylisting_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_greylisting_level" id="rspamd_spam_greylisting_level" value="{tmpl_var name='rspamd_spam_greylisting_level'}" class="form-control" /></div>
+			</div>
+			<div class="form-group">
+                <label for="rspamd_spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_tag_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_tag_level" id="rspamd_spam_tag_level" value="{tmpl_var name='rspamd_spam_tag_level'}" class="form-control" /></div>
+			</div>
+			<div class="form-group">
+                <label for="rspamd_spam_tag_method" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_tag_method_txt'}</label>
+                <div class="col-sm-9"><select name="rspamd_spam_tag_method" id="rspamd_spam_tag_method" class="form-control">
+                    {tmpl_var name='rspamd_spam_tag_method'}
+                </select></div>
+            </div>
+			<div class="form-group">
+                <label for="rspamd_spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='rspamd_spam_kill_level_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="rspamd_spam_kill_level" id="rspamd_spam_kill_level" value="{tmpl_var name='rspamd_spam_kill_level'}" class="form-control" /></div>
+			</div>
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+
+        <div class="clear"><div class="right">
+            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_taglevel_edit.htm b/interface/web/mail/templates/spamfilter_taglevel_edit.htm
deleted file mode 100644
index ba92662ba6f1b96a138dc0afcfc43136eac68cf3..0000000000000000000000000000000000000000
--- a/interface/web/mail/templates/spamfilter_taglevel_edit.htm
+++ /dev/null
@@ -1,42 +0,0 @@
-<div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
-</div>
-<p><tmpl_var name="list_desc_txt"></p>
-
-
-        
-            <div class="form-group">
-                <label for="spam_tag_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_tag_level" id="spam_tag_level" value="{tmpl_var name='spam_tag_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_tag2_level" class="col-sm-3 control-label">{tmpl_var name='spam_tag2_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_tag2_level" id="spam_tag2_level" value="{tmpl_var name='spam_tag2_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_kill_level" class="col-sm-3 control-label">{tmpl_var name='spam_kill_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_kill_level" id="spam_kill_level" value="{tmpl_var name='spam_kill_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_dsn_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_dsn_cutoff_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_dsn_cutoff_level" id="spam_dsn_cutoff_level" value="{tmpl_var name='spam_dsn_cutoff_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_quarantine_cutoff_level" class="col-sm-3 control-label">{tmpl_var name='spam_quarantine_cutoff_level_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_quarantine_cutoff_level" id="spam_quarantine_cutoff_level" value="{tmpl_var name='spam_quarantine_cutoff_level'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_modifies_subj" class="col-sm-3 control-label">{tmpl_var name='spam_modifies_subj_txt'}</label>
-                <div class="col-sm-9"><select name="spam_modifies_subj" id="spam_modifies_subj" class="form-control">
-                    {tmpl_var name='spam_modifies_subj'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="spam_subject_tag" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_subject_tag" id="spam_subject_tag" value="{tmpl_var name='spam_subject_tag'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="spam_subject_tag2" class="col-sm-3 control-label">{tmpl_var name='spam_subject_tag2_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="spam_subject_tag2" id="spam_subject_tag2" value="{tmpl_var name='spam_subject_tag2'}" class="form-control" /></div></div>
-        
-
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="mail/spamfilter_policy_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="mail/spamfilter_policy_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
diff --git a/interface/web/mail/templates/spamfilter_users_list.htm b/interface/web/mail/templates/spamfilter_users_list.htm
index 5f8ef83baecf356f8496554ace6e759b435ad066..d13fe32ccb4c1aaa1ba47e6e87b6a2a6eada1d9b 100644
--- a/interface/web/mail/templates/spamfilter_users_list.htm
+++ b/interface/web/mail/templates/spamfilter_users_list.htm
@@ -43,7 +43,7 @@
                         <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="policy_id"}</a></td>
                         <td><a href="#" data-load-content="mail/spamfilter_users_edit.php?id={tmpl_var name='id'}">{tmpl_var name="fullname"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_users_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/spamfilter_whitelist_list.htm b/interface/web/mail/templates/spamfilter_whitelist_list.htm
index 87ef0bde23215e76c9580f605804635ca0895bda..614f2a8f5e3ff163ccb97fcd043b314b46d8b158 100644
--- a/interface/web/mail/templates/spamfilter_whitelist_list.htm
+++ b/interface/web/mail/templates/spamfilter_whitelist_list.htm
@@ -43,7 +43,7 @@
                             <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rid"}</a></td>
                             <td><a href="#" data-load-content="mail/spamfilter_whitelist_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_whitelist_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/spamfilter_whitelist_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/xmpp_domain_admin_list.htm b/interface/web/mail/templates/xmpp_domain_admin_list.htm
index ccda2d503263caa1a1dc00f61294b6bfa61c8b3d..c6338037f1ad9cfdbabd2a0eb2c960cbf0dc4d1c 100644
--- a/interface/web/mail/templates/xmpp_domain_admin_list.htm
+++ b/interface/web/mail/templates/xmpp_domain_admin_list.htm
@@ -39,7 +39,7 @@
                             <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/xmpp_domain_list.htm b/interface/web/mail/templates/xmpp_domain_list.htm
index 79579142d7e874d8a71524c4774ed163925892e3..dff0adb3992022e51d74f5e29b47508b9eba5b16 100644
--- a/interface/web/mail/templates/xmpp_domain_list.htm
+++ b/interface/web/mail/templates/xmpp_domain_list.htm
@@ -53,7 +53,7 @@
                             <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="mail/xmpp_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/mail/templates/xmpp_user_list.htm b/interface/web/mail/templates/xmpp_user_list.htm
index 68668b4928975cc2ac21081e8b38de5fe95a6ce1..bb8e91c6d08eed9dd8e86ee96f0725cb52be640b 100644
--- a/interface/web/mail/templates/xmpp_user_list.htm
+++ b/interface/web/mail/templates/xmpp_user_list.htm
@@ -53,7 +53,7 @@
                         <td><a href="#" data-load-content="mail/xmpp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="is_domain_admin"}</a></td>
                         <td><a href="#" data-load-content="mail/xmpp_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="is_muc_admin"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mail/xmpp_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/mailuser/form/mail_user_filter.tform.php b/interface/web/mailuser/form/mail_user_filter.tform.php
index b785ae0263ab03176d5b2677bff31827804e80a6..9fdd8bdfc0ef45c9168a4c5c0d7a6cae694fa651 100644
--- a/interface/web/mailuser/form/mail_user_filter.tform.php
+++ b/interface/web/mailuser/form/mail_user_filter.tform.php
@@ -83,7 +83,7 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt')
+			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'List-Id'=>'list_id_txt')
 		),
 		'op' => array (
 			'datatype' => 'VARCHAR',
@@ -128,7 +128,7 @@ $form["tabs"]['filter'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng b/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/br.lng b/interface/web/mailuser/lib/lang/br.lng
index 55eca578a4cb61ffeb603a7db8d6966f00dc2dfa..64f93468087de1ecffb6397b4f3dcccad606d0a2 100644
--- a/interface/web/mailuser/lib/lang/br.lng
+++ b/interface/web/mailuser/lib/lang/br.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['Email Account'] = 'Contas de e-mail';
-$wb['Overview'] = 'Visão geral';
-$wb['Autoresponder'] = 'Resposta automática';
-$wb['Send copy'] = 'Enviar cópia para';
+$wb['Email Account'] = 'Conta de e-mail';
+$wb['Overview'] = 'Visão Geral';
+$wb['Password'] = 'Senha';
+$wb['Autoresponder'] = 'Auto-resposta';
+$wb['Send copy'] = 'Enviar cópia';
 $wb['Spamfilter'] = 'Filtro anti-spam';
 $wb['Email Filters'] = 'Filtros de e-mail';
-$wb['Password'] = 'Senha';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_index.lng b/interface/web/mailuser/lib/lang/br_index.lng
index eb7d7e1e7e40e63fc58a75fcdb35b20d3f24a57f..9be2fbdb2aece4e439fe79301515ecce0209f96b 100644
--- a/interface/web/mailuser/lib/lang/br_index.lng
+++ b/interface/web/mailuser/lib/lang/br_index.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['page_head_txt'] = 'Configurações de contas de e-mail';
-$wb['page_desc_txt'] = 'Aqui você edita as configurações para as contas de e-mail.';
+$wb['page_head_txt'] = 'Configurações de conta de e-mail';
+$wb['page_desc_txt'] = 'Aqui você pode editar as configurações da conta de e-mail.';
 $wb['email_txt'] = 'Endereço de e-mail';
 $wb['login_txt'] = 'Acesso';
 $wb['server_address_txt'] = 'Endereço do servidor de e-mails';
-$wb['cc_txt'] = 'Enviar cópia para (CC)';
-$wb['quota_txt'] = 'Tamanho da caixa postal';
-$wb['unlimited_txt'] = 'ilimitada';
+$wb['cc_txt'] = 'Enviar cópia oculta (BCC) para';
+$wb['quota_txt'] = 'Cota da conta de e-mail';
+$wb['unlimited_txt'] = 'Ilimitado';
 $wb['mb_txt'] = 'MB';
 $wb['none_txt'] = 'Nenhum';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
index 6e00682a446b6356a86c31afdde3256cbdf031c0..9de387d7988c1b3910083be4afd3d9e73ddb5981 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['mailbox_autoresponder_txt'] = 'Autoresposta';
-$wb['autoresponder_subject'] = 'Resposta de ausência temporária';
+$wb['mailbox_autoresponder_txt'] = 'Auto-resposta';
+$wb['autoresponder_subject'] = 'Resposta automática';
 $wb['autoresponder_text_txt'] = 'Texto';
 $wb['autoresponder_txt'] = 'Ativo';
-$wb['autoresponder_start_date_txt'] = 'Início';
-$wb['autoresponder_start_date_isfuture'] = 'A data de início não pode ser menor que a data atual.';
-$wb['autoresponder_end_date_txt'] = 'Término';
-$wb['autoresponder_end_date_isgreater'] = 'A data de término não pode ser menor que a data de início.';
-$wb['autoresponder_active'] = 'Habilitar autoresposta';
+$wb['autoresponder_start_date_txt'] = 'Iniciar em';
+$wb['autoresponder_start_date_isfuture'] = 'O campo "Iniciar em" não pode ser menor que data atual.';
+$wb['autoresponder_end_date_txt'] = 'Terminar em';
+$wb['autoresponder_end_date_isgreater'] = 'O campo "Terminar em" não pode ser menor que "Iniciar em".';
+$wb['autoresponder_active'] = 'Habilitar auto-resposta';
 $wb['now_txt'] = 'Agora';
 $wb['autoresponder_subject_txt'] = 'Assunto';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_cc.lng b/interface/web/mailuser/lib/lang/br_mail_user_cc.lng
index f6d96f02a34bd2affccdc75e4e8b919922ef2ed6..7a1e9a3d95a91ecea9173c8b7104cfc9cf8b2f19 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_cc.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_cc.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['mailbox_cc_txt'] = 'Enviar cópia para o e-mail';
+$wb['mailbox_cc_txt'] = 'Enviar cópia para endereço de e-mail';
 $wb['cc_txt'] = 'Enviar cópia para';
-$wb['email_txt'] = 'e-mail';
-$wb['cc_error_isemail'] = 'Endereço de e-mail inválido em \'enviar cópia para\'.';
-$wb['email_is_cc_error'] = 'Endereço de e-mail e -enviar cópia para- não podem ser iguais.';
+$wb['email_txt'] = 'e-Mail';
+$wb['cc_error_isemail'] = 'Endereço de e-mail inválido no campo "Enviar cópia para".';
+$wb['email_is_cc_error'] = 'Endereço de e-mail e "Enviar cópia para" não podem ser os mesmos.';
 $wb['name_optional_txt'] = '(Opcional)';
-$wb['cc_note_txt'] = '(Separar múltiplos e-mails por vírgulas)';
+$wb['cc_note_txt'] = '(separar múltiplos endereços de e-mail com vírgulas)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_filter.lng b/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
index 37196f5d6c961fe17e01d989e9238722493e235e..acefe8be6eeff36105556b42011eefd2fb2f67c1 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
@@ -5,17 +5,17 @@ $wb['target_txt'] = 'Pasta';
 $wb['active_txt'] = 'Ativo';
 $wb['rulename_error_empty'] = 'Nome está em branco.';
 $wb['searchterm_is_empty'] = 'Termo de pesquisa está em branco.';
-$wb['source_txt'] = 'Fonte';
-$wb['target_error_regex'] = 'O alvo pode conter os seguintes caracteres: \'a-z\', \'0-9\', \'-\', \'.\', \'_\', e \'{espaço}\'.';
-$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mails para esta conta foi alcançado.';
+$wb['source_txt'] = 'Origem';
+$wb['target_error_regex'] = 'O alvo pode conter apenas estes caracteres: "a-z", "0-9", "-", ".", "_", e "{espaço}".';
+$wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail para esta conta foi alcançado.';
+$wb['mailbox_filter_txt'] = 'Filtro de conta de e-mail';
 $wb['subject_txt'] = 'Assunto';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Para';
-$wb['contains_txt'] = 'Contém';
-$wb['is_txt'] = 'É';
+$wb['contains_txt'] = 'Contêm';
+$wb['is_txt'] = 'é';
 $wb['begins_with_txt'] = 'Iniciando com';
-$wb['ends_with_txt'] = 'Terminando com';
+$wb['ends_with_txt'] = 'Finalizando com';
 $wb['move_to_txt'] = 'Mover para';
 $wb['delete_txt'] = 'Remover';
-$wb['mailbox_filter_txt'] = 'Filtro de e-mail';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/br_mail_user_filter_list.lng
index 5d0f2419745b00f495c353c7c3ef15cf705d4b3f..5e13e8c303b3aed9b05f01ce985868e885ae8909 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_filter_list.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_filter_list.lng
@@ -4,5 +4,5 @@ $wb['rulename_txt'] = 'Nome';
 $wb['add_new_record_txt'] = 'Adicionar novo filtro';
 $wb['page_txt'] = 'Página';
 $wb['page_of_txt'] = 'de';
-$wb['delete_confirmation'] = 'Você tem certeza que gostaria de remover este filtro de e-mail?';
+$wb['delete_confirmation'] = 'Você tem certeza que deseja remover este filtro de e-mail?';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_password.lng b/interface/web/mailuser/lib/lang/br_mail_user_password.lng
index 154a44cd7b11743ae755a874df735edf3b0d1198..7a64df748a9b8e70baf2bed833daf90da4cd2417 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_password.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_password.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['mailbox_password_txt'] = 'Senha da Caixa Postal';
+$wb['mailbox_password_txt'] = 'Senha da conta de e-mail';
 $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['email_txt'] = 'e-mail';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
+$wb['email_txt'] = 'e-Mail';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
 $wb['password_mismatch_txt'] = 'As senhas não coincidem.';
 $wb['password_match_txt'] = 'As senhas coincidem.';
-$wb['password_click_to_set_txt'] = 'Confirmar';
+$wb['password_click_to_set_txt'] = 'Clique para configurar';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
index a4973817a201e6fc2c25d0f02a9145a5ad0fd928..eb369220412e340952738ed60bffcd81f943c356 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['mailbox_spamfilter_txt'] = 'Filtros anti-spam';
 $wb['spamfilter_txt'] = 'Filtro anti-spam';
-$wb['email_txt'] = 'e-mail';
+$wb['email_txt'] = 'e-Mail';
 $wb['no_policy'] = '-desabilitado-';
 $wb['policy_txt'] = 'Política';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng b/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
index e164d54bb2aefb167824b6377dce1fe32489848a..0a92f580a10ab1548c4a3426f73e1a8cc8fece9b 100644
--- a/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Max. antal af mailfiltere er nået.';
 $wb['subject_txt'] = 'Emne';
 $wb['from_txt'] = 'Fra';
 $wb['to_txt'] = 'Til';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Indeholder';
 $wb['is_txt'] = 'Er';
 $wb['begins_with_txt'] = 'Begynder med';
diff --git a/interface/web/mailuser/lib/lang/el_mail_user_filter.lng b/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
index 23451b74dba6d02a5e79cd6029f6b430713e87b7..c26150ba1d183e8cea68c1aa9e3d0d3fc246664d 100644
--- a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
@@ -12,6 +12,7 @@ $wb['mailbox_filter_txt'] = 'Mailbox filter';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_filter.lng b/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
index 426ad1ad010a293f586d320b43569d149f60bbdd..b8a19359f538c8da7ff662b0310b29eb3c95e96a 100755
--- a/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
@@ -17,5 +17,6 @@ $wb['subject_txt'] = 'Asunto';
 $wb['target_error_regex'] = 'La carpeta solo debe contener estos caracteres: a-z, 0-9, -, ., _, y {espacio}';
 $wb['target_txt'] = 'Carpeta';
 $wb['to_txt'] = 'Para';
+$wb['list_id_txt'] = 'List ID';
 $wb['mailbox_filter_txt'] = 'Mailbox filter';
 ?>
diff --git a/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng b/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng b/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/id_mail_user_filter.lng b/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/nl.lng b/interface/web/mailuser/lib/lang/nl.lng
index 114dec9b9195adcaa18ca636b75e5d162569d6b1..6383a82864d6aa28122674ed58cabdb2008022a4 100644
--- a/interface/web/mailuser/lib/lang/nl.lng
+++ b/interface/web/mailuser/lib/lang/nl.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['Email Account'] = 'Email Account';
-$wb['Overview'] = 'Overview';
-$wb['Password'] = 'Password';
-$wb['Autoresponder'] = 'Autoresponder';
+$wb['Overview'] = 'Overzicht';
+$wb['Password'] = 'Wachtwoord';
+$wb['Autoresponder'] = 'Autobeantwoorden';
 $wb['Send copy'] = 'Send copy';
 $wb['Spamfilter'] = 'Spamfilter';
 $wb['Email Filters'] = 'Email Filters';
diff --git a/interface/web/mailuser/lib/lang/nl_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/nl_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..7c8283c83897b52567ded53609ea88af7a1ae50d 100644
--- a/interface/web/mailuser/lib/lang/nl_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/nl_mail_user_autoresponder.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['mailbox_autoresponder_txt'] = 'Autoresponder';
-$wb['autoresponder_subject'] = 'Out of office reply';
-$wb['autoresponder_text_txt'] = 'Text';
-$wb['autoresponder_txt'] = 'Active';
-$wb['autoresponder_start_date_txt'] = 'Start on';
-$wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
-$wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
-$wb['autoresponder_active'] = 'Enable the autoresponder';
-$wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['mailbox_autoresponder_txt'] = 'Autobeantwoorden';
+$wb['autoresponder_subject'] = 'Out of office antwoord';
+$wb['autoresponder_text_txt'] = 'Tekst';
+$wb['autoresponder_txt'] = 'Actief';
+$wb['autoresponder_start_date_txt'] = 'Start op';
+$wb['autoresponder_start_date_isfuture'] = 'Startdatum mag niet in het verleden liggen.';
+$wb['autoresponder_end_date_txt'] = 'Eindigt op';
+$wb['autoresponder_end_date_isgreater'] = 'Einddatum moet later zijn dan de startdatum.';
+$wb['autoresponder_active'] = 'Inschakelen autobeantwoorden';
+$wb['now_txt'] = 'Nu';
+$wb['autoresponder_subject_txt'] = 'E-mail onderwerp';
 ?>
diff --git a/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng b/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..0092c288a06a1845afa038f398c497dd2129e7b1 100644
--- a/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
@@ -1,21 +1,21 @@
 <?php
-$wb['rulename_txt'] = 'Name';
-$wb['action_txt'] = 'Action';
-$wb['target_txt'] = 'Folder';
-$wb['active_txt'] = 'Active';
-$wb['rulename_error_empty'] = 'Name is empty.';
-$wb['searchterm_is_empty'] = 'Search term is empty.';
-$wb['source_txt'] = 'Source';
-$wb['target_error_regex'] = 'The target may only contain these characters: a-z, 0-9, -, ., _, and {space}';
-$wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
-$wb['subject_txt'] = 'Subject';
-$wb['from_txt'] = 'From';
-$wb['to_txt'] = 'To';
-$wb['contains_txt'] = 'Contains';
-$wb['is_txt'] = 'Is';
-$wb['begins_with_txt'] = 'Begins with';
-$wb['ends_with_txt'] = 'Ends with';
-$wb['move_to_txt'] = 'Move to';
-$wb['delete_txt'] = 'Delete';
-$wb['mailbox_filter_txt'] = 'Mailbox filter';
+$wb['rulename_txt'] = "Naam";
+$wb['action_txt'] = "Actie";
+$wb['target_txt'] = "Map";
+$wb['active_txt'] = "Actief";
+$wb['rulename_error_empty'] = "Naam is niet ingevuld.";
+$wb['searchterm_is_empty'] = "Zoekterm is niet ingvuld.";
+$wb['source_txt'] = "Bron";
+$wb['target_error_regex'] = 'Het doel mag alleen de volgende karakters bevatten: a-z, 0-9, -, ., _, en {spatie}';
+$wb['limit_mailfilter_txt'] = "Het max. aantal e-mail filters voor uw account is bereikt.";
+$wb['subject_txt'] = "Onderwerp";
+$wb['from_txt'] = "Afzender";
+$wb['to_txt'] = "Bestemming";
+$wb['contains_txt'] = "Bevat";
+$wb['is_txt'] = "Is";
+$wb['begins_with_txt'] = "Begint met";
+$wb['ends_with_txt'] = "Endigt in";
+$wb['move_to_txt'] = "Verplaatsen naar";
+$wb['delete_txt'] = "Verwijderen";
+$wb['mailbox_filter_txt'] = "Mailbox filter";
 ?>
diff --git a/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng b/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng b/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
index f10dd4ddb24e7abead46488aa725e142b5f93dba..d834e4057a0688ee6c2302933a9edf07d1aa0d43 100644
--- a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
@@ -6,7 +6,7 @@ $wb['active_txt'] = 'Активно';
 $wb['rulename_error_empty'] = 'Имя пустое.';
 $wb['searchterm_is_empty'] = 'Поле поиска пустое.';
 $wb['source_txt'] = 'Источник';
-$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \"a-z\", \"0-9\", \"-\", \".\", \"_\" и {пробел}';
+$wb['target_error_regex'] = 'Назначение может содержать только следующие символы: \\"a-z\\", \\"0-9\\", \\"-\\", \\".\\", \\"_\\" и {пробел}';
 $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.';
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
diff --git a/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng b/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
index 4069a153518d08a7ab855e15bad2a7c3707e0ebc..9ac4be357efcb3ce2912c717d9e6f341e9f2941e 100644
--- a/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Subject';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mailuser/lib/lang/tr.lng b/interface/web/mailuser/lib/lang/tr.lng
index fa5a7e12abbb492d7ab139dee668d2e3946595e4..c9d03bfff682f8253c666813b596934ae26ae496 100644
--- a/interface/web/mailuser/lib/lang/tr.lng
+++ b/interface/web/mailuser/lib/lang/tr.lng
@@ -4,6 +4,6 @@ $wb['Overview'] = 'Özet';
 $wb['Password'] = 'Parola';
 $wb['Autoresponder'] = 'Otomatik yanıtlayıcı';
 $wb['Send copy'] = 'Kopya gönder';
-$wb['Spamfilter'] = 'Önemsiz posta süzgeci';
+$wb['Spamfilter'] = 'Önemsiz ileti süzgeci';
 $wb['Email Filters'] = 'E-posta Süzgeçleri';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_index.lng b/interface/web/mailuser/lib/lang/tr_index.lng
index 4c0c553b79f18638a1ac7ae0db64559cd0686f17..47e12d69822d6cb1da3e7a4a12495a6642a5aeec 100644
--- a/interface/web/mailuser/lib/lang/tr_index.lng
+++ b/interface/web/mailuser/lib/lang/tr_index.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['page_head_txt'] = 'Posta Kutusu Ayarları';
+$wb['page_head_txt'] = 'E-posta Kutusu Ayarları';
 $wb['page_desc_txt'] = 'E-posta hesabı ayarları buradan yapılabilir.';
 $wb['email_txt'] = 'E-posta adresi';
 $wb['login_txt'] = 'Kullanıcı Adı';
-$wb['server_address_txt'] = 'Posta sunucusu adresi';
-$wb['cc_txt'] = 'Kopya adresi (CC)';
-$wb['quota_txt'] = 'Posta kutusu boyutu';
+$wb['server_address_txt'] = 'E-posta Sunucusu Adresi';
+$wb['cc_txt'] = 'Kopya Adresi (CC)';
+$wb['quota_txt'] = 'E-posta Kutusu Boyutu';
 $wb['unlimited_txt'] = 'Sınırsız';
 $wb['mb_txt'] = 'MB';
 $wb['none_txt'] = 'Yok';
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng b/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
index ac4938d76851b1f7eeae112ca5a1215726de72f1..57db1979013af74c8877a86dda4283395f99ceee 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
@@ -7,7 +7,7 @@ $wb['rulename_error_empty'] = 'Ad boÅŸ olamaz.';
 $wb['searchterm_is_empty'] = 'Arama ifadesi boÅŸ olamaz.';
 $wb['source_txt'] = 'Kaynak';
 $wb['target_error_regex'] = 'Hedef için yalnız şu karakterler kullanılabilir: a-z, 0-9, -, ., _, ve {boşluk}';
-$wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla önemsiz posta süzgeci sayısı sınırına ulaştınız.';
+$wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla önemsiz ileti süzgeci sayısı sınırına ulaştınız.';
 $wb['subject_txt'] = 'Konu';
 $wb['from_txt'] = 'Kimden';
 $wb['to_txt'] = 'Kime';
@@ -17,5 +17,5 @@ $wb['begins_with_txt'] = 'Åžununla baÅŸlayan';
 $wb['ends_with_txt'] = 'Åžununla biten';
 $wb['move_to_txt'] = 'Şuraya taşı';
 $wb['delete_txt'] = 'Sil';
-$wb['mailbox_filter_txt'] = 'Mailbox filter';
+$wb['mailbox_filter_txt'] = 'E-posta kutusu süzgeci';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/tr_mail_user_filter_list.lng
index 36bfe6a25ce3015bacd7c73d18909d3015dfc34f..3a14043e9254adb5eeebfd7df1517e8a7237458e 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_filter_list.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_filter_list.lng
@@ -4,5 +4,5 @@ $wb['rulename_txt'] = 'Ad';
 $wb['add_new_record_txt'] = 'Süzgeç Ekle';
 $wb['page_txt'] = 'Sayfa';
 $wb['page_of_txt'] = '/';
-$wb['delete_confirmation'] = 'Posta süzgecini silmek istediğinize emin misiniz?';
+$wb['delete_confirmation'] = 'E-posta süzgecini silmek istediğinize emin misiniz?';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_password.lng b/interface/web/mailuser/lib/lang/tr_mail_user_password.lng
index d06ad94bb059394423c3a6e18984dcfe8e01bbc6..c35319ced1b2c8ec926ce84aea5efef7c06b502d 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_password.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_password.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['mailbox_password_txt'] = 'Posta kutusu parolası';
+$wb['mailbox_password_txt'] = 'E-posta kutusu parolası';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['email_txt'] = 'E-posta';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['password_click_to_set_txt'] = 'Click to set';
+$wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
index d63f274e4993a606bb11dce8ece53c1a2c5619bc..3426385a2effcb7bb7a449896f768a4e03b772b2 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['mailbox_spamfilter_txt'] = 'Önemsiz Posta Süzgeci';
-$wb['spamfilter_txt'] = 'Önemsiz posta süzgeci';
+$wb['mailbox_spamfilter_txt'] = 'Önemsiz İleti Süzgeci';
+$wb['spamfilter_txt'] = 'Önemsiz ileti süzgeci';
 $wb['email_txt'] = 'E-posta';
 $wb['no_policy'] = '- devre dışı -';
 $wb['policy_txt'] = 'Kural';
diff --git a/interface/web/mailuser/templates/mail_user_filter_list.htm b/interface/web/mailuser/templates/mail_user_filter_list.htm
index 32d093844ed05e9ddd6787b7a4a9b82d5e914e45..b81793b63189926c8b1f3a25b1f2a06d9b96acce 100644
--- a/interface/web/mailuser/templates/mail_user_filter_list.htm
+++ b/interface/web/mailuser/templates/mail_user_filter_list.htm
@@ -30,7 +30,7 @@
                 <tr>
                     <td><a href="#" data-load-content="mailuser/mail_user_filter_edit.php?id={tmpl_var name='id'}">{tmpl_var name="rulename"}</a></td>
                     <td class="text-right">
-                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mailuser/mail_user_filter_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                        <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('mailuser/mail_user_filter_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                     </td>
                 </tr>
                 </tmpl_loop>
diff --git a/interface/web/monitor/lib/lang/ar.lng b/interface/web/monitor/lib/lang/ar.lng
index e00287a8e75da8aade3675ae8ff9b6d0100092cb..9d54ea1f5db7fbb85cff83b20b0065728efa5e13 100644
--- a/interface/web/monitor/lib/lang/ar.lng
+++ b/interface/web/monitor/lib/lang/ar.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ar_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ar_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ar_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ar_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ar_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ar_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ar_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/bg.lng b/interface/web/monitor/lib/lang/bg.lng
index 0db4623d03fc374f1f6388ef5c4aac55c4912054..a8b7f491aca6e00f622fe0863bc3cc9aa14159e0 100644
--- a/interface/web/monitor/lib/lang/bg.lng
+++ b/interface/web/monitor/lib/lang/bg.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng b/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/bg_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/bg_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/bg_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/bg_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/bg_dataloghistory_view.lng b/interface/web/monitor/lib/lang/bg_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/bg_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/br.lng b/interface/web/monitor/lib/lang/br.lng
index 048fec64be5cbfac4bbcd8175b298cc5bf792552..172891cfd9bcf6c489b4f120917f621db3e9108b 100644
--- a/interface/web/monitor/lib/lang/br.lng
+++ b/interface/web/monitor/lib/lang/br.lng
@@ -1,37 +1,39 @@
 <?php
-$wb['Server online since'] = 'Servidor online desde';
+$wb['Server online since'] = 'Servidor on-line desde';
 $wb['Users online'] = 'Usuários on-line';
 $wb['System load 1 minute'] = 'Carga do sistema - 1 min';
 $wb['System load 5 minutes'] = 'Carga do sistema - 5 min';
 $wb['System load 15 minutes'] = 'Carga do sistema - 15 min';
-$wb['Server Load'] = 'Carga do servidor';
-$wb['Disk usage'] = 'Uso do disco';
-$wb['Memory usage'] = 'Uso da memória';
-$wb['no_data_serverload_txt'] = 'Sem registros da carga do servidor disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_memusage_txt'] = 'Sem registro uso de memória disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_diskusage_txt'] = 'Sem registros sobre o uso dos discos disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_cpuinfo_txt'] = 'Sem registros sobre CPU disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_services_txt'] = 'Sem registro sobre os serviços disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_updates_txt'] = 'Sem atualização de dados disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_raid_txt'] = 'Sem registros sobre RAID disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_rkhunter_txt'] = 'Sem registros sobre o RKHUNTER disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_data_mailq_txt'] = 'Sem registro sobre a fila de e-mails disponíveis no momento. Tente novamente mais tarde.';
-$wb['no_logdata_txt'] = 'Sem registros de log disponíveis no momento. Tente novamente mais tarde.';
-$wb['Monitoring'] = 'Monitoramento';
+$wb['Server Load'] = 'Carga do Sistema';
+$wb['Disk usage'] = 'Uso do Disco';
+$wb['Memory usage'] = 'Uso da Memória';
+$wb['no_data_serverload_txt'] = 'Nenhum dado sobre o servidor disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_memusage_txt'] = 'Nenhum dado sobre uso da memória disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_diskusage_txt'] = 'Nenhum dado sobre o uso do disco disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_database_size_txt'] = 'Nenhum dado sobre o uso do banco de dados disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_cpuinfo_txt'] = 'Nenhum dado sobre a CPU disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_services_txt'] = 'Nenhum dado sobre os serviços disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_updates_txt'] = 'Nenhum dado sobre atualizações disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_raid_txt'] = 'Nenhum dados sobre o RAID disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_rkhunter_txt'] = 'Nenhum dado sobre o RKHunter disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_data_mailq_txt'] = 'Nenhum dados sobre as filas de e-mail disponível no momento. Por favor, verifique mais tarde.';
+$wb['no_logdata_txt'] = 'Nenhum dado de log disponível no momento. Por favor, verifique mais tarde.';
+$wb['Monitoring'] = 'Monitorando';
 $wb['Server to Monitor'] = 'Servidor a monitorar';
-$wb['Logfiles'] = 'Arquivos de log';
-$wb['Status of services'] = 'Estado dos serviços';
-$wb['No Refresh'] = 'Não atualize';
+$wb['Logfiles'] = 'Log';
+$wb['Status of services'] = 'Estado dos Serviços';
+$wb['No Refresh'] = 'Não atualizar';
 $wb['minutes'] = 'minutos';
-$wb['Show Overview'] = 'Visão geral';
-$wb['System State (All Servers)'] = 'Estado do Sistema (todos os servidores)';
-$wb['Hardware-Information'] = 'Informação de hardware';
+$wb['Show Overview'] = 'Exibir visão geral';
+$wb['System State (All Servers)'] = 'Estado do Sistema (Todos os servidores)';
+$wb['Hardware-Information'] = 'Informações do Hardware';
 $wb['Show CPU info'] = 'Exibir informações da CPU';
 $wb['Server State'] = 'Estado do Servidor';
 $wb['Show Update State'] = 'Exibir estado atual';
 $wb['Show RAID state'] = 'Exibir estado do RAID';
 $wb['Show Server load'] = 'Exibir carga do servidor';
 $wb['Show Disk usage'] = 'Exibir uso do disco';
+$wb['Show MySQL Database size'] = 'Exibir tamanho do banco de dados mysql';
 $wb['Show Memory usage'] = 'Exibir uso da memória';
 $wb['Show Services'] = 'Exibir serviços';
 $wb['Show Mail-Queue'] = 'Exibir fila de e-mails';
@@ -42,123 +44,123 @@ $wb['Show System-Log'] = 'Exibir log do sistema';
 $wb['Show ISPC Cron-Log'] = 'Exibir log do cron';
 $wb['Show Freshclam-Log'] = 'Exibir log do freshclam';
 $wb['Show Clamav-Log'] = 'Exibir log do clamav';
-$wb['Show ISPConfig-Log'] = 'Exibir log do ispconfig';
+$wb['Show ISPConfig-Log'] = 'Exibir log do ISPConfig';
 $wb['Show RKHunter-Log'] = 'Exibir log do rkhunter';
-$wb['Show Jobqueue'] = 'Exibir fila de trabalho';
+$wb['Show Jobqueue'] = 'Exibir fila de tarefas';
+$wb['Show Data Log History'] = 'Exibir histórico do log';
+$wb['Show fail2ban-Log'] = 'Exibir log do fail2ban';
+$wb['Show MongoDB-Log'] = 'Exibir log do mongodb';
+$wb['Show IPTables'] = 'Exibir regras de firewall';
+$wb['Show OpenVz VE BeanCounter'] = 'Exibir beancounter do openvz';
 $wb['monitor_general_serverstate_txt'] = 'Estado do servidor';
 $wb['monitor_general_systemstate_txt'] = 'Estado do sistema';
-$wb['monitor_diskusage_filesystem_txt'] = 'Sistema de arquivos';
+$wb['monitor_diskusage_filesystem_txt'] = 'Arquivos do sistema';
 $wb['monitor_diskusage_type_txt'] = 'Tipo';
 $wb['monitor_diskusage_size_txt'] = 'Tamanho';
-$wb['monitor_diskusage_used_txt'] = 'Utilizado';
+$wb['monitor_diskusage_used_txt'] = 'Uso';
 $wb['monitor_diskusage_available_txt'] = 'Disponível';
-$wb['monitor_diskusage_usage_txt'] = 'Uso %';
+$wb['monitor_diskusage_usage_txt'] = 'Percentual Utilizado';
 $wb['monitor_diskusage_mounted_txt'] = 'Montado em';
-$wb['monitor_logs_mail_txt'] = 'Log de e-mail';
-$wb['monitor_logs_mailwarn_txt'] = 'Alertas de e-mails';
-$wb['monitor_logs_mailerr_txt'] = 'Erros de e-mails';
-$wb['monitor_logs_messages_txt'] = 'Log do sistema';
-$wb['monitor_logs_ispccron_txt'] = 'Log do cron';
-$wb['monitor_logs_freshclam_txt'] = 'Logo do freshclam';
-$wb['monitor_logs_clamav_txt'] = 'Log do clamav ';
-$wb['monitor_logs_ispc_txt'] = 'Log do ispconfig';
-$wb['monitor_norkhunter_txt'] = 'RKHunter não está instalado, então não existem logs a exibir';
+$wb['monitor_database_name_txt'] = 'Banco de dados';
+$wb['monitor_database_size_txt'] = 'Tamanho';
+$wb['monitor_database_client_txt'] = 'Cliente';
+$wb['monitor_database_domain_txt'] = 'Domínio';
+$wb['monitor_logs_mail_txt'] = 'Log - e-Mails';
+$wb['monitor_logs_mailwarn_txt'] = 'Log - Alertas de e-mail';
+$wb['monitor_logs_mailerr_txt'] = 'Log - Erros de e-mail';
+$wb['monitor_logs_messages_txt'] = 'Log - Mensagens do sistema';
+$wb['monitor_logs_ispccron_txt'] = 'Log - Tarefas no cron';
+$wb['monitor_logs_freshclam_txt'] = 'Log - freshclam';
+$wb['monitor_logs_clamav_txt'] = 'Log - clamav';
+$wb['monitor_logs_ispc_txt'] = 'Log - ISPConfig';
+$wb['monitor_nosupportedraid1_txt'] = 'No momento possuímos suporte para \'mdadm\'ou \'mpt-status\' para monitoramento do RAID.<br> Não encontramos nenhum dos dois neste servidor.<br><br> Isto significa que não podemos oferecer suporte ao seu RAID ainda.';
+$wb['monitor_norkhunter_txt'] = 'O RKHunter não está instalado, desta forma, não existe log';
 $wb['monitor_serverstate_server_txt'] = 'Servidor';
 $wb['monitor_serverstate_kernel_txt'] = 'Kernel';
 $wb['monitor_serverstate_state_txt'] = 'Estado';
-$wb['monitor_serverstate_unknown_txt'] = 'desconhecido(s)';
-$wb['monitor_serverstate_info_txt'] = 'informação(es)';
-$wb['monitor_serverstate_warning_txt'] = 'aviso(s)';
-$wb['monitor_serverstate_critical_txt'] = 'crítico(s)';
-$wb['monitor_serverstate_error_txt'] = 'erro(s)';
+$wb['monitor_serverstate_unknown_txt'] = 'desconhecido';
+$wb['monitor_serverstate_info_txt'] = 'info';
+$wb['monitor_serverstate_warning_txt'] = 'alerta';
+$wb['monitor_serverstate_critical_txt'] = 'crítico';
+$wb['monitor_serverstate_error_txt'] = 'erro';
 $wb['monitor_serverstate_moreinfo_txt'] = 'Mais informações...';
 $wb['monitor_serverstate_more_txt'] = 'Mais...';
-$wb['monitor_serverstate_fclamok_txt'] = 'Definições de anti-vírus OK';
-$wb['monitor_serverstate_fclamoutdated_txt'] = 'Definições de anti-vírus DESATUALIZADAS!';
+$wb['monitor_serverstate_fclamok_txt'] = 'A proteção anti-vírus está ok';
+$wb['monitor_serverstate_fclamoutdated_txt'] = 'A proteção anti-vírus está desatualizada!';
 $wb['monitor_serverstate_fclamunknown_txt'] = 'Freshclam: ???!';
-$wb['monitor_serverstate_hdok_txt'] = 'Disco OK';
-$wb['monitor_serverstate_hdgoingfull_txt'] = 'Disco cheio';
-$wb['monitor_serverstate_hdnearlyfull_txt'] = 'Disco com pouco espaço';
-$wb['monitor_serverstate_hdveryfull_txt'] = 'Disco com espaço insuficiente';
-$wb['monitor_serverstate_hdfull_txt'] = 'Disco sem espaço';
-$wb['monitor_serverstate_hdunknown_txt'] = 'Disco rígido: ???';
+$wb['monitor_serverstate_hdok_txt'] = 'O uso do disco está ok';
+$wb['monitor_serverstate_hdgoingfull_txt'] = 'O uso do disco está moderado';
+$wb['monitor_serverstate_hdnearlyfull_txt'] = 'O uso do disco está próximo do limite';
+$wb['monitor_serverstate_hdveryfull_txt'] = 'O uso do disco está crítico';
+$wb['monitor_serverstate_hdfull_txt'] = 'Não existe mais espaço no disco para uso';
+$wb['monitor_serverstate_hdunknown_txt'] = 'Disco(HDD): ???';
 $wb['monitor_serverstate_listok_txt'] = 'ok';
-$wb['monitor_serverstate_listinfo_txt'] = 'informação';
-$wb['monitor_serverstate_listwarning_txt'] = 'aviso';
+$wb['monitor_serverstate_listinfo_txt'] = 'info';
+$wb['monitor_serverstate_listwarning_txt'] = 'alerta';
 $wb['monitor_serverstate_listcritical_txt'] = 'crítico';
 $wb['monitor_serverstate_listerror_txt'] = 'erro';
 $wb['monitor_serverstate_listunknown_txt'] = 'desconhecido';
-$wb['monitor_serverstate_loadok_txt'] = 'Carga do servidor OK';
-$wb['monitor_serverstate_loadheavy_txt'] = 'Carga do servidor: alta';
-$wb['monitor_serverstate_loadhigh_txt'] = 'Carga do servidor: média';
-$wb['monitor_serverstate_loaghigher_txt'] = 'Carga do servidor: excessiva';
-$wb['monitor_serverstate_loadhighest_txt'] = 'Carga do servidor: extrema';
-$wb['monitor_serverstate_loadunknown_txt'] = 'Carga do servidor: ???';
-$wb['monitor_serverstate_mailqok_txt'] = 'Fila de e-mails OK';
-$wb['monitor_serverstate_mailqheavy_txt'] = 'Fila de e-mails: alta';
-$wb['monitor_serverstate_mailqhigh_txt'] = 'Fila de e-mails: média';
-$wb['monitor_serverstate_mailqhigher_txt'] = 'Fila de e-mails: excessiva';
-$wb['monitor_serverstate_mailqhighest_txt'] = 'Fila de e-mails: extrema';
+$wb['monitor_serverstate_loadok_txt'] = 'A carga do servidor está ok';
+$wb['monitor_serverstate_loadheavy_txt'] = 'O servidor está sob carga média';
+$wb['monitor_serverstate_loadhigh_txt'] = 'O servidor está sob carga alta';
+$wb['monitor_serverstate_loaghigher_txt'] = 'O servidor está sob carga muito alta';
+$wb['monitor_serverstate_loadhighest_txt'] = 'O servidor está sob carga crítica';
+$wb['monitor_serverstate_loadunknown_txt'] = 'Carga do Servidor: ???';
+$wb['monitor_serverstate_mailqok_txt'] = 'A fila de e-mails está ok';
+$wb['monitor_serverstate_mailqheavy_txt'] = 'A fila de e-mails está moderada';
+$wb['monitor_serverstate_mailqhigh_txt'] = 'A fila de e-mails está grande';
+$wb['monitor_serverstate_mailqhigher_txt'] = 'A fila de está muito grande';
+$wb['monitor_serverstate_mailqhighest_txt'] = 'A fila de e-mails está crítica';
 $wb['monitor_serverstate_mailqunknown_txt'] = 'Fila de e-mails: ???';
-$wb['monitor_serverstate_raidok_txt'] = 'RAID OK';
-$wb['monitor_serverstate_raidresync_txt'] = 'RAID em modo RESYNC';
-$wb['monitor_serverstate_raidfault_txt'] = 'RAID possui um disco com falhas. Troque-o o mais rápido possível!';
-$wb['monitor_serverstate_raiderror_txt'] = 'RAID parado.';
-$wb['monitor_serverstate_raidunknown_txt'] = 'RAID: ???';
-$wb['monitor_serverstate_servicesonline_txt'] = 'Todos os serviços necessários estão on-line';
-$wb['monitor_serverstate_servicesoffline_txt'] = 'Um ou mais serviços necessários estão off-line';
+$wb['monitor_serverstate_raidok_txt'] = 'O RAID está ok';
+$wb['monitor_serverstate_raidresync_txt'] = 'O RAID está em modo RESYNC';
+$wb['monitor_serverstate_raidfault_txt'] = 'O RAID possui uma disco com falha. Substitua o mais rápido possível!';
+$wb['monitor_serverstate_raiderror_txt'] = 'O RAID não está funcionando';
+$wb['monitor_serverstate_raidunknown_txt'] = 'Estado do RAID: ???';
+$wb['monitor_serverstate_servicesonline_txt'] = 'Todos os serviços estão on-line';
+$wb['monitor_serverstate_servicesoffline_txt'] = 'Um ou mais serviços estão off-line';
 $wb['monitor_serverstate_servicesunknown_txt'] = 'Serviços: ???';
-$wb['monitor_serverstate_syslogok_txt'] = 'O log do sistema está OK';
-$wb['monitor_serverstate_syslogwarning_txt'] = 'Existem alguns alertas no log do sistema';
-$wb['monitor_serverstate_syslogerror_txt'] = 'Existem erros no log do sistema';
-$wb['monitor_serverstate_syslogunknown_txt'] = 'syslog:???';
-$wb['monitor_serverstate_updatesok_txt'] = 'Sistema atualizado.';
-$wb['monitor_serverstate_updatesneeded_txt'] = 'Um ou mais componentes necessitam de atualização';
-$wb['monitor_serverstate_updatesunknown_txt'] = 'Estado do sistema:???';
+$wb['monitor_serverstate_syslogok_txt'] = 'O log do sistema está ok.';
+$wb['monitor_serverstate_syslogwarning_txt'] = 'Existem algumas mensagens de alerta no log do sistema';
+$wb['monitor_serverstate_syslogerror_txt'] = 'Existem algumas mensagens de erros no log do sistema';
+$wb['monitor_serverstate_syslogunknown_txt'] = 'Log do sistema: ???';
+$wb['monitor_serverstate_updatesok_txt'] = 'O sistema está atualizado.';
+$wb['monitor_serverstate_updatesneeded_txt'] = 'Um ou mais componentes do sistema necessitam atualização';
+$wb['monitor_serverstate_updatesunknown_txt'] = 'Atualizar Sistema: ???';
+$wb['monitor_serverstate_beancounterok_txt'] = 'O beancounter está ok';
+$wb['monitor_serverstate_beancounterinfo_txt'] = 'Existe uma falha de visualização no beancounter';
+$wb['monitor_serverstate_beancounterwarning_txt'] = 'Existe alguma falha no beancounter';
+$wb['monitor_serverstate_beancountercritical_txt'] = 'Existem várias falhas no beancounter';
+$wb['monitor_serverstate_beancountererror_txt'] = 'Existem muitas falhas no beancounter';
 $wb['monitor_services_online_txt'] = 'On-line';
 $wb['monitor_services_offline_txt'] = 'Off-line';
-$wb['monitor_services_web_txt'] = 'Servidor de páginas:';
-$wb['monitor_services_ftp_txt'] = 'Servidor ftp:';
-$wb['monitor_services_smtp_txt'] = 'Servidor smtp:';
-$wb['monitor_services_pop_txt'] = 'Servidor pop:';
-$wb['monitor_services_imap_txt'] = 'Servidor imap:';
-$wb['monitor_services_mydns_txt'] = 'Servidor dns:';
-$wb['monitor_services_mysql_txt'] = 'Servidor mysql:';
-$wb['monitor_settings_datafromdate_txt'] = 'Data de: ';
-$wb['monitor_settings_datetimeformat_txt'] = 'd/m/Y H:i';
-$wb['monitor_settings_refreshsq_txt'] = 'Atualizar sequência:';
+$wb['monitor_services_web_txt'] = 'Servidor WEB:';
+$wb['monitor_services_ftp_txt'] = 'Servidor FTP:';
+$wb['monitor_services_smtp_txt'] = 'Servidor SMTP:';
+$wb['monitor_services_pop_txt'] = 'Servidor POP3:';
+$wb['monitor_services_imap_txt'] = 'Servidor IMAP:';
+$wb['monitor_services_mydns_txt'] = 'Servidor DNS:';
+$wb['monitor_services_mongodb_txt'] = 'Servidor MONGODB:';
+$wb['monitor_services_mysql_txt'] = 'Servidor MYSQL:';
+$wb['monitor_settings_datafromdate_txt'] = 'Dados de: ';
+$wb['monitor_settings_datetimeformat_txt'] = 'd-m-Y H:i';
+$wb['monitor_settings_refreshsq_txt'] = 'Sequência de atualização:';
 $wb['monitor_settings_server_txt'] = 'Servidor';
-$wb['monitor_title_cpuinfo_txt'] = 'Informação da cpu';
-$wb['monitor_title_updatestate_txt'] = 'Atualizar estado';
+$wb['monitor_title_cpuinfo_txt'] = 'Informações de CPU';
+$wb['monitor_title_updatestate_txt'] = 'Atualizar Estado';
 $wb['monitor_title_mailq_txt'] = 'Fila de e-mails';
 $wb['monitor_title_raidstate_txt'] = 'Estado do RAID';
-$wb['monitor_title_rkhunterlog_txt'] = 'Log do RKHunter';
-$wb['monitor_updates_nosupport_txt'] = 'Sua distribuição não suporta este tipo de monitoramento';
+$wb['monitor_title_rkhunterlog_txt'] = 'Log do rkhunter';
 $wb['monitor_title_fail2ban_txt'] = 'Log do fail2ban';
-$wb['monitor_nosupportedraid1_txt'] = 'Até o presente momento, o suporte a mdadm ou mpt-status para monitoramento do RAID não foi encontrado.<br><br>Provavelmente seu servidor não possui recursos de RAID a serem monitorados.';
-$wb['monitor_serverstate_beancounterok_txt'] = 'Beancounter OK';
-$wb['monitor_serverstate_beancounterinfo_txt'] = 'Existem poucas falhas no beancounter';
-$wb['monitor_serverstate_beancounterwarning_txt'] = 'Existem algumas falhas no beancounter';
-$wb['monitor_serverstate_beancountercritical_txt'] = 'Existem falhas críticas no beancounter';
-$wb['monitor_serverstate_beancountererror_txt'] = 'Existem diversas falhas no beancounter';
-$wb['monitor_title_beancounter_txt'] = 'Beancounter openvz ve';
-$wb['monitor_beancounter_nosupport_txt'] = 'Este servidor não é um um contêiner openvz e não contém informações de beancounter.';
-$wb['monitor_title_iptables_txt'] = 'Regras do firewall';
-$wb['Show fail2ban-Log'] = 'Exibir log do fail2ban';
-$wb['Show IPTables'] = 'Exibir regras do firewall';
-$wb['Show OpenVz VE BeanCounter'] = 'Exibir beancounter do openvz';
+$wb['monitor_title_mongodb_txt'] = 'Log do mongodb';
+$wb['monitor_title_iptables_txt'] = 'Regras de Firewall';
+$wb['monitor_title_beancounter_txt'] = 'Beancounter openvz';
+$wb['monitor_updates_nosupport_txt'] = 'Sua distribuição não é suportada por este monitoramento';
+$wb['monitor_beancounter_nosupport_txt'] = 'Este servidor não é um openvz e não possui nenhuma informação do beancounter';
 $wb['Show Monit'] = 'Exibir Monit';
-$wb['no_monit_url_defined_txt'] = 'Nenhuma url do Monit configurada.';
+$wb['no_monit_url_defined_txt'] = 'Nenhuma URL do Monit definida.';
 $wb['no_permissions_to_view_monit_txt'] = 'Você não tem permissão para acessar o Monit.';
 $wb['Show Munin'] = 'Exibir Munin';
-$wb['no_munin_url_defined_txt'] = 'Nenhuma url do Muni configurada.';
+$wb['no_munin_url_defined_txt'] = 'Nenhuma URL do Munin definida.';
 $wb['no_permissions_to_view_munin_txt'] = 'Você não tem permissão para acessar o Munin.';
-$wb['no_data_database_size_txt'] = 'Nenhuma informação de uso do banco de dados disponível no momento. Por favor verifique novamente mais tarde.';
-$wb['monitor_database_name_txt'] = 'Banco de dados';
-$wb['monitor_database_size_txt'] = 'Tamanho';
-$wb['monitor_database_client_txt'] = 'Cliente';
-$wb['monitor_database_domain_txt'] = 'Domínio';
-$wb['Show MongoDB-Log'] = 'Exibir logs do MongoDB';
-$wb['monitor_services_mongodb_txt'] = 'Servidor MongoDB:';
-$wb['monitor_title_mongodb_txt'] = 'Logs do MongoDB';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_datalog_list.lng b/interface/web/monitor/lib/lang/br_datalog_list.lng
index e6b2f554c339049812daa0504d398d61304295f6..8e044daeb7447a8125eed0c133743753d43e717a 100644
--- a/interface/web/monitor/lib/lang/br_datalog_list.lng
+++ b/interface/web/monitor/lib/lang/br_datalog_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Fila de trabalho';
+$wb['list_head_txt'] = 'Fila de tarefas';
 $wb['tstamp_txt'] = 'Data';
 $wb['server_id_txt'] = 'Servidor';
 $wb['dbtable_txt'] = 'Tabela do BD';
 $wb['action_txt'] = 'Ação';
-$wb['status_txt'] = 'Situação';
+$wb['status_txt'] = 'Estado';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_list.lng b/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0a02fda077e1ba5cbf716f4f841255307e7977f5
--- /dev/null
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Histórico do log';
+$wb['tstamp_txt'] = 'Data';
+$wb['server_id_txt'] = 'Servidor';
+$wb['dbtable_txt'] = 'Tabela do BD';
+$wb['action_txt'] = 'Ação';
+$wb['status_txt'] = 'Estado';
+?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..be544e61194dd47b6ae3d356f816d167acbd5cd6
--- /dev/null
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Histórico do log';
+$wb['success_txt'] = 'O comando "Desfazer ação" foi realizado com sucesso';
+$wb['error_txt'] = 'Erro durante desfazer ação: O registro não existe mais';
+$wb['error_undelete_txt'] = 'Erro durante a remoção: Registro com ID primário ainda existe.';
+$wb['btn_cancel_txt'] = 'Voltar';
+?>
diff --git a/interface/web/monitor/lib/lang/br_dataloghistory_view.lng b/interface/web/monitor/lib/lang/br_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..83546932809cc54956ef4b19b03c562becb283fd
--- /dev/null
+++ b/interface/web/monitor/lib/lang/br_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Inserir';
+$wb['u'] = 'Atualizar';
+$wb['d'] = 'Remover';
+$wb['list_head_txt'] = 'Histórico do log';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Data/Hora';
+$wb['table_txt'] = 'Tabela';
+$wb['action_txt'] = 'Ação';
+$wb['session_id_txt'] = 'ID da sessão';
+$wb['fields_txt'] = 'Campos';
+$wb['fields_inserted_txt'] = 'Campos cadastrados';
+$wb['fields_updated_txt'] = 'Atualizar campos';
+$wb['fields_deleted_txt'] = 'Remover campos';
+$wb['no_changes_txt'] = 'Nenhuma alteração (sincronizar)';
+$wb['is_diff_txt'] = 'As diferenças são destacadas';
+$wb['is_diff_inserts_txt'] = 'Inserções';
+$wb['is_diff_deletes_txt'] = 'Remoções';
+$wb['field_txt'] = 'Campo';
+$wb['value_txt'] = 'Valor';
+$wb['old_txt'] = 'Antigo';
+$wb['new_txt'] = 'Novo';
+$wb['btn_cancel_txt'] = 'Voltar';
+$wb['undo_txt'] = 'Desfazer ação';
+$wb['undo_confirmation_txt'] = 'Você realmente deseja desfazer esta ação?';
+?>
diff --git a/interface/web/monitor/lib/lang/br_syslog_list.lng b/interface/web/monitor/lib/lang/br_syslog_list.lng
index 23f3c6d5daf43245f060b7de39004ede9e1895d4..ca5a3735644e78ef124a6b39011af8addf7f1fe4 100644
--- a/interface/web/monitor/lib/lang/br_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/br_syslog_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Log do Painel';
-$wb['tstamp_txt'] = 'Data';
+$wb['list_head_txt'] = 'Log do ISPConfig';
+$wb['tstamp_txt'] = 'Data/hora';
 $wb['server_id_txt'] = 'Servidor';
-$wb['loglevel_txt'] = 'Nível do Log';
+$wb['loglevel_txt'] = 'Nível';
 $wb['message_txt'] = 'Mensagem';
 ?>
diff --git a/interface/web/monitor/lib/lang/ca.lng b/interface/web/monitor/lib/lang/ca.lng
index 4575be2ff1f54a8584363c49e8e1e869157d197c..b57b255a745abbd3252f91709843843d2198219b 100644
--- a/interface/web/monitor/lib/lang/ca.lng
+++ b/interface/web/monitor/lib/lang/ca.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ca_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ca_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ca_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ca_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ca_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ca_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ca_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/cz.lng b/interface/web/monitor/lib/lang/cz.lng
index dc3e3cb341781ce68ca9e5076e3cb4f43de27f22..be2d9eadbb410a52ead1e3b0907d6c91fda03afa 100644
--- a/interface/web/monitor/lib/lang/cz.lng
+++ b/interface/web/monitor/lib/lang/cz.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Klient';
 $wb['monitor_database_domain_txt'] = 'Doména';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Zobrazit historii datového logu';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..ce89af1a880f3f29c4204d3b5ee25da6caeb27f9
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Protokol historie datového logu';
+$wb['tstamp_txt'] = 'Datum';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Tabulka';
+$wb['action_txt'] = 'Akce';
+$wb['status_txt'] = 'Stav';
+?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0d25364ec14b8c1a866ad65c0e17165fd7e6c768
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Záznam historie datového logu';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Zpět';
+?>
diff --git a/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng b/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..1f20cf12d453d532ae95ba77615db60c0433dbc3
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cz_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Vložit';
+$wb['u'] = 'Aktualizace';
+$wb['d'] = 'Odstranit';
+$wb['list_head_txt'] = 'Záznam historie datového logu';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Časové razítko';
+$wb['table_txt'] = 'Tabulka';
+$wb['action_txt'] = 'Akce';
+$wb['session_id_txt'] = 'ID Relace';
+$wb['fields_txt'] = 'Pole';
+$wb['fields_inserted_txt'] = 'Vložená pole';
+$wb['fields_updated_txt'] = 'Aktualizovaná pole';
+$wb['fields_deleted_txt'] = 'Odstraněná pole';
+$wb['no_changes_txt'] = 'Žádné změny (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Vložení';
+$wb['is_diff_deletes_txt'] = 'Odstranění';
+$wb['field_txt'] = 'Pole';
+$wb['value_txt'] = 'Hodnota';
+$wb['old_txt'] = 'Starý';
+$wb['new_txt'] = 'Nový';
+$wb['btn_cancel_txt'] = 'Zpět';
+$wb['undo_txt'] = 'Vrátit akci';
+$wb['undo_confirmation_txt'] = 'Opravdu chcete tuto akci vrátit zpět ?';
+?>
diff --git a/interface/web/monitor/lib/lang/dk.lng b/interface/web/monitor/lib/lang/dk.lng
index dc43c1306fcbf486e6e2462142848ee8ff2e9049..4c7bfab1e750e91a1da8bf0bf4567b718c9414d9 100644
--- a/interface/web/monitor/lib/lang/dk.lng
+++ b/interface/web/monitor/lib/lang/dk.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng b/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/dk_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/dk_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/dk_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/dk_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/dk_dataloghistory_view.lng b/interface/web/monitor/lib/lang/dk_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/dk_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/el.lng b/interface/web/monitor/lib/lang/el.lng
index 414642e2e359fa1fe4c3b3ad416691d569e4169f..245c80c6666b36b19050e298e1d05c3108e618a9 100644
--- a/interface/web/monitor/lib/lang/el.lng
+++ b/interface/web/monitor/lib/lang/el.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/el_dataloghistory_list.lng b/interface/web/monitor/lib/lang/el_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/el_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/el_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/el_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/el_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/el_dataloghistory_view.lng b/interface/web/monitor/lib/lang/el_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/el_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/es.lng b/interface/web/monitor/lib/lang/es.lng
index 8cc87b4801809002201cb6f6e9b929a59edf86d9..f4acb3c45c0c9e80162986cce5d112c37f1e7180 100755
--- a/interface/web/monitor/lib/lang/es.lng
+++ b/interface/web/monitor/lib/lang/es.lng
@@ -161,4 +161,5 @@ $wb['System load 15 minutes'] = 'Carga del sistema hace 15 minutos';
 $wb['System load 5 minutes'] = 'Carga del sistema hace 5 minutos';
 $wb['System State (All Servers)'] = 'Estado de los sistemas';
 $wb['Users online'] = 'Usuarios en línea';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/es_dataloghistory_list.lng b/interface/web/monitor/lib/lang/es_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/es_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/es_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/es_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/es_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/es_dataloghistory_view.lng b/interface/web/monitor/lib/lang/es_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/es_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/fi.lng b/interface/web/monitor/lib/lang/fi.lng
index 44143f3d207ced3c6086a8f6a90a65a1b1508b59..911aae9bd12fc4374ca4070a910dad087a7908cf 100755
--- a/interface/web/monitor/lib/lang/fi.lng
+++ b/interface/web/monitor/lib/lang/fi.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng b/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fi_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/fi_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/fi_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fi_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/fi_dataloghistory_view.lng b/interface/web/monitor/lib/lang/fi_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fi_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/fr.lng b/interface/web/monitor/lib/lang/fr.lng
index 9fb2ab5e8c41de82de381d5724b97bcd067c82c1..c08fe749482b2731e68cb93226ebec2b554e7b61 100644
--- a/interface/web/monitor/lib/lang/fr.lng
+++ b/interface/web/monitor/lib/lang/fr.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fr_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/fr_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/fr_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fr_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/fr_dataloghistory_view.lng b/interface/web/monitor/lib/lang/fr_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/fr_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/hr.lng b/interface/web/monitor/lib/lang/hr.lng
index d878568104d37fd8c9700d1c1d3f09325bca0db6..17899ff3f0b30b8dfb4f589e151c9fcdd2d6e756 100644
--- a/interface/web/monitor/lib/lang/hr.lng
+++ b/interface/web/monitor/lib/lang/hr.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hr_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/hr_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/hr_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hr_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/hr_dataloghistory_view.lng b/interface/web/monitor/lib/lang/hr_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hr_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/hu.lng b/interface/web/monitor/lib/lang/hu.lng
index 85fda979087b48f424ea1f3d828b90a3bebfb781..9a5c41654ff351cd5652a405bb2c7c40ee03691d 100644
--- a/interface/web/monitor/lib/lang/hu.lng
+++ b/interface/web/monitor/lib/lang/hu.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng b/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hu_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/hu_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/hu_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hu_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/hu_dataloghistory_view.lng b/interface/web/monitor/lib/lang/hu_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/hu_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/id.lng b/interface/web/monitor/lib/lang/id.lng
index d77f1456496bc650db3e2ff4c6ebaf554d574d53..4cdbf5d8ba3e03cdccf1768a7f008613c90ce6b0 100644
--- a/interface/web/monitor/lib/lang/id.lng
+++ b/interface/web/monitor/lib/lang/id.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/id_dataloghistory_list.lng b/interface/web/monitor/lib/lang/id_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/id_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/id_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/id_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/id_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/id_dataloghistory_view.lng b/interface/web/monitor/lib/lang/id_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/id_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/it.lng b/interface/web/monitor/lib/lang/it.lng
index c7a6823683d4c32d2ce8f92e257317ccd0f9eb25..e6feadf01f9e68d9429be17e13e0dddc896d97fc 100644
--- a/interface/web/monitor/lib/lang/it.lng
+++ b/interface/web/monitor/lib/lang/it.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_list.lng b/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_view.lng b/interface/web/monitor/lib/lang/it_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/ja.lng b/interface/web/monitor/lib/lang/ja.lng
index bc2c7d2b5c2cf2fb5068934db32e3c428a1ac251..cccd678cb7b9ba2351ba1518f04c7d7a7051d866 100644
--- a/interface/web/monitor/lib/lang/ja.lng
+++ b/interface/web/monitor/lib/lang/ja.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ja_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ja_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ja_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ja_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ja_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ja_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ja_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/nl.lng b/interface/web/monitor/lib/lang/nl.lng
index 81caa02b704a990f6b3c72c5b2a39577d5a05ad1..a534b9afb36a6a5038211a54f3008755da7cb690 100644
--- a/interface/web/monitor/lib/lang/nl.lng
+++ b/interface/web/monitor/lib/lang/nl.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng b/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/nl_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/nl_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/nl_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/nl_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/nl_dataloghistory_view.lng b/interface/web/monitor/lib/lang/nl_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/nl_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/pl.lng b/interface/web/monitor/lib/lang/pl.lng
index 77d05e0569e66a0154103a505e72a84ab8296f4c..a8e1b3e53c2086a8b4d1dee058c2e40562f88899 100644
--- a/interface/web/monitor/lib/lang/pl.lng
+++ b/interface/web/monitor/lib/lang/pl.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng b/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pl_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/pl_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/pl_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pl_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/pl_dataloghistory_view.lng b/interface/web/monitor/lib/lang/pl_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pl_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/pt.lng b/interface/web/monitor/lib/lang/pt.lng
index 2218ede892b5a89f327d54cc49f61bcc38791587..7930febda22cb515d5e6462f0b809037fffc2878 100644
--- a/interface/web/monitor/lib/lang/pt.lng
+++ b/interface/web/monitor/lib/lang/pt.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng b/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pt_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/pt_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/pt_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pt_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/pt_dataloghistory_view.lng b/interface/web/monitor/lib/lang/pt_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/pt_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/ro.lng b/interface/web/monitor/lib/lang/ro.lng
index 7b06c4ba0c37b9b65d1c39b85d8230979babdac5..96a2ce10e69d4dc9e7f5d1fe83130c427cc4b7c4 100644
--- a/interface/web/monitor/lib/lang/ro.lng
+++ b/interface/web/monitor/lib/lang/ro.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ro_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ro_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ro_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ro_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ro_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ro_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ro_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/ru.lng b/interface/web/monitor/lib/lang/ru.lng
index 49e9d4604d6cd1bb8a8c525c6b41c537f2da6ed8..823174b71665e3d318652d22f3252ba480398c2b 100644
--- a/interface/web/monitor/lib/lang/ru.lng
+++ b/interface/web/monitor/lib/lang/ru.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Домен';
 $wb['Show MongoDB-Log'] = 'Показать журнал MongoDB';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-сервер:';
 $wb['monitor_title_mongodb_txt'] = 'Журнал MongoDB';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng b/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ru_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/ru_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/ru_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ru_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/ru_dataloghistory_view.lng b/interface/web/monitor/lib/lang/ru_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/ru_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/se.lng b/interface/web/monitor/lib/lang/se.lng
index 732805d2a633d2c37ff15be6ef40ee2d424853b7..78dd5ed1be944dc9ca00ddf4c3d86acb3ee6703e 100644
--- a/interface/web/monitor/lib/lang/se.lng
+++ b/interface/web/monitor/lib/lang/se.lng
@@ -161,4 +161,5 @@ $wb['no_permissions_to_view_munin_txt'] = 'Du har inte behörighet att visa Muni
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/se_dataloghistory_list.lng b/interface/web/monitor/lib/lang/se_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/se_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/se_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/se_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/se_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/se_dataloghistory_view.lng b/interface/web/monitor/lib/lang/se_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/se_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/sk.lng b/interface/web/monitor/lib/lang/sk.lng
index 7697242386a4cd279ae2f0b5be354d6e1e5b421b..36af834eaf26eeda4a3806896d327c91ee804f45 100644
--- a/interface/web/monitor/lib/lang/sk.lng
+++ b/interface/web/monitor/lib/lang/sk.lng
@@ -161,4 +161,5 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
+$wb['Show Data Log History'] = 'Show Data Log History';
 ?>
diff --git a/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng b/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/sk_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/sk_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/sk_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/sk_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/sk_dataloghistory_view.lng b/interface/web/monitor/lib/lang/sk_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/sk_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/lib/lang/tr.lng b/interface/web/monitor/lib/lang/tr.lng
index 00beedb1dc2d54f704d0cb848a0ddee746ce332d..20a9e8e140167eb5b56b989256986ea53b237f31 100644
--- a/interface/web/monitor/lib/lang/tr.lng
+++ b/interface/web/monitor/lib/lang/tr.lng
@@ -1,21 +1,22 @@
 <?php
 $wb['Server online since'] = 'Sunucu şu zamandan beri çevrimiçi';
 $wb['Users online'] = 'Çevrimiçi Kullanıcılar';
-$wb['System load 1 minute'] = '1 dakikalık sistem yükü';
-$wb['System load 5 minutes'] = '5 dakikalık sistem yükü';
-$wb['System load 15 minutes'] = '15 dakikalık sistem yükü';
+$wb['System load 1 minute'] = 'Son 1 dakika sistem yükü';
+$wb['System load 5 minutes'] = 'Son 5 dakika sistem yükü';
+$wb['System load 15 minutes'] = 'Son 15 dakika sistem yükü';
 $wb['Server Load'] = 'Sunucu Yükü';
 $wb['Disk usage'] = 'Disk Kullanımı';
 $wb['Memory usage'] = 'Bellek Kullanımı';
 $wb['no_data_serverload_txt'] = 'Henüz sunucu yükü hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_memusage_txt'] = 'Henüz bellek kullanımı hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_diskusage_txt'] = 'Henüz disk kullanımı hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
+$wb['no_data_database_size_txt'] = 'Henüz veritabanı kullanımı ile ilgili bir veri yok. Lütfen daha sonra yeniden deneyin.';
 $wb['no_data_cpuinfo_txt'] = 'Henüz işlemci hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_services_txt'] = 'Henüz hizmetler hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_updates_txt'] = 'Henüz güncellemeler hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_raid_txt'] = 'Henüz RAID hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_data_rkhunter_txt'] = 'Henüz RKHunter hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
-$wb['no_data_mailq_txt'] = 'Henüz posta kuyruğu hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
+$wb['no_data_mailq_txt'] = 'Henüz e-posta kuyruğu hakkında bir veri yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['no_logdata_txt'] = 'Henüz bir günlük verisi yok. Lütfen bir süre sonra yeniden deneyin.';
 $wb['Monitoring'] = 'Ä°zleme';
 $wb['Server to Monitor'] = 'Ä°zlenecek Sunucu';
@@ -34,10 +35,10 @@ $wb['Show Server load'] = 'Sistem Yükü';
 $wb['Show Disk usage'] = 'Disk Kullanımı';
 $wb['Show Memory usage'] = 'Bellek Kullanımı';
 $wb['Show Services'] = 'Hizmetler';
-$wb['Show Mail-Queue'] = 'Posta KuyruÄŸu';
-$wb['Show Mail-Log'] = 'Posta Günlüğü';
-$wb['Show Mail warn-Log'] = 'Posta Uyarı Günlüğü';
-$wb['Show Mail err-Log'] = 'Posta Hata Günlüğü';
+$wb['Show Mail-Queue'] = 'E-posta KuyruÄŸu';
+$wb['Show Mail-Log'] = 'E-posta Günlüğü';
+$wb['Show Mail warn-Log'] = 'E-posta Uyarı Günlüğü';
+$wb['Show Mail err-Log'] = 'E-posta Hata Günlüğü';
 $wb['Show System-Log'] = 'Sistem Günlüğü';
 $wb['Show ISPC Cron-Log'] = 'Zamanlı Görev Günlüğü';
 $wb['Show Freshclam-Log'] = 'Freshclam Günlüğü';
@@ -46,27 +47,32 @@ $wb['Show ISPConfig-Log'] = 'ISPConfig Günlüğü';
 $wb['Show RKHunter-Log'] = 'RKHunter Günlüğü';
 $wb['Show Jobqueue'] = 'Ä°ÅŸ KuyruÄŸu';
 $wb['Show fail2ban-Log'] = 'Fail2ban Günlüğü';
-$wb['Show IPTables'] = 'IPTabloları';
+$wb['Show MongoDB-Log'] = 'MongoDB Günlüğünü Görüntüle';
+$wb['Show IPTables'] = 'IPTables Günlüğü';
 $wb['Show OpenVz VE BeanCounter'] = 'OpenVz VE BeanCounter';
 $wb['monitor_general_serverstate_txt'] = 'Sunucu Durumu';
 $wb['monitor_general_systemstate_txt'] = 'Sistem Durumu';
 $wb['monitor_diskusage_filesystem_txt'] = 'Dosya Sistemi';
-$wb['monitor_diskusage_type_txt'] = 'Tip';
+$wb['monitor_diskusage_type_txt'] = 'Tür';
 $wb['monitor_diskusage_size_txt'] = 'Boyut';
 $wb['monitor_diskusage_used_txt'] = 'Kullanılan';
 $wb['monitor_diskusage_available_txt'] = 'Kullanılabilir';
 $wb['monitor_diskusage_usage_txt'] = 'Kullanım%';
 $wb['monitor_diskusage_mounted_txt'] = 'Bağlantı';
-$wb['monitor_logs_mail_txt'] = 'Posta Günlüğü';
-$wb['monitor_logs_mailwarn_txt'] = 'Posta Uyarı Günlüğü';
-$wb['monitor_logs_mailerr_txt'] = 'Posta Hata Günlüğü';
+$wb['monitor_database_name_txt'] = 'Veritabanı';
+$wb['monitor_database_size_txt'] = 'Boyut';
+$wb['monitor_database_client_txt'] = 'Ä°stemci';
+$wb['monitor_database_domain_txt'] = 'Etki Alanı';
+$wb['monitor_logs_mail_txt'] = 'E-posta Günlüğü';
+$wb['monitor_logs_mailwarn_txt'] = 'E-posta Uyarı Günlüğü';
+$wb['monitor_logs_mailerr_txt'] = 'E-posta Hata Günlüğü';
 $wb['monitor_logs_messages_txt'] = 'Sistem İletileri Günlüğü';
 $wb['monitor_logs_ispccron_txt'] = 'ISPConfig Zamanlı Görev Günlüğü';
 $wb['monitor_logs_freshclam_txt'] = 'Freshclam GÜnlüğü';
 $wb['monitor_logs_clamav_txt'] = 'Clamav Günlüğü';
 $wb['monitor_logs_ispc_txt'] = 'ISPConfig Günlüğü';
-$wb['monitor_nosupportedraid1_txt'] = 'Şimdilik RAID durumunu izlemek için mdadm ya da mpt-status destekleniyor.<br>Bunlardan biri sunucunuzda bulunamadı.<br><br>Bu nedenle RAID sürücünüz henüz desteklenemiyor.';
-$wb['monitor_norkhunter_txt'] = 'RKHunter yüklü olmadığından herhangi bir günlük verisi yok';
+$wb['monitor_nosupportedraid1_txt'] = 'Şimdilik RAID durumunu izlemek için  ya da  destekleniyor.<br>Bunlardan biri sunucunuzda bulunamadı.<br><br>Bu nedenle RAID sürücünüz henüz desteklenemiyor.';
+$wb['monitor_norkhunter_txt'] = 'RKHunter kurulu olmadığından herhangi bir günlük verisi yok';
 $wb['monitor_serverstate_server_txt'] = 'Sunucu';
 $wb['monitor_serverstate_kernel_txt'] = 'Kernel';
 $wb['monitor_serverstate_state_txt'] = 'Durum';
@@ -75,7 +81,7 @@ $wb['monitor_serverstate_info_txt'] = 'bilgi';
 $wb['monitor_serverstate_warning_txt'] = 'uyarı';
 $wb['monitor_serverstate_critical_txt'] = 'kritik';
 $wb['monitor_serverstate_error_txt'] = 'hata';
-$wb['monitor_serverstate_moreinfo_txt'] = 'Ayrıntılı bilgi...';
+$wb['monitor_serverstate_moreinfo_txt'] = 'Ayrıntılı bilgiler...';
 $wb['monitor_serverstate_more_txt'] = 'Ayrıntılar...';
 $wb['monitor_serverstate_fclamok_txt'] = 'Virüs koruması sorunsuz';
 $wb['monitor_serverstate_fclamoutdated_txt'] = 'Virüs koruması GÜNCEL DEĞİL!';
@@ -93,17 +99,17 @@ $wb['monitor_serverstate_listcritical_txt'] = 'kritik';
 $wb['monitor_serverstate_listerror_txt'] = 'hata';
 $wb['monitor_serverstate_listunknown_txt'] = 'bilinmiyor';
 $wb['monitor_serverstate_loadok_txt'] = 'Sunucu yükü: Sorunsuz';
-$wb['monitor_serverstate_loadheavy_txt'] = 'Sunucu yükü: Ağır';
+$wb['monitor_serverstate_loadheavy_txt'] = 'Sunucu yükü: Fazla';
 $wb['monitor_serverstate_loadhigh_txt'] = 'Sunucu yükü: Yüksek';
 $wb['monitor_serverstate_loaghigher_txt'] = 'Sunucu yükü: Çok yüksek';
 $wb['monitor_serverstate_loadhighest_txt'] = 'Sunucu yükü: En yüksek';
 $wb['monitor_serverstate_loadunknown_txt'] = 'Sunucu yükü: ???';
-$wb['monitor_serverstate_mailqok_txt'] = 'Posta kuyruğu yükü: Sorunsuz';
-$wb['monitor_serverstate_mailqheavy_txt'] = 'Posta kuyruğu yükü: Ağır';
-$wb['monitor_serverstate_mailqhigh_txt'] = 'Posta kuyruğu yükü: Yüksek';
-$wb['monitor_serverstate_mailqhigher_txt'] = 'Posta kuyruğu yükü: Çok yüksek';
-$wb['monitor_serverstate_mailqhighest_txt'] = 'Posta kuyruğu yükü: En yüksek';
-$wb['monitor_serverstate_mailqunknown_txt'] = 'Posta kuyruğu yükü: ???';
+$wb['monitor_serverstate_mailqok_txt'] = 'E-posta kuyruğu yükü: Sorunsuz';
+$wb['monitor_serverstate_mailqheavy_txt'] = 'E-posta kuyruğu yükü: Fazla';
+$wb['monitor_serverstate_mailqhigh_txt'] = 'E-posta kuyruğu yükü: Yüksek';
+$wb['monitor_serverstate_mailqhigher_txt'] = 'E-posta kuyruğu yükü: Çok yüksek';
+$wb['monitor_serverstate_mailqhighest_txt'] = 'E-posta kuyruğu yükü: En yüksek';
+$wb['monitor_serverstate_mailqunknown_txt'] = 'E-posta kuyruğu yükü: ???';
 $wb['monitor_serverstate_raidok_txt'] = 'RAID sorunsuz';
 $wb['monitor_serverstate_raidresync_txt'] = 'RAID, RESYNC kipinde';
 $wb['monitor_serverstate_raidfault_txt'] = 'RAID dizisinde hatalı bir disk var. Bu diski en kısa sürede değiştirmelisiniz!';
@@ -118,6 +124,7 @@ $wb['monitor_serverstate_syslogerror_txt'] = 'Sistem günlüğünde hatalar var'
 $wb['monitor_serverstate_syslogunknown_txt'] = 'Sistem Günlüğü: ???';
 $wb['monitor_serverstate_updatesok_txt'] = 'Sistem güncel';
 $wb['monitor_serverstate_updatesneeded_txt'] = 'Bir ya da daha fazla bileşenin güncellenmesi gerekiyor';
+$wb['monitor_serverstate_updatesunknown_txt'] = 'Sistem Güncelleme: ???';
 $wb['monitor_serverstate_beancounterok_txt'] = 'Beancounter sorunsuz';
 $wb['monitor_serverstate_beancounterinfo_txt'] = 'Beancounter kayıtlarında az sayıda hata var';
 $wb['monitor_serverstate_beancounterwarning_txt'] = 'Beancounter kayıtlarında ortalama sayıda hata var';
@@ -130,7 +137,8 @@ $wb['monitor_services_ftp_txt'] = 'FTP Sunucu:';
 $wb['monitor_services_smtp_txt'] = 'SMTP Sunucu:';
 $wb['monitor_services_pop_txt'] = 'POP3 Sunucu:';
 $wb['monitor_services_imap_txt'] = 'IMAP Sunucu:';
-$wb['monitor_services_mydns_txt'] = 'myDNS Sunucu:';
+$wb['monitor_services_mydns_txt'] = 'DNS Sunucu:';
+$wb['monitor_services_mongodb_txt'] = 'MongoDB Sunucusu:';
 $wb['monitor_services_mysql_txt'] = 'mySQL Sunucu:';
 $wb['monitor_settings_datafromdate_txt'] = 'Veri tarihi: ';
 $wb['monitor_settings_datetimeformat_txt'] = 'Y-m-d H:i';
@@ -138,10 +146,11 @@ $wb['monitor_settings_refreshsq_txt'] = 'Yenileme Sıklığı:';
 $wb['monitor_settings_server_txt'] = 'Sunucu';
 $wb['monitor_title_cpuinfo_txt'] = 'Ä°ÅŸlemci Bilgileri';
 $wb['monitor_title_updatestate_txt'] = 'Güncellik Durumu';
-$wb['monitor_title_mailq_txt'] = 'Posta KuyruÄŸu';
+$wb['monitor_title_mailq_txt'] = 'E-posta KuyruÄŸu';
 $wb['monitor_title_raidstate_txt'] = 'RAID Durumu';
 $wb['monitor_title_rkhunterlog_txt'] = 'RKHunter Günlüğü';
 $wb['monitor_title_fail2ban_txt'] = 'Fail2Ban Günlüğü';
+$wb['monitor_title_mongodb_txt'] = 'MongoDB Günlüğü';
 $wb['monitor_title_iptables_txt'] = 'IPTables Kuralları';
 $wb['monitor_title_beancounter_txt'] = 'OpenVz VE BeanCounter';
 $wb['monitor_updates_nosupport_txt'] = 'Dağıtımınız, bu izlemeyi desteklemiyor';
@@ -152,13 +161,4 @@ $wb['no_permissions_to_view_monit_txt'] = 'Monit eriÅŸimi izniniz yok.';
 $wb['Show Munin'] = 'Munin Durumu';
 $wb['no_munin_url_defined_txt'] = 'Munin adresi belirtilmemiÅŸ.';
 $wb['no_permissions_to_view_munin_txt'] = 'Munin eriÅŸimi izniniz yok.';
-$wb['no_data_database_size_txt'] = 'No data about the database usage available at the moment. Please check again later.';
-$wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
-$wb['monitor_database_name_txt'] = 'Database';
-$wb['monitor_database_size_txt'] = 'Size';
-$wb['monitor_database_client_txt'] = 'Client';
-$wb['monitor_database_domain_txt'] = 'Domain';
-$wb['monitor_serverstate_updatesunknown_txt'] = 'System Update: ???';
-$wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
-$wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 ?>
diff --git a/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng b/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba8c67b8eed44c916f66d91ec4bd7a1af49872
--- /dev/null
+++ b/interface/web/monitor/lib/lang/tr_dataloghistory_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Datalog History';
+$wb['tstamp_txt'] = 'Date';
+$wb['server_id_txt'] = 'Server';
+$wb['dbtable_txt'] = 'DB Table';
+$wb['action_txt'] = 'Action';
+$wb['status_txt'] = 'Status';
+?>
diff --git a/interface/web/monitor/lib/lang/tr_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/tr_dataloghistory_undo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0e040a3e77d48b89a779f7c7d3fb4198df0fe02e
--- /dev/null
+++ b/interface/web/monitor/lib/lang/tr_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['success_txt'] = 'Undo successful';
+$wb['error_txt'] = 'Error during undo: Record does not exist anymore';
+$wb['error_undelete_txt'] = 'Error during undelete: Record with primary id already existing.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
diff --git a/interface/web/monitor/lib/lang/tr_dataloghistory_view.lng b/interface/web/monitor/lib/lang/tr_dataloghistory_view.lng
new file mode 100644
index 0000000000000000000000000000000000000000..df9ddd286f46e816e06132e7465929ab8dd87229
--- /dev/null
+++ b/interface/web/monitor/lib/lang/tr_dataloghistory_view.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['i'] = 'Insert';
+$wb['u'] = 'Update';
+$wb['d'] = 'Delete';
+$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = 'Timestamp';
+$wb['table_txt'] = 'Table';
+$wb['action_txt'] = 'Action';
+$wb['session_id_txt'] = 'Session ID';
+$wb['fields_txt'] = 'Fields';
+$wb['fields_inserted_txt'] = 'Inserted Fields';
+$wb['fields_updated_txt'] = 'Updated Fields';
+$wb['fields_deleted_txt'] = 'Deleted Fields';
+$wb['no_changes_txt'] = 'No changes (re-sync)';
+$wb['is_diff_txt'] = 'The differences are highlighted';
+$wb['is_diff_inserts_txt'] = 'Insertions';
+$wb['is_diff_deletes_txt'] = 'Deletions';
+$wb['field_txt'] = 'Field';
+$wb['value_txt'] = 'Value';
+$wb['old_txt'] = 'Old';
+$wb['new_txt'] = 'New';
+$wb['btn_cancel_txt'] = 'Back';
+$wb['undo_txt'] = 'Undo action';
+$wb['undo_confirmation_txt'] = 'Do you really want to undo this action?';
+?>
diff --git a/interface/web/monitor/templates/datalog_list.htm b/interface/web/monitor/templates/datalog_list.htm
index eb79f46b54457796fe58945e34db80c07835c980..53ca89997f039b1e01205d8a793013bbc289d937 100644
--- a/interface/web/monitor/templates/datalog_list.htm
+++ b/interface/web/monitor/templates/datalog_list.htm
@@ -33,7 +33,7 @@
                             <td>{tmpl_var name="action"}</td>
                             <td>{tmpl_var name="dbtable"}</td>
                             <td class="text-right">    
-                                <!--<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/datalog_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a> -->
+                                <!--<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/datalog_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a> -->
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/monitor/templates/syslog_list.htm b/interface/web/monitor/templates/syslog_list.htm
index 8f62422a847717cafec01fa7e11195bde73835ee..7196e3ab02bbeb413c994b2eaaeafdb54e8bf72e 100644
--- a/interface/web/monitor/templates/syslog_list.htm
+++ b/interface/web/monitor/templates/syslog_list.htm
@@ -34,10 +34,10 @@
                             <td>{tmpl_var name="message"}</td>
                             <td class="text-right">
                                 <tmpl_if name="loglevel" op="==" value="Error">
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                                 <tmpl_if name="loglevel" op="==" value="Warning">
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('monitor/log_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </tmpl_if>
                             </td>
                         </tr>
diff --git a/interface/web/remote/rest.php b/interface/web/remote/rest.php
index d57915004520e9895d4fafe1b463a3ffc47b1d21..4f202c6eeedff5c2f51d57dfc6ee9149be738215 100644
--- a/interface/web/remote/rest.php
+++ b/interface/web/remote/rest.php
@@ -6,7 +6,11 @@ require_once '../../lib/config.inc.php';
 $conf['start_session'] = false;
 require_once '../../lib/app.inc.php';
 
-$app->load('rest_handler');
+$app->load('rest_handler,getconf');
+
+$security_config = $app->getconf->get_security_config('permissions');
+if($security_config['remote_api_allowed'] != 'yes') die('Remote API is disabled in security settings.');
+
 $rest_handler = new ISPConfigRESTHandler();
 $rest_handler->run();
 
diff --git a/interface/web/sites/aps_do_operation.php b/interface/web/sites/aps_do_operation.php
index ff0705f9bbb722114029f4f4a4db957e31ca64a8..8de3ed4e29b012793c8055a83b08173c8445030c 100644
--- a/interface/web/sites/aps_do_operation.php
+++ b/interface/web/sites/aps_do_operation.php
@@ -64,6 +64,9 @@ if($_GET['action'] == 'change_status')
 }
 else if($_GET['action'] == 'delete_instance')
 	{
+		// Check CSRF Token
+		$app->auth->csrf_token_check('GET');
+		
 		// Make sure a valid package ID is given (also corresponding to the calling user)
 		$client_id = 0;
 		$is_admin = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
diff --git a/interface/web/sites/aps_install_package.php b/interface/web/sites/aps_install_package.php
index 4739e25b8a69798e2d253a059e10a12f0e2652c3..1a38190a9f2590f5070c6e75c5073cfd4dd96893 100644
--- a/interface/web/sites/aps_install_package.php
+++ b/interface/web/sites/aps_install_package.php
@@ -93,6 +93,9 @@ if(!empty($domains_assoc)) foreach($domains_assoc as $domain) $domains[] = $doma
 	$result['input'] = array();
 if(count($_POST) > 1)
 {
+	// Check CSRF Token
+	$app->auth->csrf_token_check();
+	
 	$result = $gui->validateInstallerInput($_POST, $details, $domains, $settings);
 	if(empty($result['error']))
 	{
@@ -117,13 +120,16 @@ foreach($details as $key => $value)
 	else if($key == 'Requirements PHP settings') $app->tpl->setLoop('pkg_requirements_php_settings', $details['Requirements PHP settings']);
 }
 
+// get new csrf token
+$csrf_token = $app->auth->csrf_token_get('aps_install_package');
+$app->tpl->setVar('_csrf_id', $csrf_token['csrf_id']);
+$app->tpl->setVar('_csrf_key', $csrf_token['csrf_key']);
+
 // Parse the template as far as possible, then do the rest manually
 $app->tpl_defaults();
 $parsed_tpl = $app->tpl->grab();
 
 
-// ISPConfig has a very old and functionally limited template engine. We have to style parts on our own...
-
 // Print the domain list
 $domains_tpl = '';
 if(!empty($domains))
diff --git a/interface/web/sites/aps_installedpackages_list.php b/interface/web/sites/aps_installedpackages_list.php
index 28f334019f5706f617602af096a7beb055e41d52..32849ad740f12f67f662a43cd7bca77532e866e5 100644
--- a/interface/web/sites/aps_installedpackages_list.php
+++ b/interface/web/sites/aps_installedpackages_list.php
@@ -112,12 +112,16 @@ if(!$is_admin) {
 $records = $app->db->queryAllRecords($query);
 $app->listform_actions->DataRowColor = '#FFFFFF';
 
+$csrf_token = $app->auth->csrf_token_get($app->listform->listDef['name']);
+$_csrf_id = $csrf_token['csrf_id'];
+$_csrf_key = $csrf_token['csrf_key'];
+
 // Re-form all result entries and add extra entries
 $records_new = array();
 if(is_array($records))
 {
 	$app->listform_actions->idx_key = $app->listform->listDef["table_idx"];
-	foreach($records as $rec)
+	foreach($records as $key => $rec)
 	{
 		// Set an abbreviated install location to beware the page layout
 		$ils = '';
@@ -129,7 +133,9 @@ if(is_array($records))
 		if($rec['instance_status'] != INSTANCE_REMOVE && $rec['instance_status'] != INSTANCE_INSTALL)
 			$rec['delete_possible'] = 'true';
 
-		$records_new[] = $app->listform_actions->prepareDataRow($rec);
+		$records_new[$key] = $app->listform_actions->prepareDataRow($rec);
+		$records_new[$key]['csrf_id'] = $_csrf_id;
+		$records_new[$key]['csrf_key'] = $_csrf_key;
 	}
 }
 $app->tpl->setLoop('records', $records_new);
diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php
index 148aa127ae493be1fdced8804f96276dc2c321c9..5f550cf8d141a352945e86bda2eca4ff31f6854a 100644
--- a/interface/web/sites/database_quota_stats.php
+++ b/interface/web/sites/database_quota_stats.php
@@ -83,7 +83,8 @@ class list_action extends listform_actions {
 		} else {
 			$web_database = $app->db->queryOneRecord("SELECT * FROM web_database WHERE database_id = ?", $rec[$this->idx_key]);
 			$rec['database'] = $rec['database_name'];
-			$rec['server_name'] = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $web_database['server_id'])['server_name'];
+			$temp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $web_database['server_id']);
+			$rec['server_name'] = $temp['server_name'];
 			$sys_group = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE groupid = ?", $web_database['sys_groupid']);
 			$client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", $sys_group['client_id']);
 			$rec['client'] = $client['username'];
diff --git a/interface/web/sites/form/cron.tform.php b/interface/web/sites/form/cron.tform.php
index 4a169c3a6710f46926c73cddd68ef066c27acdac..aedfcb26ca74019bdd1c9d991f06a57a0bbbb2cd 100644
--- a/interface/web/sites/form/cron.tform.php
+++ b/interface/web/sites/form/cron.tform.php
@@ -185,7 +185,7 @@ $form["tabs"]['cron'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/database.tform.php b/interface/web/sites/form/database.tform.php
index 3bb2f9af73c9c3875c2bf9069155d4b4e651ff2e..dd3910c0434a850915aec7eeb5ede5201955d0a9 100644
--- a/interface/web/sites/form/database.tform.php
+++ b/interface/web/sites/form/database.tform.php
@@ -185,7 +185,7 @@ $form["tabs"]['database'] = array (
 			'searchable' => 2
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/database_user.tform.php b/interface/web/sites/form/database_user.tform.php
index 09d2c32b2c3e94ca714fd8e574bb09df3ebb0563..5f91cbd1f30a4617bdc702fd98cb21dfc8fa91c9 100644
--- a/interface/web/sites/form/database_user.tform.php
+++ b/interface/web/sites/form/database_user.tform.php
@@ -125,7 +125,7 @@ $form["tabs"]['database_user'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php
index 239bfdb8583a7ec0a6e52b699a7ed98164dcbcb9..0b48d7a92d59da48a71698fd5fc50a660ad38ddc 100644
--- a/interface/web/sites/form/ftp_user.tform.php
+++ b/interface/web/sites/form/ftp_user.tform.php
@@ -146,7 +146,7 @@ $form["tabs"]['ftp'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -256,7 +256,7 @@ if($app->auth->is_admin()) {
 				'maxlength' => '7'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
@@ -276,7 +276,10 @@ if($app->auth->is_admin()) {
 				'formtype'  => 'TEXT',
 				'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
 						'errmsg'=> 'directory_error_empty'),
-					1 => array (    'type'  => 'CUSTOM',
+											1 => array ( 	'type' => 'REGEX',
+															'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{10,128}$/',
+															'errmsg'=> 'directory_error_regex'),
+					2 => array (    'type'  => 'CUSTOM',
 						'class' => 'validate_ftpuser',
 						'function' => 'ftp_dir',
 						'errmsg' => 'directory_error_notinweb'),
@@ -287,7 +290,7 @@ if($app->auth->is_admin()) {
 				'maxlength' => '255'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
diff --git a/interface/web/sites/form/shell_user.tform.php b/interface/web/sites/form/shell_user.tform.php
index 4268fc08ecd8a6a8f6ef1f9c5634c517e1bc174d..f4e83a1b57e9b7469142286dab4cfb4a5ce7732a 100644
--- a/interface/web/sites/form/shell_user.tform.php
+++ b/interface/web/sites/form/shell_user.tform.php
@@ -164,7 +164,7 @@ $form["tabs"]['shell'] = array (
 			'maxlength' => '600'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -248,7 +248,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
 				'maxlength' => '255'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
diff --git a/interface/web/sites/form/web_childdomain.tform.php b/interface/web/sites/form/web_childdomain.tform.php
index 6cfaa38c2a5188f1441d8f3db59d44bea4a1f3be..01132a75dc4dcd20db5e23486e08c8531a64a4e3 100644
--- a/interface/web/sites/form/web_childdomain.tform.php
+++ b/interface/web/sites/form/web_childdomain.tform.php
@@ -146,7 +146,7 @@ $form["tabs"]['domain'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -193,7 +193,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
 				'maxlength' => '255'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
diff --git a/interface/web/sites/form/web_folder.tform.php b/interface/web/sites/form/web_folder.tform.php
index 5fec523a690d55f416a6f8243adcac9aa1fbbe92..9f8418446cf36b5e0a80aa0ce06d838fe0cb2ba1 100644
--- a/interface/web/sites/form/web_folder.tform.php
+++ b/interface/web/sites/form/web_folder.tform.php
@@ -99,7 +99,7 @@ $form["tabs"]['folder'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/web_folder_user.tform.php b/interface/web/sites/form/web_folder_user.tform.php
index c3386a5a223812ffffb5d67ca01a853395f3bad9..b5f0b711c6837a3398723328b6f9b276472b0e67 100644
--- a/interface/web/sites/form/web_folder_user.tform.php
+++ b/interface/web/sites/form/web_folder_user.tform.php
@@ -119,7 +119,7 @@ $form["tabs"]['user'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index be06d34634aa20251ac1c4cb66f53be1a1954b58..838445e3615276f5a8250c039ea07e5e71bc005b 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -250,7 +250,7 @@ $form["tabs"]['domain'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => 'fast-cgi',
-			'valuelimit' => 'client:web_php_options',
+			'valuelimit' => 'system:sites:web_php_options;client:web_php_options',
 			'value'  => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
 			'searchable' => 2
 		),
@@ -299,7 +299,7 @@ $form["tabs"]['domain'] = array (
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	),
 	'plugins' => array (
@@ -435,7 +435,7 @@ $form["tabs"]['redirect'] = array (
 			)
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -601,7 +601,7 @@ if($ssl_available) {
 				)
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
@@ -641,7 +641,7 @@ $form["tabs"]['stats'] = array (
 			'value'  => array('webalizer' => 'Webalizer', 'awstats' => 'AWStats', '' => 'None')
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
@@ -683,7 +683,7 @@ if ($backup_available) {
 				'maxlength' => '255'
 			),
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		),
 		'plugins' => array (
@@ -772,6 +772,12 @@ if($_SESSION["s"]["user"]["typ"] == 'admin'
 				'default' => 'n',
 				'value'  => array(0 => 'n', 1 => 'y')
 			),
+			'php_fpm_chroot' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'CHECKBOX',
+				'default' => 'n',
+				'value' => array(0 => 'n', 1 => 'y')
+			),
 			'pm' => array (
 				'datatype' => 'VARCHAR',
 				'formtype' => 'SELECT',
@@ -966,7 +972,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin'
 				'maxlength' => '4'
 			)
 			//#################################
-			// ENDE Datatable fields
+			// END Datatable fields
 			//#################################
 		)
 	);
diff --git a/interface/web/sites/form/webdav_user.tform.php b/interface/web/sites/form/webdav_user.tform.php
index 8d5c0c561f29b4a33db9da70f05367d5163ec21b..73ea898b680125df4a00b3da3be17db42463392f 100644
--- a/interface/web/sites/form/webdav_user.tform.php
+++ b/interface/web/sites/form/webdav_user.tform.php
@@ -85,7 +85,7 @@ $form["tabs"]['webdav'] = array (
 			'validators' => array (  0 => array ( 'type' => 'UNIQUE',
 					'errmsg'=> 'username_error_unique'),
 				1 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\w\.\-]{0,64}$/',
+					'regex' => '/^[\w\.\-@]{0,64}$/',
 					'errmsg'=> 'username_error_regex'),
 			),
 			'default' => '',
@@ -142,7 +142,7 @@ $form["tabs"]['webdav'] = array (
 			'maxlength' => '255'
 		),
 		//#################################
-		// ENDE Datatable fields
+		// END Datatable fields
 		//#################################
 	)
 );
diff --git a/interface/web/sites/lib/lang/ar_aps.lng b/interface/web/sites/lib/lang/ar_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..881c146a4dd1a58e7bd50cfc34f7ea21e0073bb4 100644
--- a/interface/web/sites/lib/lang/ar_aps.lng
+++ b/interface/web/sites/lib/lang/ar_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Password strength';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index ff063e88c9ba226abb40ad9bbd1b0acc3a77bb8f..f208ab3f3698882517a59a2a062a4e51e5b7e0ec 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -80,6 +80,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_aps.lng b/interface/web/sites/lib/lang/bg_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..6a5f9819439880418389846d329389fcf2a13e02 100644
--- a/interface/web/sites/lib/lang/bg_aps.lng
+++ b/interface/web/sites/lib/lang/bg_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Сила на паролата';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index e1dce797cf0757a44a811262567964c11bc47e25..a84d915230bd3f789ed1a24b099067256c96b3af 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO редирект';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Използвай сокет за PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/br.lng b/interface/web/sites/lib/lang/br.lng
index 3fdd93585ec8e05b83eb8750964d30e38e2c46d6..8710dc11407242a2a88cecbb7b335cee88ccdd69 100644
--- a/interface/web/sites/lib/lang/br.lng
+++ b/interface/web/sites/lib/lang/br.lng
@@ -2,34 +2,37 @@
 $wb['Websites'] = 'Sites';
 $wb['Website'] = 'Site';
 $wb['Subdomain'] = 'Subdomínio';
-$wb['Aliasdomain'] = 'Apelido de domínio';
-$wb['Database'] = 'Bancos de dados';
+$wb['Aliasdomain'] = 'Alias de domínio';
+$wb['Database'] = 'Banco de dados';
+$wb['Database User'] = 'Usuários do banco de dados';
 $wb['Web Access'] = 'Acesso web';
 $wb['FTP-User'] = 'Usuários ftp';
 $wb['Webdav-User'] = 'Usuários webdav';
 $wb['Folder'] = 'Pastas protegidas';
-$wb['Folder users'] = 'Usuários de pastas';
+$wb['Folder users'] = 'Usuários de pastas protegidas';
 $wb['Command Line'] = 'Linha de comando';
-$wb['Shell-User'] = 'Usuários shell';
+$wb['Shell-User'] = 'Usuários do shell';
 $wb['Cron Jobs'] = 'Tarefas no cron';
 $wb['Statistics'] = 'Estatísticas';
 $wb['Web traffic'] = 'Tráfego web';
-$wb['Website quota (Harddisk)'] = 'Cota para sites (disco)';
+$wb['FTP traffic'] = 'Tráfego ftp';
+$wb['Website quota (Harddisk)'] = 'Cota de site (disco)';
+$wb['Database quota'] = 'Cota do banco de dados';
+$wb['Backup Stats'] = 'Estatísticas de backups';
 $wb['Cron'] = 'Cron';
 $wb['Stats'] = 'Estatísticas';
 $wb['Shell'] = 'Shell';
 $wb['Webdav'] = 'Webdav';
 $wb['FTP'] = 'FTP';
 $wb['Options'] = 'Opções';
+$wb['Domain'] = 'Domínio';
 $wb['Redirect'] = 'Redirecionamento';
 $wb['SSL'] = 'SSL';
 $wb['Sites'] = 'Sites';
-$wb['Database User'] = 'Usuários';
-$wb['APS Installer'] = 'Instalação de apps';
+$wb['APS Installer'] = 'Instalador de APPs';
 $wb['Available packages'] = 'Pacotes disponíveis';
 $wb['Installed packages'] = 'Pacotes instalados';
 $wb['Update Packagelist'] = 'Atualizar lista de pacotes';
 $wb['Subdomain (Vhost)'] = 'Subdomínio (vhost)';
-$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \"proxy\" exige uma url como caminho do redirecionamento.';
-$wb['Domain'] = 'Domínio';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento "proxy" exige uma URL como caminho de redirecionamento.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_aps.lng b/interface/web/sites/lib/lang/br_aps.lng
index 6c5be1da543b191955939f1887120259c5f2649f..744c215192d5e8f4686b26e949fdfe51ee6f8a4c 100644
--- a/interface/web/sites/lib/lang/br_aps.lng
+++ b/interface/web/sites/lib/lang/br_aps.lng
@@ -5,54 +5,59 @@ $wb['available_packages_txt'] = 'Pacotes disponíveis';
 $wb['installed_packages_txt'] = 'Pacotes instalados';
 $wb['yes_txt'] = 'Sim';
 $wb['no_txt'] = 'Não';
-$wb['invalid_id_txt'] = 'Nenhuma ID válida inserida.';
+$wb['invalid_id_txt'] = 'Nenhuma ID válida informada.';
 $wb['details_txt'] = 'Detalhes';
 $wb['version_txt'] = 'Versão';
 $wb['category_txt'] = 'Categoria';
-$wb['homepage_txt'] = 'Página';
+$wb['homepage_txt'] = 'Página Inicial';
 $wb['supported_languages_txt'] = 'Idiomas suportados';
 $wb['description_txt'] = 'Descrição';
 $wb['config_script_txt'] = 'Script de configuração';
-$wb['installed_size_txt'] = 'Tamanho após instalação';
+$wb['installed_size_txt'] = 'Tamanho após a instalação';
 $wb['license_txt'] = 'Licença';
-$wb['screenshots_txt'] = 'Telas';
-$wb['changelog_txt'] = 'Log de mudanças';
-$wb['server_requirements_txt'] = 'Requisitos do servidor';
-$wb['php_extensions_txt'] = 'Extensões PHP';
-$wb['php_settings_txt'] = 'Configurações do PHP';
-$wb['supported_php_versions_txt'] = 'Versões do PHP suportadas';
+$wb['screenshots_txt'] = 'Captura de telas';
+$wb['changelog_txt'] = 'Mudanças Recentes';
+$wb['server_requirements_txt'] = 'Requisitos do Servidor';
+$wb['php_extensions_txt'] = 'Extensões php';
+$wb['php_settings_txt'] = 'Configurações php';
+$wb['supported_php_versions_txt'] = 'Versões do php suportadas';
 $wb['database_txt'] = 'Banco de Dados';
 $wb['settings_txt'] = 'Configurações';
-$wb['install_package_txt'] = 'Instalar esse pacote';
+$wb['install_package_txt'] = 'Instalar este pacote';
 $wb['installation_txt'] = 'Instalação';
 $wb['install_location_txt'] = 'Local da instalação';
-$wb['acceptance_txt'] = 'Aceitação';
-$wb['acceptance_text_txt'] = 'Sim, eu li a licença e aceito os termos.';
+$wb['btn_install_txt'] = 'Instalar';
+$wb['btn_cancel_txt'] = 'Cancelar';
+$wb['acceptance_txt'] = 'Aceitar a licença';
+$wb['acceptance_text_txt'] = 'Sim, li e aceito os termos da licença.';
 $wb['install_language_txt'] = 'Idioma da interface';
 $wb['new_database_password_txt'] = 'Nova senha do banco de dados';
 $wb['basic_settings_txt'] = 'Configurações básicas';
-$wb['package_settings_txt'] = 'Configurações do pacote';
-$wb['error_main_domain'] = 'O domínio no caminho da instalação é é inválido.';
-$wb['error_no_main_location'] = 'Você inseriu um caminho inválido para a instalação.';
-$wb['error_inv_main_location'] = 'A pasta informada para a instalação é inválida.';
-$wb['error_license_agreement'] = 'Para continuar é preciso aceitar os termos da licenciamento.';
-$wb['error_no_database_pw'] = 'Você informou uma senha inválida para o banco de dados.';
-$wb['error_short_database_pw'] = 'Por favor, escolha uma senha com maior complexidade para o banco de dados.';
-$wb['error_no_value_for'] = 'O campo \'%s\' não pode ficar está em branco.';
-$wb['error_short_value_for'] = 'O campo \'%s\' exige um valor maior.';
-$wb['error_long_value_for'] = 'O campo \'%s\' exige um valor mais curto.';
-$wb['error_inv_value_for'] = 'Você inseriu um valor inválido para o campo \'%s\'.';
-$wb['error_inv_email_for'] = 'Você inseriu um e-mail inválido para o campo \'%s\'.';
-$wb['error_inv_domain_for'] = 'Você inseriu um domínio inválido para o campo \'%s\'.';
-$wb['error_inv_integer_for'] = 'Você inseriu um número inválido para o campo \'%s\'.';
-$wb['error_inv_float_for'] = 'Você inseriu um número de ponto flutuante inválido para o campo \'%s\'.';
-$wb['error_used_location'] = 'O caminho da instalação contém um pacote de instalação.';
-$wb['installation_task_txt'] = 'Agendamento de instalação';
+$wb['package_settings_txt'] = 'Configurações de pacotes';
+$wb['error_main_domain'] = 'O domínio para a instalação é inválido.';
+$wb['error_no_main_location'] = 'Não foi informado um caminho válido para a instalação.';
+$wb['error_inv_main_location'] = 'Local da pasta de instalação informado é inválido.';
+$wb['error_license_agreement'] = 'Para continuar é necessário aceitar os termos da licença.';
+$wb['error_no_database_pw'] = 'Não foi informado uma senha válida para o banco de dados.';
+$wb['error_short_database_pw'] = 'Por favor informe uma senha do banco de dados com maior complexidade.';
+$wb['error_no_value_for'] = 'O campo "%s" não pode estar está em branco.';
+$wb['error_short_value_for'] = 'O campo "%s" requer um valor de entrada maior.';
+$wb['error_long_value_for'] = 'O campo "%s" requer um valor de entrada menor.';
+$wb['error_inv_value_for'] = 'O valor informado no campo "%s" é inválido.';
+$wb['error_inv_email_for'] = 'O e-mail informado no campo "%s" é inválido.';
+$wb['error_inv_domain_for'] = 'O domínio informado no campo "%s" é inválido.';
+$wb['error_inv_integer_for'] = 'O número informado no campo "%s" é inválido.';
+$wb['error_inv_float_for'] = 'O número de ponto flutuante informado no campo "%s" é inválido.';
+$wb['error_used_location'] = 'O caminho da instalação selecionado já possui uma instalação de pacote.';
+$wb['installation_task_txt'] = 'Instalação agendada';
 $wb['installation_error_txt'] = 'Erro de instalação';
 $wb['installation_success_txt'] = 'Instalado';
-$wb['installation_remove_txt'] = 'Remove agendamento';
-$wb['packagelist_update_finished_txt'] = 'Atualização da lista de pacotes finalizada.';
-$wb['btn_install_txt'] = 'Instalar';
-$wb['btn_cancel_txt'] = 'Cancelar';
-$wb['limit_aps_txt'] = 'O limite de instâncias de apps para esta conta foi alcançado.';
+$wb['installation_remove_txt'] = 'Remover instalação agendada';
+$wb['packagelist_update_finished_txt'] = 'Lista de APPs atualizada.';
+$wb['limit_aps_txt'] = 'O limite de instâncias de APPs para esta conta foi alcançado.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['password_strength_txt'] = 'Dificuldade da senha';
 ?>
diff --git a/interface/web/sites/lib/lang/br_aps_instances_list.lng b/interface/web/sites/lib/lang/br_aps_instances_list.lng
index fb6a2addd8db607ae6e4960d331db289e09328b2..da5b80d68e3e2380b59f4f2c6dc48ded2223c5c8 100644
--- a/interface/web/sites/lib/lang/br_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/br_aps_instances_list.lng
@@ -5,7 +5,7 @@ $wb['version_txt'] = 'Versão';
 $wb['customer_txt'] = 'Cliente';
 $wb['status_txt'] = 'Estado';
 $wb['install_location_txt'] = 'Local da instalação';
-$wb['pkg_delete_confirmation'] = 'Você realmente deseja remover esta instalação?';
+$wb['pkg_delete_confirmation'] = 'Deseja realmente remover esta instalação?';
 $wb['filter_txt'] = 'Pesquisar';
 $wb['delete_txt'] = 'Remover';
 ?>
diff --git a/interface/web/sites/lib/lang/br_aps_packages_list.lng b/interface/web/sites/lib/lang/br_aps_packages_list.lng
index 641d807f52475f545c86ad32f2081ce7a74a7ff5..bbd0e1ad3d95ad97f4e3e3ddf3ead4d763088815 100644
--- a/interface/web/sites/lib/lang/br_aps_packages_list.lng
+++ b/interface/web/sites/lib/lang/br_aps_packages_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Pacotes Disponíveis';
+$wb['list_head_txt'] = 'Pacotes disponíveis';
 $wb['name_txt'] = 'Nome';
 $wb['version_txt'] = 'Versão';
 $wb['category_txt'] = 'Categoria';
diff --git a/interface/web/sites/lib/lang/br_aps_update_packagelist.lng b/interface/web/sites/lib/lang/br_aps_update_packagelist.lng
index 8e53fbb6b1088542d35e1e1a40f1379848a27733..b81640384c9955ddcf1b68c767482adb76ad170e 100644
--- a/interface/web/sites/lib/lang/br_aps_update_packagelist.lng
+++ b/interface/web/sites/lib/lang/br_aps_update_packagelist.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['head_txt'] = 'Atualizar lista de pacotes';
-$wb['list_desc_txt'] = 'Lista de pacotes';
+$wb['list_desc_txt'] = '';
 $wb['btn_start_txt'] = 'Atualizar lista de pacotes';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['legend_txt'] = 'Aqui você pode atualizar a lista de pacotes disponíveis. Por favor, observe que este processo poderá levar alguns minutos. Você pode fechar esta página, o processo continuará em segundo plano.';
+$wb['legend_txt'] = 'Aqui é possível atualizar a lista de pacotes disponíveis. Por favor, observe que esta operação pode demorar vários minutos. Você poderá sair dessa página se quiser; o processo continuará a execução em segundo plano.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_backup_stats_list.lng b/interface/web/sites/lib/lang/br_backup_stats_list.lng
index 5f7f2d9ec740787e4e60e05619bccb7d24537bfe..932ad5dba71ae3e670e1f6f40c22e3ad9a364a48 100644
--- a/interface/web/sites/lib/lang/br_backup_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_backup_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Estatísticas do banco de Dados';
-$wb['database_name_txt'] = 'Nome do banco de dados';
+$wb['list_head_txt'] = 'Estatísticas de backup';
+$wb['database_name_txt'] = 'Banco de Dados';
 $wb['active_txt'] = 'Ativo';
 $wb['domain_txt'] = 'Domínio';
-$wb['backup_count_txt'] = 'Contador de backup';
+$wb['backup_count_txt'] = 'Contador de backups';
 $wb['backup_server_txt'] = 'Servidor';
-$wb['backup_interval_txt'] = 'Intervalo/contador';
-$wb['backup_size_txt'] = 'Tamanho';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_size_txt'] = 'Tamanho do backup';
 ?>
diff --git a/interface/web/sites/lib/lang/br_cron.lng b/interface/web/sites/lib/lang/br_cron.lng
index eab5b9f688c89a6b8efcac26fb39d777592640a4..98d98efa25b2c75cd21b0dc46496e560952b43b4 100644
--- a/interface/web/sites/lib/lang/br_cron.lng
+++ b/interface/web/sites/lib/lang/br_cron.lng
@@ -8,19 +8,19 @@ $wb['run_hour_txt'] = 'Horas';
 $wb['run_mday_txt'] = 'Dias do mês';
 $wb['run_month_txt'] = 'Meses';
 $wb['run_wday_txt'] = 'Dias da semana';
-$wb['command_txt'] = 'Comando a executar (os comandos serão executados via sh ou urls via wget)';
+$wb['command_txt'] = 'Comando a executar (comandos são executados através do sh, urls através do wget)';
 $wb['limit_cron_txt'] = 'O limite de tarefas no cron foi alcançado.';
-$wb['limit_cron_frequency_txt'] = 'A frequência das tarefas no cron ultrapassou o limite permitido.';
-$wb['run_min_error_format'] = 'Formato dos minutos é inválido.';
-$wb['run_hour_error_format'] = 'Formato das horas é inválido.';
-$wb['run_mday_error_format'] = 'Formato dos dias do mês é inválido.';
-$wb['run_month_error_format'] = 'Formato dos meses é inválido.';
-$wb['run_wday_error_format'] = 'Formato dos dias da semana é inválido.';
-$wb['command_error_format'] = 'Formato de comando é inválido. Somente endereços url http/https são permitidos.';
-$wb['unknown_fieldtype_error'] = 'Um tipo desconhecido de campo foi usado.';
-$wb['server_id_error_empty'] = 'O ID do servidor está em branco.';
-$wb['limit_cron_url_txt'] = 'Somente url do cron. Por favor, insira uma url iniciando com \"http://\" e um comando do cron.';
-$wb['command_error_empty'] = 'Comando está em branco.';
-$wb['command_hint_txt'] = 'Você poderá usar, por exemplo: \"/var/www/clients/clientX/webY/meu_script.sh\" ou \"http://www.dominio.com.br/path/script.php\" e também a palavra reservada \"[web_root]\" substituído por \"/var/www/clients/clientX/webY/web\".';
-$wb['log_output_txt'] = 'Saída do Log';
+$wb['limit_cron_frequency_txt'] = 'O limite de execuções das tarefas no cron foi alcançado.';
+$wb['run_min_error_format'] = 'Formato inválido para minutos.';
+$wb['run_hour_error_format'] = 'Formato inválido para horas.';
+$wb['run_mday_error_format'] = 'Formato inválido para dias do mês.';
+$wb['run_month_error_format'] = 'Formato inválido para meses.';
+$wb['run_wday_error_format'] = 'Formato inválido para dias da semana.';
+$wb['command_error_format'] = 'Comando possui formato inválido. Por favor, observe que em alguns casos somente chamadas http/https são permitidas.';
+$wb['unknown_fieldtype_error'] = 'Um tipo de campo desconhecido foi utilizado.';
+$wb['server_id_error_empty'] = 'O servidor está em branco.';
+$wb['command_hint_txt'] = 'ex.: /var/www/clients/clientX/webY/myscript.sh ou http://www.dominio.com.br/caminho/script.php, você pode utilizar a área reservada [web_root] para substituir /var/www/clients/clientX/webY/web.';
+$wb['log_output_txt'] = 'Gravar saída do log';
+$wb['limit_cron_url_txt'] = 'Somente URL no cron. Por favor insira uma URL iniciando com http:// como um comando no cron.';
+$wb['command_error_empty'] = 'Comando a executar está em branco.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_cron_list.lng b/interface/web/sites/lib/lang/br_cron_list.lng
index 89fe7932f6251434eeb10d66925fd2ed7efa385e..31017512d3f40c9663ef662c40ad788b1d3f7bbf 100644
--- a/interface/web/sites/lib/lang/br_cron_list.lng
+++ b/interface/web/sites/lib/lang/br_cron_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Tarefas no Cron';
-$wb['active_txt'] = 'Ativas';
+$wb['list_head_txt'] = 'Tarefas no cron';
+$wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
-$wb['run_min_txt'] = 'Minutos';
-$wb['run_hour_txt'] = 'Horas';
-$wb['run_mday_txt'] = 'Dias do mês';
+$wb['run_min_txt'] = 'Minuto';
+$wb['run_hour_txt'] = 'Hora';
+$wb['run_mday_txt'] = 'Dia do mês';
 $wb['run_month_txt'] = 'Mês';
 $wb['run_wday_txt'] = 'Dia da semana';
 $wb['command_txt'] = 'Comando';
diff --git a/interface/web/sites/lib/lang/br_database.lng b/interface/web/sites/lib/lang/br_database.lng
index 57b97693eb8a97ebe0afb793ae5d3d2bf0055797..3690ee9cf8a30305958b91402b42bf32df78a404 100644
--- a/interface/web/sites/lib/lang/br_database.lng
+++ b/interface/web/sites/lib/lang/br_database.lng
@@ -3,47 +3,47 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['type_txt'] = 'Tipo';
 $wb['database_name_txt'] = 'Nome do banco de dados';
 $wb['database_user_txt'] = 'Usuário do banco de dados';
+$wb['database_ro_user_txt'] = 'Usuário somente leitura';
+$wb['optional_txt'] = 'opcional';
 $wb['database_password_txt'] = 'Senha do banco de dados';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['database_charset_txt'] = 'Charset do banco de dados';
+$wb['select_dbuser_txt'] = 'Selecionar usuário';
+$wb['no_dbuser_txt'] = 'Nenhum';
 $wb['remote_access_txt'] = 'Acesso Remoto';
+$wb['remote_ips_txt'] = 'Endereços IP para acesso remoto (separado por vírgula ou deixe em branco para <i>qualquer um</i>)';
+$wb['database_remote_error_ips'] = 'Ao menos um endereço IP informado é inválido.';
 $wb['client_txt'] = 'Cliente';
 $wb['active_txt'] = 'Ativo';
+$wb['database_client_differs_txt'] = 'O cliente do site pai e o banco de dados não coincidem.';
 $wb['database_name_error_empty'] = 'Nome do banco de dados está em branco.';
-$wb['database_name_error_unique'] = 'Já existe um banco de dados com este nome no servidor. O nome escolhido deve ser exclusivo.';
-$wb['database_name_error_regex'] = 'Nome do banco de dados é inválido. Só é permitido para o nome do banco os caracteres: \'a-z\', \'A-Z\', \'0-9\' e o \'underscrore\'. Tamanho: 2 - 64 caracteres.';
-$wb['database_user_error_empty'] = 'Nome do usuário do banco de dados está em branco.';
-$wb['database_user_error_unique'] = 'Já existe um usuário do banco de dados com este nome no servidor. O nome escolhido deve ser exclusivo.';
-$wb['database_user_error_regex'] = 'Nome do usuário do banco de dados é inválido. Só é permitido para nome do usuário banco de dados os caracteres: \'a-z\', \'A-Z\', \'0-9\' e o \'underscrore\'. Tamanho: 2 - 64 caracteres.';
-$wb['limit_database_txt'] = 'O limite de bancos de dados permitido para esta conta foi alcançado.';
-$wb['database_name_change_txt'] = 'O nome do banco de dados não pode ser modificado.';
-$wb['database_charset_change_txt'] = 'O charset do banco de dados não pode ser modificado.';
-$wb['remote_ips_txt'] = 'Endereços IP Remotos (separados por vírgula. Em branco para <i>quaisquer IPs</i>)';
-$wb['database_remote_error_ips'] = 'Pelo menos um dos endereços IP informados não é válido.';
-$wb['database_name_error_len'] = 'Nome do banco de dados - {db} - é muito longo. 64 caracteres, incluindo o prefixo, é o limite permitido.';
-$wb['database_user_error_len'] = 'Nome do usuário do banco de dados \'{user}\' é muito longo. 16 caracteres, incluindo o prefixo, é o limite permitido.';
+$wb['database_name_error_unique'] = 'Já existe um banco de dados com este nome no servidor. Para ter um nome exclusivo, por exemplo, insira o domínio como prefixo do nome.';
+$wb['database_name_error_regex'] = 'Nome do banco de dados é inválido. O nome do banco de dados pode conter os seguintes caracteres: a-z, A-Z, 0-9 e underscore. Comprimento 2 - 64 caracteres.';
+$wb['database_user_error_empty'] = 'Usuário do banco de dados está em branco.';
+$wb['database_user_error_unique'] = 'Já existe um usuário de banco de dados com esse nome. Para ter um nome exclusivo, por exemplo, insira o domínio como prefixo do nome.';
+$wb['database_user_error_regex'] = 'Usuário do banco de dados é inválido. O nome do usuário pode conter os seguintes caracteres: a-z, A-Z, 0-9 e underscore. Comprimento: 2 a 16 caracteres.';
+$wb['limit_database_txt'] = 'O limite de banco de dados foi alcançado para esta conta.';
+$wb['database_name_change_txt'] = 'O nome do banco de dados não pode ser alterado.';
+$wb['database_user_missing_txt'] = 'Por favor, selecione um usuário para este banco de dados.';
+$wb['database_charset_change_txt'] = 'O charset do banco de dados não pode ser alterado.';
+$wb['database_name_error_len'] = 'Nome do banco de dados - {db} - muito longo. O comprimento do nome do banco de dados, incluindo o prefixo, são 64 caracteres.';
+$wb['database_user_error_len'] = 'Nome do usuário do banco de dados - {user} - muito longo. O comprimento do nome do usuário, incluindo o prefixo, são 16 caracteres.';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['database_site_error_empty'] = 'Selecione o \"site\" ao qual o banco de dados pertence.';
-$wb['select_site_txt'] = '- Selecionar site -';
+$wb['database_site_error_empty'] = 'Selecione o site ao qual o banco de dados pertence.';
+$wb['select_site_txt'] = '-Selecionar Site-';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['globalsearch_resultslimit_of_txt'] = 'de';
 $wb['globalsearch_resultslimit_results_txt'] = 'resultados';
 $wb['globalsearch_noresults_text_txt'] = 'Sem resultados.';
 $wb['globalsearch_noresults_limit_txt'] = '0 resultados';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Pesquisar';
 $wb['globalsearch_suggestions_text_txt'] = 'Sugestões';
-$wb['database_ro_user_txt'] = 'Usuário do banco de dados somente leitura';
-$wb['optional_txt'] = 'opcional';
-$wb['select_dbuser_txt'] = 'Selecionar o usuário do banco de dados';
-$wb['no_dbuser_txt'] = 'Nenhum';
-$wb['database_client_differs_txt'] = 'O cliente do site e banco de dados não coincidem.';
-$wb['database_user_missing_txt'] = 'Por favor, selecione um usuário do banco de dados para este banco de dados.';
-$wb['limit_database_quota_txt'] = 'Cota para banco de dados';
-$wb['limit_database_quota_error_notint'] = 'O valor da cota para banco de dados deve ser um número positivo.';
-$wb['limit_database_quota_free_txt'] = 'Cota para banco de dados';
+$wb['limit_database_quota_txt'] = 'Cota do banco de dados';
+$wb['limit_database_quota_error_notint'] = 'O limite da cota do banco de dados deve ser um número.';
+$wb['limit_database_quota_free_txt'] = 'Limite da cota do banco de dados disponível';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_admin_list.lng b/interface/web/sites/lib/lang/br_database_admin_list.lng
index 4f8f6ba611a0f4aa001db9fd42a1fdbe613d73ad..eef9b6e3fae18536744fd569740ea12f99d6c83b 100644
--- a/interface/web/sites/lib/lang/br_database_admin_list.lng
+++ b/interface/web/sites/lib/lang/br_database_admin_list.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['list_head_txt'] = 'Banco de dados';
+$wb['list_head_txt'] = 'Banco de Dados';
 $wb['active_txt'] = 'Ativo';
-$wb['remote_access_txt'] = 'Acesso remoto';
+$wb['remote_access_txt'] = 'Acesso Remoto';
+$wb['type_txt'] = 'Tipo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['database_user_txt'] = 'Usuário do banco de dados';
 $wb['database_name_txt'] = 'Nome do banco de dados';
 $wb['add_new_record_txt'] = 'Adicionar novo banco de dados';
 $wb['sys_groupid_txt'] = 'Cliente';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['type_txt'] = 'Tipo';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_list.lng b/interface/web/sites/lib/lang/br_database_list.lng
index afb5d36a0d32790fe7421b9350915f039dcd26d3..b3d438e04b4d94db408c54b55adf74fee0132eac 100644
--- a/interface/web/sites/lib/lang/br_database_list.lng
+++ b/interface/web/sites/lib/lang/br_database_list.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['list_head_txt'] = 'Bancos de Dados';
+$wb['list_head_txt'] = 'Banco de Dados';
 $wb['active_txt'] = 'Ativo';
 $wb['remote_access_txt'] = 'Acesso Remoto';
+$wb['type_txt'] = 'Tipo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['database_user_txt'] = 'Usuário do banco de dados';
 $wb['database_name_txt'] = 'Nome do banco de dados';
-$wb['add_new_record_txt'] = 'Adicionar um novo banco de dados';
+$wb['add_new_record_txt'] = 'Adicionar novo registro';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['type_txt'] = 'Tipo';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_quota_stats_list.lng b/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
index 90202f115f6c300bffbcd16f30203677e1633243..41fd305a3aa81872dd30baa2482e540509f00041 100644
--- a/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_database_quota_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['database_txt'] = 'Banco de dados';
+$wb['database_txt'] = 'Banco de Dados';
 $wb['server_name_txt'] = 'Servidor';
 $wb['client_txt'] = 'Cliente';
-$wb['used_txt'] = 'Espaço utilizado';
+$wb['used_txt'] = 'Espaço Utilizado';
 $wb['quota_txt'] = 'Cota';
-$wb['percentage_txt'] = 'Espaço utilizado em %';
-$wb['list_head_txt'] = 'Cota para banco de dados';
+$wb['percentage_txt'] = 'Espaço Utilizado em %';
+$wb['list_head_txt'] = 'Cota do banco de dados';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_user.lng b/interface/web/sites/lib/lang/br_database_user.lng
index 518f0296e1c28a9fbbc6911fae73a1e74d3de6d8..193dbc7406d9feb95593294bdc6f0358be5eb702 100644
--- a/interface/web/sites/lib/lang/br_database_user.lng
+++ b/interface/web/sites/lib/lang/br_database_user.lng
@@ -1,25 +1,25 @@
 <?php
-$wb['database_user_txt'] = 'Usuário';
+$wb['database_user_txt'] = 'Usuário do banco de Dados';
 $wb['database_password_txt'] = 'Senha do banco de dados';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['client_txt'] = 'Cliente';
 $wb['active_txt'] = 'Ativo';
 $wb['database_user_error_empty'] = 'Usuário do banco de dados está em branco.';
-$wb['database_user_error_unique'] = 'Já existe um usuário do banco de dados com este nome no servidor. Para configurar um nome exclusivo, use como prefixo o domínio para o nome do usuário.';
-$wb['database_user_error_regex'] = 'Usuário do banco de dados inválido! O nome do usuário pode conter os seguintes caracteres: \'\"a-z\', \'A-Z\', \'0-9\' e o \'underscore\'. Tamanho: 2 - 64 caracteres.';
-$wb['database_user_error_len'] = 'O usuário do banco de dados - {user} - é muito longo. O limite do nome do usuário, incluindo o prefixo, são 16 caracteres.';
+$wb['database_user_error_unique'] = 'Já existe este usuário no servidor. Para ter um nome exclusivo insira um prefixo como o domínio antes do nome.';
+$wb['database_user_error_regex'] = 'Nome do usuário de banco de dados inválido. O nome do usuário deve conter apenas os caracteres: a-z, A-Z, 0-9 e underscore. Comprimento: 2 - 64 caracteres.';
+$wb['database_user_error_len'] = 'Nome do usuário de banco de dados - {user} - muito longo. Comprimento permitido, incluindo o prefixo, não pode ultrapassr 16 caracteres.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['globalsearch_resultslimit_of_txt'] = 'de';
 $wb['globalsearch_resultslimit_results_txt'] = 'resultados';
 $wb['globalsearch_noresults_text_txt'] = 'Sem resultados.';
-$wb['globalsearch_noresults_limit_txt'] = '0 resultados';
+$wb['globalsearch_noresults_limit_txt'] = '0 resultado(s)';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Pesquisar';
 $wb['globalsearch_suggestions_text_txt'] = 'Sugestões';
-$wb['limit_database_user_txt'] = 'O limite de usuários do banco de dados foi alcançado.';
+$wb['limit_database_user_txt'] = 'O limite de usuários do banco de dados para esta conta foi alcançado.';
 $wb['database_password_error_empty'] = 'Senha do banco de dados está em branco.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_user_admin_list.lng b/interface/web/sites/lib/lang/br_database_user_admin_list.lng
index 1d610bd1b0aef7b656ea993675ff3df274f6b316..bb21e97b1c2e8f77c282e2af42286c39f8d1b76e 100644
--- a/interface/web/sites/lib/lang/br_database_user_admin_list.lng
+++ b/interface/web/sites/lib/lang/br_database_user_admin_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'Usuários';
-$wb['database_user_txt'] = 'Usuário';
+$wb['list_head_txt'] = 'Usuário do banco de dados';
+$wb['database_user_txt'] = 'Nome do usuário';
 $wb['add_new_record_txt'] = 'Adicionar novo usuário';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/sites/lib/lang/br_database_user_list.lng b/interface/web/sites/lib/lang/br_database_user_list.lng
index 855265e958b0f04edf3a43686c044ef5ed020a8e..d2e4332fc79e0a921a4e0240ca5bae8526c00a80 100644
--- a/interface/web/sites/lib/lang/br_database_user_list.lng
+++ b/interface/web/sites/lib/lang/br_database_user_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Usuários';
-$wb['database_user_txt'] = 'Usuário';
+$wb['list_head_txt'] = 'Usuário do banco de dados';
+$wb['database_user_txt'] = 'Usuário do banco de dados';
 $wb['add_new_record_txt'] = 'Adicionar novo usuário';
 ?>
diff --git a/interface/web/sites/lib/lang/br_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/br_ftp_sites_stats_list.lng
index 93a02f6c25419fa0f2d246fc5b77e948e8876ccf..e4fabd595987fbdb2ddae777beb6cc0abd0713dc 100644
--- a/interface/web/sites/lib/lang/br_ftp_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_ftp_sites_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Tráfego ftp';
+$wb['list_head_txt'] = 'Tráfego FTP';
 $wb['domain_txt'] = 'Domínio';
 $wb['this_month_txt'] = 'Este mês';
 $wb['last_month_txt'] = 'Último mês';
 $wb['this_year_txt'] = 'Este ano';
 $wb['last_year_txt'] = 'Último ano';
 $wb['sum_txt'] = 'Soma (Download + Upload)';
-$wb['in_out_txt'] = 'DL/UL';
+$wb['in_out_txt'] = 'DOWN/UP';
 ?>
diff --git a/interface/web/sites/lib/lang/br_ftp_user.lng b/interface/web/sites/lib/lang/br_ftp_user.lng
index bb8d99ceb05622cced7949ca108500fe6bfa80e4..370fe0f36687cdcf86045aa7adeddc3e0ed12095 100644
--- a/interface/web/sites/lib/lang/br_ftp_user.lng
+++ b/interface/web/sites/lib/lang/br_ftp_user.lng
@@ -1,35 +1,36 @@
 <?php
-$wb['uid_txt'] = 'UID';
-$wb['gid_txt'] = 'GID';
+$wb['uid_txt'] = 'ID do usuário (UID)';
+$wb['gid_txt'] = 'ID do grupo (GID)';
 $wb['dir_txt'] = 'Diretório';
 $wb['quota_files_txt'] = 'Cota de arquivos';
 $wb['quota_files_unity_txt'] = 'Arquivos';
-$wb['ul_ratio_txt'] = 'Taxa para upload';
-$wb['dl_ratio_txt'] = 'Taxa para download';
-$wb['ul_bandwidth_txt'] = 'Banda para upload';
-$wb['dl_bandwidth_txt'] = 'Banda para download';
+$wb['ul_ratio_txt'] = 'Taxa de upload';
+$wb['dl_ratio_txt'] = 'Taxa de download';
+$wb['ul_bandwidth_txt'] = 'Banda de upload';
+$wb['dl_bandwidth_txt'] = 'Banda de download';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['quota_size_txt'] = 'Cota de disco';
+$wb['quota_size_txt'] = 'Cota do Disco';
 $wb['active_txt'] = 'Ativo';
-$wb['limit_ftp_user_txt'] = 'o limite de usuários ftp para esta conta foi alcançado.';
-$wb['username_error_empty'] = 'Nome do usuário está em branco.';
+$wb['limit_ftp_user_txt'] = 'O limite de usuários ftp para esta conta foi alcançado.';
+$wb['username_error_empty'] = 'Usuário está em branco.';
 $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
-$wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
+$wb['username_error_regex'] = 'O nome do usuário possui caracteres não permitidos.';
 $wb['quota_size_error_empty'] = 'Cota está em branco.';
+$wb['uid_error_empty'] = 'UID está em branco.';
 $wb['uid_error_empty'] = 'GID está em branco.';
 $wb['directory_error_empty'] = 'Diretório está em branco.';
-$wb['directory_error_notinweb'] = 'O diretório não está dentro do diretório web principal.';
+$wb['directory_error_notinweb'] = 'Diretório não está dentro do diretório web.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['quota_size_error_regex'] = 'Cota: insira -1 para ilimitado ou um número > 0';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \"./\" no caminho.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['expires_txt'] = 'Expira em';
+$wb['quota_size_error_regex'] = 'Cota: insira -1 para ilimitado ou um número > 0.';
+$wb['dir_dot_error'] = 'Não é permitido ".." no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido "./" no caminho.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['expires_txt'] = 'Expirar em';
 ?>
diff --git a/interface/web/sites/lib/lang/br_shell_user.lng b/interface/web/sites/lib/lang/br_shell_user.lng
index c92bf5baa4dff9219f43bf4b2c5997a4f2ccda75..8cd05205544545fcc43fd6d5d63b16533e7a9fd2 100644
--- a/interface/web/sites/lib/lang/br_shell_user.lng
+++ b/interface/web/sites/lib/lang/br_shell_user.lng
@@ -1,36 +1,36 @@
 <?php
+$wb['puser_txt'] = 'Usuário web';
+$wb['pgroup_txt'] = 'Grupo web';
 $wb['shell_txt'] = 'Shell';
-$wb['dir_txt'] = 'Diretório';
+$wb['dir_txt'] = 'Diretório Base';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['username_txt'] = 'Nome do usuário';
+$wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['chroot_txt'] = 'Shell enjaulado (chroot)';
+$wb['chroot_txt'] = 'Chroot Shell';
 $wb['quota_size_txt'] = 'Cota';
 $wb['active_txt'] = 'Ativo';
-$wb['username_error_empty'] = 'Nome de usuário está em branco.';
-$wb['username_error_unique'] = 'O nome de usuário deve ser exclusivo.';
-$wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
+$wb['username_error_empty'] = 'Nome do usuário está em branco.';
+$wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
+$wb['username_error_regex'] = 'O nome do usuário possui caracteres não permitidos.';
 $wb['quota_size_error_empty'] = 'Cota está em branco.';
 $wb['uid_error_empty'] = 'GID está em branco.';
-$wb['directory_error_empty'] = 'Diretório está em branco.';
-$wb['limit_shell_user_txt'] = 'O limite de usuários shell para esta conta foi alcançado.';
+$wb['directory_error_empty'] = 'O diretório está em branco.';
+$wb['limit_shell_user_txt'] = 'O limite de usuários foi alcançado.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['puser_txt'] = 'Usuário web';
-$wb['pgroup_txt'] = 'Grupo web';
 $wb['ssh_rsa_txt'] = 'Chave pública SSH-RSA (para acessos baseados em chave)';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido  \"./\" no caminho.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['username_must_not_exceed_32_chars_txt'] = 'O nome do usuário não pode ultrapassar 32 caracteres.';
-$wb['username_not_allowed_txt'] = 'O nome do usuário nao é permitido.';
-$wb['invalid_system_user_or_group_txt'] = 'Usuário ou grupo inválido';
-$wb['directory_error_regex'] = 'Diretório inválido';
-$wb['shell_error_regex'] = 'Shell inválido';
-$wb['invalid_username_txt'] = 'Usuário inválido';
-$wb['directory_error_notinweb'] = 'O diretório deve estar dentro do diretório web principal.';
+$wb['dir_dot_error'] = 'Não é permitido \'..\' no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \'./\' no caminho.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['username_must_not_exceed_32_chars_txt'] = 'O nome do usuário não pode exceder 32 caracteres.';
+$wb['username_not_allowed_txt'] = 'O nome do usuário não é permitido.';
+$wb['invalid_system_user_or_group_txt'] = 'Usuário ou grupo inválido.';
+$wb['directory_error_regex'] = 'Diretório inválido.';
+$wb['shell_error_regex'] = 'Shell inválido.';
+$wb['invalid_username_txt'] = 'Usuário inválido.';
+$wb['directory_error_notinweb'] = 'O diretório deve estar dentro do diretório web.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_shell_user_list.lng b/interface/web/sites/lib/lang/br_shell_user_list.lng
index 587c988ccd56722e325ef1f761bafe67951e0ae9..21bb3d4dfd9d75cc023cb183118c59e609879b99 100644
--- a/interface/web/sites/lib/lang/br_shell_user_list.lng
+++ b/interface/web/sites/lib/lang/br_shell_user_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Usuário shell';
+$wb['list_head_txt'] = 'Usuário do Shell';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
diff --git a/interface/web/sites/lib/lang/br_user_quota_stats_list.lng b/interface/web/sites/lib/lang/br_user_quota_stats_list.lng
index fe41b018dcb6f9ffcc54a9b5ec779679ade5b8b2..d97921048377a097533503f109c2fe13decd223f 100644
--- a/interface/web/sites/lib/lang/br_user_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/br_user_quota_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Cota do Disco';
-$wb['domain_txt'] = 'Domínio';
+$wb['list_head_txt'] = 'Cota do disco para site';
+$wb['domain_txt'] = 'Domínio/Site';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['used_txt'] = 'Espaço utilizado';
-$wb['hard_txt'] = 'Limite';
+$wb['hard_txt'] = 'Limite para bloqueio';
 $wb['soft_txt'] = 'Limite para alerta';
 $wb['files_txt'] = 'Arquivos simples';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain.lng b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
index 9d4f1951d8090241d70c361f0dc1d4cbffd464d4..d6142fd3746ff05f90251f95afce755fdec1b7da 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['domain_txt'] = 'Apelido de domínio';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias do backup';
+$wb['domain_txt'] = 'Alias de domínio';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
@@ -10,64 +10,64 @@ $wb['ssl_country_txt'] = 'País';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
-$wb['web_folder_error_regex'] = 'Pasta inválida inserida. Por favor, não use barra \"/\".';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Site pai';
+$wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho do redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
-$wb['document_root_txt'] = 'Pasta personalizada documentroot';
+$wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
 $wb['ip_address_txt'] = 'Endereço IPv4';
-$wb['ipv6_address_txt'] = 'Endreço IPv6';
-$wb['vhost_type_txt'] = 'Tipo VHost';
-$wb['hd_quota_txt'] = 'Cota de Disco';
+$wb['ipv6_address_txt'] = 'Endereço IPv6';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
 $wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
-$wb['errordocs_txt'] = 'Pasta personalizada errordocuments';
+$wb['errordocs_txt'] = 'Proprietário do Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio para esta conta foi alcançado.';
-$wb['limit_web_subdomain_txt'] = 'Limite  subdomínios de site para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
+$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'O domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou apelido de domínio com este nome.';
-$wb['domain_error_regex'] = 'Domínio inválido!';
+$wb['domain_error_empty'] = 'O campo "Domínio" está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O campo "Domínio" é inválido.';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
-$wb['hd_quota_error_empty'] = 'Cota de disco é 0 ou está em branco.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
 $wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' está em branco.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
 $wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
-$wb['allow_override_txt'] = 'Diretiva apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Cota máxima de disco disponível';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
-$wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
+$wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = 'Limite da cota de disco disponível';
+$wb['ssl_state_error_regex'] = 'O campo "Estado" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. São caracteres válidos: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. São redirecionamentos válidos, por exemplo, /teste/ ou http://www.dominio.com.br/teste/';
+$wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
 $wb['stats_user_txt'] = 'Usuário de estatísticas web';
-$wb['stats_type_txt'] = 'Programa de estatísticas web';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
 $wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
 $wb['none_txt'] = 'Nenhum';
 $wb['disabled_txt'] = 'Desabilitado';
@@ -77,39 +77,39 @@ $wb['save_certificate_txt'] = 'Salvar certificado';
 $wb['create_certificate_txt'] = 'Adicionar certificado';
 $wb['delete_certificate_txt'] = 'Remover certificado';
 $wb['nginx_directives_txt'] = 'Diretivas do nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretivas Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretivas www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para o PHP-FPM';
-$wb['error_no_sni_txt'] = 'O SNI para SSL não está ativo neste servidor. Você só pode habilitar um certificado para cada endereço IP.';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Os valores permitidos para configurações do PHP-FPM pm são: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do PHP-FPM pm.start_servers deve ser um número positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor inválido para cota de disco.';
-$wb['traffic_quota_error_regex'] = 'Valor inválido para cota de tráfego.';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de Processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx disponíveis:';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['Domain'] = 'Apelido de domínio';
+$wb['Domain'] = 'Alias de Domínio';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain_list.lng b/interface/web/sites/lib/lang/br_web_aliasdomain_list.lng
index 153aa33400c197f9978c5f13b3c3b383c0c22749..770ec725e484ab99e4f11553758685f24dc3cf82 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain_list.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain_list.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['list_head_txt'] = 'Apelidos de domínios';
+$wb['list_head_txt'] = 'Alias de Domínio';
 $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
-$wb['domain_txt'] = 'Apelido de domínio';
-$wb['add_new_record_txt'] = 'Adicionar novo apelido';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
+$wb['domain_txt'] = 'Alias de Domínio';
+$wb['add_new_record_txt'] = 'Adicionar novo alias de domínio';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
 $wb['domain_error_unique'] = 'O domínio deve ser exclusivo.';
-$wb['domain_error_regex'] = 'Domínio inválido!';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['none_txt'] = 'Nenhum';
diff --git a/interface/web/sites/lib/lang/br_web_backup_list.lng b/interface/web/sites/lib/lang/br_web_backup_list.lng
index 137f8bc7e0e50900e1ab0fd551ccbe652c4467df..82883c1f29fe17de0982a3dfe073770c0c9849f0 100644
--- a/interface/web/sites/lib/lang/br_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/br_web_backup_list.lng
@@ -3,19 +3,20 @@ $wb['list_head_txt'] = 'Backups existentes';
 $wb['date_txt'] = 'Data';
 $wb['backup_type_txt'] = 'Tipo';
 $wb['filename_txt'] = 'Arquivo de backup';
-$wb['restore_backup_txt'] = 'Restaurar backup';
-$wb['download_backup_txt'] = 'Baixar backup';
-$wb['download_info_txt'] = 'O arquivo de backup estará disponível para download na pasta de backup do site em alguns minutos.';
-$wb['restore_info_txt'] = 'Restauração do backup iniciada. Esta ação poderá levar vários minutos para ser concluída. Aguarde.';
-$wb['restore_confirm_txt'] = 'A restauração do backup reescreverá os arquivos existes do seu site. Tem certeza que deseja restaurar este backup?';
-$wb['download_pending_txt'] = 'Já existe um download deste backup em execução.';
-$wb['restore_pending_txt'] = 'Já existe uma restauração deste backup em execução.';
-$wb['delete_backup_txt'] = 'Remover backup';
-$wb['delete_info_txt'] = 'Remoção do backup iniciada. Esta ação poderá levar vários minutos para ser concluída. Aguarde.';
+$wb['filesize_txt'] = 'Tamanho do arquivo';
+$wb['restore_backup_txt'] = 'Restaurar';
+$wb['download_backup_txt'] = 'Download';
+$wb['download_info_txt'] = 'O arquivo de backup estará disponível para download na pasta de backup dentro de alguns minutos.';
+$wb['restore_info_txt'] = 'Restauração do backup foi iniciada. Esta ação demora vários minutos para concluir.';
+$wb['restore_confirm_txt'] = 'Restaurar arquivo de backup reescreve os arquivos existentes do site. Tem certeza que deseja restaurar este backup?';
+$wb['download_pending_txt'] = 'Já existe um download de backup em andamento.';
+$wb['restore_pending_txt'] = 'Já existe uma restauração de backup em andamento.';
+$wb['delete_backup_txt'] = 'Remover Backup';
+$wb['delete_info_txt'] = 'Remoção de backup foi iniciada. Esta ação demora vários minutos para concluir.';
 $wb['delete_confirm_txt'] = 'Tem certeza que deseja remover este backup?';
-$wb['delete_pending_txt'] = 'Já existe uma remoção deste backup em execução.';
-$wb['backup_type_mysql'] = 'Banco de dados MySQL';
+$wb['delete_pending_txt'] = 'Já existe uma remoção de backup em andamento.';
+$wb['backup_type_mongodb'] = 'MongoDB';
+$wb['backup_type_mysql'] = 'MySQL';
 $wb['backup_type_web'] = 'Arquivos do site';
-$wb['filesize_txt'] = 'Tamanho';
-$wb['backup_type_mongodb'] = 'Banco de dados MongoDB';
+
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_childdomain.lng b/interface/web/sites/lib/lang/br_web_childdomain.lng
index 1c53d165842a693423b8c785152334f48304d366..fbbb40635e040b52992c0059ab56709f035e6301 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain.lng
@@ -4,117 +4,117 @@ $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
 $wb['ssl_organisation_unit_txt'] = 'Departamento';
 $wb['ssl_country_txt'] = 'País';
-$wb['ssl_request_txt'] = 'Requisição SSL';
-$wb['ssl_cert_txt'] = 'Certificado SSL';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_request_txt'] = 'Requisição';
+$wb['ssl_cert_txt'] = 'Certificado';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Site pai';
+$wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho para redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
 $wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['vhost_type_txt'] = 'Tipo de vhost';
-$wb['hd_quota_txt'] = 'Cota de disco';
-$wb['traffic_quota_txt'] = 'Cota de tráfego';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
+$wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
-$wb['limit_web_domain_txt'] = 'o limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio de site para esta conta foi alcançado.';
+$wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
 $wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
-$wb['domain_error_regex'] = 'Nome de domínio é inválido.';
-$wb['host_txt'] = 'Nome do servidor';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['domain_error_acme_invalid'] = 'Domínio genérico inválido não permitido.';
+$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
+$wb['host_txt'] = 'Host';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
-$wb['domain_error_wildcard'] = 'Curingas para subdomínios não são permitidos.';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento \"proxy\" exige uma url no caminho de redirecionamento.';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias do backup';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento "proxy" exige uma URL como caminho de redirecionamento.';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_key_txt'] = 'Chave';
-$wb['ssl_domain_txt'] = 'Domínio do SSL';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não use uma barra - \"/\".';
+$wb['ssl_domain_txt'] = 'Domínio';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['ipv6_address_txt'] = 'Endereço IPv6';
-$wb['errordocs_txt'] = 'Pasta personalizada Error-Documents';
+$wb['errordocs_txt'] = 'Proprietário do Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
-$wb['hd_quota_error_empty'] = 'Cota de disco é 0 ou está em branco.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
 $wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Organização\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' em branco';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
 $wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
-$wb['allow_override_txt'] = 'Diretiva apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Cota de disco';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Cota de tráfego';
+$wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = 'Limite da cota de disco disponível';
+$wb['ssl_state_error_regex'] = 'O campo "Estado" é inválido. Caracteres válidos são: "a-z", "0-9",".", "-", e "_".';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. Caracteres válidos são: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego alcançada';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Usuário para estatísticas web';
-$wb['stats_type_txt'] = 'Programa para estatísticas web';
+$wb['stats_user_txt'] = 'Usuário de estatísticas web';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
 $wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
 $wb['none_txt'] = 'Nenhum';
-$wb['disabled_txt'] = 'Inativo';
+$wb['disabled_txt'] = 'Desabilitado';
 $wb['save_certificate_txt'] = 'Salvar certificado';
 $wb['create_certificate_txt'] = 'Adicionar certificado';
 $wb['delete_certificate_txt'] = 'Remover certificado';
 $wb['nginx_directives_txt'] = 'Diretivas do nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretivas Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretivas www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para PHP-FPM';
-$wb['error_no_sni_txt'] = 'SNI para SSL não está ativo neste servidor. Você só pode ativar um certificado SSL para cada endereço IP.';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Valores para as configurações do PHP-FPM pm devem obedecer as seguintes condições: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do PHP-FPM pm.start_servers deve ser um número positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor da cota de disco é inválido.';
-$wb['traffic_quota_error_regex'] = 'Valor da cota de tráfego é inválido.';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de Processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx disponíveis:';
-$wb['Domain'] = 'Apelido de domínio';
-$wb['ssl_letsencrypt_exclude_txt'] = 'Não adicionar certificado Let\'s Encrypt';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
+$wb['Domain'] = 'Alias de domínio';
+$wb['ssl_letsencrypt_exclude_txt'] = 'Sem certificado Let \'s Encrypt';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_childdomain_list.lng b/interface/web/sites/lib/lang/br_web_childdomain_list.lng
index 20b559b128ad756ccd55299f2fc15a85b1bdd6f7..583ae2d3609d8a27600d4228ac0fcbab99b562f3 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain_list.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain_list.lng
@@ -4,15 +4,15 @@ $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Site';
 $wb['domain_txt'] = 'Subdomínio';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'O nome do domínio deve ser exclusivo.';
-$wb['domain_error_regex'] = 'Nome do domínio é inválido.';
+$wb['add_new_subdomain_txt'] = 'Adicionar novo subdomínio';
+$wb['add_new_aliasdomain_txt'] = 'Adicionar novo alias de domínio';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'O domínio deve ser exclusivo.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['domain_error_acme_invalid'] = 'Domínio genérico inválido não permitido.';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
 $wb['none_txt'] = 'Nenhum';
-$wb['add_new_subdomain_txt'] = 'Adicionar novo subdomínio';
-$wb['add_new_aliasdomain_txt'] = 'Adicionar novo apelido';
-$wb['aliasdomain_list_head_txt'] = 'Apelidos de domínios';
+$wb['aliasdomain_list_head_txt'] = 'Alias de domínios';
 $wb['subdomain_list_head_txt'] = 'Subdomínios';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_domain.lng b/interface/web/sites/lib/lang/br_web_domain.lng
index f0fdabb75fc804d157f7fcece4acf9248584d1a4..1a2a2b301b9a18d1067daa89699e540f344f3681 100644
--- a/interface/web/sites/lib/lang/br_web_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_domain.lng
@@ -1,116 +1,115 @@
 <?php
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
 $wb['ssl_organisation_unit_txt'] = 'Departamento';
 $wb['ssl_country_txt'] = 'País';
+$wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
+$wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Site pai';
+$wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho do redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
-$wb['document_root_txt'] = 'Diretório Documentroot';
+$wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
-$wb['ip_address_txt'] = 'Endereço IP';
-$wb['vhost_type_txt'] = 'Tipo de VHost';
-$wb['hd_quota_txt'] = 'Cota de disco';
-$wb['traffic_quota_txt'] = 'Cota de tráfego';
+$wb['ip_address_txt'] = 'Endereço IPv4';
+$wb['ipv6_address_txt'] = 'Endereço IPv6';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
+$wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
-$wb['errordocs_txt'] = 'Páginas de erro personalizadas (error-documents)';
+$wb['errordocs_txt'] = 'Proprietário do Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio domínio para esta conta foi alcançado.';
-$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
+$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe site, apelido ou subdomínio com este nome';
-$wb['domain_error_regex'] = 'Nome de domínio é inválido.';
-$wb['hd_quota_error_empty'] = 'Cota de disco está em branco.';
+$wb['domain_error_empty'] = 'O campo "Domínio" está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O campo "Domínio" é inválido.';
+$wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
 $wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'o Campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
-$wb['stats_password_txt'] = 'Senha do diretório de estatísticas';
-$wb['ssl_domain_txt'] = 'Domínio';
-$wb['allow_override_txt'] = 'Permitir Sobrescrever';
-$wb['limit_web_quota_free_txt'] = 'Cota máxima de disco disponível';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \\"a-z\\", \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Cota máxima de tráfego disponível';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
+$wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = 'Limite da cota do disco disponível';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. São caracteres válidos: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Usuário para estatísticas web';
-$wb['stats_type_txt'] = 'Tipo de estatísticas web';
-$wb['custom_php_ini_txt'] = 'php.ini personalizado';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' vazio';
-$wb['none_txt'] = 'Nenhuma';
+$wb['stats_user_txt'] = 'Usuário de estatísticas web';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
+$wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
+$wb['none_txt'] = 'Nenhum';
 $wb['disabled_txt'] = 'Desabilitado';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
-$wb['save_certificate_txt'] = 'Salvar certificado';
-$wb['create_certificate_txt'] = 'Adicionar certificado';
-$wb['delete_certificate_txt'] = 'Remover certificado';
-$wb['ipv6_address_txt'] = 'Endereço IPv6';
-$wb['nginx_directives_txt'] = 'Diretivas nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretiva Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretiva www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para PHP-FPM';
-$wb['error_no_sni_txt'] = 'O SNI para SSL não está ativo neste servidor. Você só pode habilitar um certificado para cada endereço IP.';
+$wb['save_certificate_txt'] = 'Salvar Certificado';
+$wb['create_certificate_txt'] = 'Adicionar Certificado';
+$wb['delete_certificate_txt'] = 'Remover Certificado';
+$wb['nginx_directives_txt'] = 'Diretivas do nginx';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Valores para as configurações do PHP-FPM pm devem obedecer as seguintes condições: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do PHP-FPM pm.start_servers deve ser um inteiro positvo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor da cota de disco é é inválido.';
-$wb['traffic_quota_error_regex'] = 'Valor da cota de tráfego é é inválido.';
-$wb['ssl_key_txt'] = 'Chave';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de Processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida! Por favor não insira barra \\"/\\".';
-$wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx:';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
-$wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy:';
+$wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
 $wb['no_server_error'] = 'Nenhum servidor selecionado.';
 $wb['no_backup_txt'] = 'Sem backup';
 $wb['daily_backup_txt'] = 'Diário';
@@ -118,20 +117,20 @@ $wb['weekly_backup_txt'] = 'Semanal';
 $wb['monthly_backup_txt'] = 'Mensal';
 $wb['rewrite_rules_txt'] = 'Reescrever Regras';
 $wb['invalid_rewrite_rules_txt'] = 'Regras de reescrita inválidas';
-$wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas Permitidas:';
+$wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 $wb['variables_txt'] = 'Variáveis';
-$wb['added_by_txt'] = 'Cadastrado por';
+$wb['added_by_txt'] = 'Cadastrador por';
 $wb['added_date_txt'] = 'Data do cadastro';
-$wb['backup_excludes_txt'] = 'Diretórios excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgula. Exemplo: web/cache/*,web/backup)';
-$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos!';
+$wb['backup_excludes_txt'] = 'Diretórios Excluídos';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*, web/backup)';
+$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracteres inválidos.';
 $wb['invalid_custom_php_ini_settings_txt'] = 'Configurações do php.ini inválidas';
-$wb['invalid_system_user_or_group_txt'] = 'Configurações inválidas para usuário ou grupo do sistema';
-$wb['apache_directive_blocked_error'] = 'Diretiva do apache bloqueada por configurações de segurança:';
-$wb['http_port_txt'] = 'Porta HTTP';
-$wb['https_port_txt'] = 'Porta HTTPS';
-$wb['http_port_error_regex'] = 'Porta HTTP inválida.';
-$wb['https_port_error_regex'] = 'Porta HTTPS inválida.';
-$wb['nginx_directive_blocked_error'] = 'Nginx directive blocked by security settings:';
+$wb['invalid_system_user_or_group_txt'] = 'Usuário ou grupo inválido.';
+$wb['apache_directive_blocked_error'] = 'Diretivas do apache bloqueadas pelas configurações de segurança:';
+$wb['http_port_txt'] = 'Porta http';
+$wb['https_port_txt'] = 'Porta https';
+$wb['http_port_error_regex'] = 'Porta http inválida.';
+$wb['https_port_error_regex'] = 'Porta https inválida.';
+$wb['nginx_directive_blocked_error'] = 'Diretivas do nginx bloqueadas pelas configurações de segurança:';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_folder.lng b/interface/web/sites/lib/lang/br_web_folder.lng
index 34a3f65b0cc159a32b6b6de47980fc4654ef37ad..193cb4636f3915db018a9ac73f0d64a6eaeef2d4 100644
--- a/interface/web/sites/lib/lang/br_web_folder.lng
+++ b/interface/web/sites/lib/lang/br_web_folder.lng
@@ -4,5 +4,5 @@ $wb['parent_domain_id_txt'] = 'Site';
 $wb['path_txt'] = 'Caminho';
 $wb['active_txt'] = 'Ativo';
 $wb['path_error_regex'] = 'Caminho da pasta é inválido.';
-$wb['error_folder_already_protected_txt'] = 'Já existe um registro para esta pasta.';
+$wb['error_folder_already_protected_txt'] = 'Já existe esta pasta.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_folder_user.lng b/interface/web/sites/lib/lang/br_web_folder_user.lng
index dd63d02eec70f6580bd5e6289c81e099cb71d3ef..5dc0354fec4e260c2d04a005a128b459a9cac9e4 100644
--- a/interface/web/sites/lib/lang/br_web_folder_user.lng
+++ b/interface/web/sites/lib/lang/br_web_folder_user.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['web_folder_id_txt'] = 'Pastas protegidas';
+$wb['web_folder_id_txt'] = 'Pasta';
 $wb['username_txt'] = 'Usuário';
 $wb['password_txt'] = 'Senha';
 $wb['active_txt'] = 'Ativo';
 $wb['folder_error_empty'] = 'Nenhuma pasta selecionada.';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 $wb['no_folder_perm'] = 'Você não tem permissão para esta pasta.';
 $wb['error_user_exists_already_txt'] = 'Já existe um registro igual para este usuário.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_folder_user_list.lng b/interface/web/sites/lib/lang/br_web_folder_user_list.lng
index e108c219b91e6e0772224d884cfd5c4d942a8046..8ad8c48257b12d8a02aef7859366ba7ca00ba99f 100644
--- a/interface/web/sites/lib/lang/br_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/br_web_folder_user_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Usuários de pastas';
+$wb['list_head_txt'] = 'Usuário de Pasta';
 $wb['active_txt'] = 'Ativo';
-$wb['web_folder_id_txt'] = 'ID da pasta';
+$wb['web_folder_id_txt'] = 'Pasta';
 $wb['username_txt'] = 'Usuário';
 $wb['add_new_record_txt'] = 'Adicionar novo usuário';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_subdomain.lng b/interface/web/sites/lib/lang/br_web_subdomain.lng
index 8abb0504384c4b66164b0dde23a133686dd1d794..53cb94ab5459f590e418071ea2111d08b8e0f464 100644
--- a/interface/web/sites/lib/lang/br_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_subdomain.lng
@@ -6,21 +6,21 @@ $wb['ssl_organisation_unit_txt'] = 'Departamento';
 $wb['ssl_country_txt'] = 'País';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['type_txt'] = 'Tipo';
 $wb['parent_domain_id_txt'] = 'Site Pai';
-$wb['redirect_type_txt'] = 'Tipo do Redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho do Redirecionamento';
+$wb['redirect_type_txt'] = 'Tipo de redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
 $wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['vhost_type_txt'] = 'Tipo VHost';
-$wb['hd_quota_txt'] = 'Cota de Disco';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
 $wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
@@ -29,22 +29,22 @@ $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio para esta conta foi alcançado.';
-$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
+$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe apelido de domínio ou subdomínio com este nome.';
-$wb['domain_error_regex'] = 'Nome do domínio é inválido.';
+$wb['domain_error_empty'] = 'O domínio está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
 $wb['host_txt'] = 'Host';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
-$wb['domain_error_wildcard'] = 'Curingas de subdomínios não são permitidos.';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['error_proxy_requires_url'] = 'Tipo de redirecionamento \'proxy\' exige uma URL como caminho de redirecionamento.';
-$wb['http_port_txt'] = 'Porta HTTP';
-$wb['https_port_txt'] = 'Porta HTTPS';
-$wb['http_port_error_regex'] = 'Porta HTTP inválida.';
-$wb['https_port_error_regex'] = 'Porta HTTPS inválida.';
+$wb['error_proxy_requires_url'] = 'O tipo de redirecionamento "proxy" exige uma URL como caminho de redirecionamento.';
+$wb['http_port_txt'] = 'Porta http';
+$wb['https_port_txt'] = 'Porta https';
+$wb['http_port_error_regex'] = 'Porta http inválida.';
+$wb['https_port_error_regex'] = 'Porta https inválida.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index 171a34f95b19c12ddfa4658273dd822ab0cb6abd..01a7414a98c5fd7fd5bdcb5e4a666a646cae5eeb 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -1,115 +1,116 @@
 <?php
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
 $wb['ssl_organisation_unit_txt'] = 'Departamento';
 $wb['ssl_country_txt'] = 'País';
+$wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
+$wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Site Parente';
-$wb['redirect_type_txt'] = 'Tipo Redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho do redirecionamento';
+$wb['parent_domain_id_txt'] = 'Site Pai';
+$wb['redirect_type_txt'] = 'Tipo de redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
-$wb['document_root_txt'] = 'Pasta personalizada documentroot';
+$wb['document_root_txt'] = 'Document-root';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
-$wb['ip_address_txt'] = 'Endereço IP';
-$wb['vhost_type_txt'] = 'Tipo VHost';
-$wb['hd_quota_txt'] = 'Cota de Disco';
+$wb['ip_address_txt'] = 'Endereço IPv4';
+$wb['ipv6_address_txt'] = 'Endereço IPv6';
+$wb['vhost_type_txt'] = 'Tipo do VHost';
+$wb['hd_quota_txt'] = 'Cota do Disco';
 $wb['traffic_quota_txt'] = 'Cota de Tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
-$wb['errordocs_txt'] = 'Pasta personalizada errordocuments';
+$wb['errordocs_txt'] = 'Proprietário do Error-Documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['ssl_txt'] = 'SSL';
-$wb['ssl_letsencrypt_txt'] = 'Let\'s Encrypt';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio de site para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
 $wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe site, apelido de domínio ou subdomínio com este nome';
-$wb['domain_error_regex'] = 'Nome do domínio é inválido.';
-$wb['hd_quota_error_empty'] = 'Cota de disco está em branco.';
+$wb['domain_error_empty'] = 'O campo "Domínio" está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O campo "Domínio" é inválido.';
+$wb['domain_error_acme_invalid'] = 'Domínio genérico inválido não permitido.';
+$wb['domain_error_autosub'] = 'Já existe um subdomínio com estas configurações.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
 $wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
-$wb['stats_password_txt'] = 'Senha do diretório de estatísticas';
-$wb['ssl_domain_txt'] = 'Domínio SSL';
-$wb['allow_override_txt'] = 'Permitir sobrescrever';
-$wb['limit_web_quota_free_txt'] = 'Cota de disco máxima';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. São caracteres válidos: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. São caracteres válidos: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplos de caminhos válidos: \"/teste\" ou \"http://www.dominio.com.br/teste/\".';
+$wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
+$wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = 'Limite da cota de disco disponível';
+$wb['ssl_state_error_regex'] = 'O campo "Estado" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. São caracteres válidos: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. São caracteres válidos: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
 $wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
 $wb['stats_user_txt'] = 'Usuário de estatísticas web';
-$wb['stats_type_txt'] = 'Tipo de estatística web';
-$wb['custom_php_ini_txt'] = 'php.ini personalizado';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' em branco';
-$wb['none_txt'] = 'Nenhuma';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
+$wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
+$wb['none_txt'] = 'Nenhum';
 $wb['disabled_txt'] = 'Desabilitado';
 $wb['no_redirect_txt'] = 'Sem redirecionamento';
 $wb['no_flag_txt'] = 'Sem marcas';
-$wb['save_certificate_txt'] = 'Salvar certificado';
-$wb['create_certificate_txt'] = 'Adicionar certificado';
-$wb['delete_certificate_txt'] = 'Remover certificado';
-$wb['ipv6_address_txt'] = 'Endereço IPv6';
+$wb['save_certificate_txt'] = 'Salvar Certificado';
+$wb['create_certificate_txt'] = 'Adicionar Certificado';
+$wb['delete_certificate_txt'] = 'Remover Certificado';
 $wb['nginx_directives_txt'] = 'Diretivas do nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretivas Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretivas www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para o PHP-FPM';
-$wb['error_no_sni_txt'] = 'O SNI para SSL não está ativo neste servidor. Você só pode habilitar um certificado para cada endereço IP.';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['php_fpm_chroot_txt'] = 'Chroot php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Valores permitidos para configurações do PHP-FPM pm devem obedecer os critérios: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do  PHP-FPM pm.start_servers deve ser um número positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor da cota de disco é inválido.';
-$wb['traffic_quota_error_regex'] = 'Valor da cota de tráfego é inválido.';
-$wb['ssl_key_txt'] = 'Chave';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['web_folder_error_regex'] = 'Pasta inválida informada. Por favor não insira barra - \"\\".';
-$wb['domain_error_autosub'] = 'Já existe um subdomínio com essas configurações.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx disponíveis:';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
 $wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
 $wb['no_server_error'] = 'Nenhum servidor selecionado.';
@@ -117,38 +118,44 @@ $wb['no_backup_txt'] = 'Sem backup';
 $wb['daily_backup_txt'] = 'Diário';
 $wb['weekly_backup_txt'] = 'Semanal';
 $wb['monthly_backup_txt'] = 'Mensal';
-$wb['rewrite_rules_txt'] = 'Regras de reescrita';
+$wb['rewrite_rules_txt'] = 'Reescrever Regras';
 $wb['invalid_rewrite_rules_txt'] = 'Regras de reescrita inválidas';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
-$wb['web_folder_txt'] = 'Pasta web';
-$wb['web_folder_invalid_txt'] = 'A pasta web informada é inválida, por favor escolha um nome diferente.';
-$wb['web_folder_unique_txt'] = 'A pasta web informada já existe, por favor escolha um nome diferente.';
-$wb['host_txt'] = 'Nome do servidor';
-$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
+$wb['server_chosen_not_ok'] = 'O servidor selecionado não é permitido para esta conta.';
 $wb['variables_txt'] = 'Variáveis';
 $wb['added_by_txt'] = 'Cadastrado por';
 $wb['added_date_txt'] = 'Data do cadastro';
-$wb['backup_excludes_txt'] = 'Diretórios excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*,web/backup)';
-$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos.';
-$wb['server_chosen_not_ok'] = 'O servidor selecionado não é permitido para esta conta.';
-$wb['subdomain_error_empty'] = 'O campo subdomínio está em branco ou contém caracteres inválidos.';
+$wb['backup_excludes_txt'] = 'Diretórios Excluídos';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*, web/backup)';
+$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracteres inválidos.';
+$wb['web_folder_txt'] = 'Pasta web';
+$wb['web_folder_invalid_txt'] = 'A pasta web é inválida, por favor selecione outra.';
+$wb['web_folder_unique_txt'] = 'A pasta web é já está em uso, por favor selecione outra.';
+$wb['host_txt'] = 'Nome do host';
+$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
+$wb['variables_txt'] = 'Variáveis';
+$wb['backup_excludes_txt'] = 'Diretórios Excluídos';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*, web/backup)';
+$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracteres inválidos.';
+$wb['subdomain_error_empty'] = 'O subdomínio está em branco ou possui caracteres inválidos.';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['enable_spdy_txt'] = 'Habilitar SPDY/HTTP2';
-$wb['load_client_data_txt'] = 'Carregas detalhes do cliente';
+$wb['load_client_data_txt'] = 'Carregar detalhes do cliente';
 $wb['load_my_data_txt'] = 'Carregar detalhes do contato';
 $wb['reset_client_data_txt'] = 'Limpar dados';
+$wb['document_root_txt'] = 'Document Root';
+$wb['ssl_letsencrypt_txt'] = 'Let\'s Encrypt SSL';
 $wb['rewrite_to_https_txt'] = 'Reescrever HTTP para HTTPS';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
-$wb['directive_snippets_id_txt'] = 'Configurações do servidor de páginas';
-$wb['http_port_txt'] = 'Porta HTTP';
-$wb['https_port_txt'] = 'Porta HTTPS';
-$wb['http_port_error_regex'] = 'Porta HTTP inválida.';
-$wb['https_port_error_regex'] = 'Porta HTTPS inválida.';
+$wb['directive_snippets_id_txt'] = 'Configurações do servidor web';
+$wb['http_port_txt'] = 'Porta http';
+$wb['https_port_txt'] = 'Porta https';
+$wb['http_port_error_regex'] = 'Porta http inválida.';
+$wb['https_port_error_regex'] = 'Porta https inválida.';
 $wb['enable_pagespeed_txt'] = 'Habilitar PageSpeed';
-$wb['log_retention_txt'] = 'Tempo de armazenamenro dos arquivos de log';
-$wb['log_retention_error_regex'] = 'Tempo de armazenamento, em dias (valores permitidos: min. 0 - max. 9999)';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['log_retention_txt'] = 'Tempo de retenção do log de arquivos';
+$wb['log_retention_error_regex'] = 'Tempo de retenção em dias (valores permitidos: mínimo 0, máximo 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Cota de disco não pode ser configurada para 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain_admin_list.lng b/interface/web/sites/lib/lang/br_web_vhost_domain_admin_list.lng
index 6b1385926dd838fcb39cbe80d3b183af77ceb4ac..3c0c7fd01e6af17c4028406ff2842683e6e3797f 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain_admin_list.lng
@@ -7,8 +7,8 @@ $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['add_new_record_txt'] = 'Adicionar novo site';
 $wb['add_new_subdomain_txt'] = 'Adicionar novo subdomínio';
-$wb['add_new_aliasdomain_txt'] = 'Adicionar novo apelido de domínio';
+$wb['add_new_aliasdomain_txt'] = 'Adicionar novo alias de domínio';
 $wb['domain_list_head_txt'] = 'Sites';
-$wb['aliasdomain_list_head_txt'] = 'Apelidos de domínios (vhost)';
+$wb['aliasdomain_list_head_txt'] = 'Alias de domínio (vhost)';
 $wb['subdomain_list_head_txt'] = 'Subdomínios (vhost)';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain_list.lng b/interface/web/sites/lib/lang/br_web_vhost_domain_list.lng
index e8fb6bfb09affba325b03f2790ff3f7d047fd5e0..8170afc2d3de1896df14ae91899b56c700369f03 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain_list.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain_list.lng
@@ -5,10 +5,10 @@ $wb['active_txt'] = 'Ativo';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
 $wb['add_new_record_txt'] = 'Adicionar novo site';
-$wb['parent_domain_id_txt'] = 'Site';
 $wb['add_new_subdomain_txt'] = 'Adicionar novo subdomínio';
-$wb['add_new_aliasdomain_txt'] = 'Adicionar novo apelido';
+$wb['add_new_aliasdomain_txt'] = 'Adicionar novo alias de domínio';
+$wb['parent_domain_id_txt'] = 'Site';
 $wb['domain_list_head_txt'] = 'Sites';
-$wb['aliasdomain_list_head_txt'] = 'Apelidos de domínios (vhost)';
+$wb['aliasdomain_list_head_txt'] = 'Alias de domínio (vhost)';
 $wb['subdomain_list_head_txt'] = 'Subdomínios (vhost)';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
index 8a0c3e6a1fae58ad51d757c5feb04a2cc1fae92d..390b7402e7059332b1a766442ebc26c1454e0f2c 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
@@ -1,10 +1,10 @@
 <?php
 $wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['web_folder_txt'] = 'Pasta web';
-$wb['web_folder_invalid_txt'] = 'A pasta web informada é inválida, por favor insira um nome diferente.';
-$wb['web_folder_unique_txt'] = 'A pasta web informada já existe, por favor insira um nome diferente.';
-$wb['backup_interval_txt'] = 'Intervalo de backup';
-$wb['backup_copies_txt'] = 'Limite de cópias do backup';
+$wb['web_folder_invalid_txt'] = 'A pasta é escolhida é inválida, por favor escolha outra.';
+$wb['web_folder_unique_txt'] = 'A pasta web escolhida está em uso, por favor escolha outra.';
+$wb['backup_interval_txt'] = 'Intervalo entre backups';
+$wb['backup_copies_txt'] = 'Número de cópias do backup';
 $wb['ssl_state_txt'] = 'Estado';
 $wb['ssl_locality_txt'] = 'Cidade';
 $wb['ssl_organisation_txt'] = 'Empresa';
@@ -13,65 +13,66 @@ $wb['ssl_country_txt'] = 'País';
 $wb['ssl_key_txt'] = 'Chave';
 $wb['ssl_request_txt'] = 'Requisição';
 $wb['ssl_cert_txt'] = 'Certificado';
-$wb['ssl_bundle_txt'] = 'Pacote';
+$wb['ssl_bundle_txt'] = 'Agrupar';
 $wb['ssl_action_txt'] = 'Ação';
 $wb['ssl_domain_txt'] = 'Domínio';
 $wb['server_id_txt'] = 'Servidor';
 $wb['domain_txt'] = 'Domínio';
-$wb['host_txt'] = 'Hostname';
-$wb['web_folder_error_regex'] = 'Pasta informada é inválida. Por favor, não insira barra - \"/\".';
+$wb['host_txt'] = 'Nome do host';
+$wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere barra(/).';
 $wb['type_txt'] = 'Tipo';
+$wb['parent_domain_id_txt'] = 'Site Pai';
 $wb['redirect_type_txt'] = 'Tipo de redirecionamento';
-$wb['redirect_path_txt'] = 'Caminho para redirecionamento';
+$wb['redirect_path_txt'] = 'Caminho para o redirecionamento';
 $wb['active_txt'] = 'Ativo';
 $wb['document_root_txt'] = 'Documentroot';
 $wb['system_user_txt'] = 'Usuário Linux';
 $wb['system_group_txt'] = 'Grupo Linux';
 $wb['ip_address_txt'] = 'Endereço IPv4';
 $wb['ipv6_address_txt'] = 'Endereço IPv6';
-$wb['vhost_type_txt'] = 'Tipo vhost';
-$wb['hd_quota_txt'] = 'Cota de Disco';
-$wb['traffic_quota_txt'] = 'Cota de Tráfego';
+$wb['vhost_type_txt'] = 'Tipo do vHost';
+$wb['hd_quota_txt'] = 'Cota de disco';
+$wb['traffic_quota_txt'] = 'Cota de tráfego';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
-$wb['errordocs_txt'] = 'Páginas de erro personalizadas (error-documents)';
+$wb['errordocs_txt'] = 'Proprietário do error-documents';
 $wb['subdomain_txt'] = 'Subdomínio automático';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
 $wb['limit_web_domain_txt'] = 'O limite de domínios de site para esta conta foi alcançado.';
-$wb['limit_web_aliasdomain_txt'] = 'O limite de apelidos de domínio para esta conta foi alcançado.';
-$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios site para esta conta foi alcançado.';
+$wb['limit_web_aliasdomain_txt'] = 'O limite de alias de domínios para esta conta foi alcançado.';
+$wb['limit_web_subdomain_txt'] = 'O limite de subdomínios de site para esta conta foi alcançado.';
 $wb['apache_directives_txt'] = 'Diretivas do apache';
-$wb['domain_error_empty'] = 'Domínio está em branco.';
-$wb['domain_error_unique'] = 'Já existe um site, apelido de domínio ou subdomínio para este domínio.';
-$wb['domain_error_regex'] = 'Nome do domínio é inválido.';
-$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios';
-$wb['hd_quota_error_empty'] = 'Valor da cota de disco é 0 ou está em branco.';
-$wb['traffic_quota_error_empty'] = 'Valor da cota de tráfego está em branco.';
-$wb['error_ssl_state_empty'] = 'Campo \'Estado\' está em branco.';
-$wb['error_ssl_locality_empty'] = 'Campo \'Cidade\' está em branco.';
-$wb['error_ssl_organisation_empty'] = 'Campo \'Empresa\' está em branco.';
-$wb['error_ssl_organisation_unit_empty'] = 'Campo \'Departamento\' está em branco.';
-$wb['error_ssl_country_empty'] = 'Campo \'País\' está em branco.';
-$wb['error_ssl_cert_empty'] = 'Campo \'Certificado\' está em branco.';
+$wb['domain_error_empty'] = 'O campo "Domínio" está em branco.';
+$wb['domain_error_unique'] = 'Já existe um site, subdomínio ou alias de domínio com este nome.';
+$wb['domain_error_regex'] = 'O campo "Domínio" é inválido.';
+$wb['domain_error_wildcard'] = 'Curingas não são permitidos para subdomínios.';
+$wb['hd_quota_error_empty'] = 'Cota do disco é 0 ou está em branco.';
+$wb['traffic_quota_error_empty'] = 'Cota de tráfego está em branco.';
+$wb['error_ssl_state_empty'] = 'O campo "Estado" está em branco.';
+$wb['error_ssl_locality_empty'] = 'O campo "Cidade" está em branco.';
+$wb['error_ssl_organisation_empty'] = 'O campo "Empresa" está em branco.';
+$wb['error_ssl_organisation_unit_empty'] = 'O campo "Departamento" está em branco.';
+$wb['error_ssl_country_empty'] = 'O campo "País" está em branco.';
+$wb['error_ssl_cert_empty'] = 'O campo "Certificado" está em branco.';
 $wb['client_group_id_txt'] = 'Cliente';
-$wb['stats_password_txt'] = 'Senha para estatísticas web';
+$wb['stats_password_txt'] = 'Configurar senha para estatísticas web';
 $wb['allow_override_txt'] = 'Diretiva Apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Cota de disco';
-$wb['ssl_state_error_regex'] = 'Campo \'Estado\' é inválido. Caracteres válidos são: \'0-9\' e \".,-_\".';
-$wb['ssl_locality_error_regex'] = 'Campo \'Cidade\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organisation_error_regex'] = 'Campo \'Empresa\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo \'Departamento\' é inválido. Caracteres válidos são: \'a-z\', \'0-9\' e \'.,-_\'.';
-$wb['ssl_country_error_regex'] = 'Campo \'País\' é inválido. Caracteres válidos são: \'A-Z\'.';
-$wb['limit_traffic_quota_free_txt'] = 'Cota de tráfego';
-$wb['redirect_error_regex'] = 'Caminho de redirecionamento é inválido. Exemplo de caminho válido: \"/teste/\" ou \"http://www.dominio.com.br/teste/\".';
-$wb['php_open_basedir_txt'] = 'Diretório open_basedir do PHP';
-$wb['traffic_quota_exceeded_txt'] = 'Cota de tráfego excedida';
+$wb['limit_web_quota_free_txt'] = 'Limite disponível da cota de disco';
+$wb['ssl_state_error_regex'] = 'O campo "Estado" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_locality_error_regex'] = 'O campo "Cidade" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organisation_error_regex'] = 'O campo "Empresa" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_organistaion_unit_error_regex'] = 'O campo "Departamento" é inválido. Caracteres válidos são: "a-z", "0-9", ".", "-", e "_".';
+$wb['ssl_country_error_regex'] = 'O campo "País" é inválido. Caracteres válidos são: "A-Z".';
+$wb['limit_traffic_quota_free_txt'] = 'Limite da cota de tráfego disponível';
+$wb['redirect_error_regex'] = 'Caminho de redirecionamento inválido. Redirecionamentos válidos são, por ex.: /teste/ ou http://www.dominio.com.br/teste/';
+$wb['php_open_basedir_txt'] = 'Diretório open_basedir do php';
+$wb['traffic_quota_exceeded_txt'] = 'O limite da cota de tráfego foi alcançado.';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Usuário para estatísticas web';
-$wb['stats_type_txt'] = 'Programa para estatísticas web';
+$wb['stats_user_txt'] = 'Usuário de estatísticas web';
+$wb['stats_type_txt'] = 'Sistema de estatísticas web';
 $wb['custom_php_ini_txt'] = 'Configurações personalizadas do php.ini';
 $wb['none_txt'] = 'Nenhum';
 $wb['disabled_txt'] = 'Desabilitado';
@@ -81,51 +82,51 @@ $wb['save_certificate_txt'] = 'Salvar certificado';
 $wb['create_certificate_txt'] = 'Adicionar certificado';
 $wb['delete_certificate_txt'] = 'Remover certificado';
 $wb['nginx_directives_txt'] = 'Diretivas do nginx';
-$wb['seo_redirect_txt'] = 'Redirecionamento SEO';
-$wb['non_www_to_www_txt'] = 'Diretivas Non-www -&gt; www';
-$wb['www_to_non_www_txt'] = 'Diretivas www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Usar soquete para o PHP-FPM';
-$wb['error_no_sni_txt'] = 'O SNI para SSL não está ativo neste servidor. Você só pode habilitar um certificado para cada endereço IP.';
+$wb['seo_redirect_txt'] = 'Diretivas SEO';
+$wb['non_www_to_www_txt'] = 'non-www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; non-www';
+$wb['php_fpm_use_socket_txt'] = 'Usar socket para php-fpm';
+$wb['error_no_sni_txt'] = 'SNI para SSL não está habilitado neste servidor. Somente poderá ser habilitado um certificado para cada endereço IP.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
-$wb['pm_max_children_txt'] = 'Diretiva PHP-FPM pm.max_children';
-$wb['pm_start_servers_txt'] = 'Diretiva PHP-FPM pm.start_servers';
-$wb['pm_min_spare_servers_txt'] = 'Diretiva PHP-FPM pm.min_spare_servers';
-$wb['pm_max_spare_servers_txt'] = 'Diretiva PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Valores permitidos para configurações do PHP-FPM pm devem obedecer os critérios: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'O valor do PHP-FPM pm.max_children deve ser um número positivo.';
-$wb['pm_start_servers_error_regex'] = 'O valor do PHP-FPM pm.start_servers deve ser um número positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.min_spare_servers deve ser um número positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'O valor do PHP-FPM pm.max_spare_servers deve ser um número positivo.';
-$wb['hd_quota_error_regex'] = 'Valor da cota de disco é inválido.';
-$wb['traffic_quota_error_regex'] = 'Valor da cota de tráfego é inválido.';
-$wb['fastcgi_php_version_txt'] = 'Versão do PHP';
-$wb['pm_txt'] = 'Gerenciador de Processos do PHP-FPM';
-$wb['pm_process_idle_timeout_txt'] = 'Diretiva PHP-FPM pm.process_idle_timeout';
-$wb['pm_max_requests_txt'] = 'Diretiva PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'O valor do PHP-FPM pm.process_idle_timeout deve ser um número positivo.';
-$wb['pm_max_requests_error_regex'] = 'O valor do PHP-FPM pm.max_requests deve ser um inteiro >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que você deve ter uma versão do PHP >= 5.3.9 para usar o gerenciador de processos sob demanda. Se você selecionar processos sob demanda usando uma versão antiga do PHP, o PHP não iniciará novamente!';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
-$wb['available_php_directive_snippets_txt'] = 'Diretivas de trechos de código do php disponíveis:';
-$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trechos de código do apache disponíveis:';
-$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trechos de código do nginx disponíveis:';
-$wb['proxy_directives_txt'] = 'Diretivas do Proxy';
+$wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
+$wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valores das configurações do php-fpm podem ser: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children deve ter um valor inteiro positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve ter um valor inteiro positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter um valor inteiro positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
+$wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
+$wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
+$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
+$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve ter um valor inteiro positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve ter um valor >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Por favor, observe que é necessário uma versão do php >= 5.3.9 para utilizar o gerenciador de processos por demanda. Se for selecionado por demanda com uma versão inferior do php, o mesmo não iniciará mais!';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['available_php_directive_snippets_txt'] = 'Diretivas de trecho de código do php disponíveis:';
+$wb['available_apache_directive_snippets_txt'] = 'Diretivas de trecho de código do apache disponíveis:';
+$wb['available_nginx_directive_snippets_txt'] = 'Diretivas de trecho de código do nginx disponíveis:';
+$wb['proxy_directives_txt'] = 'Diretivas do proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Diretivas de trechos de código do proxy disponíveis:';
-$wb['rewrite_rules_txt'] = 'Regras de Reescrita';
+$wb['rewrite_rules_txt'] = 'Reescrever regras';
 $wb['invalid_rewrite_rules_txt'] = 'Regras de reescrita inválidas';
-$wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas Permitidas:';
+$wb['allowed_rewrite_rule_directives_txt'] = 'Diretivas permitidas:';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 $wb['variables_txt'] = 'Variáveis';
 $wb['backup_excludes_txt'] = 'Diretórios Excluídos';
-$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: \"web/cache/*,web/backup\".)';
-$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos contém caracteres inválidos.';
-$wb['subdomain_error_empty'] = 'O campo \"Subdomínio\" está em branco ou contém caracteres inválidos.';
-$wb['http_port_txt'] = 'Porta HTTP';
-$wb['https_port_txt'] = 'Porta HTTPS';
-$wb['http_port_error_regex'] = 'Porta HTTP inválida.';
-$wb['https_port_error_regex'] = 'Porta HTTPS inválida.';
+$wb['backup_excludes_note_txt'] = '(Separar múltiplos diretórios por vírgulas. Exemplo: web/cache/*, web/backup)';
+$wb['backup_excludes_error_regex'] = 'Os diretórios excluídos possuem caracteres inválidos.';
+$wb['subdomain_error_empty'] = 'O subdomínio está em branco ou possui caracteres inválidos.';
+$wb['http_port_txt'] = 'Porta http';
+$wb['https_port_txt'] = 'Porta https';
+$wb['http_port_error_regex'] = 'Porta http inválida.';
+$wb['https_port_error_regex'] = 'Porta https inválida.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_webdav_user.lng b/interface/web/sites/lib/lang/br_webdav_user.lng
index b135d5e0faa3b5b318d73441c6ee07093600306e..485e3a77478c3aca99dff4cdb38dde32bfe2732a 100644
--- a/interface/web/sites/lib/lang/br_webdav_user.lng
+++ b/interface/web/sites/lib/lang/br_webdav_user.lng
@@ -7,15 +7,15 @@ $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['active_txt'] = 'Ativo';
 $wb['limit_webdav_user_txt'] = 'O limite de usuários webdav para esta conta foi alcançado.';
-$wb['username_error_empty'] = 'Usuário está em branco.';
+$wb['username_error_empty'] = 'O nome do usuário está em branco.';
 $wb['username_error_unique'] = 'O nome do usuário deve ser exclusivo.';
-$wb['username_error_regex'] = 'O nome do usuário contém caracteres não permitidos.';
-$wb['directory_error_empty'] = 'Diretório está em branco.';
+$wb['username_error_regex'] = 'O nome de usuário possui caracteres não permitidos.';
+$wb['directory_error_empty'] = 'O diretório está em branco.';
 $wb['parent_domain_id_error_empty'] = 'Nenhum site selecionado.';
-$wb['dir_dot_error'] = 'Não é permitido \"..\" no caminho.';
-$wb['dir_slashdot_error'] = 'Não é permitido \"./\" no caminho.';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['dir_dot_error'] = 'Não é permitido \'..\' no caminho.';
+$wb['dir_slashdot_error'] = 'Não é permitido \'./\' no caminho.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 ?>
diff --git a/interface/web/sites/lib/lang/ca_aps.lng b/interface/web/sites/lib/lang/ca_aps.lng
index 2c90556d661c4bf943ac505a9f6d75aaba2a4910..062d6ea58953a803c25c6bbea425826681c9e758 100644
--- a/interface/web/sites/lib/lang/ca_aps.lng
+++ b/interface/web/sites/lib/lang/ca_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'Mise à jour APS Packagelist terminée
 $wb['btn_install_txt'] = 'Installer';
 $wb['btn_cancel_txt'] = 'Annuler';
 $wb['limit_aps_txt'] = 'Le nombre max d\'instances APS pour votre compte a été atteint.';
+$wb['generate_password_txt'] = 'Générer un mot de passe';
+$wb['repeat_password_txt'] = 'Vérification du mot de passe';
+$wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
+$wb['password_match_txt'] = 'Les mots de passe correspondent.';
+$wb['password_strength_txt'] = 'Force du mot de passe';
 ?>
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index c7cb4ac8490f8fe70ae5d89c9e24b6a528b1a45b..aae2f46339e8c6a275ce8531c5878d7255c12a89 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -82,6 +82,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -151,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_aps.lng b/interface/web/sites/lib/lang/cz_aps.lng
index 5ec94945d13fe951dcc94719144eb18e7b71d0fd..adf6ccf58eaecf0647bf841f5db7053d16c9bcba 100644
--- a/interface/web/sites/lib/lang/cz_aps.lng
+++ b/interface/web/sites/lib/lang/cz_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS aktualizace seznamu balíčků byl
 $wb['btn_install_txt'] = 'Instalovat';
 $wb['btn_cancel_txt'] = 'Zrušit';
 $wb['limit_aps_txt'] = 'Max. počet APS  instancí u vašeho účtu je dosaženo.';
+$wb['generate_password_txt'] = 'Generovat heslo';
+$wb['repeat_password_txt'] = 'Opakujte heslo';
+$wb['password_mismatch_txt'] = 'Hesla se neshodují.';
+$wb['password_match_txt'] = 'Hesla se shodují.';
+$wb['password_strength_txt'] = 'Bezpečnost hesla';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_aps_instances_list.lng b/interface/web/sites/lib/lang/cz_aps_instances_list.lng
index 8d712878d71f47ae1cda12f319e0765968ddd45a..db4494af0259af245294439ae9800b69b5d281d3 100644
--- a/interface/web/sites/lib/lang/cz_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/cz_aps_instances_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'Nainstalované balíčky';
 $wb['name_txt'] = 'Jméno';
 $wb['version_txt'] = 'Verze';
 $wb['customer_txt'] = 'Klient';
-$wb['status_txt'] = 'Status';
+$wb['status_txt'] = 'Stav';
 $wb['install_location_txt'] = 'Umístění instalace';
 $wb['pkg_delete_confirmation'] = 'Opravdu chcete smazat tuto instalaci ?';
 $wb['filter_txt'] = 'Hledat';
diff --git a/interface/web/sites/lib/lang/cz_web_aliasdomain.lng b/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
index 57b920156d5b59864eb014e7bf7ca4f39a142438..0f8d3e5dec8edfb1a86dd2908a36ec9a7541b04e 100644
--- a/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_txt'] = 'PHP Verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_backup_list.lng b/interface/web/sites/lib/lang/cz_web_backup_list.lng
index 9674e6197a2f1cb4256df548a622c78c78e4a660..d30e41d961b094dfdfdadfd6f0fa0399c2364da5 100644
--- a/interface/web/sites/lib/lang/cz_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/cz_web_backup_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Stávající zálohy';
+$wb['list_head_txt'] = 'Dostupné zálohy';
 $wb['date_txt'] = 'Datum';
 $wb['backup_type_txt'] = 'Verze';
 $wb['filename_txt'] = 'Záloha souborů';
@@ -16,6 +16,6 @@ $wb['filesize_txt'] = 'Velikost souboru';
 $wb['delete_backup_txt'] = 'Smazat zálohu';
 $wb['delete_info_txt'] = 'Bylo zahájeno odstranění zálohy. Tato akce může trvat několik minut než bude dokončena.';
 $wb['delete_confirm_txt'] = 'Opravdu chcete smazat tuto zálohu ?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
+$wb['delete_pending_txt'] = 'Již existuje čekající úloha pro odstranění zálohy.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_childdomain.lng b/interface/web/sites/lib/lang/cz_web_childdomain.lng
index 5a22de61dee5a526b2455c2029f3a204e531bd70..b159976b29e044529665f4ceeabdce18fc7f3b0b 100644
--- a/interface/web/sites/lib/lang/cz_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['fastcgi_php_version_txt'] = 'PHP Verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index 6353f713f02bddfcc1c0f0ecc2be433755227e89..deaa3269c404119e9adf80cdb112d3c8f5242cdf 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -83,6 +83,7 @@ $wb['seo_redirect_txt'] = 'SEO přesměrování';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -129,13 +130,13 @@ $wb['variables_txt'] = 'Proměnné';
 $wb['added_by_txt'] = 'Kdo vytvořil účet';
 $wb['added_date_txt'] = 'Datum vytvoření účtu';
 $wb['backup_excludes_txt'] = 'Vyloučené adresáře';
-$wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)';
-$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
-$wb['server_chosen_not_ok'] = 'The selected server is not allowed for this account.';
-$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
+$wb['backup_excludes_note_txt'] = '(Oddělte více adresářů čárkami. Příklad: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'Vyloučené adresáře obsahují neplatné znaky.';
+$wb['server_chosen_not_ok'] = 'Vybraný server není pro tento účet povolen.';
+$wb['subdomain_error_empty'] = 'Pole subdomény je prázdné nebo obsahuje neplatné znaky.';
 $wb['btn_save_txt'] = 'Uložit';
 $wb['btn_cancel_txt'] = 'Zrušit';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
+$wb['enable_spdy_txt'] = 'Povolit SPDY / HTTP2';
 $wb['load_client_data_txt'] = 'Nahrát údaje z podrobností registrovaného klienta';
 $wb['load_my_data_txt'] = 'Load my contact details';
 $wb['reset_client_data_txt'] = 'Obnovit údaje (resetovat)';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
index 2b6f3c77d25c1e644a6de5bef18192d472195ece..268368c139b6192ddf3c9dcc1b7580d4cad86572 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
@@ -123,7 +123,7 @@ $wb['variables_txt'] = 'Proměnné';
 $wb['backup_excludes_txt'] = 'Vyloučené adresáře';
 $wb['backup_excludes_note_txt'] = '(Oddělte více adresářů čárkami. Vzor: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Vyloučené adresáře obsahují neplatné znaky.';
-$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
+$wb['subdomain_error_empty'] = 'Pole subdomény je prázdné nebo obsahuje neplatné znaky.';
 $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
diff --git a/interface/web/sites/lib/lang/de_aps.lng b/interface/web/sites/lib/lang/de_aps.lng
index aab6f4edf7453af1f9f2d93ff5c62aed1eefb444..6c9ff30eed7889faaf33eea6dcaacc1610fc9ece 100644
--- a/interface/web/sites/lib/lang/de_aps.lng
+++ b/interface/web/sites/lib/lang/de_aps.lng
@@ -55,4 +55,9 @@ $wb['installation_success_txt'] = 'Installiert';
 $wb['installation_remove_txt'] = 'Deinstallation vorgemerkt';
 $wb['packagelist_update_finished_txt'] = 'APS Paketlistenupdate beendet.';
 $wb['limit_aps_txt'] = 'Die maximale Anzahl an APS-Instanzen für Ihr Konto wurde erreicht.';
+$wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
+$wb['password_strength_txt'] = 'Passwortkomplexität';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index bf29fb953fe0e2ddb0845c642b75749bf8e65de9..d95b6d47e48ba54ff5d0a55d2cba7cb4c9ccf11b 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -82,6 +82,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Nicht-www -> www';
 $wb['www_to_non_www_txt'] = 'www -> Nicht-www';
 $wb['php_fpm_use_socket_txt'] = 'Benutze Socket für PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['ipv6_address_txt'] = 'IPv6 Adresse';
 $wb['error_no_sni_txt'] = 'SNI für SSL ist auf diesem Server nicht aktiviert. Sie können daher nur ein SSL Zertifikat pro IP Adresse eintragen.';
 $wb['python_txt'] = 'Python';
@@ -151,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Log-Dateien Aufbewahrungszeit';
 $wb['log_retention_error_regex'] = 'Aufbewahrungszeit in Tagen (Erlaubte Werte: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota kann nicht 0 sein.';
 ?>
diff --git a/interface/web/sites/lib/lang/dk_aps.lng b/interface/web/sites/lib/lang/dk_aps.lng
index 83508753545e8e6d4ecee89b3a96799cd69eab86..ca006e2eb27fab5e3e87724050a35b190e36b839 100644
--- a/interface/web/sites/lib/lang/dk_aps.lng
+++ b/interface/web/sites/lib/lang/dk_aps.lng
@@ -55,4 +55,9 @@ $wb['installation_success_txt'] = 'Installeret';
 $wb['installation_remove_txt'] = 'Fjernelse planlagt';
 $wb['packagelist_update_finished_txt'] = 'APS Pakke Liste opdatering er færdig.';
 $wb['limit_aps_txt'] = 'Max. antal af APS forekomster for din konto er nået.';
+$wb['generate_password_txt'] = 'Generer Adgangskode';
+$wb['repeat_password_txt'] = 'Gentage Adgangskode';
+$wb['password_mismatch_txt'] = 'Adgangskoderne stemmer ikke overens.';
+$wb['password_match_txt'] = 'Adgangskoderne stemmer overens.';
+$wb['password_strength_txt'] = 'Adgangskode styrke';
 ?>
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index c7cb4ac8490f8fe70ae5d89c9e24b6a528b1a45b..aae2f46339e8c6a275ce8531c5878d7255c12a89 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -82,6 +82,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -151,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/el_aps.lng b/interface/web/sites/lib/lang/el_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..0209737f61976aba4dedf491b315a8cec9d48d66 100644
--- a/interface/web/sites/lib/lang/el_aps.lng
+++ b/interface/web/sites/lib/lang/el_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Δύναμη συνθηματικού';
 ?>
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index 7de00581c7a65b5bd4acc58f8d1bea3ec639dc5d..0ea2c2a7967226c037300d80b41eb8be0aec0b0c 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -80,6 +80,7 @@ $wb['seo_redirect_txt'] = 'Ανακατεύθυνση SEO';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/en_aps.lng b/interface/web/sites/lib/lang/en_aps.lng
index bd33c1884ae848cf3b466433810528053a34e323..04f6fb798d039df71999a0456aa8556cc84b6f3f 100644
--- a/interface/web/sites/lib/lang/en_aps.lng
+++ b/interface/web/sites/lib/lang/en_aps.lng
@@ -28,7 +28,7 @@ $wb['installation_txt'] = 'Installation';
 $wb['install_location_txt'] = 'Install location';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
-$wb['acceptance_txt'] = 'Acceptance';
+$wb['acceptance_txt'] = 'I accept the license';
 $wb['acceptance_text_txt'] = 'Yes, i\'ve read the license and agree.';
 $wb['install_language_txt'] = 'Interface language';
 $wb['new_database_password_txt'] = 'New database password';
@@ -55,4 +55,9 @@ $wb['installation_success_txt'] = 'Installed';
 $wb['installation_remove_txt'] = 'Removal planned';
 $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb["limit_aps_txt"] = 'The max. number of APS instances for your account is reached.';
+$wb["generate_password_txt"] = 'Generate Password';
+$wb["repeat_password_txt"] = 'Repeat Password';
+$wb["password_mismatch_txt"] = 'The passwords do not match.';
+$wb["password_match_txt"] = 'The passwords do match.';
+$wb["password_strength_txt"] = "Password strength";
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index b508e5783694e45719768daa959363d1ffbe6f40..ae546e1c4d416668e32b112d980df7022d38cfab 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -82,6 +82,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -156,4 +157,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/es_aps.lng b/interface/web/sites/lib/lang/es_aps.lng
index 746631008063f4d0eb07d75fb9ced5fe035aea30..3780b32edd64f99d83f62f6f92f104fc8035c478 100755
--- a/interface/web/sites/lib/lang/es_aps.lng
+++ b/interface/web/sites/lib/lang/es_aps.lng
@@ -55,4 +55,9 @@ $wb['supported_languages_txt'] = 'Idiomas soportados';
 $wb['supported_php_versions_txt'] = 'Versiones de PHP soportadas';
 $wb['version_txt'] = 'Versión';
 $wb['yes_txt'] = 'Sí';
+$wb['generate_password_txt'] = 'Generar contraseña';
+$wb['repeat_password_txt'] = 'Repetir contraseña';
+$wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
+$wb['password_match_txt'] = 'Las contraseñas coinciden.';
+$wb['password_strength_txt'] = 'Fortaleza de la contraseña';
 ?>
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index 398aef500f5b4f2db224d369efeed874438f8fd3..f98c02db15e26d1414e134b1e4aa4a69861686e5 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -78,6 +78,7 @@ $wb['seo_redirect_txt'] = 'Redirección SEO';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Usar Socket para PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI para SSL no está activado en este servidor. Sólo es posible activar un certificado SSL en cada dirección IP.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_aps.lng b/interface/web/sites/lib/lang/fi_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..d78701f272b16de81f457eb23b4b4998c41fde24 100644
--- a/interface/web/sites/lib/lang/fi_aps.lng
+++ b/interface/web/sites/lib/lang/fi_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Salasanan vahvuus';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index 94ba05bdd190650814a5d3e345c0acc92b8cc4f4..c7c4a144322ef29b110f7c4a3c4ccbdbec8cce8e 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_aps.lng b/interface/web/sites/lib/lang/fr_aps.lng
index 10b6edbcfd77503df78033503b55515000b04e85..6beef9939f77b03faaf2ebfbc46386fd4f0b97e4 100644
--- a/interface/web/sites/lib/lang/fr_aps.lng
+++ b/interface/web/sites/lib/lang/fr_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'Mise à jour APS Packagelist terminée
 $wb['btn_install_txt'] = 'Installer';
 $wb['btn_cancel_txt'] = 'Annuler';
 $wb['limit_aps_txt'] = 'Le nombre max d’instances APS pour votre compte a été atteint.';
+$wb['generate_password_txt'] = 'Générer un mot de passe';
+$wb['repeat_password_txt'] = 'Vérification du mot de passe';
+$wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
+$wb['password_match_txt'] = 'Les mots de passe correspondent.';
+$wb['password_strength_txt'] = 'Force du mot de passe';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 97a0dd0ac06f1a530bc9455b1942fa126dac065f..931c00a53336a2bfc6f08e92b734684162623486 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'Redirection SEO';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Utiliser Socket pour PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI pour SSL n\'est pas activé sur ce serveur. Vous ne pouvez activer qu\'un seul certificat SSL par adresse IP.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_aps.lng b/interface/web/sites/lib/lang/hr_aps.lng
index 8b2fa6450ebb6f79a414051a66d30397beb333fd..79d31cf7faab2004aac4e83518100cfe44fa4731 100644
--- a/interface/web/sites/lib/lang/hr_aps.lng
+++ b/interface/web/sites/lib/lang/hr_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'Nadogradnja APS liste paketa je završ
 $wb['btn_install_txt'] = 'Instaliraj';
 $wb['btn_cancel_txt'] = 'Odustani';
 $wb['limit_aps_txt'] = 'Iskoristili ste maksimalan broj APS instanci za vaš račun.';
+$wb['generate_password_txt'] = 'Generiraj Å¡ifru';
+$wb['repeat_password_txt'] = 'Ponovi Å¡ifru';
+$wb['password_mismatch_txt'] = 'Šifre nisu identične.';
+$wb['password_match_txt'] = 'Šifre su identične.';
+$wb['password_strength_txt'] = 'Jačina šifre';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index 54d5e1f3bb9ae2a1deeb3943a5e11e8ea34fb7c3..7842d770b4511077bd90176f75f7cfda7c2571fe 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO redirekcija';
 $wb['non_www_to_www_txt'] = 'Non-www -> www';
 $wb['www_to_non_www_txt'] = 'www -> non-www';
 $wb['php_fpm_use_socket_txt'] = 'Koristi socket za PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI za SSL nije aktiviran na ovom serveru. Možete omogućiti samo jedan SSL certifikat na svakoj IP adresi.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_aps.lng b/interface/web/sites/lib/lang/hu_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..88708732df9a8ab2346f1b791da96aca0c8cc555 100644
--- a/interface/web/sites/lib/lang/hu_aps.lng
+++ b/interface/web/sites/lib/lang/hu_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Jelszó erőssége';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index 13e1c54b530a46c70314573c7767d59f0cf445ae..a40a4b62a5d7ef6604c373258475489a05302275 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/id_aps.lng b/interface/web/sites/lib/lang/id_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..b8c9af215248136d4a3f424c5c1cbadfa2f4d432 100644
--- a/interface/web/sites/lib/lang/id_aps.lng
+++ b/interface/web/sites/lib/lang/id_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Kekuatan Sandi';
 ?>
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 10b32ea1cc0edae509b912db3bb8155efeec51db..617e7fe769b65badc85fef78f0c79d99a1a36fc2 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/it_aps.lng b/interface/web/sites/lib/lang/it_aps.lng
index ced17becd36d7a36cddfb624c23f603fbcc951a2..0a6365f98f2b1eee54e80e88d6b59223347ca661 100644
--- a/interface/web/sites/lib/lang/it_aps.lng
+++ b/interface/web/sites/lib/lang/it_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'Elenco aggiornamenti APS terminato.';
 $wb['btn_install_txt'] = 'Installa';
 $wb['btn_cancel_txt'] = 'Annulla';
 $wb['limit_aps_txt'] = 'Nmero massimo di istanza APS raggiunto per il tuo account.';
+$wb['generate_password_txt'] = 'Genera Password';
+$wb['repeat_password_txt'] = 'Ripeti Password';
+$wb['password_mismatch_txt'] = 'Le password non coincidono.';
+$wb['password_match_txt'] = 'Le password coincidono.';
+$wb['password_strength_txt'] = 'Livello sicurezza Password';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index 831b29c5d04a9945cee5a912625f003e143ec03e..9fbca551a3178dfa5b54d78f30b0270d5f521d33 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -80,6 +80,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_aps.lng b/interface/web/sites/lib/lang/ja_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..dc6b22edf7c207a0fd0e7b637b4fc427953bb84e 100644
--- a/interface/web/sites/lib/lang/ja_aps.lng
+++ b/interface/web/sites/lib/lang/ja_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'パスワードの強度';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index 8cf49718602ab7380c5c57f3fb59935df758e65f..0efd971187ddb35d2df92bc14afb18025cd3bfe8 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_aps.lng b/interface/web/sites/lib/lang/nl_aps.lng
index 9d51f7457b39842d0b73e2eb3c11a1354bcf370c..c0adacee99da83dd125a33b1a4bf347fd2cd81be 100644
--- a/interface/web/sites/lib/lang/nl_aps.lng
+++ b/interface/web/sites/lib/lang/nl_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Installeren';
 $wb['btn_cancel_txt'] = 'Annuleren';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Wachtwoord sterkte';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index 1952769faf9ba2bd8bed8814030a69ef421fb586..dd007d549f12dd71f78723391d7192b01c3540f8 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_aps.lng b/interface/web/sites/lib/lang/pl_aps.lng
index 1a2ffad688a4b1f36d0216a7e38326a7b0b0c35f..c17bbca53217981bc1f7c29dec6d230b12ef7744 100644
--- a/interface/web/sites/lib/lang/pl_aps.lng
+++ b/interface/web/sites/lib/lang/pl_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'Aktualizacja listy pakietów APS zako
 $wb['btn_install_txt'] = 'Instaluj';
 $wb['btn_cancel_txt'] = 'Anuluj';
 $wb['limit_aps_txt'] = 'Maksymalna liczba instancji APS dla Twojego konta została wyczerpana.';
+$wb['generate_password_txt'] = 'Generuj hasło';
+$wb['repeat_password_txt'] = 'Powtórz hasło';
+$wb['password_mismatch_txt'] = 'Hasła nie pasują do siebie';
+$wb['password_match_txt'] = 'Hasła pasują';
+$wb['password_strength_txt'] = 'Siła hasła';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index f3aa864f69257a51952881dfa15d16c99558259f..8a426b0a1a512d90107376f315b61f44ff158581 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'Przekierowanie SEO';
 $wb['non_www_to_www_txt'] = 'bez www -> www';
 $wb['www_to_non_www_txt'] = 'www -> bez www';
 $wb['php_fpm_use_socket_txt'] = 'Użyj gniazda dla PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI dla SSL nie jest aktywowane na tym serwerze. Możesz utworzyć tylko jeden certyfikat SSL dla jednego adresu IP.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_aps.lng b/interface/web/sites/lib/lang/pt_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..c17ef0091483a3368e159288993791cbc02874ed 100644
--- a/interface/web/sites/lib/lang/pt_aps.lng
+++ b/interface/web/sites/lib/lang/pt_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Dificuldade da senha';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index dcbdf40864dbe4ccda4fc648362f74b7db89c749..170f2feb044376d3b326067ca2cebad51e13d8d4 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_aps.lng b/interface/web/sites/lib/lang/ro_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..881c146a4dd1a58e7bd50cfc34f7ea21e0073bb4 100644
--- a/interface/web/sites/lib/lang/ro_aps.lng
+++ b/interface/web/sites/lib/lang/ro_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Password strength';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index d93152e24e69034a9a9ad5ebc9350ed4076c5517..046c2c71a6ee107f1bc473ae511dd27eed51d193 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -80,6 +80,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/ru.lng b/interface/web/sites/lib/lang/ru.lng
index 6316c21d17d09dd8a5a36dc89a5c0368c5ae5504..dbf2926043e215f1daf8f7085ed1b775a4c9fe0e 100644
--- a/interface/web/sites/lib/lang/ru.lng
+++ b/interface/web/sites/lib/lang/ru.lng
@@ -31,5 +31,5 @@ $wb['Available packages'] = 'Доступные пакеты';
 $wb['Installed packages'] = 'Установленные пакеты';
 $wb['Update Packagelist'] = 'Обновить список пакетов';
 $wb['Subdomain (Vhost)'] = 'Поддомен (Vhost)';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_aps.lng b/interface/web/sites/lib/lang/ru_aps.lng
index f403143e5952f9cd716c6ee66c9a03491d9900c6..d2225358c1f4c73aef5f1a4c62b69331c0b2cc27 100644
--- a/interface/web/sites/lib/lang/ru_aps.lng
+++ b/interface/web/sites/lib/lang/ru_aps.lng
@@ -38,14 +38,14 @@ $wb['error_inv_main_location'] = 'Вы  указали некорректную
 $wb['error_license_agreement'] = 'Для продолжения нужно принять лицензионное соглашение.';
 $wb['error_no_database_pw'] = 'Вы предоставили не правильный пароль базы данных.';
 $wb['error_short_database_pw'] = 'Пожалуйста, выберите более длинный пароль базы данных.';
-$wb['error_no_value_for'] = 'Поле \"%s\" не может быть пустым.';
-$wb['error_short_value_for'] = 'Поле \"%s\" требует более длинного входного значения.';
-$wb['error_long_value_for'] = 'Поле \"%s\"требует более короткого входного значения.';
-$wb['error_inv_value_for'] = 'Вы ввели неверное значение для поля \"%s\".';
-$wb['error_inv_email_for'] = 'Вы ввели некорректный адрес электронной почты для поля \"%s\".';
-$wb['error_inv_domain_for'] = 'Вы ввели некорректный домен для поля \"%s\".';
-$wb['error_inv_integer_for'] = 'Вы ввели некорректное число для поля \"%s\".';
-$wb['error_inv_float_for'] = 'Вы ввели некорректное число с плавающей точкой для поля \"%s\".';
+$wb['error_no_value_for'] = 'Поле \\"%s\\" не может быть пустым.';
+$wb['error_short_value_for'] = 'Поле \\"%s\\" требует более длинного входного значения.';
+$wb['error_long_value_for'] = 'Поле \\"%s\\"требует более короткого входного значения.';
+$wb['error_inv_value_for'] = 'Вы ввели неверное значение для поля \\"%s\\".';
+$wb['error_inv_email_for'] = 'Вы ввели некорректный адрес электронной почты для поля \\"%s\\".';
+$wb['error_inv_domain_for'] = 'Вы ввели некорректный домен для поля \\"%s\\".';
+$wb['error_inv_integer_for'] = 'Вы ввели некорректное число для поля \\"%s\\".';
+$wb['error_inv_float_for'] = 'Вы ввели некорректное число с плавающей точкой для поля \\"%s\\".';
 $wb['error_used_location'] = 'Путь установки уже содержит установочный пакет.';
 $wb['installation_task_txt'] = 'Запланирована установка';
 $wb['installation_error_txt'] = 'Ошибка установки';
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'Обновление списка па
 $wb['btn_install_txt'] = 'Установка';
 $wb['btn_cancel_txt'] = 'Отменить';
 $wb['limit_aps_txt'] = 'Макс. количество экземпляров APS достигнуто.';
+$wb['generate_password_txt'] = 'Создать пароль';
+$wb['repeat_password_txt'] = 'Повторить пароль';
+$wb['password_mismatch_txt'] = 'Пароли не совпадают.';
+$wb['password_match_txt'] = 'Эти пароли совпадают.';
+$wb['password_strength_txt'] = 'Стойкость пароля';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_database.lng b/interface/web/sites/lib/lang/ru_database.lng
index b931b715f27debbdf902487a9fd3e4684ae6230a..0f5eaf31807d666eff99aa8e32d71d585bcfbcc1 100644
--- a/interface/web/sites/lib/lang/ru_database.lng
+++ b/interface/web/sites/lib/lang/ru_database.lng
@@ -13,7 +13,7 @@ $wb['database_name_error_unique'] = 'Имя базы данных уже сущ
 $wb['database_name_error_regex'] = 'Неверное имя базы данных. Имя базы данных может содержать только следующие символы: a-z, A-Z, 0-9 и нижний пробел _. Длина: 2 - 64 символа.';
 $wb['database_user_error_empty'] = 'Логин базы данных пустой';
 $wb['database_user_error_unique'] = 'Такой пользователь базы данных уже существует. Что бы получить уникальное имя, например, сложите название сайта и ваше имя.';
-$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \"_\". Длина: 2 - 16 символов.';
+$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \\"_\\". Длина: 2 - 16 символов.';
 $wb['limit_database_txt'] = 'Достигнуто максимальное количество БД.';
 $wb['database_name_change_txt'] = 'Имя базы данных не может быть изменено.';
 $wb['database_charset_change_txt'] = 'Кодировка базы данных не может быть изменена';
diff --git a/interface/web/sites/lib/lang/ru_database_user.lng b/interface/web/sites/lib/lang/ru_database_user.lng
index df927317ca18c23dbe2fd0b7540aa981255ec1ef..7de99a11dc9f84088cd9203dd0bdaa331114ab13 100644
--- a/interface/web/sites/lib/lang/ru_database_user.lng
+++ b/interface/web/sites/lib/lang/ru_database_user.lng
@@ -6,7 +6,7 @@ $wb['client_txt'] = 'Клиент';
 $wb['active_txt'] = 'Активно';
 $wb['database_user_error_empty'] = 'Логин базы данных пустой';
 $wb['database_user_error_unique'] = 'Такой пользователь базы данных уже существует. Что бы получить уникальное имя, например, сложите название сайта и ваше имя.';
-$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \"_\". Длина: 2 - 16 символов.';
+$wb['database_user_error_regex'] = 'Некорректный логин для базы данных. Логин может содержать только следующие символы: a-z, A-Z, 0-9 и \\"_\\". Длина: 2 - 16 символов.';
 $wb['database_user_error_len'] = 'Логин для базы данных - {user} - cлишком длинный. Максимальная длина логина - 16 символов';
 $wb['btn_save_txt'] = 'Сохранить';
 $wb['btn_cancel_txt'] = 'Отменить';
diff --git a/interface/web/sites/lib/lang/ru_web_childdomain.lng b/interface/web/sites/lib/lang/ru_web_childdomain.lng
index 49905e77ea1846b9bf0fc6348ad89f2a919193fa..af71669a474529a1078bb9504eb062bf8e6d2532 100644
--- a/interface/web/sites/lib/lang/ru_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_childdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Нет флага';
 $wb['domain_error_wildcard'] = 'Wildcard поддомены не допускаются.';
 $wb['proxy_directives_txt'] = 'Директивы прокси';
 $wb['available_proxy_directive_snippets_txt'] = 'Доступные заготовки директив Proxy:';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 $wb['backup_interval_txt'] = 'Интервал резервного копирования';
 $wb['backup_copies_txt'] = 'Количество резервных копий';
 $wb['ssl_key_txt'] = 'SSL-ключ';
diff --git a/interface/web/sites/lib/lang/ru_web_subdomain.lng b/interface/web/sites/lib/lang/ru_web_subdomain.lng
index 46203a18155ebe083b6c0f961c2c397811875aac..376c789430848c851e7f886d68af8295a941b754 100644
--- a/interface/web/sites/lib/lang/ru_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_subdomain.lng
@@ -42,7 +42,7 @@ $wb['no_flag_txt'] = 'Нет флага';
 $wb['domain_error_wildcard'] = 'Wildcard-поддомены не допускаются.';
 $wb['proxy_directives_txt'] = 'Директивы прокси';
 $wb['available_proxy_directive_snippets_txt'] = 'Доступные заготовки директив Proxy:';
-$wb['error_proxy_requires_url'] = 'Тип редиректа \"proxy\" требует URL в качестве пути перенаправления.';
+$wb['error_proxy_requires_url'] = 'Тип редиректа \\"proxy\\" требует URL в качестве пути перенаправления.';
 $wb['http_port_txt'] = 'Порт HTTP';
 $wb['https_port_txt'] = 'Порт HTTPS';
 $wb['http_port_error_regex'] = 'Некорректный порт HTTP.';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index f525fe2025aa23749ca468d76d387c5c665365fc..e87af3b65474f0faeba733f976c701da373756f1 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO редирект';
 $wb['non_www_to_www_txt'] = 'Без-www -> www';
 $wb['www_to_non_www_txt'] = 'www -> без-www';
 $wb['php_fpm_use_socket_txt'] = 'Использовать сокет для PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI для SSL не активирован на этом сервере. Вы можете включить только один SSL сертификат на каждом IP-адресе.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Включить PageSpeed';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/se_aps.lng b/interface/web/sites/lib/lang/se_aps.lng
index 1a21cd0fd26fab7820b314756c32acabd8075161..3b32095d623f4fb0cde80a1ddc437ae11bda5e7b 100644
--- a/interface/web/sites/lib/lang/se_aps.lng
+++ b/interface/web/sites/lib/lang/se_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Installera';
 $wb['btn_cancel_txt'] = 'Avbryt';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Password strength';
 ?>
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index d8b671daea9e7e86598d5bc8fdde97536389ec73..1a2572b950cde238795bb2e3d7c6fe9e31e281ff 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -80,6 +80,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_aps.lng b/interface/web/sites/lib/lang/sk_aps.lng
index 29fb7b6a40de911e18acadb73479b1da703cbfe9..d6e6c7f4ca735a6ca76ee12d970ffaebbb16f8ab 100644
--- a/interface/web/sites/lib/lang/sk_aps.lng
+++ b/interface/web/sites/lib/lang/sk_aps.lng
@@ -55,4 +55,9 @@ $wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
 $wb['btn_install_txt'] = 'Install';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['password_strength_txt'] = 'Pevnosť hesla';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index cdb1c2627fd413fb69b051b5628c7b44a6ed0f56..17e60da6e6692092e617c97f74216029acd7ec24 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -79,6 +79,7 @@ $wb['seo_redirect_txt'] = 'SEO Redirect';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
 $wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
 $wb['python_txt'] = 'Python';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
@@ -151,4 +152,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr.lng b/interface/web/sites/lib/lang/tr.lng
index d0570f6c12f2935829ef35f55392585be179315a..b5e7f42e2e4a4a9784178482b28576dbbca7d6ce 100644
--- a/interface/web/sites/lib/lang/tr.lng
+++ b/interface/web/sites/lib/lang/tr.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['Websites'] = 'Web Sitesi';
+$wb['Websites'] = 'Web Siteleri';
 $wb['Website'] = 'Web Sitesi';
-$wb['Subdomain'] = 'Alt Alan Adı';
-$wb['Aliasdomain'] = 'Başka Alan Adı';
+$wb['Subdomain'] = 'Alt Etki Alanı';
+$wb['Aliasdomain'] = 'Takma Etki Alanı';
 $wb['Database'] = 'Veritabanı';
 $wb['Database User'] = 'Veritabanı Kullanıcıları';
 $wb['Web Access'] = 'Web EriÅŸimi';
@@ -22,7 +22,7 @@ $wb['Shell'] = 'Kabuk';
 $wb['Webdav'] = 'WebDAV';
 $wb['FTP'] = 'FTP';
 $wb['Options'] = 'Ayarlar';
-$wb['Domain'] = 'Alan Adı';
+$wb['Domain'] = 'Etki Alanı';
 $wb['Redirect'] = 'Yönlendirme';
 $wb['SSL'] = 'SSL';
 $wb['Sites'] = 'Siteler';
@@ -30,6 +30,6 @@ $wb['APS Installer'] = 'APS Yükleyici';
 $wb['Available packages'] = 'Kullanılabilecek Paketler';
 $wb['Installed packages'] = 'Yüklü Paketler';
 $wb['Update Packagelist'] = 'Güncelleme Paketi Listesi';
-$wb['Subdomain (Vhost)'] = 'Alt alan adı (SSunucu)';
-$wb['error_proxy_requires_url'] = '\\"Vekil Sunucu\\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
+$wb['Subdomain (Vhost)'] = 'Alt Etki Alanı (Sanal Sunucu)';
+$wb['error_proxy_requires_url'] = '"Vekil Sunucu" yönlendirme türü için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_aps.lng b/interface/web/sites/lib/lang/tr_aps.lng
index 534ee020a7642a63eea394f36c60c4dd63783f0d..c876629a741166798408c2ae7d750f728c960d93 100644
--- a/interface/web/sites/lib/lang/tr_aps.lng
+++ b/interface/web/sites/lib/lang/tr_aps.lng
@@ -34,20 +34,20 @@ $wb['install_language_txt'] = 'Arayüz dili';
 $wb['new_database_password_txt'] = 'Yeni veritabanı parolası';
 $wb['basic_settings_txt'] = 'Temel ayarlar';
 $wb['package_settings_txt'] = 'Paket ayarları';
-$wb['error_main_domain'] = 'Yükleme yolundaki alan adı geçersiz.';
+$wb['error_main_domain'] = 'Yükleme yolundaki etki alanı geçersiz.';
 $wb['error_no_main_location'] = 'Yazdığınız yükleme yolu geçersiz.';
 $wb['error_inv_main_location'] = 'Yazdığınız yükleme konumunu klasörü geçersiz.';
 $wb['error_license_agreement'] = 'Devam etmek için lisans anlaşmasını onaylamalısınız.';
 $wb['error_no_database_pw'] = 'Yazdığınız veritabanı parolası geçersiz.';
 $wb['error_short_database_pw'] = 'Lütfen daha uzun bir veritabanı parolası yazın.';
-$wb['error_no_value_for'] = '\\"%s\\" alanı boş olamaz.';
-$wb['error_short_value_for'] = '\\"%s\\" alanına daha uzun bir değer yazılmalıdır.';
-$wb['error_long_value_for'] = '\\"%s\\" alanına daha kısa bir değer yazılmalıdır.';
-$wb['error_inv_value_for'] = '\\"%s\\" alanına yazılan değer geçersiz.';
-$wb['error_inv_email_for'] = '\\"%s\\" alanına yazılan e-posta adresi geçersiz.';
-$wb['error_inv_domain_for'] = '\\"%s\\" alanına yazılan alan adı geçersiz.';
-$wb['error_inv_integer_for'] = '\\"%s\\" alanına yazılan sayı geçersiz.';
-$wb['error_inv_float_for'] = '\\"%s\\" alanına yazılan küsuratlı sayı geçersiz.';
+$wb['error_no_value_for'] = '"%s" alanı boş olamaz.';
+$wb['error_short_value_for'] = '"%s" alanına daha uzun bir değer yazılmalıdır.';
+$wb['error_long_value_for'] = '"%s" alanına daha kısa bir değer yazılmalıdır.';
+$wb['error_inv_value_for'] = '"%s" alanına yazılan değer geçersiz.';
+$wb['error_inv_email_for'] = '"%s" alanına yazılan e-posta adresi geçersiz.';
+$wb['error_inv_domain_for'] = '"%s" alanına yazılan etki alanı geçersiz.';
+$wb['error_inv_integer_for'] = '"%s" alanına yazılan sayı geçersiz.';
+$wb['error_inv_float_for'] = '"%s" alanına yazılan küsuratlı sayı geçersiz.';
 $wb['error_used_location'] = 'Yükleme yoluna daha önce yüklenmiş bir paket var.';
 $wb['installation_task_txt'] = 'Yükleme planlandı';
 $wb['installation_error_txt'] = 'Yükleme hatası';
diff --git a/interface/web/sites/lib/lang/tr_aps_instances_list.lng b/interface/web/sites/lib/lang/tr_aps_instances_list.lng
index e8b3532ff41da3f91a76d3f7744a62c828946766..292c627f850c81e7c655ccf674cb58b2a81c7f38 100644
--- a/interface/web/sites/lib/lang/tr_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/tr_aps_instances_list.lng
@@ -4,8 +4,8 @@ $wb['name_txt'] = 'Ad';
 $wb['version_txt'] = 'Sürüm';
 $wb['customer_txt'] = 'Müşteri';
 $wb['status_txt'] = 'Durum';
-$wb['install_location_txt'] = 'Yükleme Konumu';
-$wb['pkg_delete_confirmation'] = 'Bu yüklemeyi silmek istediğinize emin misiniz?';
+$wb['install_location_txt'] = 'Kurulum Konumu';
+$wb['pkg_delete_confirmation'] = 'Bu kurulumu silmek istediÄŸinize emin misiniz?';
 $wb['filter_txt'] = 'Arama';
 $wb['delete_txt'] = 'Sil';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_backup_stats_list.lng b/interface/web/sites/lib/lang/tr_backup_stats_list.lng
index 65792aa591054d676f942164b40a0c7c3696825c..f59fcae70ac9c49bb18bbbd9609e0588906f2334 100644
--- a/interface/web/sites/lib/lang/tr_backup_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_backup_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Backup Stats';
+$wb['list_head_txt'] = 'Yedekleme Durumu';
 $wb['database_name_txt'] = '';
-$wb['active_txt'] = 'Active';
-$wb['domain_txt'] = 'Domain';
-$wb['backup_count_txt'] = 'Backup count';
-$wb['backup_server_txt'] = 'Server';
-$wb['backup_interval_txt'] = 'Interval / cnt.';
-$wb['backup_size_txt'] = 'Backupsize';
+$wb['active_txt'] = 'Etkin';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['backup_count_txt'] = 'Yedek sayısı';
+$wb['backup_server_txt'] = 'Sunucu';
+$wb['backup_interval_txt'] = 'Sıklık / Sayı';
+$wb['backup_size_txt'] = 'Yedek Boyutu';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_cron.lng b/interface/web/sites/lib/lang/tr_cron.lng
index f645d7632535c219273e1ca7bf350ab5ba1419af..d00e6868c7f0b0171a95094a79d1812db299d142 100644
--- a/interface/web/sites/lib/lang/tr_cron.lng
+++ b/interface/web/sites/lib/lang/tr_cron.lng
@@ -17,10 +17,10 @@ $wb['run_mday_error_format'] = 'Ayın günü biçimi geçersiz.';
 $wb['run_month_error_format'] = 'Ay biçimi geçersiz.';
 $wb['run_wday_error_format'] = 'Haftanın günü biçimi geçersiz.';
 $wb['command_error_format'] = 'Komut biçimi geçersiz. İnternet adreslerinde yalnız http/https kullanılabilir.';
-$wb['unknown_fieldtype_error'] = 'Bilinmeyen bir alan tipi kullanılmış.';
+$wb['unknown_fieldtype_error'] = 'Bilinmeyen bir alan türü kullanılmış.';
 $wb['server_id_error_empty'] = 'Sunucu kodu boÅŸ olamaz.';
+$wb['command_hint_txt'] = 'Örnek: /var/www/clients/musteriX/webY/betigim.sh ya da http://www.etkialanim.com/yol/betik.php, /var/www/clients/musteriX/webY/web yerine [web_root] kodunu kullanabilirsiniz.';
+$wb['log_output_txt'] = 'Günlük çıktısı';
 $wb['limit_cron_url_txt'] = 'Yalnız İnternet adresli zamanlanmış görev kullanılabilir. Lütfen zamanlanmış görev komutu olarak http:// ile başlayan bir İnternet adresi yazın.';
 $wb['command_error_empty'] = 'Komut boÅŸ olamaz.';
-$wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or http://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.';
-$wb['log_output_txt'] = 'Log output';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database.lng b/interface/web/sites/lib/lang/tr_database.lng
index d5d8c7d856665bfba773b7679267b051cf319b9a..f443bbb620a22a8298212b9abff6cd6e4c752899 100644
--- a/interface/web/sites/lib/lang/tr_database.lng
+++ b/interface/web/sites/lib/lang/tr_database.lng
@@ -1,13 +1,13 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['database_name_txt'] = 'Veritabanı Adı';
 $wb['database_user_txt'] = 'Veritabanı Kullanıcısı';
 $wb['database_ro_user_txt'] = 'Salt okunur veritabanı kullanıcısı';
 $wb['optional_txt'] = 'isteğe bağlı';
 $wb['database_password_txt'] = 'Veritabanı Parolası';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
-$wb['database_charset_txt'] = 'Veritabanı Karakter Seti';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
+$wb['database_charset_txt'] = 'Veritabanı Karakter Kümesi';
 $wb['select_dbuser_txt'] = 'Veritabanı kullanıcısını seçin';
 $wb['no_dbuser_txt'] = 'Yok';
 $wb['remote_access_txt'] = 'Uzaktan EriÅŸim';
@@ -16,34 +16,34 @@ $wb['database_remote_error_ips'] = 'Yazılan IP adreslerinden en az biri hatalı
 $wb['client_txt'] = 'Müşteri';
 $wb['active_txt'] = 'Etkin';
 $wb['database_client_differs_txt'] = 'Web sitesi ve veritabanının ait olduğu müşteriler farklı.';
-$wb['database_name_error_empty'] = 'Veritabanı adı boş.';
-$wb['database_name_error_unique'] = 'Sunucu üzerinde aynı adlı bir veritabanı var. Benzersiz bir ad vermek için, veritabanı adının başına alan adınız gibi bir ek  ekleyebilirsiniz.';
+$wb['database_name_error_empty'] = 'Veritabanı adı boş olamaz.';
+$wb['database_name_error_unique'] = 'Sunucu üzerinde aynı adlı bir veritabanı var. Benzersiz bir ad vermek için, veritabanı adının başına etki alanı adınızı ekleyebilirsiniz.';
 $wb['database_name_error_regex'] = 'Veritabanı adı geçersiz. Veritabanı adı 2-64 uzunluğunda olmalı ve yalnız a-z, A-Z, 0-9 ve alt çizgi(_) karakterlerinden oluşmalıdır.';
-$wb['database_user_error_empty'] = 'Veritabanı kullanıcısı boş olamaz.';
-$wb['database_user_error_unique'] = 'Sunucu üzerinde aynı adlı bir veritabanı kullanıcısı zaten var. Benzersiz bir ad vermek için, örneğin veritabanı kullanıcısı adının başına alan adınızı ekleyebilirsiniz.';
+$wb['database_user_error_empty'] = 'Veritabanı kullanıcı adı boş olamaz.';
+$wb['database_user_error_unique'] = 'Sunucu üzerinde aynı adlı bir veritabanı kullanıcısı zaten var. Benzersiz bir ad vermek için, örneğin veritabanı kullanıcısı adının başına etki alanı adınızı ekleyebilirsiniz.';
 $wb['database_user_error_regex'] = 'Veritabanı kullanıcı adı geçersiz. Veritabanı kullanıcı adı 2-64 uzunluğunda olmalı ve yalnız a-z, A-Z, 0-9 ve alt çizgi(_) karakterlerinden oluşmalıdır.';
-$wb['limit_database_txt'] = 'Ekleyebileceğiniz en fazla veritabanı sayısına ulaştınız.';
+$wb['limit_database_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla veritabanı sayısına ulaştınız.';
 $wb['database_name_change_txt'] = 'Veritabanı adı değiştirilemedi';
 $wb['database_user_missing_txt'] = 'Lütfen bu veritabanı için bir veritabanı kullanıcısı seçin.';
-$wb['database_charset_change_txt'] = 'Veritabanı karakter seti değiştirilemedi';
+$wb['database_charset_change_txt'] = 'Veritabanı karakter kümesi değiştirilemedi';
 $wb['database_name_error_len'] = 'Veritabanı adı - {db} - çok uzun. Veritabanı adı ön ek dahil en fazla 64 karakter olabilir.';
 $wb['database_user_error_len'] = 'Veritabanı kullanıcı adı - {user} - çok uzun. Veritabanı kullanıcı adı ön ek dahil en fazla 16 karakter olabilir.';
-$wb['parent_domain_id_txt'] = 'Site';
+$wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['database_site_error_empty'] = 'Veritabanının ait olduğu siteyi seçin.';
 $wb['select_site_txt'] = '- Siteyi Seçin -';
 $wb['btn_save_txt'] = 'Kaydet';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
 $wb['globalsearch_resultslimit_of_txt'] = '/';
 $wb['globalsearch_resultslimit_results_txt'] = 'sonuç';
-$wb['globalsearch_noresults_text_txt'] = 'Sonuç yok';
+$wb['globalsearch_noresults_text_txt'] = 'Uygun bir sonuç bulunamadı.';
 $wb['globalsearch_noresults_limit_txt'] = '0 sonuç';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Arama';
 $wb['globalsearch_suggestions_text_txt'] = 'Öneriler';
-$wb['limit_database_quota_txt'] = 'Database quota';
-$wb['limit_database_quota_error_notint'] = 'The database quota limit must be a number.';
-$wb['limit_database_quota_free_txt'] = 'Max. available DB quota ';
+$wb['limit_database_quota_txt'] = 'Veritabanı Kotası';
+$wb['limit_database_quota_error_notint'] = 'Veritabanı kotası bir sayı olmalıdır';
+$wb['limit_database_quota_free_txt'] = 'Kullanılabilecek en fazla veritabanı kotası';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database_admin_list.lng b/interface/web/sites/lib/lang/tr_database_admin_list.lng
index fc92e1957eb36bd82f6e8d93baf8ae2f810a20a8..e13404415ce4fcdb47909b08143d465617639e6c 100644
--- a/interface/web/sites/lib/lang/tr_database_admin_list.lng
+++ b/interface/web/sites/lib/lang/tr_database_admin_list.lng
@@ -2,11 +2,11 @@
 $wb['list_head_txt'] = 'Veritabanı';
 $wb['active_txt'] = 'Etkin';
 $wb['remote_access_txt'] = 'Uzaktan EriÅŸim';
+$wb['type_txt'] = 'Tür';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['database_user_txt'] = 'Veritabanı kullanıcısı';
-$wb['database_name_txt'] = 'Veritabanı adı';
-$wb['add_new_record_txt'] = 'Veritabanı ekle';
+$wb['database_user_txt'] = 'Veritabanı Kullanıcı Adı';
+$wb['database_name_txt'] = 'Veritabanı Adı';
+$wb['add_new_record_txt'] = 'Veritabanı Ekle';
 $wb['sys_groupid_txt'] = 'Müşteri';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['type_txt'] = 'Type';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database_list.lng b/interface/web/sites/lib/lang/tr_database_list.lng
index 43ea5f9b6fe57c01a723df9411c481ce2e321e48..591a72af11e1bdcb6678639383f05791ab7b6455 100644
--- a/interface/web/sites/lib/lang/tr_database_list.lng
+++ b/interface/web/sites/lib/lang/tr_database_list.lng
@@ -2,10 +2,10 @@
 $wb['list_head_txt'] = 'Veritabanı';
 $wb['active_txt'] = 'Etkin';
 $wb['remote_access_txt'] = 'Uzaktan EriÅŸim';
+$wb['type_txt'] = 'Tür';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['database_user_txt'] = 'Veritabanı Kullanıcısı';
 $wb['database_name_txt'] = 'Veritabanı Adı';
 $wb['add_new_record_txt'] = 'Veritabanı Ekle';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['type_txt'] = 'Type';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng b/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
index 50f2dcc496d1140a77dce8a25c7ee0a38fe1e277..a65174977b876ff1e474c2d4abc7968a447e603c 100644
--- a/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_database_quota_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['database_txt'] = 'Database';
-$wb['server_name_txt'] = 'Server';
-$wb['client_txt'] = 'Client';
-$wb['used_txt'] = 'Used space';
-$wb['quota_txt'] = 'Quota';
-$wb['percentage_txt'] = 'Used in %';
-$wb['list_head_txt'] = 'Database Quota';
+$wb['database_txt'] = 'Veritabanı';
+$wb['server_name_txt'] = 'Sunucu';
+$wb['client_txt'] = 'Müşteri';
+$wb['used_txt'] = 'Kullanılan';
+$wb['quota_txt'] = 'Kota';
+$wb['percentage_txt'] = 'Kullanım Yüzdesi';
+$wb['list_head_txt'] = 'Veritabanı Kotası';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_database_user.lng b/interface/web/sites/lib/lang/tr_database_user.lng
index 785c4ecce4d125f061be335383e162935149b07e..3f6ba89f49b8150cc24341cf9e479aaa4285f813 100644
--- a/interface/web/sites/lib/lang/tr_database_user.lng
+++ b/interface/web/sites/lib/lang/tr_database_user.lng
@@ -1,25 +1,25 @@
 <?php
 $wb['database_user_txt'] = 'Veritabanı Kullanıcısı';
 $wb['database_password_txt'] = 'Veritabanı Parolası';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['client_txt'] = 'Müşteri';
 $wb['active_txt'] = 'Etkin';
 $wb['database_user_error_empty'] = 'Veritabanı kullanıcısı boş olamaz.';
-$wb['database_user_error_unique'] = 'Sunucuda aynı adlı bir veritabanı kullanıcısı var. Benzersiz bir ad vermek için, kullanıcı adının başına alan adınız gibi bir ek  ekleyebilirsiniz.';
+$wb['database_user_error_unique'] = 'Sunucuda aynı adlı bir veritabanı kullanıcısı var. Benzersiz bir ad vermek için, kullanıcı adının başına etki alanınızı ekleyebilirsiniz.';
 $wb['database_user_error_regex'] = 'Veritabanı kullanıcı adı geçersiz. Veritabanı kullanıcı adı 2-64 uzunluğunda olmalı ve yalnız a-z, A-Z, 0-9 ve alt çizgi(_) karakterlerinden oluşmalıdır.';
 $wb['database_user_error_len'] = 'Veritabanı kullanıcı adı - {user} - çok uzun. Ön ek dahil en uzun veritabanı kullanıcı adı 16 karakter olmalıdır.';
 $wb['btn_save_txt'] = 'Kaydet';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
 $wb['globalsearch_resultslimit_of_txt'] = '/';
 $wb['globalsearch_resultslimit_results_txt'] = 'sonuç';
-$wb['globalsearch_noresults_text_txt'] = 'Sonuç yok.';
+$wb['globalsearch_noresults_text_txt'] = 'Uygun bir sonuç bulunamadı.';
 $wb['globalsearch_noresults_limit_txt'] = '0 sonuç';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Arama';
 $wb['globalsearch_suggestions_text_txt'] = 'Öneriler';
-$wb['limit_database_user_txt'] = 'The max. number of database users is reached.';
-$wb['database_password_error_empty'] = 'Database password is empty.';
+$wb['limit_database_user_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla veritabanı kullanıcısı sayısına ulaştınız.';
+$wb['database_password_error_empty'] = 'Veritabanı parolası boş.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/tr_ftp_sites_stats_list.lng
index e44025a715dbf435bdca9faee0b109ba25bf611d..6d2da369d2cc8b3101affc00ef533e570abe4dbb 100644
--- a/interface/web/sites/lib/lang/tr_ftp_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_ftp_sites_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'FTP traffic';
-$wb['domain_txt'] = 'Domain';
-$wb['this_month_txt'] = 'This month';
-$wb['last_month_txt'] = 'Last month';
-$wb['this_year_txt'] = 'This year';
-$wb['last_year_txt'] = 'Last year';
-$wb['sum_txt'] = 'Sum (Download + Upload)';
-$wb['in_out_txt'] = 'DL/UL';
+$wb['list_head_txt'] = 'FTP TrafiÄŸi';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['this_month_txt'] = 'Bu ay';
+$wb['last_month_txt'] = 'Geçen ay';
+$wb['this_year_txt'] = 'Bu yıl';
+$wb['last_year_txt'] = 'Geçen yıl';
+$wb['sum_txt'] = 'Toplam (İndirme + Yükleme)';
+$wb['in_out_txt'] = 'İnd/Yük';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_ftp_user.lng b/interface/web/sites/lib/lang/tr_ftp_user.lng
index 665d2ec477479644c9ae00ff3520f908547ec0c6..155573595ef6c1a8a12ca2e07e5188f345ca3974 100644
--- a/interface/web/sites/lib/lang/tr_ftp_user.lng
+++ b/interface/web/sites/lib/lang/tr_ftp_user.lng
@@ -12,7 +12,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['quota_size_txt'] = 'Disk Kotası';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_ftp_user_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla FTP kullanıcısı sayısına ulaştınız.';
@@ -21,15 +21,16 @@ $wb['username_error_unique'] = 'Bu kullanıcı adı zaten var.';
 $wb['username_error_regex'] = 'Kullanıcı adında izin verilmeyen karakterler var.';
 $wb['quota_size_error_empty'] = 'Kota boÅŸ olamaz.';
 $wb['uid_error_empty'] = 'UID boÅŸ olamaz.';
+$wb['gid_error_empty'] = 'GID boÅŸ olamaz.';
 $wb['directory_error_empty'] = 'Klasör boş olamaz.';
 $wb['directory_error_notinweb'] = 'Klasör web kök klasörünün altında bulunmalıdır.';
 $wb['parent_domain_id_error_empty'] = 'Bir web sitesi seçmelisiniz.';
 $wb['quota_size_error_regex'] = 'Kota: Sınırsız olması için -1 sınırlamak için sıfırdan büyük bir rakam yazın';
 $wb['dir_dot_error'] = 'Yol içinde .. kullanılamaz.';
 $wb['dir_slashdot_error'] = 'Yol içinde ./ kullanılamaz.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['expires_txt'] = 'Expire at';
+$wb['expires_txt'] = 'Sona Erme Zamanı';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_shell_user.lng b/interface/web/sites/lib/lang/tr_shell_user.lng
index 5610d599397d31e261336f34c2058ca98abf58cf..e2aa844843963a9d286c9f2c35ed0627d5155a45 100644
--- a/interface/web/sites/lib/lang/tr_shell_user.lng
+++ b/interface/web/sites/lib/lang/tr_shell_user.lng
@@ -7,7 +7,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['chroot_txt'] = 'Chroot KabuÄŸu';
 $wb['quota_size_txt'] = 'Kota';
 $wb['active_txt'] = 'Etkin';
@@ -22,7 +22,7 @@ $wb['parent_domain_id_error_empty'] = 'Bir web sitesi seçmelisiniz.';
 $wb['ssh_rsa_txt'] = 'SSH-RSA Genel Anahtarı (anahtar ile oturum açmak için)';
 $wb['dir_dot_error'] = 'Yol içinde .. . kullanılamaz.';
 $wb['dir_slashdot_error'] = 'Yol içinde ./ kullanılamaz.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
diff --git a/interface/web/sites/lib/lang/tr_shell_user_list.lng b/interface/web/sites/lib/lang/tr_shell_user_list.lng
index b88c7fa7486dc84acd8968de784b4ec61392d3af..5c375a232a51d25f0157b1aad5d5291d88b66d1d 100644
--- a/interface/web/sites/lib/lang/tr_shell_user_list.lng
+++ b/interface/web/sites/lib/lang/tr_shell_user_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Shell Kullanıcısı';
+$wb['list_head_txt'] = 'Kabuk Kullanıcısı';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['parent_domain_id_txt'] = 'Site';
+$wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['username_txt'] = 'Kullanıcı Adı';
-$wb['add_new_record_txt'] = 'Shell Kullanıcısı Ekle';
+$wb['add_new_record_txt'] = 'Kabuk Kullanıcısı Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_user_quota_stats_list.lng b/interface/web/sites/lib/lang/tr_user_quota_stats_list.lng
index 82103410fe6d707e2cf0a8f6efbe7d371dbceba5..be7712fd46fc00b0e0df56f01088027242835b80 100644
--- a/interface/web/sites/lib/lang/tr_user_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_user_quota_stats_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Web Sitesi Disk Kotası';
-$wb['domain_txt'] = 'Alan Adı / Web Sitesi';
+$wb['domain_txt'] = 'Etki Alanı / Web Sitesi';
 $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['used_txt'] = 'Kullanılan Alan';
 $wb['hard_txt'] = 'Donanım Sınırı';
diff --git a/interface/web/sites/lib/lang/tr_web_aliasdomain.lng b/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
index 7e4c0b7c5199f554a8143038394f7e2a9c4e5c28..d7ded7849a834ba048cac2e9017c527bbe3adc84 100644
--- a/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['domain_txt'] = 'Takma Alan Adı';
+$wb['domain_txt'] = 'Takma Etki Alanı';
 $wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
 $wb['backup_copies_txt'] = 'Yedek Kopyası Sayısı';
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_key_txt'] = 'SSL Anahtarı';
@@ -12,12 +12,12 @@ $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
-$wb['ssl_domain_txt'] = 'SSL Alan Adı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. / karakterini yazmayın.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
@@ -25,30 +25,30 @@ $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IPv4 Adresi';
 $wb['ipv6_address_txt'] = 'IPv6 Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['errordocs_txt'] = 'Özel Hata Sayfaları';
-$wb['subdomain_txt'] = 'Otomatik Alt Alan';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt alan adı zaten var.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt etki alanı zaten var.';
 $wb['hd_quota_error_empty'] = 'Disk kotası 0 ya da boş olamaz.';
 $wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
-$wb['error_ssl_state_empty'] = 'SSL ÅŸehri boÅŸ olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
 $wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
-$wb['error_ssl_organisation_empty'] = 'SSL kurumu boÅŸ olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
 $wb['error_ssl_organisation_unit_empty'] = 'SSL birimi boÅŸ olamaz.';
 $wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
 $wb['error_ssl_cert_empty'] = 'SSL sertifikası alanı boş olamaz';
@@ -56,31 +56,31 @@ $wb['client_group_id_txt'] = 'Müşteri';
 $wb['stats_password_txt'] = 'Web İstatistikleri Parolası';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Kullanılabilecek En Fazla Disk Kotası';
-$wb['ssl_state_error_regex'] = 'SSL şehri geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_organisation_error_regex'] = 'SSL kurumu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_organistaion_unit_error_regex'] = 'SSL birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
 $wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Web istatistikleri kullanıcı adı';
-$wb['stats_type_txt'] = 'Web istatistikleri yazılımı';
-$wb['custom_php_ini_txt'] = 'Özel php.ini ayarları';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
 $wb['none_txt'] = 'Yok';
 $wb['disabled_txt'] = 'Devre dışı';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['save_certificate_txt'] = 'Sertifikayı kaydet';
-$wb['create_certificate_txt'] = 'Sertifika ekle';
-$wb['delete_certificate_txt'] = 'Sertifikayı sil';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
 $wb['nginx_directives_txt'] = 'nginx Yönergeleri';
 $wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'PHP-FPM İçin Soket Kullanılsın';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
 $wb['error_no_sni_txt'] = 'Bu sunucuda SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası etkinleştirebilirsiniz.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -102,14 +102,14 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri sıfır ya da pozitif bir tamsayı olmalıdır.';
 $wb['pm_ondemand_hint_txt'] = 'İsteğe bağlı işlem yöneticisini kullanabilmek için PHP Sürümünüz >= 5.3.9 olmalıdır. Daha önceki bir PHP sürümü için ondemand özelliğini seçerseniz, PHP başlatılamaz!';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Parçaları:';
-$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Parçaları:';
-$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Parçaları:';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
-$wb['Domain'] = 'Başka alan adı';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
+$wb['Domain'] = 'Takma Etki Alanı';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_aliasdomain_list.lng b/interface/web/sites/lib/lang/tr_web_aliasdomain_list.lng
index b7acfd099a83870e494ff2cf5d7043b76053e19c..e4dcaacbe779d2550fd8bb1418fb89c68e7772fb 100644
--- a/interface/web/sites/lib/lang/tr_web_aliasdomain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_aliasdomain_list.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['list_head_txt'] = 'Takma Alan Adı';
+$wb['list_head_txt'] = 'Takma Etki Alanı Adı';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['domain_txt'] = 'Takma Alan Adı';
-$wb['add_new_record_txt'] = 'Takma Alan Adı Ekle';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı alan adı zaten var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
+$wb['parent_domain_id_txt'] = 'Web SitesÅŸ';
+$wb['domain_txt'] = 'Takma Etki Alanı Adı';
+$wb['add_new_record_txt'] = 'Yeni takma etki alanı adı ekle';
+$wb['domain_error_empty'] = 'Etki alanı adı boş olamaz.';
+$wb['domain_error_unique'] = 'Etki alanı adı eşsiz olmalıdır.';
+$wb['domain_error_regex'] = 'Etki alanı adı geçersiz.';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['none_txt'] = 'Yok';
+$wb['none_txt'] = 'Hiçbiri';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_backup_list.lng b/interface/web/sites/lib/lang/tr_web_backup_list.lng
index c9bc16ae78023d7fcb0c0f58e654831ae93d8d18..31aea494ca227e1341cdddbac02d80c6101bb04b 100644
--- a/interface/web/sites/lib/lang/tr_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_backup_list.lng
@@ -1,8 +1,9 @@
 <?php
 $wb['list_head_txt'] = 'Alınmış Yedekler';
 $wb['date_txt'] = 'Tarih';
-$wb['backup_type_txt'] = 'Tip';
+$wb['backup_type_txt'] = 'Tür';
 $wb['filename_txt'] = 'Yedek Dosyası';
+$wb['filesize_txt'] = 'Dosya Boyutu';
 $wb['restore_backup_txt'] = 'Geri Yükle';
 $wb['download_backup_txt'] = 'Ä°ndir';
 $wb['download_info_txt'] = 'Yedek dosyası bir kaç dakika içinde web sitesinin backup klasörü altında indirilmeye hazır olacak.';
@@ -10,12 +11,12 @@ $wb['restore_info_txt'] = 'Yedeğin geri yüklenmesine başlandı. Bu işlemin t
 $wb['restore_confirm_txt'] = 'Geri yükleme işlemi web sitenizde bulunan dosyaların üzerine yazar. Bu yedeği geri yüklemek istediğinize emin misiniz?';
 $wb['download_pending_txt'] = 'Zaten bekleyen bir yedek indirme iÅŸlemi var.';
 $wb['restore_pending_txt'] = 'Zaten bekleyen bir yedek geri yükleme işlemi var.';
+$wb['delete_backup_txt'] = 'YedeÄŸi Sil';
+$wb['delete_info_txt'] = 'Yedeğin silinmesine başlandı. Bu işlemin tamamlanması bir kaç dakika sürebilir.';
+$wb['delete_confirm_txt'] = 'Gerçekten bu yedeği silmek istediğinize emin misiniz?';
+$wb['delete_pending_txt'] = 'Bekleyen bir yedek silme iÅŸlemi var.';
+$wb['backup_type_mongodb'] = 'MongoDB Veritabanı';
 $wb['backup_type_mysql'] = 'MySQL Veritabanı';
 $wb['backup_type_web'] = 'Web sitesi dosyaları';
-$wb['filesize_txt'] = 'Filesize';
-$wb['delete_backup_txt'] = 'Delete Backup';
-$wb['delete_info_txt'] = 'Delete of the backup has been started. This action takes several minutes to be completed.';
-$wb['delete_confirm_txt'] = 'Really delete this backup?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
-$wb['backup_type_mongodb'] = 'MongoDB Database';
+
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_childdomain.lng b/interface/web/sites/lib/lang/tr_web_childdomain.lng
index e11c6a92b584c6f93cf2be6219bb60e9b5fe612b..235e870117f6223af6c7e4a299f19a8d44326a16 100644
--- a/interface/web/sites/lib/lang/tr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_childdomain.lng
@@ -1,26 +1,26 @@
 <?php
-$wb['ssl_state_txt'] = 'Mevki';
-$wb['ssl_locality_txt'] = 'Semt';
-$wb['ssl_organisation_txt'] = 'Organizasyon';
-$wb['ssl_organisation_unit_txt'] = 'Organizasyon Unitesi';
+$wb['ssl_state_txt'] = 'Ä°l';
+$wb['ssl_locality_txt'] = 'Bölge';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
+$wb['ssl_organisation_unit_txt'] = 'KuruluÅŸ Birimi';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
-$wb['ssl_action_txt'] = 'SSL Eylemi';
+$wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Domain';
-$wb['type_txt'] = 'Çeşit';
-$wb['parent_domain_id_txt'] = 'Ana Website';
-$wb['redirect_type_txt'] = 'Yönlendirme Çeşidi';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['type_txt'] = 'Tür';
+$wb['parent_domain_id_txt'] = 'Ana Web Sitesi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
-$wb['active_txt'] = 'Aktif';
-$wb['document_root_txt'] = 'Documentroot';
+$wb['active_txt'] = 'Etkin';
+$wb['document_root_txt'] = 'Belge Kök Klasörü';
 $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IP Adresleri';
-$wb['vhost_type_txt'] = 'VHost Çeşidi';
-$wb['hd_quota_txt'] = 'Harddisk Kotası';
+$wb['vhost_type_txt'] = 'VHost Türü';
+$wb['hd_quota_txt'] = 'Sabit Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
@@ -28,93 +28,93 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınızdaki max. web domaini sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınızdaki max. aliasdomain sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınızdaki max. web subdomain sayısına ulaştınız.';
-$wb['apache_directives_txt'] = 'Apache direktifleri';
-$wb['domain_error_empty'] = 'Domain boÅŸ.';
-$wb['domain_error_unique'] = 'Bu isimde websitesi veya sub / aliasdomain zaten var.';
-$wb['domain_error_regex'] = 'Domain ismi geçersiz.';
-$wb['host_txt'] = 'Host';
-$wb['redirect_error_regex'] = 'Geçersiz yönlendirme yolu. Geçerli yönlendirmeler örneğin: /test/ veya http://www.domain.tld/test/';
-$wb['no_redirect_txt'] = 'No redirect';
-$wb['no_flag_txt'] = 'No flag';
-$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
-$wb['proxy_directives_txt'] = 'Proxy Directives';
-$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
-$wb['backup_interval_txt'] = 'Backup interval';
-$wb['backup_copies_txt'] = 'Number of backup copies';
-$wb['ssl_key_txt'] = 'SSL Key';
-$wb['ssl_domain_txt'] = 'SSL Domain';
-$wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.';
-$wb['ipv6_address_txt'] = 'IPv6-Address';
-$wb['errordocs_txt'] = 'Own Error-Documents';
-$wb['subdomain_txt'] = 'Auto-Subdomain';
-$wb['domain_error_autosub'] = 'There is already a subdomain with these settings.';
-$wb['hd_quota_error_empty'] = 'Harddisk quota is 0 or empty.';
-$wb['traffic_quota_error_empty'] = 'Traffic quota is empty.';
-$wb['error_ssl_state_empty'] = 'SSL State is empty.';
-$wb['error_ssl_locality_empty'] = 'SSL Locality is empty.';
-$wb['error_ssl_organisation_empty'] = 'SSL Organisation is empty.';
-$wb['error_ssl_organisation_unit_empty'] = 'SSL Organisation Unit is empty.';
-$wb['error_ssl_country_empty'] = 'SSL Country is empty.';
-$wb['error_ssl_cert_empty'] = 'SSL Certificate field is empty';
-$wb['client_group_id_txt'] = 'Client';
-$wb['stats_password_txt'] = 'Set Webstatistics password';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
+$wb['apache_directives_txt'] = 'Apache Yönergeleri';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt / takma etki alanı zaten var.';
+$wb['domain_error_regex'] = 'Etki alanı adı geçersiz.';
+$wb['domain_error_acme_invalid'] = 'acme.invalid etki alanı adı kullanılamaz.';
+$wb['domain_error_wildcard'] = 'Genel alt etki alanları kullanılamaz.';
+$wb['host_txt'] = 'Sunucu';
+$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Örnek yönlendirmeler: /test/ ya da http://www.domain.tld/test/';
+$wb['no_redirect_txt'] = 'Yönlendirme Yok';
+$wb['no_flag_txt'] = 'Ä°ÅŸaret Yok';
+$wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
+$wb['error_proxy_requires_url'] = '"Vekil Sunucu" yönlendirme türü için yönlendirilecek yol olarak kullanılacak bir adres gereklidir.';
+$wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
+$wb['backup_copies_txt'] = 'Yedek Sayısı';
+$wb['ssl_key_txt'] = 'SSL Anahtarı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
+$wb['web_folder_error_regex'] = 'Yazılan klasör geçersiz. Lütfen bölü karakterini yazmayın.';
+$wb['ipv6_address_txt'] = 'IPv6-Adresi';
+$wb['errordocs_txt'] = 'Özel Hata Sayfaları';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
+$wb['domain_error_autosub'] = 'Aynı ayarları kullanan bir alt etki alanı zaten var.';
+$wb['hd_quota_error_empty'] = 'Sabit disk kotası 0 ya da boş.';
+$wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
+$wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL kuruluÅŸ birimi boÅŸ olamaz.';
+$wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
+$wb['error_ssl_cert_empty'] = 'SSL sertifika alanı boş olamaz.';
+$wb['client_group_id_txt'] = 'Müşteri';
+$wb['stats_password_txt'] = 'Web İstatistikleri Parolası';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Max. available Harddisk Quota';
-$wb['ssl_state_error_regex'] = 'Invalid SSL State. Valid characters are: a-z, 0-9 and .,-_';
-$wb['ssl_locality_error_regex'] = 'Invalid SSL Locality. Valid characters are: a-z, 0-9 and .,-_';
-$wb['ssl_organisation_error_regex'] = 'Invalid SSL Organisation. Valid characters are: a-z, 0-9 and .,-_';
-$wb['ssl_organistaion_unit_error_regex'] = 'Invalid SSL Organisation Unit. Valid characters are: a-z, 0-9 and .,-_';
-$wb['ssl_country_error_regex'] = 'Invalid SSL Country. Valid characters are: A-Z';
-$wb['limit_traffic_quota_free_txt'] = 'Max. available Traffic Quota';
+$wb['limit_web_quota_free_txt'] = 'Kullanılabilecek en fazla sabit disk kotası';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
+$wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
-$wb['traffic_quota_exceeded_txt'] = 'Traffic quota exceeded';
+$wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Webstatistics username';
-$wb['stats_type_txt'] = 'Webstatistics program';
-$wb['custom_php_ini_txt'] = 'Custom php.ini settings';
-$wb['none_txt'] = 'None';
-$wb['disabled_txt'] = 'Disabled';
-$wb['save_certificate_txt'] = 'Save certificate';
-$wb['create_certificate_txt'] = 'Create certificate';
-$wb['delete_certificate_txt'] = 'Delete certificate';
-$wb['nginx_directives_txt'] = 'nginx Directives';
-$wb['seo_redirect_txt'] = 'SEO Redirect';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
+$wb['none_txt'] = 'Yok';
+$wb['disabled_txt'] = 'Devre Dışı';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
+$wb['nginx_directives_txt'] = 'nginx Yönergeleri';
+$wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'Use Socket For PHP-FPM';
-$wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
+$wb['error_no_sni_txt'] = 'Bu sunucu üzerinde SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası kullanılabilir.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
 $wb['pm_max_children_txt'] = 'PHP-FPM pm.max_children';
 $wb['pm_start_servers_txt'] = 'PHP-FPM pm.start_servers';
 $wb['pm_min_spare_servers_txt'] = 'PHP-FPM pm.min_spare_servers';
 $wb['pm_max_spare_servers_txt'] = 'PHP-FPM pm.max_spare_servers';
-$wb['error_php_fpm_pm_settings_txt'] = 'Values of PHP-FPM pm settings must be as follows: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
-$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children must be a positive integer value.';
-$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers must be a positive integer value.';
-$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be a positive integer value.';
-$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
-$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
-$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['pm_txt'] = 'PHP-FPM Process Manager';
+$wb['error_php_fpm_pm_settings_txt'] = 'Values of PHP-FPM pm ayarları şu şekilde olmalıdır: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children değeri pozitif bir tamsayı olmalıdır.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers değeri pozitif bir tamsayı olmalıdır.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers değeri pozitif bir tamsayı olmalıdır.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
+$wb['hd_quota_error_regex'] = 'Sabit disk kotası geçersiz.';
+$wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
+$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['pm_txt'] = 'PHP-FPM İşlem Yönetimi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
-$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout must be a positive integer value.';
-$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests must be an integer value >= 0.';
-$wb['pm_ondemand_hint_txt'] = 'Please note that you must have PHP version >= 5.3.9 in order to use the ondemand process manager. If you select ondemand for an older PHP version, PHP will not start anymore!';
-$wb['generate_password_txt'] = 'Generate Password';
-$wb['repeat_password_txt'] = 'Repeat Password';
-$wb['password_mismatch_txt'] = 'The passwords do not match.';
-$wb['password_match_txt'] = 'The passwords do match.';
-$wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:';
-$wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:';
-$wb['available_nginx_directive_snippets_txt'] = 'Available nginx Directive Snippets:';
-$wb['Domain'] = 'Aliasdomain';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
-$wb['ssl_letsencrypt_exclude_txt'] = 'Don\'t add to Let\'s Encrypt certificate';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri pozitif bir tamsayı olmalıdır >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Ondemand işlem yönetimini kullanabilmek için PHP sürümünüz >= 5.3.9 olmalıdır. Daha eski bir PHP sürümü için ondemand seçilirse PHP çalışmaya başlayamaz!';
+$wb['generate_password_txt'] = 'Parola Ãœret';
+$wb['repeat_password_txt'] = 'Parola Onayı';
+$wb['password_mismatch_txt'] = 'Parola ve onayı aynı değil';
+$wb['password_match_txt'] = 'Parola ve onayı aynı değil.';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
+$wb['Domain'] = 'Takma Etki Alanı Adı';
+$wb['ssl_letsencrypt_exclude_txt'] = 'Let\'s Encrypt sertifikası eklenmesin';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_childdomain_list.lng b/interface/web/sites/lib/lang/tr_web_childdomain_list.lng
index 26b3acc9e97ddc09fe9ce94ad7cefd606eab3a7f..33127c84cf57ffaec761c1db04954001e5db83e6 100644
--- a/interface/web/sites/lib/lang/tr_web_childdomain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_childdomain_list.lng
@@ -1,18 +1,18 @@
 <?php
-$wb['list_head_txt'] = 'Takma Alan Adı';
+$wb['list_head_txt'] = 'Takma Etki Alanı';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['domain_txt'] = 'Takma Alan Adı';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı alan adı zaten var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
+$wb['domain_txt'] = 'Takma Etki Alanı';
+$wb['add_new_subdomain_txt'] = 'Alt Etki Alanı Ekle';
+$wb['add_new_aliasdomain_txt'] = 'Takma Etki Alanı Ekle';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı etki alanı zaten var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_acme_invalid'] = 'acme.invalid etki alanı adı kullanılamaz.';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
 $wb['none_txt'] = 'Yok';
-$wb['add_new_subdomain_txt'] = 'Add new Subdomain';
-$wb['add_new_aliasdomain_txt'] = 'Add new Aliasdomain';
-$wb['aliasdomain_list_head_txt'] = 'Aliasdomains';
-$wb['subdomain_list_head_txt'] = 'Subdomains';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['aliasdomain_list_head_txt'] = 'Takma Etki Alanları';
+$wb['subdomain_list_head_txt'] = 'Alt Etki Alanları';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_directive_snippets.lng b/interface/web/sites/lib/lang/tr_web_directive_snippets.lng
index d2590e53cfbefea98a29cdd8fff773eb46050fe8..a4380942e6da91af219043673d8d84740e17dbe3 100644
--- a/interface/web/sites/lib/lang/tr_web_directive_snippets.lng
+++ b/interface/web/sites/lib/lang/tr_web_directive_snippets.lng
@@ -1,3 +1,3 @@
 <?php
-$wb['directive_snippets_id_txt'] = 'Desired configuration';
+$wb['directive_snippets_id_txt'] = 'İstenilen Yapılandırma';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_domain.lng b/interface/web/sites/lib/lang/tr_web_domain.lng
index c97ce73778810e403fdbdc1e1e1d0f8d570eb1a9..65db621f5692d5379411ed5a5fbc9fa50b868ceb 100644
--- a/interface/web/sites/lib/lang/tr_web_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_domain.lng
@@ -3,7 +3,7 @@ $wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
 $wb['backup_copies_txt'] = 'Yedek Kopyası Sayısı';
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_key_txt'] = 'SSL Anahtarı';
@@ -11,13 +11,13 @@ $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
-$wb['ssl_domain_txt'] = 'SSL Alan Adı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. Lütfen / karakterini yazmayın.';
-$wb['type_txt'] = 'Tip';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. Lütfen bölü karakterini yazmayın.';
+$wb['type_txt'] = 'Tür';
 $wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
@@ -25,62 +25,62 @@ $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IPv4 Adresi';
 $wb['ipv6_address_txt'] = 'IPv6 Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['errordocs_txt'] = 'Özel Hata Sayfaları';
-$wb['subdomain_txt'] = 'Otomatik Alt Alan';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt alan adı zaten var.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt etki alanı zaten var.';
 $wb['hd_quota_error_empty'] = 'Disk kotası 0 ya da boş olamaz.';
 $wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
-$wb['error_ssl_state_empty'] = 'SSL ÅŸehri boÅŸ olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
 $wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
-$wb['error_ssl_organisation_empty'] = 'SSL kurumu boÅŸ olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
 $wb['error_ssl_organisation_unit_empty'] = 'SSL birimi boÅŸ olamaz.';
 $wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
 $wb['error_ssl_cert_empty'] = 'SSL sertifikası alanı boş olamaz';
 $wb['client_group_id_txt'] = 'Müşteri';
-$wb['stats_password_txt'] = 'Web istatistikleri parolası';
+$wb['stats_password_txt'] = 'Web İstatistikleri Parolası';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Kullanılabilecek en fazla disk kotası';
-$wb['ssl_state_error_regex'] = 'SSL şehri geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
-$wb['ssl_organisation_error_regex'] = 'SSL kurumu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
-$wb['ssl_organistaion_unit_error_regex'] = 'SSL birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
-$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
+$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Web istatistikleri kullanıcı adı';
-$wb['stats_type_txt'] = 'Web istatistikleri yazılımı';
-$wb['custom_php_ini_txt'] = 'Özel php.ini ayarları';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
 $wb['none_txt'] = 'Yok';
 $wb['disabled_txt'] = 'Devre Dışı';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['save_certificate_txt'] = 'Sertifikayı kaydet';
-$wb['create_certificate_txt'] = 'Sertifika ekle';
-$wb['delete_certificate_txt'] = 'Sertifikayı sil';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
 $wb['nginx_directives_txt'] = 'nginx Yönergeleri';
 $wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'PHP-FPM İçin Soket Kullanılsın';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
 $wb['error_no_sni_txt'] = 'Bu sunucuda SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası etkinleştirebilirsiniz.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -102,15 +102,15 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri sıfır ya da pozitif bir tamsayı olmalıdır.';
 $wb['pm_ondemand_hint_txt'] = 'İsteğe bağlı işlem yöneticisini kullanabilmek için PHP Sürümünüz >= 5.3.9 olmalıdır. Daha önceki bir PHP sürümü için ondemand özelliğini seçerseniz, PHP başlatılamaz!';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Parçaları:';
-$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Parçaları:';
-$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Parçaları:';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
 $wb['no_server_error'] = 'Bir sunucu seçmelisiniz.';
 $wb['no_backup_txt'] = 'Yedek alınmasın';
 $wb['daily_backup_txt'] = 'Günlük';
@@ -122,16 +122,16 @@ $wb['allowed_rewrite_rule_directives_txt'] = 'Kullanılabilecek Yönergeler:';
 $wb['configuration_error_txt'] = 'AYAR HATASI';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['added_by_txt'] = 'Ekleyen';
-$wb['added_date_txt'] = 'EklendiÄŸi tarih';
+$wb['added_date_txt'] = 'Eklenme Tarihi';
 $wb['backup_excludes_txt'] = 'Katılmayacak Klasörler';
 $wb['backup_excludes_note_txt'] = '(Klasörleri virgül ile ayırarak yazın. Örnek: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karakterler bulunuyor.';
 $wb['invalid_custom_php_ini_settings_txt'] = 'php.ini ayarları geçersiz';
 $wb['invalid_system_user_or_group_txt'] = 'Sistem kullanıcısı ya da grubu geçersiz';
 $wb['apache_directive_blocked_error'] = 'Apache yönergesi güvenlik ayarları tarafından engellenmiş:';
-$wb['http_port_txt'] = 'HTTP Port';
-$wb['https_port_txt'] = 'HTTPS Port';
-$wb['http_port_error_regex'] = 'HTTP Port invalid.';
-$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
-$wb['nginx_directive_blocked_error'] = 'Nginx directive blocked by security settings:';
+$wb['http_port_txt'] = 'HTTP Kapı Numarası';
+$wb['https_port_txt'] = 'HTTPS Kapı Numarası';
+$wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.';
+$wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
+$wb['nginx_directive_blocked_error'] = 'nginx yönergesi güvenlik ayarları tarafından engellendi:';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_domain_admin_list.lng b/interface/web/sites/lib/lang/tr_web_domain_admin_list.lng
index f86967d0d408fd9ebc32f94e9155327e1d604769..487c6a087c36641ad1f56558bd21c97fa08aa53f 100644
--- a/interface/web/sites/lib/lang/tr_web_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_domain_admin_list.lng
@@ -4,6 +4,6 @@ $wb['list_head_txt'] = 'Web Siteleri';
 $wb['domain_id_txt'] = 'Kod';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['add_new_record_txt'] = 'Web Sitesi Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_domain_list.lng b/interface/web/sites/lib/lang/tr_web_domain_list.lng
index a2320b5dcdc6f9829c1ae895b76df8509e271685..fbfa57347041e3e0f04f60ff81696cae6412cd91 100644
--- a/interface/web/sites/lib/lang/tr_web_domain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_domain_list.lng
@@ -3,6 +3,6 @@ $wb['list_head_txt'] = 'Web Siteleri';
 $wb['domain_id_txt'] = 'Kod';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['add_new_record_txt'] = 'Web Sitesi Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_folder_user.lng b/interface/web/sites/lib/lang/tr_web_folder_user.lng
index a0479ee0d1e2ca7157ebe36c92144e25cf1a3217..afbe01cab1725117955b7a5906fb883a0c09713d 100644
--- a/interface/web/sites/lib/lang/tr_web_folder_user.lng
+++ b/interface/web/sites/lib/lang/tr_web_folder_user.lng
@@ -4,8 +4,8 @@ $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
 $wb['active_txt'] = 'Etkin';
 $wb['folder_error_empty'] = 'Bir web klasörü seçilmemiş.';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
diff --git a/interface/web/sites/lib/lang/tr_web_sites_stats_list.lng b/interface/web/sites/lib/lang/tr_web_sites_stats_list.lng
index 4fbdef871dea3644edb88d3ab8fcefc48e0f9b1c..685fc22fc69af8a5fb4d2565ebf622dd5ec88d0c 100644
--- a/interface/web/sites/lib/lang/tr_web_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_sites_stats_list.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['list_head_txt'] = 'Web TrafiÄŸi';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['this_month_txt'] = 'Bu ay';
 $wb['last_month_txt'] = 'Geçen ay';
 $wb['this_year_txt'] = 'Bu yıl';
diff --git a/interface/web/sites/lib/lang/tr_web_subdomain.lng b/interface/web/sites/lib/lang/tr_web_subdomain.lng
index 188b2575891321249cd9f3930bea635a436ef4db..7d1cdcc5c0d2c06efe7f9a0e2361683af00cd515 100644
--- a/interface/web/sites/lib/lang/tr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_subdomain.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
@@ -9,17 +9,17 @@ $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
-$wb['type_txt'] = 'Tip';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['type_txt'] = 'Tür';
 $wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
 $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IP Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
@@ -28,23 +28,23 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_wildcard'] = 'Genel karakterler içeren alt alan adları kullanılamaz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_wildcard'] = 'Genel karakterler içeren alt etki alanları kullanılamaz.';
 $wb['host_txt'] = 'Sunucu';
-$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
+$wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
-$wb['error_proxy_requires_url'] = '\\"Vekil Sunucu\\" yönlendirme tipi için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
-$wb['http_port_txt'] = 'HTTP Port';
-$wb['https_port_txt'] = 'HTTPS Port';
-$wb['http_port_error_regex'] = 'HTTP Port invalid.';
-$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
+$wb['error_proxy_requires_url'] = '"Vekil Sunucu" yönlendirme türü için, yönlendirilecek yolu gösteren bir İnternet adresi gereklidir.';
+$wb['http_port_txt'] = 'HTTP Kapı Numarası';
+$wb['https_port_txt'] = 'HTTPS Kapı Numarası';
+$wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.';
+$wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_subdomain_list.lng b/interface/web/sites/lib/lang/tr_web_subdomain_list.lng
index 8155af64b3df8679fd6a4d25179ff377431fadac..6527242e2d442bb57f4e34fc01b9e36e605101d1 100644
--- a/interface/web/sites/lib/lang/tr_web_subdomain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_subdomain_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Alt Alan Adları';
+$wb['list_head_txt'] = 'Alt Etki Alanları';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['domain_txt'] = 'Alt Alan Adı';
-$wb['add_new_record_txt'] = 'Alt Alan Ekle';
+$wb['domain_txt'] = 'Alt Etki Alanı';
+$wb['add_new_record_txt'] = 'Alt Etki Alanı Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 52b86ba657b32c6f923191a3b02feed1ca46396d..4cfe808bfb9a5d358d439505b6c22844d99decc7 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -3,7 +3,7 @@ $wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
 $wb['backup_copies_txt'] = 'Yedek Kopyası Sayısı';
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_key_txt'] = 'SSL Anahtarı';
@@ -11,13 +11,13 @@ $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
-$wb['ssl_domain_txt'] = 'SSL Alan Adı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. Lütfen / karakterini yazmayın.';
-$wb['type_txt'] = 'Tip';
+$wb['type_txt'] = 'Tür';
 $wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
@@ -25,62 +25,63 @@ $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IPv4 Adresi';
 $wb['ipv6_address_txt'] = 'IPv6 Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['errordocs_txt'] = 'Özel Hata Sayfaları';
-$wb['subdomain_txt'] = 'Otomatik Alt Alan';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt alan adı zaten var.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_acme_invalid'] = 'acme.invalid etki alanı adı kullanılamaz.';
+$wb['domain_error_autosub'] = 'Aynı ayarlara sahip bir alt etki alanı zaten var.';
 $wb['hd_quota_error_empty'] = 'Disk kotası 0 ya da boş olamaz.';
 $wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
-$wb['error_ssl_state_empty'] = 'SSL ÅŸehri boÅŸ olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
 $wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
-$wb['error_ssl_organisation_empty'] = 'SSL kurumu boÅŸ olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
 $wb['error_ssl_organisation_unit_empty'] = 'SSL birimi boÅŸ olamaz.';
 $wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
 $wb['error_ssl_cert_empty'] = 'SSL sertifikası alanı boş olamaz';
 $wb['client_group_id_txt'] = 'Müşteri';
-$wb['stats_password_txt'] = 'Web istatistikleri parolası';
+$wb['stats_password_txt'] = 'Web İstatistikleri Parolası';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Kullanılabilecek en fazla disk kotası';
-$wb['ssl_state_error_regex'] = 'SSL şehri geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
-$wb['ssl_organisation_error_regex'] = 'SSL kurumu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
-$wb['ssl_organistaion_unit_error_regex'] = 'SSL birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
 $wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Web istatistikleri kullanıcı adı';
-$wb['stats_type_txt'] = 'Web istatistikleri yazılımı';
-$wb['custom_php_ini_txt'] = 'Özel php.ini ayarları';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
 $wb['none_txt'] = 'Yok';
 $wb['disabled_txt'] = 'Devre Dışı';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['save_certificate_txt'] = 'Sertifikayı kaydet';
-$wb['create_certificate_txt'] = 'Sertifika ekle';
-$wb['delete_certificate_txt'] = 'Sertifikayı sil';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
 $wb['nginx_directives_txt'] = 'nginx Yönergeleri';
 $wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'PHP-FPM İçin Soket Kullanılsın';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
 $wb['error_no_sni_txt'] = 'Bu sunucuda SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası etkinleştirebilirsiniz.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -102,15 +103,15 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri sıfır ya da pozitif bir tamsayı olmalıdır.';
 $wb['pm_ondemand_hint_txt'] = 'İsteğe bağlı işlem yöneticisini kullanabilmek için PHP Sürümünüz >= 5.3.9 olmalıdır. Daha önceki bir PHP sürümü için ondemand özelliğini seçerseniz, PHP başlatılamaz!';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Parçaları:';
-$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Parçaları:';
-$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Parçaları:';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
 $wb['no_server_error'] = 'Bir sunucu seçmelisiniz.';
 $wb['no_backup_txt'] = 'Yedek alınmasın';
 $wb['daily_backup_txt'] = 'Günlük';
@@ -120,35 +121,39 @@ $wb['rewrite_rules_txt'] = 'Yeniden Yazma Kuralları';
 $wb['invalid_rewrite_rules_txt'] = 'Yeniden Yazma Kuralları Geçersiz';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Kullanılabilecek Yönergeler:';
 $wb['configuration_error_txt'] = 'AYAR HATASI';
+$wb['server_chosen_not_ok'] = 'Seçilmiş sunucuda bu hesap kullanılamıyor.';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['added_by_txt'] = 'Ekleyen';
-$wb['added_date_txt'] = 'EklendiÄŸi tarih';
+$wb['added_date_txt'] = 'Eklenme Tarihi';
 $wb['backup_excludes_txt'] = 'Katılmayacak Klasörler';
 $wb['backup_excludes_note_txt'] = '(Klasörleri virgül ile ayırarak yazın. Örnek: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karakterler bulunuyor.';
-$wb['server_chosen_not_ok'] = 'The selected server is not allowed for this account.';
-$wb['web_folder_txt'] = 'Web folder';
-$wb['web_folder_invalid_txt'] = 'The web folder is invalid, please choose a different one.';
-$wb['web_folder_unique_txt'] = 'The web folder is already used, please choose a different one.';
-$wb['host_txt'] = 'Hostname';
-$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
-$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['enable_spdy_txt'] = 'Enable SPDY/HTTP2';
-$wb['load_client_data_txt'] = 'Load client details';
-$wb['load_my_data_txt'] = 'Load my contact details';
-$wb['reset_client_data_txt'] = 'Reset data';
-$wb['ssl_letsencrypt_txt'] = 'Let\'s Encrypt SSL';
-$wb['rewrite_to_https_txt'] = 'Rewrite HTTP to HTTPS';
-$wb['password_strength_txt'] = 'Password strength';
-$wb['directive_snippets_id_txt'] = 'Web server config';
-$wb['http_port_txt'] = 'HTTP Port';
-$wb['https_port_txt'] = 'HTTPS Port';
-$wb['http_port_error_regex'] = 'HTTP Port invalid.';
-$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
-$wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
-$wb['log_retention_txt'] = 'Logfiles retention time';
-$wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['web_folder_txt'] = 'Web klasörü';
+$wb['web_folder_invalid_txt'] = 'Web klasörü geçersiz, lütfen başka bir klasör seçin.';
+$wb['web_folder_unique_txt'] = 'Web klasörü zaten kullanılıyor, lütfen başka bir klasör seçin.';
+$wb['host_txt'] = 'Sunucu adı';
+$wb['domain_error_wildcard'] = 'Genel alt etki alanları kullanılamaz.';
+$wb['variables_txt'] = 'DeÄŸiÅŸkenler';
+$wb['backup_excludes_txt'] = 'Katılmayacak Klasörler';
+$wb['backup_excludes_note_txt'] = '(Klasörleri virgül ile ayırarak yazın. Örnek: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karakterler bulunuyor.';
+$wb['subdomain_error_empty'] = 'Alt etki alanı boş ya da geçersiz karakterler içeriyor.';
+$wb['btn_save_txt'] = 'Kaydet';
+$wb['btn_cancel_txt'] = 'Ä°ptal';
+$wb['enable_spdy_txt'] = 'SPDY kullanılsın';
+$wb['load_client_data_txt'] = 'Müşteri Bilgilerini Yükle';
+$wb['load_my_data_txt'] = 'Profil Bilgilerimi Yükle';
+$wb['reset_client_data_txt'] = 'Verileri Sıfırla';
+$wb['document_root_txt'] = 'Belge Kök Klasörü';
+$wb['ssl_letsencrypt_txt'] = 'Let';
+$wb['rewrite_to_https_txt'] = 'HTTP, HTTPS Yönlendirme';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
+$wb['directive_snippets_id_txt'] = 'Web Sunucu Yapılandırması';
+$wb['http_port_txt'] = 'HTTP Kapı Numarası';
+$wb['https_port_txt'] = 'HTTPS Kapı Numarası';
+$wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.';
+$wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
+$wb['enable_pagespeed_txt'] = 'PageSpeed Kullanılsın';
+$wb['log_retention_txt'] = 'Günlük Dosyalarının Silinme Sıklığı';
+$wb['log_retention_error_regex'] = 'Gün cinsinden günlük dosyalarının silinme sıklığı (En küçük: 0 - En büyük: 9999)';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain_admin_list.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain_admin_list.lng
index 4f07fd858847320507e6139e777fbce2abb646c2..423e9562347a7609d2057f0d64bd83459d0a576a 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain_admin_list.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['sys_groupid_txt'] = 'Client';
-$wb['list_head_txt'] = 'Websites';
-$wb['domain_id_txt'] = 'ID';
-$wb['active_txt'] = 'Active';
-$wb['server_id_txt'] = 'Server';
-$wb['domain_txt'] = 'Domain';
-$wb['add_new_record_txt'] = 'Add new website';
-$wb['add_new_subdomain_txt'] = 'Add new subdomain';
-$wb['add_new_aliasdomain_txt'] = 'Add new aliasdomain';
-$wb['domain_list_head_txt'] = 'Websites';
-$wb['aliasdomain_list_head_txt'] = 'Aliasdomains (Vhost)';
-$wb['subdomain_list_head_txt'] = 'Subdomains (Vhost)';
+$wb['sys_groupid_txt'] = 'Müşteri';
+$wb['list_head_txt'] = 'Web Siteleri';
+$wb['domain_id_txt'] = 'Kod';
+$wb['active_txt'] = 'Etkin';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Web Sitesi Ekle';
+$wb['add_new_subdomain_txt'] = 'Alt Etki Alanı Ekle';
+$wb['add_new_aliasdomain_txt'] = 'Takma Etki Alanı Ekle';
+$wb['domain_list_head_txt'] = 'Web Siteleri';
+$wb['aliasdomain_list_head_txt'] = 'Takma Etki Alanları (Sanal Sunucu)';
+$wb['subdomain_list_head_txt'] = 'Alt Etki Alanları (Sanal Sunucu)';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain_list.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain_list.lng
index b7df7ed9d049b1c6afd48ab009bb4eefd92ecc60..061afec494e79a8ab3600fea7359464ebe4217c9 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain_list.lng
@@ -3,12 +3,12 @@ $wb['list_head_txt'] = 'Web Siteleri';
 $wb['domain_id_txt'] = 'Kod';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['parent_domain_id_txt'] = 'Website';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['add_new_record_txt'] = 'Web Sitesi Ekle';
-$wb['add_new_subdomain_txt'] = 'Add new subdomain';
-$wb['add_new_aliasdomain_txt'] = 'Add new aliasdomain';
-$wb['domain_list_head_txt'] = 'Websites';
-$wb['aliasdomain_list_head_txt'] = 'Aliasdomains (Vhost)';
-$wb['subdomain_list_head_txt'] = 'Subdomains (Vhost)';
+$wb['add_new_subdomain_txt'] = 'Alt Etki Alanı Ekle';
+$wb['add_new_aliasdomain_txt'] = 'Takma Etki Alanı Ekle';
+$wb['parent_domain_id_txt'] = 'Web Sitesi';
+$wb['domain_list_head_txt'] = 'Web Siteleri';
+$wb['aliasdomain_list_head_txt'] = 'Takma Etki Alanları (Sanal Sunucu)';
+$wb['subdomain_list_head_txt'] = 'Alt Etki Alanı Adları (Sanal Sunucu)';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
index 2bbcfb661cb1b7775db05ff0a77ca06779036583..a24883881f1667c12e8f46483322ebc714d4e999 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
@@ -7,7 +7,7 @@ $wb['backup_interval_txt'] = 'Yedekleme Sıklığı';
 $wb['backup_copies_txt'] = 'Yedek Kopyası Sayısı';
 $wb['ssl_state_txt'] = 'Ä°l';
 $wb['ssl_locality_txt'] = 'Bölge';
-$wb['ssl_organisation_txt'] = 'Kurum';
+$wb['ssl_organisation_txt'] = 'KuruluÅŸ';
 $wb['ssl_organisation_unit_txt'] = 'Birim';
 $wb['ssl_country_txt'] = 'Ãœlke';
 $wb['ssl_key_txt'] = 'SSL Anahtarı';
@@ -15,13 +15,14 @@ $wb['ssl_request_txt'] = 'SSL Ä°steÄŸi';
 $wb['ssl_cert_txt'] = 'SSL Sertifikası';
 $wb['ssl_bundle_txt'] = 'SSL Yığını';
 $wb['ssl_action_txt'] = 'SSL Ä°ÅŸlemi';
-$wb['ssl_domain_txt'] = 'SSL Alan Adı';
+$wb['ssl_domain_txt'] = 'SSL Etki Alanı';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['domain_txt'] = 'Alan Adı';
+$wb['domain_txt'] = 'Etki Alanı';
 $wb['host_txt'] = 'Sunucu Adı';
 $wb['web_folder_error_regex'] = 'Yazılan klasör geçersiz. Lütfen / karakteri kullanmadan yazın.';
-$wb['type_txt'] = 'Tip';
-$wb['redirect_type_txt'] = 'Yönlendirme Tipi';
+$wb['type_txt'] = 'Tür';
+$wb['parent_domain_id_txt'] = 'Ãœst Web Sitesi';
+$wb['redirect_type_txt'] = 'Yönlendirme Türü';
 $wb['redirect_path_txt'] = 'Yönlendirme Yolu';
 $wb['active_txt'] = 'Etkin';
 $wb['document_root_txt'] = 'Kök Klasör';
@@ -29,30 +30,30 @@ $wb['system_user_txt'] = 'Linux Kullanıcısı';
 $wb['system_group_txt'] = 'Linux Grubu';
 $wb['ip_address_txt'] = 'IPv4 Adresi';
 $wb['ipv6_address_txt'] = 'IPv6 Adresi';
-$wb['vhost_type_txt'] = 'SSunucu Tipi';
+$wb['vhost_type_txt'] = 'Sanal Sunucu Türü';
 $wb['hd_quota_txt'] = 'Disk Kotası';
 $wb['traffic_quota_txt'] = 'Trafik Kotası';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
 $wb['errordocs_txt'] = 'Özel Hata Sayfaları';
-$wb['subdomain_txt'] = 'Otomatik Alt Alan';
+$wb['subdomain_txt'] = 'Otomatik Alt Etki Alanı';
 $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Müşteri';
-$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alan adı sayısına ulaştınız.';
-$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla başka alan adı sayısına ulaştınız.';
-$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt alan adı sayısına ulaştınız.';
+$wb['limit_web_domain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla etki alanı sayısına ulaştınız.';
+$wb['limit_web_aliasdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla takma etki alanı sayısına ulaştınız.';
+$wb['limit_web_subdomain_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla alt etki alanı sayısına ulaştınız.';
 $wb['apache_directives_txt'] = 'Apache Yönergeleri';
-$wb['domain_error_empty'] = 'Alan adı boş olamaz.';
-$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/başka alan adı var.';
-$wb['domain_error_regex'] = 'Alan adı geçersiz.';
-$wb['domain_error_wildcard'] = 'Genel karakterler içeren alt alan adları kullanılamaz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'Aynı adlı bir web sitesi ya da alt/takma etki alanı var.';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_wildcard'] = 'Genel karakterler içeren alt etki alanları kullanılamaz.';
 $wb['hd_quota_error_empty'] = 'Disk kotası 0 ya da boş olamaz.';
 $wb['traffic_quota_error_empty'] = 'Trafik kotası boş olamaz.';
-$wb['error_ssl_state_empty'] = 'SSL ÅŸehri boÅŸ olamaz.';
+$wb['error_ssl_state_empty'] = 'SSL ili boÅŸ olamaz.';
 $wb['error_ssl_locality_empty'] = 'SSL bölgesi boş olamaz.';
-$wb['error_ssl_organisation_empty'] = 'SSL kurumu boÅŸ olamaz.';
+$wb['error_ssl_organisation_empty'] = 'SSL kuruluÅŸu boÅŸ olamaz.';
 $wb['error_ssl_organisation_unit_empty'] = 'SSL birimi boÅŸ olamaz.';
 $wb['error_ssl_country_empty'] = 'SSL ülkesi boş olamaz.';
 $wb['error_ssl_cert_empty'] = 'SSL sertifikası alanı boş olamaz';
@@ -60,31 +61,31 @@ $wb['client_group_id_txt'] = 'Müşteri';
 $wb['stats_password_txt'] = 'Web istatistikleri parolasını ayarla';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Kullanılabilecek en fazla disk kotası';
-$wb['ssl_state_error_regex'] = 'SSL şehri geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_organisation_error_regex'] = 'SSL kurumu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
-$wb['ssl_organistaion_unit_error_regex'] = 'SSL birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_';
+$wb['ssl_state_error_regex'] = 'SSL ili geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'SSL bölgesi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'SSL kuruluşu geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL kuruluşu birimi geçersiz. Kullanılabilecek karakterler: a-z, 0-9 ve .,-_&äöüÄÖÜ';
 $wb['ssl_country_error_regex'] = 'SSL ülkesi geçersiz. Kullanılabilecek karakterler: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Kullanılabilecek en fazla trafik kotası';
 $wb['redirect_error_regex'] = 'Yönlendirme yolu geçersiz. Geçerli örnekler: /test/ ya da http://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['traffic_quota_exceeded_txt'] = 'Trafik kotası aşıldı';
 $wb['ruby_txt'] = 'Ruby';
-$wb['stats_user_txt'] = 'Web istatistikleri kullanıcı adı';
-$wb['stats_type_txt'] = 'Web istatistikleri yazılımı';
-$wb['custom_php_ini_txt'] = 'Özel php.ini ayarları';
+$wb['stats_user_txt'] = 'Web İstatistikleri Kullanıcı Adı';
+$wb['stats_type_txt'] = 'Web İstatistikleri Uygulaması';
+$wb['custom_php_ini_txt'] = 'Özel php.ini Ayarları';
 $wb['none_txt'] = 'Yok';
 $wb['disabled_txt'] = 'Devre Dışı';
 $wb['no_redirect_txt'] = 'Yönlendirme yok';
 $wb['no_flag_txt'] = 'Ä°ÅŸaret yok';
-$wb['save_certificate_txt'] = 'Sertifikayı kaydet';
-$wb['create_certificate_txt'] = 'Sertifika ekle';
-$wb['delete_certificate_txt'] = 'Sertifikayı sil';
+$wb['save_certificate_txt'] = 'Sertifikayı Kaydet';
+$wb['create_certificate_txt'] = 'Sertifika Ekle';
+$wb['delete_certificate_txt'] = 'Sertifikayı Sil';
 $wb['nginx_directives_txt'] = 'nginx Yönergeleri';
 $wb['seo_redirect_txt'] = 'AMD Yönlendirme';
 $wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
 $wb['www_to_non_www_txt'] = 'www -&gt; non-www';
-$wb['php_fpm_use_socket_txt'] = 'PHP-FPM İçin Soket Kullanılsın';
+$wb['php_fpm_use_socket_txt'] = 'PHP-FPM Soketi';
 $wb['error_no_sni_txt'] = 'Bu sunucuda SSL için SNI etkinleştirilmemiş. Bir IP adresi için yalnız bir SSL sertifikası etkinleştirebilirsiniz.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -106,26 +107,26 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
 $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout değeri pozitif bir tamsayı olmalıdır.';
 $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests değeri sıfır ya da pozitif bir tamsayı olmalıdır.';
 $wb['pm_ondemand_hint_txt'] = 'İsteğe bağlı işlem yöneticisini kullanabilmek için PHP Sürümünüz >= 5.3.9 olmalıdır. Daha önceki bir PHP sürümü için ondemand özelliğini seçerseniz, PHP başlatılamaz!';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Parçaları:';
-$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Parçaları:';
-$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Parçaları:';
+$wb['available_php_directive_snippets_txt'] = 'Kullanılabilecek PHP Yönerge Kod Parçaları:';
+$wb['available_apache_directive_snippets_txt'] = 'Kullanılabilecek Apache Yönerge Kod Parçaları:';
+$wb['available_nginx_directive_snippets_txt'] = 'Kullanılabilecek nginx Yönerge Kod Parçaları:';
 $wb['proxy_directives_txt'] = 'Vekil Sunucu Yönergeleri';
-$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Parçaları:';
+$wb['available_proxy_directive_snippets_txt'] = 'Kullanılabilecek Vekil Sunucu Yönerge Kod Parçaları:';
 $wb['rewrite_rules_txt'] = 'Yeniden Yazma Kuralları';
 $wb['invalid_rewrite_rules_txt'] = 'Yeniden Yazma Kuralları Geçersiz';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Kullanılabilecek Yönergeler:';
-$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
+$wb['configuration_error_txt'] = 'YAPILANDIRMA HATASI';
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['backup_excludes_txt'] = 'Katılmayacak Klasörler';
 $wb['backup_excludes_note_txt'] = '(Klasörleri virgül ile ayırarak yazın. Örnek: web/cache/*,web/backup)';
 $wb['backup_excludes_error_regex'] = 'Katılmayacak klasörlerde geçersiz karakterler bulunuyor.';
-$wb['subdomain_error_empty'] = 'Alt alan adı boş ya da geçersiz karakterler içeriyor.';
-$wb['http_port_txt'] = 'HTTP Port';
-$wb['https_port_txt'] = 'HTTPS Port';
-$wb['http_port_error_regex'] = 'HTTP Port invalid.';
-$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
+$wb['subdomain_error_empty'] = 'Alt etki alanı boş ya da geçersiz karakterler içeriyor.';
+$wb['http_port_txt'] = 'HTTP Kapı Numarası';
+$wb['https_port_txt'] = 'HTTPS Kapı Numarası';
+$wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.';
+$wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_subdomain_list.lng b/interface/web/sites/lib/lang/tr_web_vhost_subdomain_list.lng
index bc7e7622c232eb8f4b41f0463193b4bc1850a918..6527242e2d442bb57f4e34fc01b9e36e605101d1 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_subdomain_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_subdomain_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Alt Alanlar';
+$wb['list_head_txt'] = 'Alt Etki Alanları';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
-$wb['domain_txt'] = 'Alt Alan Adı';
-$wb['add_new_record_txt'] = 'Alt alan ekle';
+$wb['domain_txt'] = 'Alt Etki Alanı';
+$wb['add_new_record_txt'] = 'Alt Etki Alanı Ekle';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_webdav_user.lng b/interface/web/sites/lib/lang/tr_webdav_user.lng
index e592f052c4399691838bbca49c1df986a420b298..c80088da954913a86d66d3851dd0ce5cf5edfd98 100644
--- a/interface/web/sites/lib/lang/tr_webdav_user.lng
+++ b/interface/web/sites/lib/lang/tr_webdav_user.lng
@@ -4,7 +4,7 @@ $wb['server_id_txt'] = 'Sunucu';
 $wb['parent_domain_id_txt'] = 'Web Sitesi';
 $wb['username_txt'] = 'Kullanıcı Adı';
 $wb['password_txt'] = 'Parola';
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['active_txt'] = 'Etkin';
 $wb['limit_webdav_user_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla webdav kullanıcısı sayısına ulaştınız.';
 $wb['username_error_empty'] = 'Kullanıcı adı boş olamaz.';
@@ -14,7 +14,7 @@ $wb['directory_error_empty'] = 'Klasör boş olamaz.';
 $wb['parent_domain_id_error_empty'] = 'Bir web sitesi seçmelisiniz.';
 $wb['dir_dot_error'] = 'Yol içinde .. kullanılamaz.';
 $wb['dir_slashdot_error'] = 'Yol içinde ./ kullanılamaz.';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
diff --git a/interface/web/sites/lib/remote.conf.php b/interface/web/sites/lib/remote.conf.php
index a9ef3236b708a6da3abafd7290a78c4a75cf00ec..19a48e3ca5ddb9df5029e8fd3dd45cf7649d0c57 100644
--- a/interface/web/sites/lib/remote.conf.php
+++ b/interface/web/sites/lib/remote.conf.php
@@ -9,4 +9,5 @@ $function_list['sites_web_domain_backup'] = 'Sites Backup functions';
 $function_list['sites_web_aliasdomain_get,sites_web_aliasdomain_add,sites_web_aliasdomain_update,sites_web_aliasdomain_delete'] = 'Sites Aliasdomain functions';
 $function_list['sites_web_subdomain_get,sites_web_subdomain_add,sites_web_subdomain_update,sites_web_subdomain_delete'] = 'Sites Subdomain functions';
 $function_list['sites_aps_update_package_list,sites_aps_available_packages_list,sites_aps_change_package_status,sites_aps_install_package,sites_aps_get_package_details,sites_aps_get_package_file,sites_aps_get_package_settings,sites_aps_instance_get,sites_aps_instance_delete'] = 'Sites APS functions';
+$function_list['sites_webdav_user_get,sites_webdav_user_add,sites_webdav_user_update,sites_webdav_user_delete'] = 'Sites WebDAV-User functions';
 ?>
diff --git a/interface/web/sites/list/aps_installedpackages.list.php b/interface/web/sites/list/aps_installedpackages.list.php
index d9a51d8befbd98ea1699cc188134ed368e5a1262..1f855082d5ef25778a793d1f2c58d7c15fd00521 100644
--- a/interface/web/sites/list/aps_installedpackages.list.php
+++ b/interface/web/sites/list/aps_installedpackages.list.php
@@ -28,6 +28,12 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+// Load the APS language file
+$lngfile = 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'_aps.lng';
+require_once $lngfile;
+$app->tpl->setVar($wb);
+$app->load_language_file('web/sites/'.$lngfile);
+
 $liste['name'] = 'aps_instances'; // Name of the list
 $liste['table'] = 'aps_instances'; // Database table
 $liste['table_idx'] = 'id'; // Table index
@@ -85,9 +91,9 @@ $liste["item"][] = array('field'    => 'instance_status',
 	'prefix'   => '',
 	'suffix'   => '',
 	'width'    => '',
-	'value'    => array(INSTANCE_INSTALL => $app->lng('Installation_task'),
-		INSTANCE_ERROR => $app->lng('Installation_error'),
-		INSTANCE_SUCCESS => $app->lng('Installation_success'),
-		INSTANCE_REMOVE => $app->lng('Installation_remove')),
+	'value'    => array(INSTANCE_INSTALL => $app->lng('installation_task_txt'),
+		INSTANCE_ERROR => $app->lng('installation_error_txt'),
+		INSTANCE_SUCCESS => $app->lng('installation_success_txt'),
+		INSTANCE_REMOVE => $app->lng('installation_remove_txt')),
 	'table' => 'aps_instances');
 ?>
diff --git a/interface/web/sites/templates/aps_install_package.htm b/interface/web/sites/templates/aps_install_package.htm
index d04d671534b4f2f3f6964544c25710be1208df93..255a8685d5a76467c202521c7040a145b43db955 100644
--- a/interface/web/sites/templates/aps_install_package.htm
+++ b/interface/web/sites/templates/aps_install_package.htm
@@ -1,58 +1,125 @@
 <h1>
-    {tmpl_var name='installation_txt'}: {tmpl_var name='pkg_name'} {tmpl_var name='pkg_version'}-{tmpl_var name='pkg_release'}
-    <span style="float:right">
-        <tmpl_if name='pkg_icon' op='!=' value=''>
-            <img src="{tmpl_var name='pkg_icon'}" height="32" width="32" alt="{tmpl_var name='pkg_name'}" style="vertical-align:text-bottom;" /> 
-        </tmpl_if>
-    </span>
+	{tmpl_var name='installation_txt'}: {tmpl_var name='pkg_name'} {tmpl_var name='pkg_version'}-{tmpl_var name='pkg_release'}
+	<span style="float:right">
+		<tmpl_if name='pkg_icon' op='!=' value=''>
+			<img src="{tmpl_var name='pkg_icon'}" height="32" width="32" alt="{tmpl_var name='pkg_name'}" style="vertical-align:text-bottom;" />
+		</tmpl_if>
+	</span>
 </h1>
-    
+
 <tmpl_if name='error'>
-    <div id="errorMsg"><h3>ERROR</h3><ol>{tmpl_var name='error'}</ol></div>
+	<div id="errorMsg"><h3>ERROR</h3><ol>{tmpl_var name='error'}</ol></div>
 </tmpl_if>
 
 
-        
-            <legend>{tmpl_var name='basic_settings_txt'}</legend>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='install_location_txt'}</label>
-                <div class="col-sm-9">
-				    <div class='input-group'>
+
+			<legend>{tmpl_var name='basic_settings_txt'}</legend>
+			<div class="form-group">
+				<label class="col-sm-3 control-label">{tmpl_var name='install_location_txt'}</label>
+				<div class="col-sm-9">
+					<div class='input-group'>
 						<span class='input-group-addon'>http(s)://</span>
 						<div class='input-group-field'>
 							DOMAIN_LIST_SPACE
 						</div>
 						<span class='input-group-addon'>/</span>
 						<input type="text" id="main_location" name="main_location" value="{tmpl_var name='inp_main_location'}" class="form-control" />
-                    </div>
+					</div>
 				</div>
-            </div>
+			</div>
 			<tmpl_if name='pkg_requirements_database' op='!=' value=''>
-                <div class="form-group">
-                    <label for="main_database_password" class="col-sm-3 control-label">{tmpl_var name='new_database_password_txt'}</label>
-                    <div class="col-sm-9"><input type="text" class="form-control" name="main_database_password" id="main_database_password" value="{tmpl_var name='inp_main_database_password'}" /></div></div>
-            </tmpl_if>
-                
-            PKG_SETTINGS_SPACE
-                
-            <legend>{tmpl_var name='license_txt'}</legend>
-            <div class="form-group">
-                <label for="license" class="col-sm-3 control-label">{tmpl_var name='license_txt'}</label>
-                <tmpl_if name='pkg_license_content' op='==' value=''>{tmpl_var name='pkg_license_name'}<br /></tmpl_if>
-                <tmpl_if name='pkg_license_type' op='==' value='url'>
-                    <a href="{tmpl_var name='pkg_license_content'}" target="_blank">{tmpl_var name='pkg_license_content'}</a>
-                    <tmpl_elseif name='pkg_license_content'>
-                        <div class="col-sm-9"><textarea class="form-control" rows="10" cols="80" id="license_text">{tmpl_var name='pkg_license_content'}</textarea></div>
-                </tmpl_if>
-            </div>
-            <div class="form-group">
-                <label for="license" class="col-sm-3 control-label">{tmpl_var name='acceptance_txt'}</label>
-                <div class="col-sm-6"><input type="checkbox" name="license" id="license" <tmpl_if name='inp_license' op='==' value='true'>checked</tmpl_if>/> &nbsp;&nbsp;{tmpl_var name='acceptance_text'}
-            </div>
-        
-            
-        <input type="hidden" name="install" value="0" />
-        <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_install_txt'}" name="btn_install" onclick="document.pageForm.install.value=1; ISPConfig.submitForm('pageForm','sites/aps_install_package.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='btn_install_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/aps_availablepackages_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
+				<div class="form-group">
+					<label for="main_database_password" class="col-sm-3 control-label">{tmpl_var name='new_database_password_txt'}</label>
+					<div class="col-sm-9"><input type="text" class="form-control" name="main_database_password" id="main_database_password" value="{tmpl_var name='inp_main_database_password'}" /></div>
+				</div>
+			</tmpl_if>
+
+			PKG_SETTINGS_SPACE
+
+			<legend>{tmpl_var name='license_txt'}</legend>
+			<div class="form-group">
+				<label for="license" class="col-sm-3 control-label">{tmpl_var name='license_txt'}</label>
+				<tmpl_if name='pkg_license_content' op='==' value=''>{tmpl_var name='pkg_license_name'}<br /></tmpl_if>
+				<tmpl_if name='pkg_license_type' op='==' value='url'>
+					<a href="{tmpl_var name='pkg_license_content'}" target="_blank">{tmpl_var name='pkg_license_content'}</a>
+					<tmpl_elseif name='pkg_license_content'>
+						<div class="col-sm-9"><textarea class="form-control" rows="10" cols="80" id="license_text">{tmpl_var name='pkg_license_content'}</textarea></div>
+				</tmpl_if>
+			</div>
+			<div class="form-group">
+				<label for="license" class="col-sm-3 control-label">{tmpl_var name='acceptance_txt'}</label>
+				<div class="col-sm-6">
+					<input type="checkbox" name="license" id="license" <tmpl_if name='inp_license' op='==' value='true'>checked</tmpl_if>/> &nbsp;&nbsp;{tmpl_var name='acceptance_text'}
+				</div>
+			</div>
+
+
+		<input type="hidden" name="install" value="0" />
+		<div class="clear">
+			<div class="right">
+				<button class="btn btn-default formbutton-success positive" type="button" value="{tmpl_var name='btn_install_txt'}" name="btn_install" onclick="document.pageForm.install.value=1; ISPConfig.submitForm('pageForm','sites/aps_install_package.php?id={tmpl_var name='pkg_id'}');">{tmpl_var name='btn_install_txt'}</button>
+				<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="sites/aps_availablepackages_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+			</div>
+		</div>
+
+		<div class="hidden" id="passwordFieldWithChecks">
+			<div class="form-group">
+				<label for="password" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+				<div class="col-sm-9">
+					<div class="input-group">
+						<input type="password" name="password" id="password" value="{tmpl_var name='password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />
+						<span class="input-group-btn">
+							<button class="btn btn-default" type="button" onclick="generatePassword('password','repeat_password');">{tmpl_var name='generate_password_txt'}</button>
+						</span>
+						<p class="formHint"></p>
+					</div>
+				</div>
+			</div>
+			<div class="form-group">
+				<label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
+				<div class="col-sm-9 checkbox">
+					<div id="passBar"></div>
+					<span id="passText">&nbsp;</span>
+				</div>
+			</div>
+			<div class="form-group">
+				<label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+				<div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off" onkeyup="checkPassMatch('password','repeat_password');" /></div></div>
+			<div class="form-group">
+				<div class="col-sm-offset-3 col-sm-9">
+					<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+					<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
+				</div>
+			</div>
+		</div>
+
+		<script type="text/javascript">
+			jQuery(document).ready(function () {
+				let passwordField = jQuery('[type=password]').first();
+				if (!passwordField) {
+					return;
+				}
+
+				let passwordFieldFormGroup = passwordField.closest('.form-group');
+				let passwordFieldWithChecks = jQuery('#passwordFieldWithChecks');
+		
+				let originalLabel = passwordFieldFormGroup.find('label').first().text();
+				let originalName = passwordField.prop('name');
+				let originalMaxLength = passwordField.prop('maxlength');
+				let originalValue = passwordField.prop('value');
+				let originalFormHint = passwordField.next('.formHint').text();
+
+				let passwordFieldWithChecksInputField = passwordFieldWithChecks.find('[type=password]').first();
+				passwordFieldWithChecksInputField.prop('name', originalName);
+				passwordFieldWithChecksInputField.prop('value', originalValue);
+				passwordFieldWithChecksInputField.prop('name', originalName);
+				passwordFieldWithChecks.find('label').first().text(originalLabel);
+				passwordFieldWithChecks.find('.formHint').text(originalFormHint);
+		
+				if (originalMaxLength && originalMaxLength > 0) {
+					passwordFieldWithChecksInputField.prop('maxlength', originalMaxLength);
+				}
+
+				passwordFieldFormGroup.replaceWith(passwordFieldWithChecks.children());
+			});
+		</script>
diff --git a/interface/web/sites/templates/aps_instances_list.htm b/interface/web/sites/templates/aps_instances_list.htm
index cfde591b195398190f7afa2f43023847da3b1d0e..ae3d095e7b1d8ab4f6d1064ed9bd387b1201ec2e 100644
--- a/interface/web/sites/templates/aps_instances_list.htm
+++ b/interface/web/sites/templates/aps_instances_list.htm
@@ -40,7 +40,7 @@
                             <td><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='instance_status'}</span></td>
                             <td class="text-right">
                                 <tmpl_if name='delete_possible'>
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}','{tmpl_var name='pkg_delete_confirmation'}')"><span class="icon icon-delete"></span></button>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}','{tmpl_var name='pkg_delete_confirmation'}')"><span class="icon icon-delete"></span></button>
                                 </tmpl_if>
                             </td>        
                         </tr>
diff --git a/interface/web/sites/templates/aps_packages_list.htm b/interface/web/sites/templates/aps_packages_list.htm
index d3f3f8c3bb10ff4fbbfb70e06b79ed472b07851f..fa3582ed7435709debb13b750e4a1007676cfc6b 100644
--- a/interface/web/sites/templates/aps_packages_list.htm
+++ b/interface/web/sites/templates/aps_packages_list.htm
@@ -6,7 +6,7 @@
 <table class="table">
                 <thead class="dark form-group-sm">
                     <tr>
-                        <th>{tmpl_var name='name_txt'}</th>
+                        <th colspan="2">{tmpl_var name='name_txt'}</th>
                         <th>{tmpl_var name='version_txt'}</th>
                         <th>{tmpl_var name='category_txt'}</th>
                             <tmpl_if name='is_admin'>
@@ -15,7 +15,7 @@
                         <th class="small-col text-right">&nbsp;</th>
                     </tr>
                     <tr>
-                        <td><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
+                        <td colspan="2"><input class="form-control" type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
                         <td><input class="form-control" type="text" name="search_version" value="{tmpl_var name='search_version'}" /></td>
                         <td><select class="form-control" name="search_category" onChange="ISPConfig.submitForm('pageForm','sites/aps_availablepackages_list.php');">{tmpl_var name='search_category'}</select></td>
                             <tmpl_if name='is_admin'>
@@ -27,11 +27,11 @@
                 <tbody>
                     <tmpl_loop name='records'>
                         <tr>
-                            <td><a href="#" data-load-content="sites/aps_packagedetails_show.php?id={tmpl_var name='id'}">{tmpl_var name='name'}</a></td>
+                            <td colspan="2"><a href="#" data-load-content="sites/aps_packagedetails_show.php?id={tmpl_var name='id'}">{tmpl_var name='name'}</a></td>
                             <td>{tmpl_var name='version'}-{tmpl_var name='release'}</td>
                             <td>{tmpl_var name='category'}</td>
                                 <tmpl_if name='is_admin'>
-                                    <td><a href="javascript:ISPConfig.loadContentInto('status_content{tmpl_var name='__ROWNUM__'}', 'sites/aps_do_operation.php?action=change_status&id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='package_status'}</span></a></td>
+                                    <td><a href="javascript:ISPConfig.loadContentInto('status_content{tmpl_var name='__ROWNUM__'}', 'sites/aps_do_operation.php?action=change_status&id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}');"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='package_status'}</span></a></td>
                                 </tmpl_if>
                             <td class="text-right">&nbsp;</td>
                         </tr>
diff --git a/interface/web/sites/templates/cron_list.htm b/interface/web/sites/templates/cron_list.htm
index b38a6224a5f8bc999194b5e27698200ab7bb0ba7..fbca26a84418c983c48e52b76ec4baea6c1863bb 100644
--- a/interface/web/sites/templates/cron_list.htm
+++ b/interface/web/sites/templates/cron_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='command'}">{tmpl_var name="command"}</a></td>
                             <td class="text-right">
                                 <div class="buttons icons16">    
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/cron_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/cron_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                                 </div>
                             </td>
                         </tr>
diff --git a/interface/web/sites/templates/database_admin_list.htm b/interface/web/sites/templates/database_admin_list.htm
index aad56db3373a28e5bc7c65966b1f7860e8acc395..724027ca910193620e7cb03aa49b565780eb15f9 100644
--- a/interface/web/sites/templates/database_admin_list.htm
+++ b/interface/web/sites/templates/database_admin_list.htm
@@ -61,7 +61,7 @@
                                     <a class="btn btn-default formbutton-default formbutton-narrow" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span class="icon icon-dbadmin"></span></a>
                                 </tmpl_if>
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/database_list.htm b/interface/web/sites/templates/database_list.htm
index 0d0aaca92304e1dfb1388fe372fda682214120d5..208741ff5a1d6dd298a8d77ee8d78828ab70cf56 100644
--- a/interface/web/sites/templates/database_list.htm
+++ b/interface/web/sites/templates/database_list.htm
@@ -75,7 +75,7 @@
                                     <a class="btn btn-default formbutton-default formbutton-narrow" href="sites/database_phpmyadmin.php?id={tmpl_var name='id'}" target="phpmyadmin"><span class="icon icon-dbadmin"></span></a>
                                 </tmpl_if>
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&amp;phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/database_user_admin_list.htm b/interface/web/sites/templates/database_user_admin_list.htm
index 2d7ece0b87236591b4301ff76753672300e8a996..0b7eb1be098ccf09cd3583234d4aaca3f4698af7 100644
--- a/interface/web/sites/templates/database_user_admin_list.htm
+++ b/interface/web/sites/templates/database_user_admin_list.htm
@@ -33,7 +33,7 @@
                             <td><a href="#" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>                            
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/database_user_list.htm b/interface/web/sites/templates/database_user_list.htm
index b29d5c060079cb1dbc1577098a6ae86dc2e710c9..3cca7ec51033b4416ea835e20a705b304e48936c 100644
--- a/interface/web/sites/templates/database_user_list.htm
+++ b/interface/web/sites/templates/database_user_list.htm
@@ -46,7 +46,7 @@
                             <td><a href="#" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_user"}</a></td>
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="sites/database_user_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/database_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/ftp_user_list.htm b/interface/web/sites/templates/ftp_user_list.htm
index 43650dac8952330509d365d984ea2160e5d98f25..bd807c5072820c578861fc3db483dd91dee524de 100644
--- a/interface/web/sites/templates/ftp_user_list.htm
+++ b/interface/web/sites/templates/ftp_user_list.htm
@@ -59,7 +59,7 @@
                             <tmpl_if name="webftp_link">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" href="{tmpl_var name='webftp_url'}" target="_blank"><span class="icon icon-dbadmin"></span></button>
                             </tmpl_if>
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/ftp_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/ftp_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/shell_user_list.htm b/interface/web/sites/templates/shell_user_list.htm
index 9be1d8485dfc144ec893d00624338028c8e5e8ae..53eb6906fab21e79d376a5917ab8fbc0f2241916 100644
--- a/interface/web/sites/templates/shell_user_list.htm
+++ b/interface/web/sites/templates/shell_user_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="sites/shell_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                             <td><a href="#" data-load-content="sites/shell_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/shell_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/shell_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/web_childdomain_list.htm b/interface/web/sites/templates/web_childdomain_list.htm
index 51aadc157a28b9d63eb3cdab71ca4ddf5d0561c6..8aa5dc3447df99e8b07e75a243ce600b2337c517 100644
--- a/interface/web/sites/templates/web_childdomain_list.htm
+++ b/interface/web/sites/templates/web_childdomain_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="sites/web_childdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                             <td><a href="#" data-load-content="sites/web_childdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_childdomain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_childdomain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/templates/web_folder_list.htm b/interface/web/sites/templates/web_folder_list.htm
index aaccb48895659d22f1978130152305c48882a2f3..e512b8b59440a61fb66133d97aa281517cbc957c 100644
--- a/interface/web/sites/templates/web_folder_list.htm
+++ b/interface/web/sites/templates/web_folder_list.htm
@@ -55,7 +55,7 @@
                         <td><a href="#" data-load-content="sites/web_folder_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                         <td><a href="#" data-load-content="sites/web_folder_edit.php?id={tmpl_var name='id'}">{tmpl_var name="path"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/sites/templates/web_folder_user_list.htm b/interface/web/sites/templates/web_folder_user_list.htm
index 6b67e0591cd6f9f58767959bf0cf16a4dbedafd3..8e1d77e25dca1d4ec0e9e0c65dc703fb6e7e0984 100644
--- a/interface/web/sites/templates/web_folder_user_list.htm
+++ b/interface/web/sites/templates/web_folder_user_list.htm
@@ -52,7 +52,7 @@
                         <td><a href="#" data-load-content="sites/web_folder_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="web_folder_id"}</a></td>
                         <td><a href="#" data-load-content="sites/web_folder_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_folder_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/sites/templates/web_vhost_domain_admin_list.htm b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
index 6f0e8f39ca5938a07d7372eec355e4c488bad46a..1ab14300d0cc4c008e99127fec5b98d94458da40 100644
--- a/interface/web/sites/templates/web_vhost_domain_admin_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_admin_list.htm
@@ -47,7 +47,7 @@
                         <td class="text-right">
 							<a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></a>
 							<a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="glyphicon glyphicon-signal"></span></a>
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/sites/templates/web_vhost_domain_advanced.htm b/interface/web/sites/templates/web_vhost_domain_advanced.htm
index 1def0ecb65ce82c16b117358f857114507ac6ff1..0b5ddfbd8bfb1bf818d433940f2fcee0c638f180 100644
--- a/interface/web/sites/templates/web_vhost_domain_advanced.htm
+++ b/interface/web/sites/templates/web_vhost_domain_advanced.htm
@@ -57,6 +57,12 @@
                         {tmpl_var name='php_fpm_use_socket'}
                     </div>
                 </div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_chroot_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='php_fpm_chroot'}
+                    </div>
+                </div>
                 <div class="form-group">
                     <label for="pm" class="col-sm-3 control-label">{tmpl_var name='pm_txt'}</label>
                     <div class="col-sm-9"><select name="pm" id="pm" class="form-control">
diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm
index b784f159652e7d51a6a8231c10f4630c7bf3af7f..105dac9399c29f18b0d4e330613cbb85ba3b2cc9 100644
--- a/interface/web/sites/templates/web_vhost_domain_list.htm
+++ b/interface/web/sites/templates/web_vhost_domain_list.htm
@@ -61,7 +61,7 @@
                         <td class="text-right">
 							<a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></button>
                             <a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="glyphicon glyphicon-signal"></span></a>
-							<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
+							<a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/web_vhost_domain_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></button>
                         </td>
                     </tr>
                 </tmpl_loop>
diff --git a/interface/web/sites/templates/webdav_user_list.htm b/interface/web/sites/templates/webdav_user_list.htm
index 01764cc2fe0070d7d4b343a66b5ce8ab58ee25c4..866bcc9826ec302d9c13581a81924de2e626e9b6 100644
--- a/interface/web/sites/templates/webdav_user_list.htm
+++ b/interface/web/sites/templates/webdav_user_list.htm
@@ -56,7 +56,7 @@
                             <td><a href="#" data-load-content="sites/webdav_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                             <td><a href="#" data-load-content="sites/webdav_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/webdav_user_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/webdav_user_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 19e4c4c23b69f9bc259843ed241a691622a9854b..52b44acc79e25c6f25b2c8d0d527e24fb2a61dab 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -206,7 +206,7 @@ class page_action extends tform_actions {
 			}
 			
 			//* Fill the IPv4 select field with the IP addresses that are allowed for this client on the current server
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND virtualhost = 'y' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
 			$ips = $app->db->queryAllRecords($sql, $server_id);
 			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
@@ -222,7 +222,7 @@ class page_action extends tform_actions {
 			unset($ips);
 
 			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND virtualhost = 'y' AND (client_id = 0 OR client_id=?)";
 			$ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
 			//$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//$ip_select = "";
@@ -275,7 +275,6 @@ class page_action extends tform_actions {
 			// add limits to template to be able to hide settings
 			foreach($read_limits as $limit) $app->tpl->setVar($limit, $client[$limit]);
 
-
 			//* Reseller: If the logged in user is not admin and has sub clients (is a reseller)
 		} elseif ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 
@@ -353,7 +352,7 @@ class page_action extends tform_actions {
 			}
 			
 			//* Fill the IPv4 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=?)";
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND virtualhost = 'y' AND (client_id = 0 OR client_id=?)";
 			$ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
 			$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
@@ -369,7 +368,7 @@ class page_action extends tform_actions {
 			unset($ips);
 
 			//* Fill the IPv6 select field with the IP addresses that are allowed for this client
-			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
+			$sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND virtualhost = 'y' AND (client_id = 0 OR client_id=?)";
 			$ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
 			$ip_select = "<option value=''></option>";
 			//$ip_select = "";
@@ -550,7 +549,7 @@ class page_action extends tform_actions {
 			}
 
 			//* Fill the IPv4 select field
-			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND server_id = ?";
+			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv4' AND virtualhost = 'y' AND server_id = ?";
 			$ips = $app->db->queryAllRecords($sql, $server_id);
 			$ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
 			//$ip_select = "";
@@ -565,7 +564,7 @@ class page_action extends tform_actions {
 			unset($ips);
 
 			//* Fill the IPv6 select field
-			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND server_id = ?";
+			$sql = "SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND virtualhost = 'y' AND server_id = ?";
 			$ips = $app->db->queryAllRecords($sql, $server_id);
 			$ip_select = "<option value=''></option>";
 			//$ip_select = "";
@@ -864,8 +863,12 @@ class page_action extends tform_actions {
 			}
 			$directive_snippets_id_select .= '</optgroup>';
 		}
-		
-		$directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
+
+		if($is_admin) {
+			$directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE active = 'y' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
+		} else {
+			$directive_snippets = $app->db->queryAllRecords("SELECT directive_snippets_id, name FROM directive_snippets WHERE customer_viewable = 'y' AND active = 'y' AND master_directive_snippets_id = 0 AND type = ? ORDER BY name ASC", $server_type);
+		}
 		if(is_array($directive_snippets) && !empty($directive_snippets)){
 			$directive_snippets_id_select .= '<optgroup label="'.$app->tform->wordbook["select_directive_snippet_txt"].'">';
 			foreach($directive_snippets as $directive_snippet){
@@ -940,6 +943,13 @@ class page_action extends tform_actions {
 			}
 		}
 		$app->tpl->setLoop('folder_directive_snippets', $folder_directive_snippets);
+		if(is_array($web_config[$server_id])) {
+			$app->tpl->setVar('is_spdy_enabled', ($web_config[$server_id]['enable_spdy'] === 'y'));
+			$app->tpl->setVar('is_pagespeed_enabled', ($web_config[$server_id]['nginx_enable_pagespeed']));
+		} else {
+			$app->tpl->setVar('is_spdy_enabled', ($web_config['enable_spdy'] === 'y'));
+			$app->tpl->setVar('is_pagespeed_enabled', ($web_config['nginx_enable_pagespeed']));
+		}
 
 		parent::onShowEnd();
 	}
@@ -1059,6 +1069,11 @@ class page_action extends tform_actions {
 			}
 			
 			if($this->_vhostdomain_type == 'domain') {
+				//* ensure that quota value is not 0 when vhost type = domain
+				if(isset($_POST["hd_quota"]) && $_POST["hd_quota"] == 0) {
+					$app->tform->errorMessage .= $app->tform->lng("limit_web_quota_not_0_txt")."<br>";
+				}
+				
 				//* Check the website quota of the client
 				if(isset($_POST["hd_quota"]) && $client["limit_web_quota"] >= 0 && $_POST["hd_quota"] != $old_web_values["hd_quota"]) {
 					$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ? AND type = 'vhost' AND ".$app->tform->getAuthSQL('u'), $this->id);
@@ -1295,7 +1310,7 @@ class page_action extends tform_actions {
 					// value inside ''
 					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*\'.*\'\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
 					// everything else
-					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s\|]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
 					$custom_php_ini_settings_are_valid = false;
 					break;
 				}
diff --git a/interface/web/strengthmeter/lib/lang/br_strengthmeter.lng b/interface/web/strengthmeter/lib/lang/br_strengthmeter.lng
index 172646f21237946211c55b68e34e797b080696a2..2b2fb51f9a04f554e2c7765f1173f595a0045a0c 100644
--- a/interface/web/strengthmeter/lib/lang/br_strengthmeter.lng
+++ b/interface/web/strengthmeter/lib/lang/br_strengthmeter.lng
@@ -2,7 +2,7 @@
 $wb['password_strength_0_txt'] = 'Muito curta';
 $wb['password_strength_1_txt'] = 'Fraca';
 $wb['password_strength_2_txt'] = 'Razoável';
-$wb['password_strength_3_txt'] = 'Bom';
+$wb['password_strength_3_txt'] = 'Boa';
 $wb['password_strength_4_txt'] = 'Forte';
-$wb['password_strength_5_txt'] = 'Muito Forte';
+$wb['password_strength_5_txt'] = 'Muito forte';
 ?>
diff --git a/interface/web/tools/form/interface_settings.tform.php b/interface/web/tools/form/interface_settings.tform.php
index f213605bf787aaa739f69b7b853507f607128e17..9ab49eb0f140b0b21bd7381eeea43d0bcd848a37 100644
--- a/interface/web/tools/form/interface_settings.tform.php
+++ b/interface/web/tools/form/interface_settings.tform.php
@@ -144,6 +144,12 @@ $form['tabs']['main'] = array (
 		'startmodule' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'startmodule_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'startmodule_regex'),
+			),
 			'regex'  => '',
 			'errmsg' => '',
 			'default' => '',
@@ -157,6 +163,12 @@ $form['tabs']['main'] = array (
 		'app_theme' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'app_theme_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'app_theme_regex'),
+			),
 			'regex' => '',
 			'errmsg' => '',
 			'default' => 'default',
diff --git a/interface/web/tools/import_ispconfig.php b/interface/web/tools/import_ispconfig.php
index e2b8bad6479d43aeced846ebf2669da516276054..716ed2f9341ba7555660ab9e9ff1f5ab31aa506c 100644
--- a/interface/web/tools/import_ispconfig.php
+++ b/interface/web/tools/import_ispconfig.php
@@ -107,6 +107,17 @@ if(isset($_POST['connected'])) {
 		}
 		$app->tpl->setVar("client_group_id", $client_select);
 
+		//* Fill the mail server select field
+		$sql = "SELECT server_id, server_name FROM server WHERE mail_server = 1 and mirror_server_id = 0";
+		$mail_servers = $app->db->queryAllRecords($sql);
+		$mail_server_select = "";
+		if(is_array($mail_servers)) {
+			foreach( $mail_servers as $m_server) {
+				$selected = @($m_server['server_id'] == $_POST['local_server_id'])?'SELECTED':'';
+				$mail_server_select .= "<option value='$m_server[server_id]' $selected>$m_server[server_name]</option>\r\n";
+			}
+		}
+		$app->tpl->setVar("local_server_id", $mail_server_select);
 
 		try {
 			//* Allow connections to self signed SSL certs
@@ -161,6 +172,7 @@ $app->tpl->setVar('connected', $connected);
 $app->tpl->setVar('remote_session_id', $remote_session_id);
 $app->tpl->setVar('msg', $msg);
 $app->tpl->setVar('error', $error);
+$app->tpl->setVar('local_server_id', $_POST['local_server_id'], true);
 
 //* SET csrf token
 $csrf_token = $app->auth->csrf_token_get('ispconfig_import');
@@ -188,7 +200,10 @@ function start_domain_import($mail_domain) {
 	$server_id = intval($tmp['server_id']);
 	unset($tmp);
 	if($server_id == 0) $server_id = 1;
-
+	
+    if (isset($_POST['local_server_id']) && intval($_POST['local_server_id']) !== $server_id){
+        $server_id = intval($_POST['local_server_id']);
+    }
 	//* get the mail domain record
 	$mail_domain_rec = $client->mail_domain_get($remote_session_id, array('domain' => $mail_domain));
 	if(is_array($mail_domain_rec)) {
diff --git a/interface/web/tools/interface_settings.php b/interface/web/tools/interface_settings.php
index d7a1333b592dbe1147290055b16f03376956ec4a..b14b63737541699b49eebb567b7a7bfe6a93d847 100644
--- a/interface/web/tools/interface_settings.php
+++ b/interface/web/tools/interface_settings.php
@@ -81,7 +81,6 @@ class page_action extends tform_actions {
 		if(!in_array($this->dataRecord['startmodule'], $this->dataRecord['modules'])) {
 			$app->tform->errorMessage .= $app->tform->wordbook['startmodule_err'];
 		}
-		$this->updateSessionTheme();
 	}
 
 	function onInsert() {
@@ -96,7 +95,6 @@ class page_action extends tform_actions {
 		if(@is_array($this->dataRecord['modules']) && !in_array($this->dataRecord['startmodule'], $this->dataRecord['modules'])) {
 			$app->tform->errorMessage .= $app->tform->wordbook['startmodule_err'];
 		}
-		$this->updateSessionTheme();
 	}
 
 	function updateSessionTheme() {
@@ -120,6 +118,9 @@ class page_action extends tform_actions {
 	}
 
 	function onAfterUpdate() {
+		
+		$this->updateSessionTheme();
+		
 		if($this->_theme_changed == true) {
 			// not the best way, but it works
 			header('Content-Type: text/html');
diff --git a/interface/web/tools/lib/lang/br.lng b/interface/web/tools/lib/lang/br.lng
index 3000e972fc7eb8a0d11ed3df185c521ae706b948..1c1147216504e7c91983b42cc964cea44d4cca24 100644
--- a/interface/web/tools/lib/lang/br.lng
+++ b/interface/web/tools/lib/lang/br.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['User Settings'] = 'Configurações do usuário';
+$wb['User Settings'] = 'Configurações de usuários';
 $wb['Settings'] = 'Configurações';
 $wb['ISPConfig Tools'] = 'Ferramentas';
+$wb['Interface'] = 'Interface';
 $wb['Password and Language'] = 'Senha e Idioma';
-$wb['ispconfig_tools_note'] = 'Este módulo permite você alterar a senha e o idioma e sincronizar os registros dns.';
+$wb['ispconfig_tools_note'] = 'Este módulo permite alterar a senha e idioma e iniciar a sincronização de registros dns.';
+$wb['Sync Tools'] = 'Sincronização';
 $wb['Resync'] = 'Sincronizar';
-$wb['Sync Tools'] = 'Sincronismo';
 $wb['Import'] = 'Importar';
-$wb['ISPConfig 3 mail'] = 'ISPConfig 3';
-$wb['PDNS Tupa'] = 'Tupa PowerDNS';
-$wb['Interface'] = 'Interface';
+$wb['ISPConfig 3 mail'] = 'e-Mails do ISPConfig';
+$wb['PDNS Tupa'] = 'PowerDNS';
 ?>
diff --git a/interface/web/tools/lib/lang/br_import_ispconfig.lng b/interface/web/tools/lib/lang/br_import_ispconfig.lng
index 8124d13f10edc1c39bd86746b0d3cd63e58db217..d77242b4838539a758babaf081d666c1e080215f 100644
--- a/interface/web/tools/lib/lang/br_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/br_import_ispconfig.lng
@@ -1,23 +1,23 @@
 <?php
 $wb['head_txt'] = 'Importar configuração de e-mail do ISPConfig 3';
-$wb['legend_txt'] = 'Detalhes da conexão do servidor remoto';
-$wb['legend2_txt'] = 'Importar domínio de e-mails';
+$wb['legend_txt'] = 'Detalhes da conexão remota do servidor';
+$wb['legend2_txt'] = 'Importar domínio de e-mail';
 $wb['resync_sites_txt'] = 'Sincronizar sites';
 $wb['resync_ftp_txt'] = 'Sincronizar usuários ftp';
-$wb['resync_shell_txt'] = 'Sincronizar usuários shell';
-$wb['resync_cron_txt'] = 'Sincronizar tarefas na cron';
-$wb['resync_db_txt'] = 'Sincronizar configurações de usuários do banco de dados';
-$wb['resync_mailbox_txt'] = 'Sincronizar e-mails';
+$wb['resync_shell_txt'] = 'Sincronizar usuários do shell';
+$wb['resync_cron_txt'] = 'Sincronizar tarefas no cron';
+$wb['resync_db_txt'] = 'Sincronizar configurações do cliente de banco de dados';
+$wb['resync_mailbox_txt'] = 'Sincronizar contas de e-mail';
 $wb['resync_dns_txt'] = 'Sincronizar registros dns';
 $wb['btn_start_txt'] = 'Iniciar importação';
-$wb['btn_connect_txt'] = 'Conectar no servidor remoto';
+$wb['btn_connect_txt'] = 'Conectar ao servidor remoto';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['client_group_id_txt'] = 'Cliente local';
-$wb['mail_domain_txt'] = 'Domínio de e-mails remoto';
-$wb['import_mailbox_txt'] = 'Importar e-mails';
-$wb['import_aliasdomain_txt'] = 'Importar apelidos de domínio';
-$wb['import_alias_txt'] = 'Importar apelidos de e-mails';
-$wb['import_forward_txt'] = 'Importar encaminhamentos de e-mails';
-$wb['import_user_filter_txt'] = 'Importar filtros de e-mail de usuários';
+$wb['mail_domain_txt'] = 'Domínio de e-mail remoto';
+$wb['import_mailbox_txt'] = 'Importar contas de e-mail';
+$wb['import_aliasdomain_txt'] = 'Importar alias de domínios';
+$wb['import_alias_txt'] = 'Importar alias de e-mail';
+$wb['import_forward_txt'] = 'Importar encaminhamentos de e-mail';
+$wb['import_user_filter_txt'] = 'Importar filtros de e-mail';
 $wb['import_spamfilter_txt'] = 'Importar filtros anti-spam';
 ?>
diff --git a/interface/web/tools/lib/lang/br_import_vpopmail.lng b/interface/web/tools/lib/lang/br_import_vpopmail.lng
index 55bc0bf238083d8a8833422dad1fbbaf2c826866..c18b0b6810dc8a5dfe4d5ba69847f575e656039e 100644
--- a/interface/web/tools/lib/lang/br_import_vpopmail.lng
+++ b/interface/web/tools/lib/lang/br_import_vpopmail.lng
@@ -1,7 +1,8 @@
 <?php
-$wb['head_txt'] = 'Importar configuração de e-mail do vpopmail';
-$wb['legend_txt'] = 'Detalhes da conexão do servidor de banco de dados remoto';
-$wb['btn_start_txt'] = 'Iniciar importação';
-$wb['btn_connect_txt'] = 'Conectar servidor remoto';
+$wb['head_txt'] = 'Importar configurações de e-mail do vpopmail';
+$wb['legend_txt'] = 'Detalhes da conexão remota do servidor de banco de dados';
+$wb['btn_start_txt'] = 'Iniciar Importação';
+$wb['btn_connect_txt'] = 'Conectar ao servidor remoto';
 $wb['btn_cancel_txt'] = 'Cancelar';
+
 ?>
diff --git a/interface/web/tools/lib/lang/br_index.lng b/interface/web/tools/lib/lang/br_index.lng
index 437e1f01c384ab9871008b40fe50cc5ce7607c7c..bbb7085209407315ab13083159d593e387f7923a 100644
--- a/interface/web/tools/lib/lang/br_index.lng
+++ b/interface/web/tools/lib/lang/br_index.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['page_head_txt'] = 'Ferramentas';
+$wb['page_head_txt'] = 'Ferramentas do ISPConfig';
 $wb['page_desc_txt'] = 'Alterar configurações de usuário';
 ?>
diff --git a/interface/web/tools/lib/lang/br_interface.lng b/interface/web/tools/lib/lang/br_interface.lng
index 45341060c552b666e73909c00f81a77e0c4fbaf7..95677c4b591df5b53fef1108c767881885b68288 100644
--- a/interface/web/tools/lib/lang/br_interface.lng
+++ b/interface/web/tools/lib/lang/br_interface.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['interface_head_txt'] = 'Configurações da interface';
-$wb['interface_desc_txt'] = 'Alterar interface';
+$wb['interface_head_txt'] = 'Configurações da Interface';
+$wb['interface_desc_txt'] = 'Alterar a interface';
 $wb['language_txt'] = 'Idioma';
-$wb['startmodule_txt'] = 'Módulo inicial';
+$wb['startmodule_txt'] = 'Módulo Inicial';
 $wb['app_theme_txt'] = 'Tema';
 ?>
diff --git a/interface/web/tools/lib/lang/br_resync.lng b/interface/web/tools/lib/lang/br_resync.lng
index bf854b33b31405b59fb49f3d94c6f9a33a0b9143..160a35dd0c32f92d5d4dfe50d986b91d0f627edc 100644
--- a/interface/web/tools/lib/lang/br_resync.lng
+++ b/interface/web/tools/lib/lang/br_resync.lng
@@ -1,53 +1,53 @@
 <?php
-$wb['head_txt'] = 'Sincronismo';
-$wb['legend_txt'] = 'Sincronizar';
+$wb['head_txt'] = 'Ferramentas de Sincronização';
+$wb['legend_txt'] = 'Sincronização';
 $wb['resync_all_txt'] = 'Todos os serviços';
 $wb['resync_sites_txt'] = 'Sites';
-$wb['resync_ftp_txt'] = 'Contas ftp';
+$wb['resync_ftp_txt'] = 'Contas FTP';
 $wb['resync_webdav_txt'] = 'Usuários webdav';
-$wb['resync_shell_txt'] = 'Usuários shell';
+$wb['resync_shell_txt'] = 'Usuários do shell';
 $wb['resync_cron_txt'] = 'Tarefas no cron';
-$wb['resync_db_txt'] = 'Configurações de banco de dados de clientes';
-$wb['resync_mailbox_txt'] = 'e-mails';
-$wb['resync_mail_txt'] = 'Domínio de e-mails';
+$wb['resync_db_txt'] = 'Configurações do banco de dados de clientes';
+$wb['resync_mailbox_txt'] = 'Contas de e-mail';
+$wb['resync_mail_txt'] = 'Domínios de e-mail';
 $wb['resync_mailfilter_txt'] = 'Filtros de e-mail';
 $wb['resync_mailinglist_txt'] = 'Listas de e-mail';
 $wb['resync_dns_txt'] = 'Registros dns';
-$wb['resync_vserver_txt'] = 'Servidores virtuais';
+$wb['resync_vserver_txt'] = 'Máquinas virtuais';
 $wb['resync_client_txt'] = 'Clientes e revendas';
 $wb['all_active_txt'] = 'Todos os servidores ativos';
 $wb['all_active_mail_txt'] = 'Todos os servidores de e-mail ativos';
 $wb['all_active_web_txt'] = 'Todos os servidores web ativos';
 $wb['all_active_dns_txt'] = 'Todos os servidores dns ativos';
-$wb['all_active_file_txt'] = 'Todos servidores ftp ativos';
+$wb['all_active_file_txt'] = 'Todos os servidores ftp ativos';
 $wb['all_active_db_txt'] = 'Todos os servidores de banco de dados ativos';
-$wb['all_active_vserver_txt'] = 'Todos servidores virtuais ativos';
-$wb['do_sites_txt'] = 'Sites sincronizados';
-$wb['do_ftp_txt'] = 'Usuários ftp sincronizados';
-$wb['do_webdav_txt'] = 'Usuários webdav sincronizados';
-$wb['do_shell_txt'] = 'Usuários shell sincronizados';
-$wb['do_cron_txt'] = 'Tarefas no cron sincronizadas';
-$wb['do_db_user_txt'] = 'Usuários de banco de dados sincronizados';
-$wb['do_db_txt'] = 'Banco de dados sincronizados';
-$wb['do_mail_txt'] = 'Domínio de e-mails sincronizados';
-$wb['do_mailbox_txt'] = 'Contas de e-mail sincronizadas';
-$wb['do_mail_alias_txt'] = 'Apelidos de e-mail sincronizados';
-$wb['do_mail_access_txt'] = 'Usuários remotos de e-mail sincronizados';
-$wb['do_mail_contentfilter_txt'] = 'Filtros de e-mail sincronizados';
-$wb['do_mail_userfilter_txt'] = 'Filtros de e-mail de usuários sincronizados';
-$wb['do_mailinglist_txt'] = 'Listas de e-mail sincronizadas';
-$wb['do_dns_txt'] = 'Zonas dns sincronizadas';
-$wb['do_vserver_txt'] = 'Servidores virtuais sincronizados';
-$wb['do_clients_txt'] = 'Clientes e revendas sincronizados';
-$wb['no_results_txt'] = 'Não encontrado';
+$wb['all_active_vserver_txt'] = 'Todos as máquinas virtuais ativas';
+$wb['do_sites_txt'] = 'Sites sincronizados.';
+$wb['do_ftp_txt'] = 'Usuários ftp sincronizados.';
+$wb['do_webdav_txt'] = 'Usuários webdav sincronizados.';
+$wb['do_shell_txt'] = 'Usuários do shell sincronizados.';
+$wb['do_cron_txt'] = 'Tarefas no cron sincronizadas.';
+$wb['do_db_user_txt'] = 'Usuários do banco de dados sincronizados.';
+$wb['do_db_txt'] = 'Banco de dados sincronizados.';
+$wb['do_mail_txt'] = 'Domínios de e-mal sincronizados.';
+$wb['do_mailbox_txt'] = 'Contas de e-mail sincronizadas.';
+$wb['do_mail_alias_txt'] = 'Alias de domínios de e-mail sincronizados.';
+$wb['do_mail_access_txt'] = 'Acessos de e-mail sincronizados.';
+$wb['do_mail_contentfilter_txt'] = 'Filtros de conteúdo de e-mail sincronizados.';
+$wb['do_mail_userfilter_txt'] = 'Filtros de e-mail sincronizados.';
+$wb['do_mailinglist_txt'] = 'Listas de e-mail sincronizadas.';
+$wb['do_dns_txt'] = 'Zonas DNS sincronizadas.';
+$wb['do_vserver_txt'] = 'Máquinas virtuais sincronizados.';
+$wb['do_clients_txt'] = 'Clientes e revendas sincronizados.';
+$wb['no_results_txt'] = 'Nada foi encontrado.';
 $wb['btn_start_txt'] = 'Iniciar';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['do_mail_spamfilter_policy_txt'] = 'Políticas anti-spam sincronizadas';
-$wb['do_mail_spamfilter_txt'] = 'Filtros anti-spam sincronizados';
-$wb['do_mailget_txt'] = 'Contas de busca de e-mail sincronizadas';
-$wb['resync_mailget_txt'] = 'Contas de busca de e-mails';
-$wb['resync_mailtransport_txt'] = 'E-Mail Transport';
-$wb['resync_mailrelay_txt'] = 'E-Mail Relay';
-$wb['do_mailtransport_txt'] = 'Resynced Mailtransport';
-$wb['do_mailrelay_txt'] = 'Resynced Mailrelay';
+$wb['do_mail_spamfilter_policy_txt'] = 'Sincronizar políticas anti-spam';
+$wb['do_mail_spamfilter_txt'] = 'Políticas anti-spam sincronizadas.';
+$wb['do_mailget_txt'] = 'Contas de busca sincronizadas.';
+$wb['resync_mailget_txt'] = 'Sincronizar contas de busca.';
+$wb['resync_mailtransport_txt'] = 'Sincronizar transportes de e-mail';
+$wb['resync_mailrelay_txt'] = 'Sincronizar retransmissão de e-mail';
+$wb['do_mailtransport_txt'] = 'Transportes de e-mail sincronizados.';
+$wb['do_mailrelay_txt'] = 'Retransmissões de e-mail sincronizados.';
 ?>
diff --git a/interface/web/tools/lib/lang/br_tpl_default.lng b/interface/web/tools/lib/lang/br_tpl_default.lng
index 1e09eea22cb37acfb69a24fc1a3ce2449d96b034..30ae32b17aef86dfe80ce7e33eab64ff163b2811 100644
--- a/interface/web/tools/lib/lang/br_tpl_default.lng
+++ b/interface/web/tools/lib/lang/br_tpl_default.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Configurações do tema padrão';
+$wb['list_head_txt'] = 'Configuração padrão de temas';
 $wb['list_desc_txt'] = 'Alterar opções específicas do tema padrão';
-$wb['no_settings_txt'] = 'Não existem configurações para o tema padrão.';
+$wb['no_settings_txt'] = 'Não existe configurações para o tema padrão.';
 $wb['btn_start_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Voltar';
 ?>
diff --git a/interface/web/tools/lib/lang/br_usersettings.lng b/interface/web/tools/lib/lang/br_usersettings.lng
index 8fccd268529f05507256890d6d5f8f69bc2b119f..cb3ae2dc4f82eed3915a33c5e4a10d53ba5d423d 100644
--- a/interface/web/tools/lib/lang/br_usersettings.lng
+++ b/interface/web/tools/lib/lang/br_usersettings.lng
@@ -2,11 +2,11 @@
 $wb['password_txt'] = 'Senha';
 $wb['password_strength_txt'] = 'Dificuldade da senha';
 $wb['language_txt'] = 'Idioma';
-$wb['password_mismatch'] = 'As senhas não coincidem';
-$wb['Form to edit the user password and language.'] = 'Alterar idioma e senha';
+$wb['password_mismatch'] = 'A senha e confirmação da senha não coincidem.';
+$wb['Form to edit the user password and language.'] = 'Editar senha e idioma do usuário';
 $wb['Settings'] = 'Configurações';
-$wb['generate_password_txt'] = 'Gerar senha';
-$wb['repeat_password_txt'] = 'Repetir senha';
-$wb['password_mismatch_txt'] = 'A senhas não coincidem.';
-$wb['password_match_txt'] = 'A senhas coincidem.';
+$wb['generate_password_txt'] = 'Gerar Senha';
+$wb['repeat_password_txt'] = 'Repetir Senha';
+$wb['password_mismatch_txt'] = 'As senhas não coincidem.';
+$wb['password_match_txt'] = 'As senhas coincidem.';
 ?>
diff --git a/interface/web/tools/lib/lang/en_import_ispconfig.lng b/interface/web/tools/lib/lang/en_import_ispconfig.lng
index 65ea1459806162a7ad5868dfc5325186b93edcd3..73002f88680904ef6e97d0407d4dfecbbab11637 100644
--- a/interface/web/tools/lib/lang/en_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/en_import_ispconfig.lng
@@ -20,5 +20,6 @@ $wb['import_alias_txt'] = 'Import email alias';
 $wb['import_forward_txt'] = 'Import forward';
 $wb['import_user_filter_txt'] = 'Import user filter';
 $wb['import_spamfilter_txt'] = 'Import spamfilter';
+$wb['local_server_txt'] = 'Local Mail Server';
 
 ?>
\ No newline at end of file
diff --git a/interface/web/tools/lib/lang/en_interface.lng b/interface/web/tools/lib/lang/en_interface.lng
index b15c7334b28e702ac47115ab5274b98aecc307b9..7cb0e2d8bc6b9b88da4863cc9d41234622956853 100644
--- a/interface/web/tools/lib/lang/en_interface.lng
+++ b/interface/web/tools/lib/lang/en_interface.lng
@@ -4,4 +4,8 @@ $wb["interface_desc_txt"] = 'Modify your interface';
 $wb["language_txt"] = 'Language';
 $wb["startmodule_txt"] = 'Startmodule';
 $wb["app_theme_txt"] = 'Design';
+$wb['startmodule_empty'] = 'Startmodule empty.';
+$wb['startmodule_regex'] = 'Invalid chars in Startmodule.';
+$wb['app_theme_empty'] = 'App theme empty.';
+$wb['app_theme_regex'] = 'Invalid chars in App theme.';
 ?>
\ No newline at end of file
diff --git a/interface/web/tools/lib/lang/tr.lng b/interface/web/tools/lib/lang/tr.lng
index 5782a862cf47bf28206e7da5fe9eca08a38f96d4..6115b8a7a341c7fd734371e1a72b25c781e3afa5 100644
--- a/interface/web/tools/lib/lang/tr.lng
+++ b/interface/web/tools/lib/lang/tr.lng
@@ -4,10 +4,10 @@ $wb['Settings'] = 'Ayarlar';
 $wb['ISPConfig Tools'] = 'ISPConfig Araçları';
 $wb['Interface'] = 'Arayüz';
 $wb['Password and Language'] = 'Parola ve Dil';
-$wb['ispconfig_tools_note'] = 'Bu modül parola ve dilin değiştirilmesini sağlayarak DNS kayıtları eşleştirmesini başlatır.';
-$wb['Sync Tools'] = 'Eşleştirme Araçları';
-$wb['Resync'] = 'EÅŸleÅŸtirme';
-$wb['Import'] = 'Al';
-$wb['ISPConfig 3 mail'] = 'ISPConfig 3 postası';
+$wb['ispconfig_tools_note'] = 'Bu modül parola ve dilin değiştirilmesini sağlayarak DNS kayıtları eşitlemesini başlatır.';
+$wb['Sync Tools'] = 'Eşitleme Araçları';
+$wb['Resync'] = 'EÅŸitleme';
+$wb['Import'] = 'İçe Aktar';
+$wb['ISPConfig 3 mail'] = 'ISPConfig 3 E-postaları';
 $wb['PDNS Tupa'] = 'PowerDNS Tupa Yöneticisi';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_import_ispconfig.lng b/interface/web/tools/lib/lang/tr_import_ispconfig.lng
index 7aec6bd47092f87953dac5fc1b8f06e6be754b35..67c98edbe78b40f51b3326400789a25f1cdbb66f 100644
--- a/interface/web/tools/lib/lang/tr_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/tr_import_ispconfig.lng
@@ -1,23 +1,24 @@
 <?php
-$wb['head_txt'] = 'ISPConfig 3 E-posta Ayarları Alma';
-$wb['legend_txt'] = 'Uzak sunucu bağlantı bilgileri';
-$wb['legend2_txt'] = 'E-posta alan adı alınsın';
-$wb['resync_sites_txt'] = 'Web siteleri eÅŸleÅŸtirilsin';
-$wb['resync_ftp_txt'] = 'FTP kullanıcıları eşleştirilsin';
-$wb['resync_shell_txt'] = 'Kabuk kullanıcıları eşleştirilsin';
-$wb['resync_cron_txt'] = 'Zamanlanmış görevler eşleştirilsin';
-$wb['resync_db_txt'] = 'Müşteri veritabanı ayarları eşleştirilsin';
-$wb['resync_mailbox_txt'] = 'Posta kutuları eşleştirilsin';
-$wb['resync_dns_txt'] = 'DNS kayıtları eşleştirilsin';
-$wb['btn_start_txt'] = 'Almayı Başlat';
+$wb['head_txt'] = 'ISPConfig 3 E-posta Ayarlarını İçe Aktarma';
+$wb['legend_txt'] = 'Uzak Sunucu Bağlantı Bilgileri';
+$wb['legend2_txt'] = 'E-posta etki alanı içe aktarılsın';
+$wb['resync_sites_txt'] = 'Web Siteleri EÅŸitlensin';
+$wb['resync_ftp_txt'] = 'FTP Kullanıcıları Eşitlensin';
+$wb['resync_shell_txt'] = 'Kabuk Kullanıcıları Eşitlensin';
+$wb['resync_cron_txt'] = 'Zamanlanmış Görevler Eşitlensin';
+$wb['resync_db_txt'] = 'Müşteri Veritabanı Ayarları Eşitlensin';
+$wb['resync_mailbox_txt'] = 'E-posta Kutuları Eşitlensin';
+$wb['resync_dns_txt'] = 'DNS Kayıtları Eşitlensin';
+$wb['btn_start_txt'] = 'İçe Aktarmayı Başlat';
 $wb['btn_connect_txt'] = 'Uzak Sunucuya BaÄŸlan';
 $wb['btn_cancel_txt'] = 'Geri';
 $wb['client_group_id_txt'] = 'Yerel Müşteri';
-$wb['mail_domain_txt'] = 'Uzak e-posta alan adı';
-$wb['import_mailbox_txt'] = 'Posta kutusunu al';
-$wb['import_aliasdomain_txt'] = 'Takma alan adını al';
-$wb['import_alias_txt'] = 'Takma e-postayı al';
-$wb['import_forward_txt'] = 'Yönlendirmeyi al';
-$wb['import_user_filter_txt'] = 'Kullanıcı süzgecini al';
-$wb['import_spamfilter_txt'] = 'Önemsiz posta süzgecini al';
+$wb['mail_domain_txt'] = 'Uzak E-posta Etki Alanı';
+$wb['import_mailbox_txt'] = 'E-posta Kutusu İçe Aktarılsın';
+$wb['import_aliasdomain_txt'] = 'Takma Etki Alanı İçe Aktarılsın';
+$wb['import_alias_txt'] = 'Takma E-posta İçe Aktarılsın';
+$wb['import_forward_txt'] = 'Yönlendirme İçe Aktarılsın';
+$wb['import_user_filter_txt'] = 'Kullanıcı Süzgeci İçe Aktarılsın';
+$wb['import_spamfilter_txt'] = 'Önemsiz İleti Süzgeci İçe Aktarılsın';
+
 ?>
diff --git a/interface/web/tools/lib/lang/tr_import_vpopmail.lng b/interface/web/tools/lib/lang/tr_import_vpopmail.lng
index 66fe56da1c7b170aaafa907796c2e5902387fc28..f0c05ea741bc4c84e72efd0590a956c77c6da283 100644
--- a/interface/web/tools/lib/lang/tr_import_vpopmail.lng
+++ b/interface/web/tools/lib/lang/tr_import_vpopmail.lng
@@ -1,7 +1,8 @@
 <?php
-$wb['head_txt'] = 'Import email configuration from Vpopmail';
-$wb['legend_txt'] = 'Remote database server connection details';
-$wb['btn_start_txt'] = 'Start Import';
-$wb['btn_connect_txt'] = 'Connect to remote server';
-$wb['btn_cancel_txt'] = 'Cancel';
+$wb['head_txt'] = 'Vpopmail e-posta yapılandırmasını içe aktar';
+$wb['legend_txt'] = 'Uzak veritabanı sunucusu bağlantı bilgileri';
+$wb['btn_start_txt'] = 'İçe Aktarmayı Başlat';
+$wb['btn_connect_txt'] = 'Uzak Sunucuya BaÄŸlan';
+$wb['btn_cancel_txt'] = 'Ä°ptal';
+
 ?>
diff --git a/interface/web/tools/lib/lang/tr_index.lng b/interface/web/tools/lib/lang/tr_index.lng
index d8ea10cf557b41784d4270b28d4ba54b974d2dca..6d9a6c361c7fb14160b549c4d90acf4596ade2c5 100644
--- a/interface/web/tools/lib/lang/tr_index.lng
+++ b/interface/web/tools/lib/lang/tr_index.lng
@@ -1,4 +1,4 @@
 <?php
 $wb['page_head_txt'] = 'ISPConfig Araçları';
-$wb['page_desc_txt'] = 'Kullanıcı ayarlarını değiştirme';
+$wb['page_desc_txt'] = 'Kullanıcı Ayarlarını Değiştirme';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_interface.lng b/interface/web/tools/lib/lang/tr_interface.lng
index 2ff88a976e1c32f10659b9abd6867e67322cd817..2384c71107a76610744f471cb5f78bf290e6947c 100644
--- a/interface/web/tools/lib/lang/tr_interface.lng
+++ b/interface/web/tools/lib/lang/tr_interface.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['interface_head_txt'] = 'Arayüz Ayarları';
-$wb['interface_desc_txt'] = 'Arayüzü düzenleyin';
+$wb['interface_desc_txt'] = 'Arayüzü Düzenle';
 $wb['language_txt'] = 'Dil';
 $wb['startmodule_txt'] = 'Başlangıç modülü';
 $wb['app_theme_txt'] = 'Tasarım';
diff --git a/interface/web/tools/lib/lang/tr_resync.lng b/interface/web/tools/lib/lang/tr_resync.lng
index 71ebb0dda2b463c28ebce0184f86206b0f0af470..7cdfa91b9e4d6620d416367255a0cde0c2582800 100644
--- a/interface/web/tools/lib/lang/tr_resync.lng
+++ b/interface/web/tools/lib/lang/tr_resync.lng
@@ -1,53 +1,53 @@
 <?php
-$wb['head_txt'] = 'Eşleştirme Aracı';
-$wb['legend_txt'] = 'EÅŸleÅŸtirme';
-$wb['resync_sites_txt'] = 'Web siteleri eÅŸleÅŸtirilsin';
-$wb['resync_ftp_txt'] = 'FTP kullanıcıları eşleştirilsin';
-$wb['resync_shell_txt'] = 'Kabuk kullanıcıları eşleştirilsin';
-$wb['resync_cron_txt'] = 'Zamanlanmış görevler eşleştirilsin';
-$wb['resync_db_txt'] = 'Müşteri veritabanı ayarları eşleştirilsin';
-$wb['resync_mailbox_txt'] = 'Posta kutuları eşleştirilsin';
-$wb['resync_dns_txt'] = 'DNS kayıtları eşleştirilsin';
-$wb['resync_client_txt'] = 'Müşteri kayıtları eşleştirilsin';
-$wb['btn_start_txt'] = 'EÅŸleÅŸtir';
+$wb['head_txt'] = 'Eşitleme Aracı';
+$wb['legend_txt'] = 'EÅŸitleme';
+$wb['resync_all_txt'] = 'Tüm Hizmetler';
+$wb['resync_sites_txt'] = 'Web Siteleri EÅŸitlensin';
+$wb['resync_ftp_txt'] = 'FTP Kullanıcıları Eşitlensin';
+$wb['resync_webdav_txt'] = 'WebDAV Kullanıcıları';
+$wb['resync_shell_txt'] = 'Kabuk Kullanıcıları Eşitlensin';
+$wb['resync_cron_txt'] = 'Zamanlanmış Görevler Eşitlensin';
+$wb['resync_db_txt'] = 'Müşteri Veritabanı Ayarları Eşitlensin';
+$wb['resync_mailbox_txt'] = 'E-posta Kutuları Eşitlensin';
+$wb['resync_mail_txt'] = 'E-posta Etki Alanları';
+$wb['resync_mailfilter_txt'] = 'E-posta Süzgeci';
+$wb['resync_mailinglist_txt'] = 'E-posta Listesi';
+$wb['resync_dns_txt'] = 'DNS Kayıtları Eşitlensin';
+$wb['resync_vserver_txt'] = 'sSunucu';
+$wb['resync_client_txt'] = 'Müşteri Kayıtları Eşitlensin';
+$wb['all_active_txt'] = 'Tüm Etkin Sunucular';
+$wb['all_active_mail_txt'] = 'Tüm Etkin E-posta Sunucuları';
+$wb['all_active_web_txt'] = 'Tüm Etkin Web Sunucuları';
+$wb['all_active_dns_txt'] = 'Tüm Etkin DNS Sunucuları';
+$wb['all_active_file_txt'] = 'Tüm Etkin Dosya Sunucuları';
+$wb['all_active_db_txt'] = 'Tüm Etkin Veritabanı Sunucuları';
+$wb['all_active_vserver_txt'] = 'Tüm Etkin Sanal Sunucular';
+$wb['do_sites_txt'] = 'EÅŸitlenen Web Sitesi';
+$wb['do_ftp_txt'] = 'Eşitlenen FTP Kullanıcısı';
+$wb['do_webdav_txt'] = 'Eşitlenen WebDav Kullanıcısı';
+$wb['do_shell_txt'] = 'Eşitlenen Kabuk Kullanıcısı';
+$wb['do_cron_txt'] = 'Eşitlenen Zamanlanmış Görev';
+$wb['do_db_user_txt'] = 'Eşitlenen Veritabanı Kullanıcısı';
+$wb['do_db_txt'] = 'Eşitlenen Veritabanı';
+$wb['do_mail_txt'] = 'Eşitlenen E-posta Etki Alanı';
+$wb['do_mailbox_txt'] = 'EÅŸitlenen E-posta Kutusu';
+$wb['do_mail_alias_txt'] = 'EÅŸitlenen Takma Ad';
+$wb['do_mail_access_txt'] = 'EÅŸitlenen E-posta EriÅŸimi';
+$wb['do_mail_contentfilter_txt'] = 'Eşitlenen İçerik Süzgeci';
+$wb['do_mail_userfilter_txt'] = 'Eşitlenen E-posta Kullanıcı Süzgeci';
+$wb['do_mailinglist_txt'] = 'EÅŸitlenen E-posta Listesi';
+$wb['do_dns_txt'] = 'Eşitlenen DNS Bölgesi';
+$wb['do_vserver_txt'] = 'EÅŸitlenen Sanal Sunucu';
+$wb['do_clients_txt'] = 'Eşitlenen Müşteri ve Bayiler';
+$wb['no_results_txt'] = 'Herhangi bir şey bulunamadı';
+$wb['btn_start_txt'] = 'EÅŸitle';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['resync_all_txt'] = 'All services';
-$wb['resync_webdav_txt'] = 'WebDAV-Users';
-$wb['resync_mail_txt'] = 'Maildomains';
-$wb['resync_mailfilter_txt'] = 'Mailfilter';
-$wb['resync_mailinglist_txt'] = 'Mailinglist';
-$wb['resync_vserver_txt'] = 'vServer';
-$wb['all_active_txt'] = 'All active server';
-$wb['all_active_mail_txt'] = 'All active Mail-Server';
-$wb['all_active_web_txt'] = 'All active Web-Server';
-$wb['all_active_dns_txt'] = 'All active DNS-Server';
-$wb['all_active_file_txt'] = 'All active File-Server';
-$wb['all_active_db_txt'] = 'All active Database-Server';
-$wb['all_active_vserver_txt'] = 'All active vServer';
-$wb['do_sites_txt'] = 'Resynced Website';
-$wb['do_ftp_txt'] = 'Resynced FTP user';
-$wb['do_webdav_txt'] = 'Resynced WebDav user';
-$wb['do_shell_txt'] = 'Resynced Shell user';
-$wb['do_cron_txt'] = 'Resynced Cronjob';
-$wb['do_db_user_txt'] = 'Resynced Database User';
-$wb['do_db_txt'] = 'Resynced Database';
-$wb['do_mail_txt'] = 'Resynced Maildomain';
-$wb['do_mailbox_txt'] = 'Resynced Mailbox';
-$wb['do_mail_alias_txt'] = 'Resynced Alias';
-$wb['do_mail_access_txt'] = 'Resynced Mail access';
-$wb['do_mail_contentfilter_txt'] = 'Resynced Content Filter';
-$wb['do_mail_userfilter_txt'] = 'Resynced Mail User Filter';
-$wb['do_mailinglist_txt'] = 'Resynced Mailinglist';
-$wb['do_dns_txt'] = 'Resynced DNS zone';
-$wb['do_vserver_txt'] = 'Resynced vServer';
-$wb['do_clients_txt'] = 'Resynced clients and reseller';
-$wb['no_results_txt'] = 'Nothing found';
-$wb['do_mail_spamfilter_policy_txt'] = 'Resynced Spamfilter Policies';
-$wb['do_mail_spamfilter_txt'] = 'Resynced Spamfilter';
-$wb['do_mailget_txt'] = 'Resynced Fetchmail';
+$wb['do_mail_spamfilter_policy_txt'] = 'Eşitlenen Önemsiz İleti Süzgeci İlkeleri';
+$wb['do_mail_spamfilter_txt'] = 'Eşitlenen Önemsiz İleti Süzgeci';
+$wb['do_mailget_txt'] = 'EÅŸitlenen Fetchmail';
 $wb['resync_mailget_txt'] = 'Fetchmail';
-$wb['resync_mailtransport_txt'] = 'E-Mail Transport';
-$wb['resync_mailrelay_txt'] = 'E-Mail Relay';
-$wb['do_mailtransport_txt'] = 'Resynced Mailtransport';
-$wb['do_mailrelay_txt'] = 'Resynced Mailrelay';
+$wb['resync_mailtransport_txt'] = 'E-posta Gönderici';
+$wb['resync_mailrelay_txt'] = 'E-posta Aktarıcı';
+$wb['do_mailtransport_txt'] = 'E-posta Gönderici Eşitlendi';
+$wb['do_mailrelay_txt'] = 'E-posta Aktarıcı Eşitlendi';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_usersettings.lng b/interface/web/tools/lib/lang/tr_usersettings.lng
index 60c7679b9f555adfac952e54518161d4169ae07a..fa2eff63d7419c17c4272505934e530214eae709 100644
--- a/interface/web/tools/lib/lang/tr_usersettings.lng
+++ b/interface/web/tools/lib/lang/tr_usersettings.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['password_strength_txt'] = 'Parola Güçlüğü';
+$wb['password_txt'] = 'Parola';
+$wb['password_strength_txt'] = 'Parola ZorluÄŸu';
 $wb['language_txt'] = 'Dil';
 $wb['password_mismatch'] = 'Parola ile onayı aynı değil.';
 $wb['Form to edit the user password and language.'] = 'Parola ve dil ayarlarını değiştirme formu.';
 $wb['Settings'] = 'Ayarlar';
-$wb['generate_password_txt'] = 'Parola OluÅŸtur';
+$wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
-$wb['password_txt'] = 'Password';
 ?>
diff --git a/interface/web/tools/templates/import_ispconfig.htm b/interface/web/tools/templates/import_ispconfig.htm
index 1d63df2a6d2152e9f365f01b13b858dfd6459b3f..9d845701f6dc403dd60725a9d2554f609b319fa2 100644
--- a/interface/web/tools/templates/import_ispconfig.htm
+++ b/interface/web/tools/templates/import_ispconfig.htm
@@ -36,6 +36,12 @@
                         {tmpl_var name='client_group_id'}
                     </select></div>
                 </div>
+                <div class="form-group">
+                    <label for="local_server_id" class="col-sm-3 control-label">{tmpl_var name='local_server_txt'}</label>
+                    <div class="col-sm-9"><select name="local_server_id" id="local_server_id" class="form-control">
+                        {tmpl_var name='local_server_id'}
+                    </select></div>
+                </div>
                 <div class="form-group">
                     <label class="col-sm-3 control-label">{tmpl_var name="import_mailbox_txt"}</label>
                     <div class="col-sm-9"><input class="form-control" type="checkbox" id="import_mailbox" value="1" name="import_mailbox" checked="checked" /></div>
diff --git a/interface/web/vm/lib/lang/br.lng b/interface/web/vm/lib/lang/br.lng
index 513a018bf515ddded5fc5a8cd55310f95c4c7101..ae59107a783fe8f9bdff7304df509f224efe62b3 100644
--- a/interface/web/vm/lib/lang/br.lng
+++ b/interface/web/vm/lib/lang/br.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['Virtual Servers'] = 'Servidores virtuais';
-$wb['OS Templates'] = 'Gabaritos do SO';
-$wb['VM Templates'] = 'Gabaritos de máquina virtual';
+$wb['Virtual Servers'] = 'Máquinas virtuais';
+$wb['OS Templates'] = 'Gabaritos de SO';
+$wb['VM Templates'] = 'Gabaritos de VM';
 $wb['IP addresses'] = 'Endereço IP';
 $wb['OpenVZ'] = 'OpenVZ';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_action.lng b/interface/web/vm/lib/lang/br_openvz_action.lng
index a301f51d0ed92567fe5fbf18626d95ba1f1b5e05..cc191c14e9634d996a33b0f34ae4143266fa0b10 100644
--- a/interface/web/vm/lib/lang/br_openvz_action.lng
+++ b/interface/web/vm/lib/lang/br_openvz_action.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['head_txt'] = 'Ações do servidor virtual para máquinas virtuais:';
+$wb['head_txt'] = 'Ações do virtualizador:';
 $wb['start_txt'] = 'Iniciar máquina virtual';
 $wb['stop_txt'] = 'Parar máquina virtual';
 $wb['restart_txt'] = 'Reiniciar máquina virtual';
-$wb['ostemplate_txt'] = 'Adicionar gabarito de SO';
-$wb['ostemplate_desc_txt'] = '(exemplo: debian-6.0-i386-custom)';
+$wb['ostemplate_txt'] = 'Adicionar gabarito de sistema operacional';
+$wb['ostemplate_desc_txt'] = '(exemplo: debian-9.0-amd64-custom)';
 $wb['btn_save_txt'] = 'Executar ação selecionada';
 $wb['btn_cancel_txt'] = 'Cancelar';
-$wb['start_exec_txt'] = 'O comando -iniciar- foi enviado ao servidor servidor de máquinas virtuais. Espere alguns minutos até que a máquina virtual seja iniciada.';
-$wb['stop_exec_txt'] = 'O comando -parar- foi enviado ao servidor servidor de máquinas virtuais. Espere alguns minutos até que a máquina virtual pare.';
-$wb['restart_exec_txt'] = 'O comando -reiniciar- foi enviado ao servidor servidor de máquinas virtuais. Espere alguns minutos até que a máquina virtual seja reiniciada.';
-$wb['ostemplate_name_error'] = 'O gabarito de SO contém caracteres não permitidos.';
-$wb['ostemplate_name_unique_error'] = 'Já existe um gabarito de SO com este nome.';
-$wb['ostemplate_exec_txt'] = 'O comando -criar máquina virtual- foi enviado ao servidor servidor de máquinas virtuais. Espere alguns minutos até que a máquina virtual seja criada.';
+$wb['start_exec_txt'] = 'O comando "Iniciar" foi enviado para o virtualizador. Aguarde alguns instantes para a máquina virtual carregar.';
+$wb['stop_exec_txt'] = 'O comando "Parar" foi enviado para o virtualizador. Aguarde alguns instantes para a máquina virtual parar.';
+$wb['restart_exec_txt'] = 'O comando "Reiniciar" foi enviando para o virtualizador. Aguarde alguns instantes para a máquina virtual reiniciar.';
+$wb['ostemplate_name_error'] = 'O gabarito de sistema operacional contém caracteres não permitidos.';
+$wb['ostemplate_name_unique_error'] = 'Já existe um gabarito de sistema operacional com o mesmo nome.';
+$wb['ostemplate_exec_txt'] = 'O comando "Adicionar gabarito de SO" foi enviado para o virtualizador. Aguarde alguns instantes para o gabarito ser adicionado.';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_ip.lng b/interface/web/vm/lib/lang/br_openvz_ip.lng
index 61fbd6ed6839aa1a1e15523b025063b2cdecb1be..612c391c9464ee05323833e73f333f72953eebd4 100644
--- a/interface/web/vm/lib/lang/br_openvz_ip.lng
+++ b/interface/web/vm/lib/lang/br_openvz_ip.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['server_id_txt'] = 'Servidor servidor';
+$wb['server_id_txt'] = 'Virtualizador';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['vm_id_txt'] = 'Servidor virtual';
-$wb['reserved_txt'] = 'Reservedo';
+$wb['vm_id_txt'] = 'Máquina virtual';
+$wb['reserved_txt'] = 'Reservado';
 $wb['ip_error_wrong'] = 'Por favor, insira um endereço IPv4 válido.';
 $wb['ip_error_unique'] = 'O endereço IP já existe.';
 $wb['IP address'] = 'Endereço IP';
diff --git a/interface/web/vm/lib/lang/br_openvz_ip_list.lng b/interface/web/vm/lib/lang/br_openvz_ip_list.lng
index 99ddfbc7d88fefb63a0901c21c58c1d632eebfeb..f9a9f33622ed31f6e9f63228b7a3787b48c33acc 100644
--- a/interface/web/vm/lib/lang/br_openvz_ip_list.lng
+++ b/interface/web/vm/lib/lang/br_openvz_ip_list.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['list_head_txt'] = 'Endereço IP do OpenVZ';
 $wb['server_id_txt'] = 'Servidor';
+$wb['vm_id_txt'] = 'VM';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['reserved_txt'] = 'Reservado';
-$wb['vm_id_txt'] = 'VPS';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_ostemplate.lng b/interface/web/vm/lib/lang/br_openvz_ostemplate.lng
index edce912056486708dfafd3b167fe2c53757f24e9..ea76c915b77a781f355be540b138f682ceef6f17 100644
--- a/interface/web/vm/lib/lang/br_openvz_ostemplate.lng
+++ b/interface/web/vm/lib/lang/br_openvz_ostemplate.lng
@@ -1,11 +1,11 @@
 <?php
 $wb['template_name_txt'] = 'Nome do gabarito';
-$wb['template_file_txt'] = 'Arquivo do gabarito';
-$wb['server_id_txt'] = 'Servidor';
+$wb['template_file_txt'] = 'Nome do arquivo';
+$wb['server_id_txt'] = 'Virtualizador';
 $wb['allservers_txt'] = 'Disponível em todos os servidores';
 $wb['active_txt'] = 'Ativo';
 $wb['description_txt'] = 'Descrição';
 $wb['template_name_error_empty'] = 'Nome do gabarito está em branco.';
-$wb['template_file_error_empty'] = 'Nome o arquivo do gabarito está em branco.';
+$wb['template_file_error_empty'] = 'Nome do arquivo está em branco.';
 $wb['Template'] = 'Gabarito';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_ostemplate_list.lng b/interface/web/vm/lib/lang/br_openvz_ostemplate_list.lng
index 04e94a889d079ae3d2851c81f32bb43ad2000030..9e60baf179a43c41df5da422d115c173684ace64 100644
--- a/interface/web/vm/lib/lang/br_openvz_ostemplate_list.lng
+++ b/interface/web/vm/lib/lang/br_openvz_ostemplate_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Gabarito do SO openVZ';
+$wb['list_head_txt'] = 'Gabarito de sistema operacional';
 $wb['active_txt'] = 'Ativo';
-$wb['template_name_txt'] = 'Nome';
-$wb['server_id_txt'] = 'Servidor';
+$wb['template_name_txt'] = 'Nome do gabarito';
+$wb['server_id_txt'] = 'Virtualizador';
 $wb['allservers_txt'] = 'Disponível em todos os servidores';
 $wb['ostemplate_id_txt'] = 'ID';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_template.lng b/interface/web/vm/lib/lang/br_openvz_template.lng
index 4190a31f9cd16067c6d529837e11c11f82fc823d..23d4c9b6afa626d66a4aed0f5d239196e350ac98 100644
--- a/interface/web/vm/lib/lang/br_openvz_template.lng
+++ b/interface/web/vm/lib/lang/br_openvz_template.lng
@@ -1,97 +1,97 @@
 <?php
-$wb['numproc_txt'] = 'Nº de Processadores';
-$wb['numtcpsock_txt'] = 'Nº de soquetes TCP';
-$wb['numothersock_txt'] = 'Nº de outros soquetes';
-$wb['vmguarpages_txt'] = 'Páginas de guarda';
-$wb['kmemsize_txt'] = 'Kmemsize';
-$wb['tcpsndbuf_txt'] = 'Tcpsndbuf';
-$wb['tcprcvbuf_txt'] = 'Tcprcvbuf';
-$wb['othersockbuf_txt'] = 'Othersockbuf';
-$wb['dgramrcvbuf_txt'] = 'Dgramrcvbuf';
-$wb['oomguarpages_txt'] = 'Oomguarpages';
-$wb['privvmpages_txt'] = 'Privvmpages';
-$wb['lockedpages_txt'] = 'Lockedpages';
-$wb['shmpages_txt'] = 'Shmpages';
-$wb['physpages_txt'] = 'Physpages';
-$wb['numfile_txt'] = 'Numfile';
-$wb['avnumproc_txt'] = 'Avnumproc';
-$wb['numflock_txt'] = 'Numflock';
-$wb['numpty_txt'] = 'Numpty';
-$wb['numsiginfo_txt'] = 'Numsiginfo';
-$wb['dcachesize_txt'] = 'Dcachesize';
-$wb['numiptent_txt'] = 'Numiptent';
-$wb['swappages_txt'] = 'Swappages';
-$wb['hostname_txt'] = 'Nome do servidor';
-$wb['nameserver_txt'] = 'Servidor(es) de nome';
-$wb['nameserver_desc_txt'] = '(separado por espaços em branco)';
+$wb['numproc_txt'] = 'Número de Processadores';
+$wb['numtcpsock_txt'] = 'Número de sockets tcp';
+$wb['numothersock_txt'] = '(numothersock)';
+$wb['vmguarpages_txt'] = 'Páginas de guarda da vm (vmguardpages)';
+$wb['kmemsize_txt'] = 'Tamanho da memória (Kmemsize)';
+$wb['tcpsndbuf_txt'] = 'Buffers tcp de envio (tcpsndbuf)';
+$wb['tcprcvbuf_txt'] = 'Buffers tcp de recepção (tcprcvbuf)';
+$wb['othersockbuf_txt'] = 'Outros buffers (othersockbuf)';
+$wb['dgramrcvbuf_txt'] = 'Buffers datagrama de envio (dgramrcvbuf)';
+$wb['oomguarpages_txt'] = '(oomguarpages)';
+$wb['privvmpages_txt'] = 'Tamanho da memória alocada para aplicações, em páginas (privvmpages)';
+$wb['lockedpages_txt'] = 'Páginas bloqueadas (lockedpages)';
+$wb['shmpages_txt'] = '(Shmpages)';
+$wb['physpages_txt'] = '(Physpages)';
+$wb['numfile_txt'] = 'Número de arquivos';
+$wb['avnumproc_txt'] = 'Média de processadores';
+$wb['numflock_txt'] = 'Número de arquivos bloqueados (numflock)';
+$wb['numpty_txt'] = 'Número de PTY (numpty)';
+$wb['numsiginfo_txt'] = 'Número de siginfo (informações de geração de sinal)';
+$wb['dcachesize_txt'] = 'Tamanho do cache (dcachesize)';
+$wb['numiptent_txt'] = 'Número de endereços IP (numiptent)';
+$wb['swappages_txt'] = 'Páginas de troca (swappages)';
+$wb['hostname_txt'] = 'Nome do host';
+$wb['nameserver_txt'] = 'Servidor(es) dns';
+$wb['nameserver_desc_txt'] = '(separado por espaço)';
 $wb['capability_txt'] = 'Capacidade';
 $wb['template_name_txt'] = 'Nome do gabarito';
-$wb['diskspace_txt'] = 'Espaço em disco';
+$wb['diskspace_txt'] = 'Espaço do disco';
 $wb['ram_txt'] = 'RAM (garantida)';
 $wb['ram_burst_txt'] = 'RAM (rajada)';
-$wb['cpu_units_txt'] = 'Unidades de CPU';
-$wb['cpu_num_txt'] = 'Cores de CPU';
-$wb['cpu_limit_txt'] = 'Limite de CPU %';
+$wb['cpu_units_txt'] = 'Número de cores da CPU';
+$wb['cpu_num_txt'] = 'Número de CPUs';
+$wb['cpu_limit_txt'] = 'Limite da CPU %';
 $wb['io_priority_txt'] = 'Prioridade de E/S';
 $wb['active_txt'] = 'Ativo';
 $wb['description_txt'] = 'Descrição';
-$wb['numproc_desc_txt'] = 'Número de processos e tarefas.';
-$wb['numtcpsock_desc_txt'] = 'Número de soquetes TCP.';
-$wb['numothersock_desc_txt'] = 'Número de soquetes não TCP.';
-$wb['vmguarpages_desc_txt'] = 'Alocação de memória garantida, em páginas.';
-$wb['kmemsize_desc_txt'] = 'Tamanho da memória sem swap no kernel, alocada para processos neste contêiner.';
-$wb['tcpsndbuf_desc_txt'] = 'Tamanho total de buffers TCP enviados.';
-$wb['tcprcvbuf_desc_txt'] = 'Tamanho total de buffers TCP recebidos.';
-$wb['othersockbuf_desc_txt'] = 'Tamanho total de soquetes de UNIX-domain UDP e outros protocolos de datagrama que enviam buffers..';
-$wb['dgramrcvbuf_desc_txt'] = 'Receber buffers de UDP e outros protocolos de datagrama.';
-$wb['oomguarpages_desc_txt'] = 'A garantia de memória para o caso de rajadas é superior à reserva (out-of-memory), em páginas.';
+$wb['numproc_desc_txt'] = 'Número de processos e threads.';
+$wb['numtcpsock_desc_txt'] = 'Número de sockets tcp.';
+$wb['numothersock_desc_txt'] = 'Número de outros sockets.';
+$wb['vmguarpages_desc_txt'] = 'Garantia de alocação de memória, em páginas.';
+$wb['kmemsize_desc_txt'] = 'Tamanho da memória do kernel não cambiável, alocada para processos neste contêiner.';
+$wb['tcpsndbuf_desc_txt'] = 'Tamanho de buffers de envio tcp.';
+$wb['tcprcvbuf_desc_txt'] = 'Tamanho de buffers de recepção tcp.';
+$wb['othersockbuf_desc_txt'] = 'Tamanho de buffers de socket de domínio unix, udp e outros buffers de envio de protocolos de datagrama.';
+$wb['dgramrcvbuf_desc_txt'] = 'Tamanho de buffers de recepção udp e outros protocolos de datagrama.';
+$wb['oomguarpages_desc_txt'] = 'Quantidade garantida de memória para o caso da memória estar "com excesso de reserva" (garantia de eliminação de falta de memória), em páginas.';
 $wb['privvmpages_desc_txt'] = 'Limite de alocação de memória, em páginas.';
-$wb['lockedpages_desc_txt'] = 'Páginas de processo não tem permissão para troca (páginas bloqueadas por mlock(2)).';
-$wb['shmpages_desc_txt'] = 'Tamanho total da memória compartilhada (IPC, mapeamentos anônimos compartilhados e objetos tmpfs), em páginas.';
-$wb['physpages_desc_txt'] = 'Número total de páginas de RAM, usada pelos processos.';
+$wb['lockedpages_desc_txt'] = 'Páginas de processos que não podem ser trocadas (páginas bloqueadas por mlock(2)).';
+$wb['shmpages_desc_txt'] = 'Tamanho da memória compartilhada (ISPC, mapeamentos anônimos compartilhados e objetos tmpfs), em páginas.';
+$wb['physpages_desc_txt'] = 'Número total de páginas RAM usadas pelos processos';
 $wb['numfile_desc_txt'] = 'Número de arquivos abertos.';
 $wb['numflock_desc_txt'] = 'Número de arquivos bloqueados.';
-$wb['numpty_desc_txt'] = 'Número de pseudo terminais.';
-$wb['numsiginfo_desc_txt'] = 'Número de estruturas de siginfo.';
-$wb['dcachesize_desc_txt'] = 'Tamanho total de dentry e estruturas inode bloqueados na memória.';
-$wb['numiptent_desc_txt'] = 'Número de entradas no firewall (Filtros de pacotes IP).';
-$wb['swappages_desc_txt'] = 'Quantidade de área de troca a ser exibida no container.';
-$wb['create_dns_txt'] = 'Adicionar dns para servidor';
-$wb['template_name_error_empty'] = 'Nome do gabarito está em branco.';
-$wb['diskspace_error_empty'] = 'Espaço do disco está em branco.';
+$wb['numpty_desc_txt'] = 'Número de pseudo-terminais (tty).';
+$wb['numsiginfo_desc_txt'] = 'Número de estruturas siginfo.';
+$wb['dcachesize_desc_txt'] = 'Tamanho de estruturas dentry e inode bloqueadas na memória.';
+$wb['numiptent_desc_txt'] = 'Número total de entradas NETFILTER (filtragem de pacotes IP).';
+$wb['swappages_desc_txt'] = 'Quantidade de espaço de troca a ser exibido no contêiner.';
+$wb['create_dns_txt'] = 'Adicionar dns para o nome do host';
+$wb['template_name_error_empty'] = 'O nome do gabarito está em branco.';
+$wb['diskspace_error_empty'] = 'O tamanho do disco está em branco.';
 $wb['ram_error_empty'] = 'RAM (garantida) está em branco.';
 $wb['ram_burst_error_empty'] = 'RAM (rajada) está em branco.';
-$wb['cpu_units_error_empty'] = 'Unidades de CPU está em branco.';
-$wb['cpu_num_error_empty'] = 'Cores de CPU está em branco.';
-$wb['cpu_limit_error_empty'] = 'CPU limit % está em branco.';
+$wb['cpu_units_error_empty'] = 'Número de cores da CPU está em branco.';
+$wb['cpu_num_error_empty'] = 'Número de CPU está em branco.';
+$wb['cpu_limit_error_empty'] = 'Limite da CPU está em branco.';
 $wb['io_priority_error_empty'] = 'Prioridade de E/S está em branco.';
-$wb['template_nameserver_error_empty'] = 'Servidor(es) de nome está em branco.';
-$wb['numproc_error_empty'] = 'N° de processadores está em branco.';
-$wb['numtcpsock_error_empty'] = 'N° de soquetes TCP está em branco.';
-$wb['numothersock_error_empty'] = 'N° de outros soquetes está em branco.';
-$wb['vmguarpages_error_empty'] = 'Páginas de guarda está em branco.';
+$wb['template_nameserver_error_empty'] = 'Servidor(es) dns está em branco.';
+$wb['numproc_error_empty'] = 'Número de processadores está em branco.';
+$wb['numtcpsock_error_empty'] = 'Número de sockets tcp está em branco.';
+$wb['numothersock_error_empty'] = 'Número de outros sockets está em branco.';
+$wb['vmguarpages_error_empty'] = 'Página de guarda da vm está em branco.';
 $wb['kmemsize_error_empty'] = 'Kmemsize está em branco.';
-$wb['tcpsndbuf_error_empty'] = 'Tcpsndbuf está em branco.';
-$wb['tcprcvbuf_error_empty'] = 'Tcprcvbuf está em branco.';
-$wb['othersockbuf_error_empty'] = 'Othersockbuf está em branco.';
-$wb['dgramrcvbuf_error_empty'] = 'Dgramrcvbuf está em branco.';
+$wb['tcpsndbuf_error_empty'] = 'Tamanho de buffers de envio tcp está em branco.';
+$wb['tcprcvbuf_error_empty'] = 'Tamanho de buffers de recepção está em branco.';
+$wb['othersockbuf_error_empty'] = 'Tamanho de outros buffers de socket está em branco.';
+$wb['dgramrcvbuf_error_empty'] = 'Tamanho de buffers de recepção udp e outros protocolos de datagrama está em branco.';
 $wb['oomguarpages_error_empty'] = 'Oomguarpages está em branco.';
-$wb['privvmpages_error_empty'] = 'Privvmpages está em branco.';
+$wb['privvmpages_error_empty'] = 'Tamanho da memória alocada para aplicações, em páginas, está em branco.';
 $wb['lockedpages_error_empty'] = 'Lockedpages está em branco.';
 $wb['shmpages_error_empty'] = 'Shmpages está em branco.';
 $wb['physpages_error_empty'] = 'Physpages está em branco.';
-$wb['numfile_error_empty'] = 'Numfile está em branco.';
-$wb['avnumproc_error_empty'] = 'Avnumproc está em branco.';
-$wb['numflock_error_empty'] = 'Numflock está em branco.';
-$wb['numpty_error_empty'] = 'Numpty está em branco.';
-$wb['numsiginfo_error_empty'] = 'Numsiginfo está em branco.';
-$wb['dcachesize_error_empty'] = 'Dcachesize está em branco.';
-$wb['numiptent_error_empty'] = 'Numiptent está em branco.';
-$wb['swappages_error_empty'] = 'Swappages está em branco.';
+$wb['numfile_error_empty'] = 'Número de arquivos está em branco.';
+$wb['avnumproc_error_empty'] = 'Média de processadores está em branco.';
+$wb['numflock_error_empty'] = 'Número de arquivos bloqueados está em branco.';
+$wb['numpty_error_empty'] = 'Número de pseudo-terminais está em branco.';
+$wb['numsiginfo_error_empty'] = 'Número de informações siginfo está em branco.';
+$wb['dcachesize_error_empty'] = 'Tamanho do cache está em branco.';
+$wb['numiptent_error_empty'] = 'Número de entradas NETFILTER está em branco.';
+$wb['swappages_error_empty'] = 'Páginas de troca está em branco.';
 $wb['Template'] = 'Gabarito';
 $wb['Advanced'] = 'Avançado';
 $wb['features_txt'] = 'Recursos';
-$wb['iptables_txt'] = 'Firewall';
+$wb['iptables_txt'] = 'Firewall (iptables)';
 $wb['custom_txt'] = 'Configurações personalizadas';
-$wb['custom_error'] = 'Não permitido em configurações personalizadas: ';
+$wb['custom_error'] = 'Não permitido nas configurações personalizadas: ';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_template_list.lng b/interface/web/vm/lib/lang/br_openvz_template_list.lng
index 390869859ac1bb8ddabb9017d234439cdb3606d5..00d1b648d8285b43e044a62069358479c8a67732 100644
--- a/interface/web/vm/lib/lang/br_openvz_template_list.lng
+++ b/interface/web/vm/lib/lang/br_openvz_template_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Gabarito de máquina virtual OpenVZ';
+$wb['list_head_txt'] = 'Gabarito de máquina virtual';
 $wb['active_txt'] = 'Ativo';
-$wb['template_name_txt'] = 'Nome do Gabarito';
+$wb['template_name_txt'] = 'Nome do gabarito';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_vm.lng b/interface/web/vm/lib/lang/br_openvz_vm.lng
index 04794daf86b2d3305ca3363c204af3f3dabd6f44..a8176e768815da9b533b731130d3277e8f920202 100644
--- a/interface/web/vm/lib/lang/br_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/br_openvz_vm.lng
@@ -1,45 +1,46 @@
 <?php
-$wb['diskspace_txt'] = 'Espaço em disco';
+$wb['diskspace_txt'] = 'Espaço no disco';
 $wb['ram_txt'] = 'RAM (garantida)';
 $wb['ram_burst_txt'] = 'RAM (rajada)';
-$wb['cpu_units_txt'] = 'Unidades de CPU(s)';
-$wb['cpu_num_txt'] = 'Quantidade de CPU(s)';
-$wb['cpu_limit_txt'] = 'Limite de CPU(s)';
-$wb['io_priority_txt'] = 'Prioridade de E/S';
-$wb['nameserver_txt'] = 'Servidor(es) de nome';
-$wb['nameserver_desc_txt'] = '(separado por espaços em branco)';
+$wb['cpu_units_txt'] = 'Número de cores da CPU';
+$wb['cpu_num_txt'] = 'Número de CPU';
+$wb['cpu_limit_txt'] = 'Limite de CPU (%)';
+$wb['io_priority_txt'] = 'prioridade de E/S';
+$wb['nameserver_txt'] = 'Servidor(es) dns';
+$wb['nameserver_desc_txt'] = '(separados por espaço)';
 $wb['capability_txt'] = 'Capacidade';
-$wb['server_id_txt'] = 'Servidor servidor';
-$wb['ostemplate_id_txt'] = 'Gabarito do SO';
+$wb['server_id_txt'] = 'Virtualizador';
+$wb['ostemplate_id_txt'] = 'Gabarito de sistema operacional';
 $wb['template_id_txt'] = 'Gabarito';
 $wb['ip_address_txt'] = 'Endereço IP';
-$wb['hostname_txt'] = 'Servidor';
+$wb['hostname_txt'] = 'Nome do host';
 $wb['vm_password_txt'] = 'Senha da máquina virtual';
 $wb['start_boot_txt'] = 'Iniciar no boot';
 $wb['active_txt'] = 'Ativo';
 $wb['description_txt'] = 'Descrição';
 $wb['client_group_id_txt'] = 'Cliente';
 $wb['veid_txt'] = 'VEID';
-$wb['create_dns_txt'] = 'Adicionar DNS para servidor';
+$wb['create_dns_txt'] = 'Adicionar dns para a máquina virtual';
 $wb['active_until_date_txt'] = 'Ativo até a data';
 $wb['ip_address_error_empty'] = 'Endereço IP está em branco.';
-$wb['hostname_error_empty'] = 'Nome do servidor está em branco.';
+$wb['hostname_error_empty'] = 'Nome do host está em branco.';
 $wb['vm_password_error_empty'] = 'Senha da máquina virtual está em branco.';
 $wb['veid_error_empty'] = 'VEID está em branco.';
-$wb['veid_error_unique'] = 'VEID não existe.';
-$wb['diskspace_error_empty'] = 'Espaço em disco está em branco.';
+$wb['veid_error_unique'] = 'VEID já existe.';
+$wb['diskspace_error_empty'] = 'Espaço do disco está em branco.';
 $wb['ram_error_empty'] = 'RAM (garantida) está em branco.';
 $wb['ram_burst_error_empty'] = 'RAM (rajada) está em branco.';
-$wb['cpu_units_error_empty'] = 'Unidade de CPU(s) está em branco.';
-$wb['cpu_num_error_empty'] = 'Quantidade de CPU(s) está em branco.';
-$wb['cpu_limit_error_empty'] = 'Limite de CPU(s) está em branco.';
+$wb['cpu_units_error_empty'] = 'Número de cores da CPU está em branco.';
+$wb['cpu_num_error_empty'] = 'Número de CPU está em branco.';
+$wb['cpu_limit_error_empty'] = 'Limite de CPU está em branco.';
 $wb['io_priority_error_empty'] = 'Prioridade de E/S está em branco.';
-$wb['template_nameserver_error_empty'] = 'Servidor(es) de nome está em branco.';
-$wb['Virtual server'] = 'Servidor virtual';
+$wb['template_nameserver_error_empty'] = 'Servidor(es) dns está em branco.';
+$wb['Virtual server'] = 'Máquina Virtual';
 $wb['Advanced'] = 'Avançado';
+$wb['Additional IP'] = 'Endereço IP adicional';
 $wb['features_txt'] = 'Recursos';
 $wb['iptables_txt'] = 'Firewall';
 $wb['custom_txt'] = 'Configurações personalizadas';
-$wb['bootorder_txt'] = 'Prioridade do boot';
-$wb['bootorder_error_notpositive'] = 'Somente números positivos podem ser configurados na prioridade do boot.';
+$wb['bootorder_txt'] = 'Ordem da prioridade do boot';
+$wb['bootorder_error_notpositive'] = 'São permitidos apenas números inteiros, > 0, na ordem da prioridade do boot.';
 ?>
diff --git a/interface/web/vm/lib/lang/br_openvz_vm_list.lng b/interface/web/vm/lib/lang/br_openvz_vm_list.lng
index 03d510f2f765743f1d9be45a3ba8df08952bf815..c907c710eaeed01b34d86a3c8dfaadd5c0abe039 100644
--- a/interface/web/vm/lib/lang/br_openvz_vm_list.lng
+++ b/interface/web/vm/lib/lang/br_openvz_vm_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Servidor virtual';
+$wb['list_head_txt'] = 'Máquina virtual';
 $wb['active_txt'] = 'Ativo';
-$wb['server_id_txt'] = 'ID do servidor';
+$wb['server_id_txt'] = 'Virtualizador';
 $wb['ostemplate_id_txt'] = 'Gabarito do SO';
 $wb['template_id_txt'] = 'Gabarito';
-$wb['hostname_txt'] = 'Servidor';
+$wb['hostname_txt'] = 'Nome do host';
 $wb['ip_address_txt'] = 'Endereço IP';
 $wb['veid_txt'] = 'VEID';
 ?>
diff --git a/interface/web/vm/lib/lang/tr.lng b/interface/web/vm/lib/lang/tr.lng
index 82599dd038568772d46f805c842d38d8c7223bc1..23bca66851d28da3d3ce0babc97ba969d08f3b9f 100644
--- a/interface/web/vm/lib/lang/tr.lng
+++ b/interface/web/vm/lib/lang/tr.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['Virtual Servers'] = 'Sanal Sunucular';
-$wb['OS Templates'] = 'OS Kalıpları';
-$wb['VM Templates'] = 'VM Kalıpları';
+$wb['Virtual Servers'] = 'sSunucular';
+$wb['OS Templates'] = 'İşletim Sistemi Kalıpları';
+$wb['VM Templates'] = 'Sanal Makine Kalıpları';
 $wb['IP addresses'] = 'IP Adresleri';
 $wb['OpenVZ'] = 'OpenVZ';
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_action.lng b/interface/web/vm/lib/lang/tr_openvz_action.lng
index 29759e0266fdabd3883e23f8a93792a0a6df7554..8e2a3652d2b31369cc849be6c0a61fd9a2bb9f10 100644
--- a/interface/web/vm/lib/lang/tr_openvz_action.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_action.lng
@@ -1,16 +1,17 @@
 <?php
-$wb['head_txt'] = 'VM Sanal Sunucu Ä°ÅŸlemleri:';
+$wb['head_txt'] = 'Sanal Makine Sanal Sunucu Ä°ÅŸlemleri:';
 $wb['start_txt'] = 'Sanal sunucuyu baÅŸlat';
 $wb['stop_txt'] = 'Sanal sunucuyu durdur';
 $wb['restart_txt'] = 'Sanal sunucuyu yeniden baÅŸlat';
-$wb['ostemplate_txt'] = 'OS Kalıbı Oluştur';
+$wb['ostemplate_txt'] = 'İşletim Sistemi Kalıbı Ekle';
 $wb['ostemplate_desc_txt'] = '(örnek: debian-6.0-i386-custom)';
 $wb['btn_save_txt'] = 'Seçilmiş işlemi yürüt';
 $wb['btn_cancel_txt'] = 'Geri';
-$wb['start_exec_txt'] = 'VM sunucusuna başlatma komutu gönderildi. VM başlatılana kadar bir dakika geçebilir.';
-$wb['stop_exec_txt'] = 'VM sunucusuna durdurma komutu gönderildi. VM durdurulana kadar bir dakika geçebilir.';
-$wb['restart_exec_txt'] = 'VM sunucusuna yeniden başlatma komutu gönderildi. VM yeniden başlatılana kadar bir dakika geçebilir.';
-$wb['ostemplate_name_error'] = 'OS kalıbı adında izin verilmeyen karakterler var.';
+$wb['start_exec_txt'] = 'Sanal makine sunucusuna başlatma komutu gönderildi. Sanal makine başlatılana kadar bir dakika geçebilir.';
+$wb['stop_exec_txt'] = 'Sanal makine sunucusuna durdurma komutu gönderildi. Sanal makine durdurulana kadar bir dakika geçebilir.';
+$wb['restart_exec_txt'] = 'Sanal makine sunucusuna yeniden başlatma komutu gönderildi. Sanal makine yeniden başlatılana kadar bir dakika geçebilir.';
+$wb['ostemplate_name_error'] = 'İşletim sistemi kalıbı adında izin verilmeyen karakterler var.';
 $wb['ostemplate_name_unique_error'] = 'Aynı adlı bir işletim sistemi kalıbı zaten var.';
-$wb['ostemplate_exec_txt'] = 'VM sunucusuna işletim sistemi kalıbı oluşturma komutu gönderildi. İşletim sistemi kalıbının oluşturulması bir kaç dakika alabilir.';
+$wb['ostemplate_exec_txt'] = 'Sanal makine sunucusuna işletim sistemi kalıbı oluşturma komutu gönderildi. İşletim sistemi kalıbının oluşturulması bir kaç dakika alabilir.';
+
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_ip.lng b/interface/web/vm/lib/lang/tr_openvz_ip.lng
index 637a70f2ea87b83d0bfb467860a3c8722f111ac3..e24b354bae0f6b192c1e8c81f119c46f7d3f4aa0 100644
--- a/interface/web/vm/lib/lang/tr_openvz_ip.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_ip.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['server_id_txt'] = 'Sunucu';
 $wb['ip_address_txt'] = 'IP Adresi';
-$wb['vm_id_txt'] = 'Sanal Sunucu';
+$wb['vm_id_txt'] = 'sSunucu';
 $wb['reserved_txt'] = 'Ayrılmış';
 $wb['ip_error_wrong'] = 'Lütfen geçerli bir IPv4 adresi yazın.';
 $wb['ip_error_unique'] = 'Bu IP adresi zaten var.';
diff --git a/interface/web/vm/lib/lang/tr_openvz_ostemplate_list.lng b/interface/web/vm/lib/lang/tr_openvz_ostemplate_list.lng
index bf5923aed17fe4dc744a7e9bd50877dfb3bbdbd3..3a4a10fdaa70cc85a13105b7f6e7537f216de461 100644
--- a/interface/web/vm/lib/lang/tr_openvz_ostemplate_list.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_ostemplate_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'OpenVZ OS Kalıbı';
+$wb['list_head_txt'] = 'OpenVZ İşletim Sistemi Kalıbı';
 $wb['active_txt'] = 'Etkin';
 $wb['template_name_txt'] = 'Kalıp Adı';
 $wb['server_id_txt'] = 'Sunucu';
diff --git a/interface/web/vm/lib/lang/tr_openvz_template.lng b/interface/web/vm/lib/lang/tr_openvz_template.lng
index fb1452e8853141d0135cf9607cc4a3b968bdfcc6..7768d0bae6947be224a3b1f282f9aa9b2941f87d 100644
--- a/interface/web/vm/lib/lang/tr_openvz_template.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_template.lng
@@ -2,11 +2,11 @@
 $wb['numproc_txt'] = 'İşlemci Sayısı';
 $wb['numtcpsock_txt'] = 'TCP Soket Sayısı';
 $wb['numothersock_txt'] = 'Diğer Soket Sayısı';
-$wb['vmguarpages_txt'] = 'VM Koruma Sayfası';
+$wb['vmguarpages_txt'] = 'Sanal Makine Koruma Sayfası';
 $wb['kmemsize_txt'] = 'Kmemsize';
-$wb['tcpsndbuf_txt'] = 'TCP Gönderme Arabelleği';
-$wb['tcprcvbuf_txt'] = 'TCP Alma ArabelleÄŸi';
-$wb['othersockbuf_txt'] = 'DiÄŸer Soket ArabelleÄŸi';
+$wb['tcpsndbuf_txt'] = 'TCP Gönderme Ara Belleği';
+$wb['tcprcvbuf_txt'] = 'TCP Alma Ara BelleÄŸi';
+$wb['othersockbuf_txt'] = 'DiÄŸer Soket Ara BelleÄŸi';
 $wb['dgramrcvbuf_txt'] = 'Dgramrcvbuf';
 $wb['oomguarpages_txt'] = 'Oomguarpages';
 $wb['privvmpages_txt'] = 'Privvmpages';
@@ -40,11 +40,11 @@ $wb['numtcpsock_desc_txt'] = 'TCP soketi sayısı.';
 $wb['numothersock_desc_txt'] = 'TCP olmayan soket sayısı.';
 $wb['vmguarpages_desc_txt'] = 'Sayfa cinsinden garantili ayrılan bellek.';
 $wb['kmemsize_desc_txt'] = 'Bu taşıyıcıdaki işlemler için takas edilemez kernel belleğinin boyutu.';
-$wb['tcpsndbuf_desc_txt'] = 'TCP gönderme arabelleğinin toplam boyutu.';
-$wb['tcprcvbuf_desc_txt'] = 'TCP alma arabelleÄŸinin toplam boyutu.';
-$wb['othersockbuf_desc_txt'] = 'UNIX alan adı soket arabelleğinin toplam boyutu, UDP ve diğer datagram iletişim kuralları gönderme ara bellekleri.';
+$wb['tcpsndbuf_desc_txt'] = 'TCP gönderme ara belleğinin toplam boyutu.';
+$wb['tcprcvbuf_desc_txt'] = 'TCP alma ara belleÄŸinin toplam boyutu.';
+$wb['othersockbuf_desc_txt'] = 'UNIX etki alanı soket ara belleğinin toplam boyutu, UDP ve diğer datagram iletişim kuralları gönderme ara bellekleri.';
 $wb['dgramrcvbuf_desc_txt'] = 'UDP ve diğer datagram iletişim kuralları alma ara bellekleri.';
-$wb['oomguarpages_desc_txt'] = 'Bellek sayfası cinsinden, bellek taşması durumlarında garanti edilen bellek miktarı\\" (bellek bitti boşaltma garantisi).';
+$wb['oomguarpages_desc_txt'] = 'Bellek sayfası cinsinden, "bellek taşması" durumlarında garanti edilen bellek miktarı (bellek bitti boşaltma garantisi).';
 $wb['privvmpages_desc_txt'] = 'Bellek sayfası cinsinden ayrılacak bellek sınırı.';
 $wb['lockedpages_desc_txt'] = 'İşlem sayfaları takasına izin verilmez (mlock(2) ile kilitlenmiş sayfalar).';
 $wb['shmpages_desc_txt'] = 'Bellek sayfası cinsinden, paylaşılan belleğin toplam boyutu (IPC, paylaşılan anonim haritalama ve tmpfs nesneleri).';
@@ -90,8 +90,8 @@ $wb['numiptent_error_empty'] = 'Numiptent boÅŸ olamaz.';
 $wb['swappages_error_empty'] = 'Swappages boÅŸ olamaz.';
 $wb['Template'] = 'Kalıp';
 $wb['Advanced'] = 'GeliÅŸmiÅŸ';
-$wb['features_txt'] = 'Features';
+$wb['features_txt'] = 'Özellikle';
 $wb['iptables_txt'] = 'IP Tables';
-$wb['custom_txt'] = 'Custom settings';
-$wb['custom_error'] = 'Not allowed in Custom settings: ';
+$wb['custom_txt'] = 'Özel Ayarlar';
+$wb['custom_error'] = 'Özel ayarlarda izin verilmiyor: ';
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_vm.lng b/interface/web/vm/lib/lang/tr_openvz_vm.lng
index fad86d9f3a29185664fa6c9bfe37ccff09f5742f..7c2977cda97c68283fd538d2914be50ca540f584 100644
--- a/interface/web/vm/lib/lang/tr_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_vm.lng
@@ -10,21 +10,21 @@ $wb['nameserver_txt'] = 'Ad Sunucuları';
 $wb['nameserver_desc_txt'] = '(boşluk ile ayırarak)';
 $wb['capability_txt'] = 'Yeterlilik';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['ostemplate_id_txt'] = 'OS Kalıbı';
+$wb['ostemplate_id_txt'] = 'İşletim Sistemi Kalıbı';
 $wb['template_id_txt'] = 'Kalıp';
 $wb['ip_address_txt'] = 'IP Adresi';
 $wb['hostname_txt'] = 'Sunucu Adı';
-$wb['vm_password_txt'] = 'VM Parolası';
-$wb['start_boot_txt'] = 'Açılışta başlat';
+$wb['vm_password_txt'] = 'Sanal Makine Parolası';
+$wb['start_boot_txt'] = 'Açılışta Başlatılsın';
 $wb['active_txt'] = 'Etkin';
 $wb['description_txt'] = 'Açıklama';
 $wb['client_group_id_txt'] = 'Müşteri';
 $wb['veid_txt'] = 'VEID';
 $wb['create_dns_txt'] = 'Sunucu için DNS oluştur';
-$wb['active_until_date_txt'] = 'Åžu tarihe kadar etkin';
+$wb['active_until_date_txt'] = 'Åžu Tarihe Kadar Etkin';
 $wb['ip_address_error_empty'] = 'IP adresi boÅŸ olamaz.';
 $wb['hostname_error_empty'] = 'Sunucu adı boş olamaz.';
-$wb['vm_password_error_empty'] = 'VM parolası boş olamaz.';
+$wb['vm_password_error_empty'] = 'Sanal makine parolası boş olamaz.';
 $wb['veid_error_empty'] = 'VEID boÅŸ olamaz.';
 $wb['veid_error_unique'] = 'VEID zaten var.';
 $wb['diskspace_error_empty'] = 'Disk alanı boş olamaz.';
@@ -35,11 +35,11 @@ $wb['cpu_num_error_empty'] = 'İşlemci sayısı boş olamaz.';
 $wb['cpu_limit_error_empty'] = 'İşlemci sınırı boş olamaz.';
 $wb['io_priority_error_empty'] = 'G/Ç önceliği boş olamaz.';
 $wb['template_nameserver_error_empty'] = 'Ad sunucuları boş olamaz.';
-$wb['Virtual server'] = 'Sanal sunucu';
+$wb['Virtual server'] = 'sSunucu';
 $wb['Advanced'] = 'GeliÅŸmiÅŸ';
-$wb['features_txt'] = 'Features';
+$wb['features_txt'] = 'Özellikler';
 $wb['iptables_txt'] = 'IP Tables';
-$wb['custom_txt'] = 'Custom settings';
-$wb['bootorder_txt'] = 'Boot order priority';
-$wb['bootorder_error_notpositive'] = 'Only positive integers are allowed for Boot order priority';
+$wb['custom_txt'] = 'Özel Ayarlar';
+$wb['bootorder_txt'] = 'Başlatma Önceliği';
+$wb['bootorder_error_notpositive'] = 'Başlatma önceliği değeri yalnız pozitif bir tamsayı olabilir';
 ?>
diff --git a/interface/web/vm/lib/lang/tr_openvz_vm_list.lng b/interface/web/vm/lib/lang/tr_openvz_vm_list.lng
index 1a4ed0e7b93f99627887ec8d3e7ba746c79f01a0..e188f60464ead4e57ea647773ee87e767948d54b 100644
--- a/interface/web/vm/lib/lang/tr_openvz_vm_list.lng
+++ b/interface/web/vm/lib/lang/tr_openvz_vm_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Sanal Sunucu';
+$wb['list_head_txt'] = 'sSunucu';
 $wb['active_txt'] = 'Etkin';
 $wb['server_id_txt'] = 'Sunucu';
-$wb['ostemplate_id_txt'] = 'OS Kalıbı';
+$wb['ostemplate_id_txt'] = 'İşl. Sis. Kalıbı';
 $wb['template_id_txt'] = 'Kalıp';
 $wb['hostname_txt'] = 'Sunucu Adı';
 $wb['ip_address_txt'] = 'IP Adresi';
diff --git a/interface/web/vm/templates/openvz_ip_list.htm b/interface/web/vm/templates/openvz_ip_list.htm
index fd12694c37c07ece5cec1f3ce46501ba50b6fb85..ff98e2df5541848adb835e470302e443643b6680 100644
--- a/interface/web/vm/templates/openvz_ip_list.htm
+++ b/interface/web/vm/templates/openvz_ip_list.htm
@@ -39,7 +39,7 @@
                             <td><a href="#" data-load-content="vm/openvz_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_address"}</a></td>
                             <td><a href="#" data-load-content="vm/openvz_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="reserved"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ip_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ip_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/vm/templates/openvz_ostemplate_list.htm b/interface/web/vm/templates/openvz_ostemplate_list.htm
index 85f46e6732c8a5f8234e7199af8c0f567ef4aa08..d800686e1c0c9c5091fbebb52e439bf809a0fa6b 100644
--- a/interface/web/vm/templates/openvz_ostemplate_list.htm
+++ b/interface/web/vm/templates/openvz_ostemplate_list.htm
@@ -42,7 +42,7 @@
                             <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                             <td><a href="#" data-load-content="vm/openvz_ostemplate_edit.php?id={tmpl_var name='id'}">{tmpl_var name="allservers"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ostemplate_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_ostemplate_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/vm/templates/openvz_template_list.htm b/interface/web/vm/templates/openvz_template_list.htm
index 5ec0cb79139a5d0e80b3f61f92f17625e1ab5e52..2c204279013eee1abdb82954eeb1268426b37458 100644
--- a/interface/web/vm/templates/openvz_template_list.htm
+++ b/interface/web/vm/templates/openvz_template_list.htm
@@ -33,7 +33,7 @@
                             <td><a href="#" data-load-content="vm/openvz_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
                             <td><a href="#" data-load-content="vm/openvz_template_edit.php?id={tmpl_var name='id'}">{tmpl_var name="template_name"}</a></td>
                             <td class="text-right">
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_template_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_template_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/interface/web/vm/templates/openvz_vm_list.htm b/interface/web/vm/templates/openvz_vm_list.htm
index 516b536bb39fb4077e22e25fb000f64b0a830749..ee4084f4d1e76706679421fec33048a5e6630d16 100644
--- a/interface/web/vm/templates/openvz_vm_list.htm
+++ b/interface/web/vm/templates/openvz_vm_list.htm
@@ -49,7 +49,7 @@
                             <td><a href="#" data-load-content="vm/openvz_vm_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_address"}</a></td>
                             <td class="text-right">
                                 <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="vm/openvz_action.php?id={tmpl_var name='id'}"><span class="icon icon-action"></span></a>
-                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_vm_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                                <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('vm/openvz_vm_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                             </td>
                         </tr>
                     </tmpl_loop>
diff --git a/remoting_client/API-docs/mail_spamfilter_blacklist_add.html b/remoting_client/API-docs/mail_spamfilter_blacklist_add.html
index c45c5d60f0d460067b43d6cb1b3cf9475a521220..198f7b6b237cde20d9473c10305465c026ad2e30 100644
--- a/remoting_client/API-docs/mail_spamfilter_blacklist_add.html
+++ b/remoting_client/API-docs/mail_spamfilter_blacklist_add.html
@@ -21,7 +21,7 @@
 <p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> wb&nbsp;&nbsp;(<span class="paratype">enum('W','B')</span>)</p>
-<p class="margin"> rid&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> rid&nbsp;&nbsp;(<span class="paratype">int(11)</span>) An ID from the spamfilter_users table.</p>
 <p class="margin"> email&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> priority&nbsp;&nbsp;(<span class="paratype">tinyint(3)</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
diff --git a/remoting_client/API-docs/mail_spamfilter_user_add.html b/remoting_client/API-docs/mail_spamfilter_user_add.html
index c23a9dbd42ca4a1900c0463ccad3336803449a6c..888c74ab70bc6ab084173b33b2e3ec2ca840d28a 100644
--- a/remoting_client/API-docs/mail_spamfilter_user_add.html
+++ b/remoting_client/API-docs/mail_spamfilter_user_add.html
@@ -24,7 +24,7 @@
 <p class="margin"> policy_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> email&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> fullname&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> local&nbsp;&nbsp;(<span class="paratype">varchar(1)</span>)</p>
+<p class="margin"> local&nbsp;&nbsp;(<span class="paratype">varchar(1)</span>) 'Y' for a local account.</p>
 <p class="headgrp">Output: </p> 
 <p class="margin"> Returns the ID of the newly added spamfilter user.</p>
 <!--<b>Output:</b> 
diff --git a/remoting_client/API-docs/mail_user_add.html b/remoting_client/API-docs/mail_user_add.html
index b88ec706cce0e1e84aeaa7967e8c76fe69e9b2f3..88ab952e6acc79870b152fffb2181ea81e2b3379 100644
--- a/remoting_client/API-docs/mail_user_add.html
+++ b/remoting_client/API-docs/mail_user_add.html
@@ -36,6 +36,7 @@
 <p class="margin"> autoresponder_start_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_end_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_text&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
+<p class="margin"> autoresponder_subject&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> custom_mailfilter&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> postfix&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
diff --git a/remoting_client/API-docs/navigation.html b/remoting_client/API-docs/navigation.html
index a9d32f7598f5b9169fbfb25e9ebef8a2cbf4af31..5168122f289ef728bbae26a09aab8f3f12be918a 100644
--- a/remoting_client/API-docs/navigation.html
+++ b/remoting_client/API-docs/navigation.html
@@ -2,11 +2,11 @@
 <html><head>
   <title>ISCPConfig 3 API Functions</title>
 
-  
-  
+
+
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 
-  
+
   <style type="text/css">
 <!--
 .command {
@@ -200,6 +200,7 @@
 <p><a href="server_get_php_versions.html" target="content">server_get_php_versions</a></p>
 <p><a href="server_get_serverid_by_ip.html" target="content">server_get_serverid_by_ip</a></p>
 <p><a href="sites_aps_available_packages_list.html" target="content">sites_aps_available_packages_list</a></p>
+<p><a href="sites_aps_change_package_status.html" target="content">sites_aps_change_package_status</a></p>
 <p><a href="sites_aps_get_package_details.html" target="content">sites_aps_get_package_details</a></p>
 <p><a href="sites_aps_get_package_file.html" target="content">sites_aps_get_package_file</a></p>
 <p><a href="sites_aps_get_package_settings.html" target="content">sites_aps_get_package_settings</a></p>
diff --git a/remoting_client/API-docs/sites_aps_change_package_status.html b/remoting_client/API-docs/sites_aps_change_package_status.html
new file mode 100644
index 0000000000000000000000000000000000000000..bc8ad380ed9a47ff9e49c93e417fb2f6e2f4ae38
--- /dev/null
+++ b/remoting_client/API-docs/sites_aps_change_package_status.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPConfig 3 remote API documentation</title>
+
+
+
+
+
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>sites_aps_change_package_status(<span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Changes the status for specified APS package. Supply the APS package ID in $primary_id.</p><br>
+<p class="headgrp">Input Variables: </p>
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> package_status&nbsp;&nbsp;(<span class="paratype">int</span>) - can be 1 (= PACKAGE_LOCKED) or 2 (= PACKAGE_ENABLED)</p>
+<p class="headgrp">Output: </p>
+<p class="margin"> Returns true package status was changed.</p>
+<!--<b>Output:</b>
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/examples/dns_templatezone_add.php b/remoting_client/examples/dns_templatezone_add.php
new file mode 100644
index 0000000000000000000000000000000000000000..aedfc61f5d9be0989bccb31177922b1fb331b446
--- /dev/null
+++ b/remoting_client/examples/dns_templatezone_add.php
@@ -0,0 +1,50 @@
+<?php
+
+require 'soap_config.php';
+
+// Disable SSL verification for this test script
+$context = stream_context_create([
+    'ssl' => [
+        // set some SSL/TLS specific options
+        'verify_peer' => false,
+        'verify_peer_name' => false,
+        'allow_self_signed' => true
+    ]
+]);
+
+$client = new SoapClient(null, array('location' => $soap_location,
+                'uri'      => $soap_uri,
+                'trace' => 1,
+                'exceptions' => 1,
+                'stream_context' => $context));
+
+
+try {
+        if($session_id = $client->login($username, $password)) {
+                echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+        }
+
+        //* Set the function parameters.
+        $client_id = 1;
+        $template_id = 1;
+        $domain = 'test.tld';
+        $ip = '192.168.0.100';
+        $ns1 = 'ns1.testhoster.tld';
+        $ns2 = 'ns2.testhoster.tld';
+        $email = 'email.test.tld';
+
+        $id = $client->dns_templatezone_add($session_id, $client_id, $template_id, $domain, $ip, $ns1, $ns2, $email);
+
+        echo "ID: ".$id."<br>";
+
+        if($client->logout($session_id)) {
+                echo 'Logged out.<br />';
+        }
+
+
+} catch (SoapFault $e) {
+        echo $client->__getLastResponse();
+        die('SOAP Error: '.$e->getMessage());
+}
+
+?>
\ No newline at end of file
diff --git a/remoting_client/examples/mail_spamfilter_blacklist_add.php b/remoting_client/examples/mail_spamfilter_blacklist_add.php
index d5768e25367027a11ee492661f189b8d320d13c5..b5d8a7f80a53b8f215b445eb525693ef0e296b08 100644
--- a/remoting_client/examples/mail_spamfilter_blacklist_add.php
+++ b/remoting_client/examples/mail_spamfilter_blacklist_add.php
@@ -19,7 +19,7 @@ try {
 	$params = array(
 		'server_id' => 1,
 		'wb' => 'B',
-		'rid' => '',
+		'rid' => '', // Fill in an ID from the spamfilter_users table.
 		'email' => 'hmmnoe@test.int',
 		'priority' => 1,
 		'active' => 'y'
diff --git a/remoting_client/examples/mail_user_add.php b/remoting_client/examples/mail_user_add.php
index 3b7d240eccea9805b43526959ed5298ed025cc86..80a7358cf9d3bb47c8b836954c6aed79eb53e90a 100644
--- a/remoting_client/examples/mail_user_add.php
+++ b/remoting_client/examples/mail_user_add.php
@@ -32,6 +32,7 @@ try {
 		'autoresponder_start_date' => '',
 		'autoresponder_end_date' => '',
 		'autoresponder_text' => 'hallo',
+		'autoresponder_subject' => 'Out of office reply',
 		'move_junk' => 'n',
 		'custom_mailfilter' => 'spam',
 		'postfix' => 'n',
diff --git a/security/security_settings.ini b/security/security_settings.ini
index 24f4e38d209d6875c43538a09afb3a744ee2aa43..c135652e17cf15aa650168c206b44ff3725b3345 100644
--- a/security/security_settings.ini
+++ b/security/security_settings.ini
@@ -17,6 +17,7 @@ admin_allow_software_repo=superadmin
 remote_api_allowed=yes
 password_reset_allowed=yes
 session_regenerate_id=yes
+reverse_proxy_panel_allowed=none
 
 [ids]
 ids_anon_enabled=yes
@@ -42,4 +43,5 @@ security_admin_email_subject=Security alert from server
 warn_new_admin=yes
 warn_passwd_change=no
 warn_shadow_change=no
-warn_group_change=no
\ No newline at end of file
+warn_group_change=no
+
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index d533f7b3c0a6f3dcbde989b93f39a0a8e37854c0..94982a6dc11ee3ec1f46289cd05c27d8727575c7 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -74,6 +74,16 @@
     </Directory>
   </IfModule>
 
+{tmpl_if name="use_rspamd"}
+  <Location /rspamd>
+        Order allow,deny
+        Allow from all
+  </Location>
+  RewriteEngine On
+  RewriteRule ^/rspamd$ /rspamd/ [R,L]
+  RewriteRule ^/rspamd/(.*) http://127.0.0.1:11334/$1 [P]
+{/tmpl_if}
+
 </VirtualHost>
 
 
diff --git a/server/conf/autoresponder.master b/server/conf/autoresponder.master
index 0126c998d49f8177d28e147c1642a6e9fe4532c4..114db23d640125eccc0fb4ba4f9454d704ad92c0 100644
--- a/server/conf/autoresponder.master
+++ b/server/conf/autoresponder.master
@@ -4,7 +4,7 @@ if ($RETURNCODE==1)
        {
        if (!/^List-Unsubscribe:.*/:h )
        {
-               if (!/^X-Spam-Flag: YES/:h )
+               if (!/^(X-Spam-Flag: YES|X-Spam: Yes|Subject: \*\*\*\s*SPAM\s*\*\*\*.*)/:h )
                {
                   NOW=time
                   if ({start_date} lt $NOW && {end_date} gt $NOW)
diff --git a/server/conf/bind_pri.domain.master b/server/conf/bind_pri.domain.master
index ed395064af5490be0a11aafeac61a67a9ef99d2e..fb867901dc2848506db0790c5ce076e92d2326ab 100644
--- a/server/conf/bind_pri.domain.master
+++ b/server/conf/bind_pri.domain.master
@@ -20,6 +20,9 @@ $TTL        {tmpl_var name='ttl'}
 <tmpl_if name="type" op='==' value='ALIAS'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME        {tmpl_var name='data'}
 </tmpl_if>
+<tmpl_if name="type" op='==' value='CAA'>
+{tmpl_var name='name'} {tmpl_var name='ttl'}      CAA       {tmpl_var name='data'}
+</tmpl_if>
 <tmpl_if name="type" op='==' value='CNAME'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME        {tmpl_var name='data'}
 </tmpl_if>
@@ -53,5 +56,9 @@ $TTL        {tmpl_var name='ttl'}
 <tmpl_if name="type" op='==' value='TXT'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      TXT        "{tmpl_var name='data'}"
 </tmpl_if>
+<tmpl_if name="type" op='==' value='TYPE257'>
+{tmpl_var name='name'} {tmpl_var name='ttl'}      TYPE257        {tmpl_var name='data'}
+</tmpl_if>
 </tmpl_loop>
 
+
diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master
index ed5e3a49ae5160842cfbc25bbd25e7e22f6c4822..8a97f82a439cd596d341cf91b313ad4a52625a6b 100644
--- a/server/conf/nginx_apps.vhost.master
+++ b/server/conf/nginx_apps.vhost.master
@@ -199,4 +199,29 @@ server {
                alias /var/lib/mailman/archives/public;
                autoindex on;
         }
+
+        {use_rspamd}location /rspamd/ {
+                {use_rspamd}proxy_pass http://127.0.0.1:11334/;
+                {use_rspamd}rewrite ^//(.*) /$1;
+                {use_rspamd}proxy_set_header X-Forwarded-Proto $scheme;
+                {use_rspamd}proxy_set_header Host $host;
+                {use_rspamd}proxy_set_header X-Real-IP $remote_addr;
+                {use_rspamd}proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+                {use_rspamd}proxy_pass_header Authorization;
+                {use_rspamd}client_max_body_size 0;
+                {use_rspamd}client_body_buffer_size 1m;
+                {use_rspamd}proxy_intercept_errors on;
+                {use_rspamd}proxy_buffering on;
+                {use_rspamd}proxy_buffer_size 128k;
+                {use_rspamd}proxy_buffers 256 16k;
+                {use_rspamd}proxy_busy_buffers_size 256k;
+                {use_rspamd}proxy_temp_file_write_size 256k;
+                {use_rspamd}proxy_max_temp_file_size 0;
+                {use_rspamd}proxy_read_timeout 300;
+                {use_rspamd}
+                {use_rspamd}location ~* ^/rspamd/(.+\.(jpg|jpeg|gif|css|png|js|ico|html?|xml|txt))$ {
+                       {use_rspamd}alias /usr/share/rspamd/www/$1;
+                {use_rspamd}}
+        {use_rspamd}}
+
 }
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 1fd98a58997efee0f00e9daf2f59df08bd5810a0..b1db61fe1c90e9a34dbc7797060ded982ebd66de 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -3,7 +3,9 @@ server {
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='http_port'>;
 </tmpl_if>
-		
+<tmpl_if name='ipv6_wildcard'>
+        listen [::]:<tmpl_var name='http_port'>;
+</tmpl_if>
 <tmpl_if name='ssl_enabled'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
@@ -11,6 +13,9 @@ server {
 		# ssl_prefer_server_ciphers on;
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+</tmpl_if>
+<tmpl_if name='ipv6_wildcard'>
+        listen [::]:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
 </tmpl_if>
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
@@ -20,6 +25,13 @@ server {
 
         root   <tmpl_var name='web_document_root_www'>;
 		
+<tmpl_if name='ssl_enabled'>
+<tmpl_if name='rewrite_to_https' op='==' value='y'>
+        if ($scheme != "https") {
+            rewrite ^ https://$http_host$request_uri? permanent;
+        }
+</tmpl_if>
+</tmpl_if>
 <tmpl_if name='seo_redirect_enabled'>
         if ($http_host <tmpl_var name='seo_redirect_operator'> "<tmpl_var name='seo_redirect_origin_domain'>") {
             rewrite ^ $scheme://<tmpl_var name='seo_redirect_target_domain'>$request_uri? permanent;
@@ -35,13 +47,6 @@ server {
             rewrite ^<tmpl_var name='local_redirect_exclude'>(.*)$ <tmpl_var name='local_redirect_target'>$2 <tmpl_var name='local_redirect_type'>;
         }
 </tmpl_loop>
-<tmpl_if name='ssl_enabled'>
-<tmpl_if name='rewrite_to_https' op='==' value='y'>
-        if ($scheme != "https") {
-            rewrite ^ https://$http_host$request_uri? permanent;
-        }
-</tmpl_if>
-</tmpl_if>
 
 <tmpl_loop name="own_redirects">
 <tmpl_if name='use_rewrite'>
@@ -128,6 +133,7 @@ server {
 		location ^~ /.well-known/acme-challenge/ {
 			access_log off;
 			log_not_found off;
+			auth_basic off;
 			root /usr/local/ispconfig/interface/acme/;
 			autoindex off;
 			index index.html;
@@ -173,7 +179,13 @@ server {
             fastcgi_pass unix:<tmpl_var name='fpm_socket'>;
 </tmpl_if>
             fastcgi_index index.php;
+<tmpl_if name='php_fpm_chroot' op='==' value='y'>
+            fastcgi_param DOCUMENT_ROOT <tmpl_var name='php_fpm_chroot_web_folder'>;
+            fastcgi_param HOME <tmpl_var name='php_fpm_chroot_web_folder'>;
+            fastcgi_param SCRIPT_FILENAME <tmpl_var name='php_fpm_chroot_web_folder'>$fastcgi_script_name;
+<tmpl_else>
             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+</tmpl_if>
             #fastcgi_param PATH_INFO $fastcgi_script_name;
             fastcgi_intercept_errors on;
         }
@@ -184,12 +196,18 @@ server {
 				include /etc/nginx/fastcgi_params;
 				fastcgi_pass unix:/var/run/hhvm/hhvm.<tmpl_var name='system_user'>.sock;
 				fastcgi_index index.php;
+<tmpl_if name='php_fpm_chroot'>
+				fastcgi_param DOCUMENT_ROOT <tmpl_var name='php_fpm_chroot_web_folder'>;
+				fastcgi_param HOME <tmpl_var name='php_fpm_chroot_web_folder'>;
+				fastcgi_param SCRIPT_FILENAME <tmpl_var name='php_fpm_chroot_web_folder'>$fastcgi_script_name;
+<tmpl_else>
 				fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+</tmpl_if>
 				#fastcgi_param PATH_INFO $fastcgi_script_name;
 				fastcgi_intercept_errors on;
 				error_page 500 501 502 503 = @phpfallback;
 			}
-			
+
 			location @phpfallback {
 				try_files $uri =404;
 				include /etc/nginx/fastcgi_params;
@@ -200,7 +218,13 @@ server {
 				fastcgi_pass unix:<tmpl_var name='fpm_socket'>;
 </tmpl_if>
 				fastcgi_index index.php;
+<tmpl_if name='php_fpm_chroot'>
+				fastcgi_param DOCUMENT_ROOT <tmpl_var name='php_fpm_chroot_web_folder'>;
+				fastcgi_param HOME <tmpl_var name='php_fpm_chroot_web_folder'>;
+				fastcgi_param SCRIPT_FILENAME <tmpl_var name='php_fpm_chroot_web_folder'>$fastcgi_script_name;
+<tmpl_else>
 				fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+</tmpl_if>
 				#fastcgi_param PATH_INFO $fastcgi_script_name;
 				fastcgi_intercept_errors on;
 			}
@@ -211,7 +235,7 @@ server {
         }
 	</tmpl_if>
 </tmpl_if>
-		
+
 <tmpl_if name='cgi' op='==' value='y'>
         location /cgi-bin/ {
             try_files $uri =404;
@@ -220,7 +244,13 @@ server {
             gzip off;
             fastcgi_pass  unix:/var/run/fcgiwrap.socket;
             fastcgi_index index.cgi;
+<tmpl_if name='php_fpm_chroot'>
+            fastcgi_param DOCUMENT_ROOT <tmpl_var name='php_fpm_chroot_web_folder'>;
+            fastcgi_param HOME <tmpl_var name='php_fpm_chroot_web_folder'>;
+            fastcgi_param SCRIPT_FILENAME <tmpl_var name='php_fpm_chroot_web_folder'>$fastcgi_script_name;
+<tmpl_else>
             fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+</tmpl_if>
             fastcgi_intercept_errors on;
         }
 </tmpl_if>
diff --git a/server/conf/php_fpm_pool.conf.master b/server/conf/php_fpm_pool.conf.master
index fd7e996a76ce3088eb202413087e7d1387b1b84f..fb5c4b44d9b975ccef05ab936dc7d7d75c7e934a 100644
--- a/server/conf/php_fpm_pool.conf.master
+++ b/server/conf/php_fpm_pool.conf.master
@@ -27,6 +27,11 @@ pm.process_idle_timeout = <tmpl_var name='pm_process_idle_timeout'>s;
 pm.max_requests = <tmpl_var name='pm_max_requests'>
 
 chdir = /
+<tmpl_if name='php_fpm_chroot'>
+chroot = <tmpl_var name='php_fpm_chroot_dir'>
+php_admin_value[doc_root] = <tmpl_var name='php_fpm_chroot_web_folder'>
+php_admin_value[cgi.fix_pathinfo] = 0
+</tmpl_if>
 
 env[HOSTNAME] = $HOSTNAME
 env[TMP] = <tmpl_var name='document_root'>/tmp
diff --git a/server/conf/rspamd_users.conf.master b/server/conf/rspamd_users.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..73d437d6cbdd3a7292af84855364cdfee7de977a
--- /dev/null
+++ b/server/conf/rspamd_users.conf.master
@@ -0,0 +1,43 @@
+settings {
+	authenticated {
+		priority = 10;
+		authenticated = yes;
+		#apply "default" { groups_disabled = ["rbl", "spf"]; }
+		apply "default" {
+			#symbols_enabled = [];
+			symbols_disabled = [];
+			#groups_enabled = [];
+			groups_disabled = ["rbl"];
+		}
+	}
+	whitelist {
+		priority = 10;
+		rcpt = "postmaster";
+		rcpt = "hostmaster";
+		rcpt = "abuse";
+		want_spam = yes;
+	}
+	whitelist-ip {
+		priority = 10;
+<tmpl_loop name="whitelist_ips">
+		ip = "<tmpl_var name='ip'>";
+</tmpl_loop>
+		
+		want_spam = yes;
+	}
+#	whitelist-timmehosting {
+#		priority = 20;
+#		from = "@xxx";
+#		from = "@xxx";
+#		want_spam = yes;
+#	}
+	whitelist-ca {
+		priority = 20;
+		from = "@comodo.com";
+		from = "@geotrust.com";
+		from = "@geotrusteurope.com";
+		want_spam = yes;
+	}
+	.include(try=true; glob=true) "$LOCAL_CONFDIR/local.d/users/*.conf"
+	.include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/users.local.conf"
+}
diff --git a/server/conf/rspamd_users.inc.conf.master b/server/conf/rspamd_users.inc.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..96ba9f08384f0c42fa398517f4e34ff301c83648
--- /dev/null
+++ b/server/conf/rspamd_users.inc.conf.master
@@ -0,0 +1,57 @@
+<tmpl_var name='record_identifier'> {
+	priority = <tmpl_var name='priority'>;
+<tmpl_if name='from_email'>
+	from = "<tmpl_var name='from_email'>";
+</tmpl_if>
+<tmpl_if name='to_email'>
+	rcpt = "<tmpl_var name='to_email'>";
+</tmpl_if>
+
+<tmpl_if name='spam_lover'>
+<tmpl_if name='virus_lover'>
+	want_spam = yes;
+<tmpl_else>
+	apply {
+		CLAM_VIRUS = 1999.0;
+		JUST_EICAR = 1999.0;
+		actions {
+			reject = null;
+	<tmpl_if name='greylisting'>
+		<tmpl_if name='greylisting' op='==' value='y'>
+			greylist = <tmpl_var name='greylisting_level'>;
+		<tmpl_else>
+			greylist = null;
+		</tmpl_if>
+	</tmpl_if>
+		}
+	}
+	</tmpl_if>
+<tmpl_else>
+	apply {
+	<tmpl_if name='virus_lover'>
+		CLAM_VIRUS = -999.0;
+		JUST_EICAR = -999.0;
+	<tmpl_else>
+		CLAM_VIRUS = <tmpl_var name='rspamd_virus_kill_level'>;
+		JUST_EICAR = <tmpl_var name='rspamd_virus_kill_level'>;
+	</tmpl_if>
+		actions {
+		<tmpl_if name='rspamd_spam_tag_method' op='==' value='rewrite_subject'>
+			"rewrite subject" =  <tmpl_var name='rspamd_spam_tag_level'>;
+		</tmpl_if>
+		<tmpl_if name='rspamd_spam_tag_method' op='==' value='add_header'>
+			"add header" =  <tmpl_var name='rspamd_spam_tag_level'>;
+		</tmpl_if>
+			reject = <tmpl_var name='rspamd_spam_kill_level'>;
+	<tmpl_if name='greylisting'>
+		<tmpl_if name='greylisting' op='==' value='y'>
+			greylist = <tmpl_var name='greylisting_level'>;
+		<tmpl_else>
+			greylist = null;
+		</tmpl_if>
+	</tmpl_if>
+		}
+	}
+</tmpl_if>
+
+}
\ No newline at end of file
diff --git a/server/conf/rspamd_wblist.inc.conf.master b/server/conf/rspamd_wblist.inc.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..b614244515b4ea55089fcc9f347796a40766b3c4
--- /dev/null
+++ b/server/conf/rspamd_wblist.inc.conf.master
@@ -0,0 +1,36 @@
+<tmpl_var name='list_scope'>_wblist-<tmpl_var name='record_id'> {
+	priority = <tmpl_var name='priority'>;
+<tmpl_if name="from">
+	from = "<tmpl_var name='from'>";
+</tmpl_if>
+<tmpl_if name="recipient">
+	rcpt = "<tmpl_var name='recipient'>";
+</tmpl_if>
+<tmpl_if name="ip">
+	ip = "<tmpl_var name='ip'>";
+</tmpl_if>
+<tmpl_if name="hostname">
+	hostname = "<tmpl_var name='hostname'>";
+</tmpl_if>
+<tmpl_if name='wblist' op='==' value='W'>
+	want_spam = yes;
+	apply {
+		actions {
+			reject = null;
+			"add header" = null;
+			greylist = null;
+			"rewrite subject" = null;
+		}
+	}
+</tmpl_else>
+	apply {
+		R_DUMMY = 999.0;
+		actions {
+			reject = 0.2;
+			"add header" = 0.1;
+			greylist = 0.1;
+			"rewrite subject" = 0.1;
+		}
+	}
+</tmpl_if>
+}
\ No newline at end of file
diff --git a/server/conf/rspamd_worker-controller.inc.master b/server/conf/rspamd_worker-controller.inc.master
new file mode 100644
index 0000000000000000000000000000000000000000..75b744c88380c3ce63394caaadf79653e0fa8815
--- /dev/null
+++ b/server/conf/rspamd_worker-controller.inc.master
@@ -0,0 +1,8 @@
+# Included from top-level .conf file
+
+type = "controller";
+count = 1;
+password = "<tmpl_var name='rspamd_password'>";
+secure_ip = "127.0.0.1";
+secure_ip = "::1";
+static_dir = "${WWWDIR}";
\ No newline at end of file
diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master
index 8e78c6c83aa87fdeb53f03a42d771aacd0c0b5e5..13c08dd56b18987573c18fd1fe1aee432db17e44 100644
--- a/server/conf/sieve_filter.master
+++ b/server/conf/sieve_filter.master
@@ -1,4 +1,4 @@
-require ["fileinto", "regex", "vacation"];
+require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
 
 <tmpl_if name="cc">
 # Send a copy of email to
@@ -9,7 +9,7 @@ redirect "<tmpl_var name='address'>";
 
 <tmpl_if name="move_junk" op="==" value="y">
 # Move spam to spam folder
-if header :contains "X-Spam-Flag" "YES" {
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
   fileinto "Junk";
   # Stop here so that we do not reply on spams
   stop;
@@ -26,7 +26,7 @@ keep;
 #################################################################
 
 # Move spam to spam folder
-if header :contains "X-Spam-Flag" "YES" {
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
   fileinto "Junk";
   # Stop here so that we do not reply on spams
   stop;
diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master
index b1f7fcb87d1802bac7205cde7b15385f1e15dd0e..5244693102ce0778964ce2e25b61c377b1b2bf8a 100644
--- a/server/conf/sieve_filter_1.2.master
+++ b/server/conf/sieve_filter_1.2.master
@@ -1,8 +1,8 @@
-require ["fileinto", "regex", "date", "relational", "vacation"];
+require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
 
 <tmpl_if name="move_junk" op="==" value="y">
 # Move spam to spam folder
-if header :contains "X-Spam-Flag" "YES" {
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
   fileinto "Junk";
   # Stop here so that we do not reply on spams
   stop;
@@ -26,7 +26,7 @@ keep;
 #################################################################
 
 # Move spam to spam folder
-if header :contains "X-Spam-Flag" "YES" {
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
   # Stop here so that we do not reply on spams
   stop;
 }
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index a6fd2f95b108743e98421dda32c1a6591674ed13..0982a3cf41c326f51b45bfdf94fd5623328af25d 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -75,15 +75,15 @@
 		# </IfModule>
 		SSLCertificateFile <tmpl_var name='ssl_crt_file'>
 		SSLCertificateKeyFile <tmpl_var name='ssl_key_file'>
-<tmpl_if name='has_bundle_cert'>
-		<tmpl_if name='apache_version' op='<' value='2.4.8' format='version'>
-		SSLCertificateChainFile <tmpl_var name='ssl_bundle_file'>
-		</tmpl_if>
 		<tmpl_if name='apache_version' op='>=' value='2.4' format='version'>
 		SSLUseStapling on
 		SSLStaplingResponderTimeout 5
 		SSLStaplingReturnResponderErrors off
 		</tmpl_if>
+<tmpl_if name='has_bundle_cert'>
+		<tmpl_if name='apache_version' op='<' value='2.4.8' format='version'>
+		SSLCertificateChainFile <tmpl_var name='ssl_bundle_file'>
+		</tmpl_if>
 </tmpl_if>
 </tmpl_if>
 		</IfModule>
@@ -93,7 +93,7 @@
 				<FilesMatch ".+\.ph(p[345]?|t|tml)$">
 						SetHandler None
 				</FilesMatch>
-				Options +FollowSymLinks
+				Options +SymlinksIfOwnerMatch
 				AllowOverride <tmpl_var name='allow_override'>
 				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 				Require all granted
@@ -125,7 +125,7 @@
 				<FilesMatch ".+\.ph(p[345]?|t|tml)$">
 						SetHandler None
 				</FilesMatch>
-				Options +FollowSymLinks
+				Options +SymlinksIfOwnerMatch
 				AllowOverride <tmpl_var name='allow_override'>
 				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 				Require all granted
@@ -215,6 +215,7 @@
 <tmpl_if name='cgi' op='==' value='y'>
 		# cgi enabled
 	<Directory {tmpl_var name='document_root'}/cgi-bin>
+			AllowOverride <tmpl_var name='allow_override'>
 			<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 			Require all granted
 			<tmpl_else>
@@ -377,6 +378,12 @@
 </tmpl_if>
 		</IfModule>
 		<IfModule mod_proxy_fcgi.c>
+<tmpl_if name='php_fpm_chroot' op='==' value='y'>
+			ProxyFCGISetEnvIf "true" DOCUMENT_ROOT "<tmpl_var name='php_fpm_chroot_web_folder'>"
+			ProxyFCGISetEnvIf "true" CONTEXT_DOCUMENT_ROOT "%{reqenv:DOCUMENT_ROOT}"
+			ProxyFCGISetEnvIf "true" HOME "%{reqenv:DOCUMENT_ROOT}"
+			ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "%{reqenv:DOCUMENT_ROOT}%{reqenv:SCRIPT_NAME}"
+</tmpl_if>
 <tmpl_if name='use_tcp'>
 			#ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:<tmpl_var name='fpm_port'><tmpl_var name='web_document_root'>/$1
 			<Directory {tmpl_var name='web_document_root'}>
diff --git a/server/cron.php b/server/cron.php
index 6f74bd35707e283616a2a11800c28c422ea5c011..ef13d06e2f3b072c4d806db6f236325e25153339 100644
--- a/server/cron.php
+++ b/server/cron.php
@@ -33,24 +33,33 @@ require SCRIPT_PATH."/lib/config.inc.php";
 
 // Check whether another instance of this script is already running
 $lockFile = $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock';
-if (is_file($lockFile)) {
+if(is_file($lockFile)) {
 	clearstatcache();
-
-	// Maybe we hit a deadlock and the lock file is no longer relevant
-	if(filemtime($lockFile) > time() - 86400) { // 86400 seconds = 1 day
-		if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - The cron lock file is older than one day.' . "\n";
-		exit;
-	}
-
-	// Check if the process id we have in the lock file is still present
+	
+// Check if the process id we have in the lock file is still present
 	$pid = trim(file_get_contents($lockFile));
 	if(preg_match('/^[0-9]+$/', $pid)) {
-		if(file_exists('/proc/' . $pid)) {
-			if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already an instance of server.php running with pid ' . $pid . '.' . "\n";
-			exit;
+		if(is_dir('/proc/' . $pid)) {
+			if(file_exists('/proc/' . $pid . '/cmdline')) {
+				if(strpos(file_get_contents('/proc/' . $pid . '/cmdline'), 'cron.php') !== false) {
+					if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already an instance of cron.php running with pid ' . $pid . '.' . "\n";
+					exit;
+				} else {
+					if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is a process running with pid ' . $pid . ' but it seems not to be cron.php, continuing.' . "\n";
+				}
+			} else {
+				if(filemtime($lockFile) < time() - 86400) {
+					if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already an instance of cron.php running with pid ' . $pid . ' but process is older than 1 day. Continuing.' . "\n";
+				} else {
+					if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already an instance of cron.php running with pid ' . $pid . '.' . "\n";
+					exit;
+				}
+			}
+		} else {
+			if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n";
+
 		}
 	}
-	if($conf['log_priority'] <= LOGLEVEL_WARN) print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n";
 }
 
 // Set Lockfile
@@ -69,10 +78,9 @@ $conf['server_id'] = intval($conf['server_id']);
 
 
 // Load required base-classes
-$app->uses('ini_parser,file,services,getconf,system,cron,functions');
+$app->uses('modules,ini_parser,file,services,getconf,system,cron,functions,plugins');
 $app->load('libdatetime,cronjob');
 
-
 // read all cron jobs
 $path = SCRIPT_PATH . '/lib/classes/cron.d';
 if(!is_dir($path)) die('Cron path missing!');
@@ -114,6 +122,8 @@ foreach($files as $f) {
 }
 unset($files);
 
+$app->services->processDelayedActions();
+
 // Remove lock
 @unlink($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock');
 $app->log('Remove Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock', LOGLEVEL_DEBUG);
diff --git a/server/cron_debug.php b/server/cron_debug.php
index 615a56d7434b64912d6b114874d20164db0a7117..74065f02c43fb1fcf970810c6607edd40cbdbd63 100644
--- a/server/cron_debug.php
+++ b/server/cron_debug.php
@@ -39,7 +39,7 @@ ini_set('error_reporting', E_ALL & ~E_NOTICE);
 $conf['server_id'] = intval($conf['server_id']);
 
 // Load required base-classes
-$app->uses('ini_parser,file,services,getconf,system,cron,functions');
+$app->uses('modules,plugins,ini_parser,file,services,getconf,system,cron,functions');
 $app->load('libdatetime,cronjob');
 
 // Path settings
@@ -61,11 +61,7 @@ if(preg_match('/^\d+\-(.*)$/', $name, $match)) $name = $match[1]; // strip numer
 include $path . '/' . $cronjob_file;
 $class_name = 'cronjob_' . $name;
 $cronjob = new $class_name();
-
-$cronjob->onPrepare();
-$cronjob->onBeforeRun();
-$cronjob->onRunJob();
-$cronjob->onAfterRun();
+$cronjob->run(true);
 
 die("finished.\n");
 
diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php
index 86df2a86f6b43181d8ba137a326d8cbf3fd643de..146f2465c066813216796646c2dad553b1590062 100644
--- a/server/lib/app.inc.php
+++ b/server/lib/app.inc.php
@@ -69,6 +69,22 @@ class app {
 
 	}
 
+	public function __get($name) {
+		$valid_names = array('functions', 'getconf', 'letsencrypt', 'modules', 'plugins', 'services', 'system');
+		if(!in_array($name, $valid_names)) {
+			trigger_error('Undefined property ' . $name . ' of class app', E_USER_WARNING);
+		}
+		if(property_exists($this, $name)) {
+			return $this->{$name};
+		}
+		$this->uses($name);
+		if(property_exists($this, $name)) {
+			return $this->{$name};
+		} else {
+			trigger_error('Undefined property ' . $name . ' of class app', E_USER_WARNING);
+		}
+	}
+	
 	function setCaller($caller) {
 		$this->_calling_script = $caller;
 	}
diff --git a/server/lib/classes/aps_installer.inc.php b/server/lib/classes/aps_installer.inc.php
index 9b601d90b341d5f7722da5468a55e74d1961da24..922f32e61288664e8b8dd464e4f3d3f2e8cb9d99 100644
--- a/server/lib/classes/aps_installer.inc.php
+++ b/server/lib/classes/aps_installer.inc.php
@@ -395,7 +395,7 @@ class ApsInstaller extends ApsBase
 						mkdir($this->document_root, 0777, true);
 					}
 				} else {
-					exec("rm -Rf ".escapeshellarg($this->local_installpath).'*');
+					$app->system->exec_safe("rm -Rf ?*", $this->local_installpath);
 				}
 			} else {
 				mkdir($this->local_installpath, 0777, true);
@@ -412,7 +412,7 @@ class ApsInstaller extends ApsBase
 					|| ($this->extractZip($this->packages_dir.'/'.$task['path'], 'scripts', $this->local_installpath.'install_scripts/') === false) )
 				{
 					// Clean already extracted data
-					exec("rm -Rf ".escapeshellarg($this->local_installpath).'*');
+					$app->system->exec_safe("rm -Rf ?*", $this->local_installpath);
 					throw new Exception('Unable to extract the package '.$task['path']);
 				}
 
@@ -423,11 +423,11 @@ class ApsInstaller extends ApsBase
 				$owner_res = $app->db->queryOneRecord("SELECT system_user, system_group FROM web_domain WHERE domain = ?", $main_domain['value']);
 				$this->file_owner_user = $owner_res['system_user'];
 				$this->file_owner_group = $owner_res['system_group'];
-				exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
+				$app->system->exec_safe('chown -R ?:? ?', $this->file_owner_user, $this->file_owner_group, $this->local_installpath);
 
 				//* Chown stats directory back
 				if(is_dir($this->local_installpath.'stats')) {
-					exec('chown -R root:root '.escapeshellarg($this->local_installpath.'stats'));
+					$app->system->exec_safe('chown -R root:root ?', $this->local_installpath.'stats');
 				}
 			}
 		}
@@ -544,7 +544,6 @@ class ApsInstaller extends ApsBase
 			chmod($this->local_installpath.'install_scripts/'.$cfgscript, 0755);
 
 			// Change to the install folder (import for the exec() below!)
-			//exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
 			chdir($this->local_installpath.'install_scripts/');
 
 			// Set the enviroment variables
@@ -554,7 +553,9 @@ class ApsInstaller extends ApsBase
 
 			$shell_retcode = true;
 			$shell_ret = array();
-			exec('php '.escapeshellarg($this->local_installpath.'install_scripts/'.$cfgscript).' install 2>&1', $shell_ret, $shell_retcode);
+			$app->system->exec_safe('php ? install 2>&1', $this->local_installpath.'install_scripts/'.$cfgscript);
+			$shell_ret = $app->system->last_exec_out();
+			$shell_retcode = $app->system->last_exec_retcode();
 			$shell_ret = array_filter($shell_ret);
 			$shell_ret_str = implode("\n", $shell_ret);
 
@@ -566,11 +567,11 @@ class ApsInstaller extends ApsBase
 			else
 			{
 				// The install succeeded, chown newly created files too
-				exec('chown -R '.$this->file_owner_user.':'.$this->file_owner_group.' '.escapeshellarg($this->local_installpath));
+				$app->system->exec_safe('chown -R ?:? ?', $this->file_owner_user, $this->file_owner_group, $this->local_installpath);
 
 				//* Chown stats directory back
 				if(is_dir($this->local_installpath.'stats')) {
-					exec('chown -R root:root '.escapeshellarg($this->local_installpath.'stats'));
+					$app->system->exec_safe('chown -R root:root ?', $this->local_installpath.'stats');
 				}
 
 				$app->dbmaster->query('UPDATE aps_instances SET instance_status = ? WHERE id = ?', INSTANCE_SUCCESS, $task['instance_id']);
@@ -597,8 +598,9 @@ class ApsInstaller extends ApsBase
 	 */
 	private function cleanup($task, $sxe)
 	{
+		global $app;
 		chdir($this->local_installpath);
-		exec("rm -Rf ".escapeshellarg($this->local_installpath).'install_scripts');
+		$app->system->exec_safe("rm -Rf ?", $this->local_installpath.'install_scripts');
 	}
 
 
diff --git a/server/lib/classes/cron.d/100-mailbox_stats.inc.php b/server/lib/classes/cron.d/100-mailbox_stats.inc.php
index e347330c4c43f14bbb8922a551f70902ebdbf4bc..51c3a454891bbc1af774190e2fdd466e49472066 100644
--- a/server/lib/classes/cron.d/100-mailbox_stats.inc.php
+++ b/server/lib/classes/cron.d/100-mailbox_stats.inc.php
@@ -107,25 +107,6 @@ class cronjob_mailbox_stats extends cronjob {
 			$mail_boxes = array();
 			$mail_rewrites = array(); // we need to read all mail aliases and forwards because the address in amavis is not always the mailbox address
 
-			function parse_mail_log_line($line) {
-				//Oct 31 17:35:48 mx01 amavis[32014]: (32014-05) Passed CLEAN, [IPv6:xxxxx] [IPv6:xxxxx] <xxx@yyyy> -> <aaaa@bbbb>, Message-ID: <xxxx@yyyyy>, mail_id: xxxxxx, Hits: -1.89, size: 1591, queued_as: xxxxxxx, 946 ms
-
-				if(preg_match('/^(\w+\s+\d+\s+\d+:\d+:\d+)\s+[^ ]+\s+amavis.* <([^>]+)>\s+->\s+((<[^>]+>,)+) .*Message-ID:\s+<([^>]+)>.* size:\s+(\d+),.*$/', $line, $matches) == false) return false;
-
-				$timestamp = strtotime($matches[1]);
-				if(!$timestamp) return false;
-
-				$to = array();
-				$recipients = explode(',', $matches[3]);
-				foreach($recipients as $recipient) {
-					$recipient = substr($recipient, 1, -1);
-					if(!$recipient || $recipient == $matches[2]) continue;
-					$to[] = $recipient;
-				}
-
-				return array('line' => $line, 'timestamp' => $timestamp, 'size' => $matches[6], 'from' => $matches[2], 'to' => $to, 'message-id' => $matches[5]);
-			}
-
 			function add_mailbox_traffic(&$traffic_array, $address, $traffic,$mail_boxes, $mail_rewrites) {
 				//global $mail_boxes, $mail_rewrites;
 				//echo '##'.print_r($mail_boxes).'##';
@@ -192,6 +173,10 @@ class cronjob_mailbox_stats extends cronjob {
 							continue;
 						}
 					}
+					
+					$this->mail_boxes = $mail_boxes;
+				    $this->mail_rewrites = $mail_rewrites;
+					
 					$this->add_mailbox_traffic($cur_line['from'], $cur_line['size'],$mail_boxes, $mail_rewrites);
 					//echo "1\n";
 					//print_r($this->mailbox_traffic);
@@ -240,6 +225,7 @@ class cronjob_mailbox_stats extends cronjob {
 			$tstamp = date('Y-m');
 			$sql = "SELECT mailuser_id,email FROM mail_user WHERE server_id = ?";
 			$records = $app->db->queryAllRecords($sql, $conf['server_id']);
+			$mailbox_traffic = $this->mailbox_traffic;
 			foreach($records as $rec) {
 				if(array_key_exists($rec['email'], $mailbox_traffic)) {
 					$sql = "SELECT * FROM mail_traffic WHERE month = ? AND mailuser_id = ?";
@@ -275,9 +261,26 @@ class cronjob_mailbox_stats extends cronjob {
 	private function parse_mail_log_line($line) {
 		//Oct 31 17:35:48 mx01 amavis[32014]: (32014-05) Passed CLEAN, [IPv6:xxxxx] [IPv6:xxxxx] <xxx@yyyy> -> <aaaa@bbbb>, Message-ID: <xxxx@yyyyy>, mail_id: xxxxxx, Hits: -1.89, size: 1591, queued_as: xxxxxxx, 946 ms
 
-		if(preg_match('/^(\w+\s+\d+\s+\d+:\d+:\d+)\s+[^ ]+\s+amavis.* <([^>]+)>\s+->\s+((<[^>]+>,)+) .*Message-ID:\s+<([^>]+)>.* size:\s+(\d+),.*$/', $line, $matches) == false) return false;
+		// Oct 31 17:35:48
+		$timestampSyslog = '\w+\s+\d+\s+\d+:\d+:\d+';
+		$timePatternRsyslog = 'Y-m-d\TH:i:sT';
+		// 2019-02-12T18:17:19+01:00
+		$timestampRsyslog = '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[\+-]\d{2}:\d{2}';
+		// 2019-02-12T18:17:19.203313+01:00
+		$timestampHighPrecision = '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+[\+-]\d{2}:\d{2}';
+		$timePatternHighPrecision = 'Y-m-d\TH:i:s.uT';
+
+		$timestampAll = $timestampSyslog . '|' . $timestampRsyslog . '|' . $timestampHighPrecision;
+
+		if(preg_match('/^('. $timestampAll .')\s+[^ ]+\s+amavis.* <([^>]+)>\s+->\s+((<[^>]+>,)+) .*Message-ID:\s+<([^>]+)>.* size:\s+(\d+),.*$/', $line, $matches) == false) return false;
 
 		$timestamp = strtotime($matches[1]);
+		if(!$timestamp) {
+			$timestamp = DateTime::createFromFormat($timePatternRsyslog, $matches[1]);
+		}
+		if(!$timestamp) {
+			$timestamp = DateTime::createFromFormat($timePatternHighPrecision, $matches[1]);
+		}
 		if(!$timestamp) return false;
 
 		$to = array();
diff --git a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
index 75014c347def49072f048b235c5afadaa976feb5..8adf7c7253f37a0ba03edc09065da8a38c1468fd 100644
--- a/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_email_quota.inc.php
@@ -90,7 +90,7 @@ class cronjob_monitor_email_quota extends cronjob {
 				$email_parts = explode('@', $mb['email']);
 				$filename = $mb['maildir'].'/.quotausage';
 				if(!file_exists($filename) && $dovecot) {
-					exec('doveadm quota recalc -u '.$email);
+					$app->system->exec_safe('doveadm quota recalc -u ?', $email);
 				}
 				if(file_exists($filename) && !is_link($filename)) {
 					$quotafile = file($filename);
@@ -99,7 +99,8 @@ class cronjob_monitor_email_quota extends cronjob {
 					$app->log("Mail storage $email: " . $storage_value[1], LOGLEVEL_DEBUG);
 					unset($quotafile);
 				} else {
-					exec('du -s '.escapeshellcmd($mb['maildir']), $out);
+					$app->system->exec_safe('du -s ?', $mb['maildir']);
+					$out = $app->system->last_exec_out();
 					$parts = explode(' ', $out[0]);
 					$data[$email]['used'] = intval($parts[0])*1024;
 					unset($out);
diff --git a/server/lib/classes/cron.d/100-monitor_openvz.inc.php b/server/lib/classes/cron.d/100-monitor_openvz.inc.php
index 30b51b4b5fb50242648f9b66be66c08d9a01ea6e..adc092ec95eb72d96b563202c5607f47c5f0ef64 100644
--- a/server/lib/classes/cron.d/100-monitor_openvz.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_openvz.inc.php
@@ -69,7 +69,7 @@ class cronjob_monitor_openvz extends cronjob {
 		/*
 			Fetch the data into a array
 		 */
-		$app->load(openvz_tools);
+		$app->load('openvz_tools');
 		$openVzTools = new openvz_tools();
 		$data = $openVzTools->getOpenVzVeInfo();
 
@@ -98,7 +98,7 @@ class cronjob_monitor_openvz extends cronjob {
 		/*
 			Fetch the data into a array
 		 */
-		$app->load(openvz_tools);
+		$app->load('openvz_tools');
 		$openVzTools = new openvz_tools();
 		$data = $openVzTools->getOpenVzVeBeanCounter();
 
diff --git a/server/lib/classes/cron.d/150-awstats.inc.php b/server/lib/classes/cron.d/150-awstats.inc.php
index 2d281c7d39acdaee7c736522fc81792e2754de65..4ba286ea1aefba159c0ef3ea425af4cbac4959e4 100644
--- a/server/lib/classes/cron.d/150-awstats.inc.php
+++ b/server/lib/classes/cron.d/150-awstats.inc.php
@@ -71,16 +71,16 @@ class cronjob_awstats extends cronjob {
 				$log_folder .= '/' . $subdomain_host;
 				unset($tmp);
 			}
-			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log');
+			$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log';
 			if(!@is_file($logfile)) {
-				$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz');
+				$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz';
 				if(!@is_file($logfile)) {
 					continue;
 				}
 			}
 			$web_folder = (($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web');
-			$domain = escapeshellcmd($rec['domain']);
-			$statsdir = escapeshellcmd($rec['document_root'].'/'.$web_folder.'/stats');
+			$domain = $rec['domain'];
+			$statsdir = $rec['document_root'].'/'.$web_folder.'/stats';
 			$awstats_pl = $web_config['awstats_pl'];
 			$awstats_buildstaticpages_pl = $web_config['awstats_buildstaticpages_pl'];
 
@@ -117,8 +117,8 @@ class cronjob_awstats extends cronjob {
 			}
 
 			if(!@is_dir($statsdir)) mkdir($statsdir);
-			$username = escapeshellcmd($rec['system_user']);
-			$groupname = escapeshellcmd($rec['system_group']);
+			$username = $rec['system_user'];
+			$groupname = $rec['system_group'];
 			chown($statsdir, $username);
 			chgrp($statsdir, $groupname);
 			if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
@@ -138,7 +138,7 @@ class cronjob_awstats extends cronjob {
 			// awstats_buildstaticpages.pl -update -config=mydomain.com -lang=en -dir=/var/www/domain.com/'.$web_folder.'/stats -awstatsprog=/path/to/awstats.pl
 			// $command = "$awstats_buildstaticpages_pl -update -config='$domain' -lang=".$conf['language']." -dir='$statsdir' -awstatsprog='$awstats_pl'";
 
-			$command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang=".$conf['language']." -dir='$statsdir' -awstatsprog='$awstats_pl'";
+			$command = escapeshellcmd($awstats_buildstaticpages_pl) . ' -month=' . escapeshellarg($awmonth) . ' -year=' . escapeshellarg($awyear) . ' -update -config=' . escapeshellarg($domain) . ' -lang=' . escapeshellarg($conf['language']) . ' -dir=' . escapeshellarg($statsdir) . ' -awstatsprog=' . escapeshellarg($awstats_pl);
 
 			if (date("d") == 2) {
 				$awmonth = date("m")-1;
@@ -148,7 +148,9 @@ class cronjob_awstats extends cronjob {
 				}
 
 				$statsdirold = $statsdir."/".$awyear."-".$awmonth."/";
-				mkdir($statsdirold);
+				if(!is_dir($statsdirold)) {
+					mkdir($statsdirold);
+				}
 				$files = scandir($statsdir);
 				foreach ($files as $file) {
 					if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") copy("$statsdir"."/"."$file", "$statsdirold"."$file");
@@ -178,7 +180,7 @@ class cronjob_awstats extends cronjob {
 				chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
 			}
 
-			exec('chown -R '.$username.':'.$groupname.' '.$statsdir);
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
 		}
 
 
diff --git a/server/lib/classes/cron.d/150-webalizer.inc.php b/server/lib/classes/cron.d/150-webalizer.inc.php
index 0ae05dd6823e3d6762360957f9e7859244a92070..42aa125e0f9b427883196bf2d511e25a3ad6d182 100644
--- a/server/lib/classes/cron.d/150-webalizer.inc.php
+++ b/server/lib/classes/cron.d/150-webalizer.inc.php
@@ -94,19 +94,19 @@ class cronjob_webalizer extends cronjob {
 				$log_folder .= '/' . $subdomain_host;
 				unset($tmp);
 			}
-			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log');
+			$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log';
 			if(!@is_file($logfile)) {
-				$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz');
+				$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz';
 				if(!@is_file($logfile)) {
 					continue;
 				}
 			}
 
-			$domain = escapeshellcmd($rec['domain']);
-			$statsdir = escapeshellcmd($rec['document_root'].'/'.(($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web').'/stats');
+			$domain = $rec['domain'];
+			$statsdir = $rec['document_root'].'/'.(($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web').'/stats';
 			$webalizer = '/usr/bin/webalizer';
 			$webalizer_conf_main = '/etc/webalizer/webalizer.conf';
-			$webalizer_conf = escapeshellcmd($rec['document_root'].'/log/webalizer.conf');
+			$webalizer_conf = $rec['document_root'].'/log/webalizer.conf';
 
 			if(is_file($statsdir.'/index.php')) unlink($statsdir.'/index.php');
 
@@ -122,13 +122,13 @@ class cronjob_webalizer extends cronjob {
 
 
 			if(!@is_dir($statsdir)) mkdir($statsdir);
-			$username = escapeshellcmd($rec['system_user']);
-			$groupname = escapeshellcmd($rec['system_group']);
+			$username = $rec['system_user'];
+			$groupname = $rec['system_group'];
 			chown($statsdir, $username);
 			chgrp($statsdir, $groupname);
-			exec("$webalizer -c $webalizer_conf -n $domain -s $domain -r $domain -q -T -p -o $statsdir $logfile");
+			$app->system->exec_safe("$webalizer -c ? -n ? -s ? -r ? -q -T -p -o ? ?", $webalizer_conf, $domain, $domain, $domain, $statsdir, $logfile);
 			
-			exec('chown -R '.$username.':'.$groupname.' '.$statsdir);
+			exec('chown -R ?:? ?', $username, $groupname, $statsdir);
 		}
 
 
diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index 6f38f0b403d66dee84f581dad70ed70e5bf21a5d..e2d9e9bb9ec0c1df7dd237e6d3f49aea07ee1a75 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -54,7 +54,7 @@ class cronjob_logfiles extends cronjob {
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		
 		if($server_config['log_retention'] > 0) {
-			$max_syslog = $server_config['log_retention'];
+			$max_syslog = $app->functions->intval($server_config['log_retention']);
 		} else {
 			$max_syslog = 10;
 		}
@@ -113,18 +113,18 @@ class cronjob_logfiles extends cronjob {
 			}
 
 			$yesterday2 = date('Ymd', time() - 86400*2);
-			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$yesterday2.'-access.log');
+			$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday2.'-access.log';
 
 			//* Compress logfile
 			if(@is_file($logfile)) {
 				// Compress yesterdays logfile
-				exec("gzip -c $logfile > $logfile.gz");
+				$app->system->exec_safe("gzip -c ? > ?", $logfile, $logfile . '.gz');
 				unlink($logfile);
 			}
 			
 			$cron_logfiles = array('cron.log', 'cron_error.log', 'cron_wget.log');
 			foreach($cron_logfiles as $cron_logfile) {
-				$cron_logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/' . $cron_logfile);
+				$cron_logfile = $rec['document_root'].'/' . $log_folder . '/' . $cron_logfile;
 				
 				// rename older files (move up by one)
 				$num = $log_retention;
@@ -135,8 +135,8 @@ class cronjob_logfiles extends cronjob {
 				
 				// compress current logfile
 				if(is_file($cron_logfile)) {
-					exec("gzip -c $cron_logfile > $cron_logfile.1.gz");
-					exec("cat /dev/null > $cron_logfile");
+					$app->system->exec_safe("gzip -c ? > ?", $cron_logfile, $cron_logfile . '.1.gz');
+					$app->system->exec_safe("cat /dev/null > ?", $cron_logfile);
 				}
 				// remove older logs
 				$num = $log_retention;
@@ -147,7 +147,7 @@ class cronjob_logfiles extends cronjob {
 			}
 
 			// rotate and compress the error.log 
-			$error_logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/error.log');
+			$error_logfile = $rec['document_root'].'/' . $log_folder . '/error.log';
 			// rename older files (move up by one)
 			$num = $log_retention;
 			while($num >= 1) {
@@ -156,8 +156,8 @@ class cronjob_logfiles extends cronjob {
 			}
 			// compress current logfile
 			if(is_file($error_logfile)) {
-				exec("gzip -c $error_logfile > $error_logfile.1.gz");
-				exec("cat /dev/null > $error_logfile");
+				$app->system->exec_safe("gzip -c ? > ?", $error_logfile, $error_logfile . '.1.gz');
+				$app->system->exec_safe("cat /dev/null > ?", $error_logfile);
 			}
 
 			// delete logfiles after x days (default 10)
@@ -175,7 +175,7 @@ class cronjob_logfiles extends cronjob {
 		//* Delete old logfiles in /var/log/ispconfig/httpd/ that were created by vlogger for the hostname of the server
 		exec('hostname -f', $tmp_hostname);
 		if($tmp_hostname[0] != '' && is_dir('/var/log/ispconfig/httpd/'.$tmp_hostname[0])) {
-			exec('cd /var/log/ispconfig/httpd/'.$tmp_hostname[0]."; find . -mtime +$max_syslog -name '*.log' | xargs rm > /dev/null 2> /dev/null");
+			$app->system->exec_safe("cd ?; find . -mtime +$max_syslog -name '*.log' | xargs rm > /dev/null 2> /dev/null", '/var/log/ispconfig/httpd/'.$tmp_hostname[0]);
 		}
 		unset($tmp_hostname);
 
@@ -187,7 +187,7 @@ class cronjob_logfiles extends cronjob {
 		$ispconfig_logfiles = array('ispconfig.log', 'cron.log', 'auth.log');
 		foreach($ispconfig_logfiles as $ispconfig_logfile) {
 			$num = $max_syslog;
-			$ispconfig_logfile = escapeshellcmd($conf['ispconfig_log_dir'].'/'.$ispconfig_logfile);
+			$ispconfig_logfile = $conf['ispconfig_log_dir'].'/'.$ispconfig_logfile;
 			// rename older files (move up by one)
 			while($num >= 1) {
 				if(is_file($ispconfig_logfile . '.' . $num . '.gz')) rename($ispconfig_logfile . '.' . $num . '.gz', $ispconfig_logfile . '.' . ($num + 1) . '.gz');
@@ -195,8 +195,8 @@ class cronjob_logfiles extends cronjob {
 			}
 			// compress current logfile
 			if(is_file($ispconfig_logfile)) {
-				exec("gzip -c $ispconfig_logfile > $ispconfig_logfile.1.gz");
-				exec("cat /dev/null > $ispconfig_logfile");
+				$app->system->exec_safe("gzip -c ? > ?", $ispconfig_logfile, $ispconfig_logfile . '.1.gz');
+				$app->system->exec_safe("cat /dev/null > ?", $ispconfig_logfile);
 			}
 			// remove older logs
 			$num = $max_syslog;
@@ -215,9 +215,9 @@ class cronjob_logfiles extends cronjob {
 		$app->uses('system');
 		if(is_array($records)) {
 			foreach($records as $rec){
-				$tmp_path = realpath(escapeshellcmd($rec['document_root'].'/tmp'));
+				$tmp_path = realpath($rec['document_root'].'/tmp');
 				if($tmp_path != '' && strlen($tmp_path) > 10 && is_dir($tmp_path) && $app->system->is_user($rec['system_user'])){
-					exec('cd '.$tmp_path."; find . -mtime +1 -name 'sess_*' | grep -v -w .no_delete | xargs rm > /dev/null 2> /dev/null");
+					exec("cd ?; find . -mtime +1 -name 'sess_*' | grep -v -w .no_delete | xargs rm > /dev/null 2> /dev/null", $tmp_path);
 				}
 			}
 		}
@@ -240,6 +240,18 @@ class cronjob_logfiles extends cronjob {
              */
 			$sql = "DELETE FROM sys_log WHERE tstamp < ? AND server_id != 0";
 			$app->dbmaster->query($sql, $tstamp);
+			
+			/*
+			 * now delete those entries without a linked datalog entry (datalog_id = 0)
+			 */
+			$sql = "DELETE FROM sys_log WHERE tstamp < ? AND server_id = 0 AND datalog_id = 0";
+			$app->dbmaster->query($sql, $tstamp);
+
+			/*
+			 * now delete those entries with a linked datalog entry (datalog_id != 0) only if older than 30 days
+			 */
+			$sql = "DELETE FROM sys_log WHERE tstamp < ? AND server_id = 0 AND datalog_id != 0";
+			$app->dbmaster->query($sql, $tstamp - (3600 * 24 * 23));
 
 			/*
              * Delete all remote-actions "done" and older than 7 days
diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index fa574311164630cc933539b914e6ca71b5b6c6fa..f261daf468b726200e925474a8fc7aed3713ca85 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -69,9 +69,9 @@ class cronjob_backup extends cronjob {
 			}
 
 			if(!is_dir($backup_dir)) {
-				mkdir(escapeshellcmd($backup_dir), $backup_dir_permissions, true);
+				mkdir($backup_dir, $backup_dir_permissions, true);
 			} else {
-				chmod(escapeshellcmd($backup_dir), $backup_dir_permissions);
+				chmod($backup_dir, $backup_dir_permissions);
 			}
             $run_backups = true;
             //* mount backup directory, if necessary
@@ -127,16 +127,20 @@ class cronjob_backup extends cronjob {
 							if($backup_mode == 'userzip') {
 								//* Create a .zip backup as web user and include also files owned by apache / nginx user
 								$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.zip';
-								exec('cd '.escapeshellarg($web_path).' && sudo -u '.escapeshellarg($web_user).' find . -group '.escapeshellarg($web_group).' -print 2> /dev/null | zip -b '.escapeshellarg($backup_tmp).' --exclude=./backup\*'.$backup_excludes.' --symlinks '.escapeshellarg($web_backup_dir.'/'.$web_backup_file).' -@', $tmp_output, $retval);
-								if($retval == 0 || $retval == 12) exec('cd '.escapeshellarg($web_path).' && sudo -u '.escapeshellarg($web_user).' find . -user '.escapeshellarg($http_server_user).' -print 2> /dev/null | zip -b '.escapeshellarg($backup_tmp).' --exclude=./backup\*'.$backup_excludes.' --update --symlinks '.escapeshellarg($web_backup_dir.'/'.$web_backup_file).' -@', $tmp_output, $retval);
+								$app->system->exec_safe('cd ? && sudo -u ? find . -group ? -print 2> /dev/null | zip -b ? --exclude=./backup\*'.$backup_excludes.' --symlinks ? -@', $web_path, $web_user, $web_group, $backup_tmp, $web_backup_dir.'/'.$web_backup_file);
+								$retval = $app->system->last_exec_retcode();
+								if($retval == 0 || $retval == 12) $app->system->exec_safe('cd ? && sudo -u ? find . -user ? -print 2> /dev/null | zip -b ? --exclude=./backup\*'.$backup_excludes.' --update --symlinks ? -@', $web_path, $web_user, $http_server_user, $backup_tmp, $web_backup_dir.'/'.$web_backup_file);
+								$retval = $app->system->last_exec_retcode();
 							} else {
 								//* Create a tar.gz backup as root user
 								$web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.tar.gz';
 								if ($use_pigz) {
-									exec('tar pcf - --directory '.escapeshellarg($web_path).' . --exclude=./backup\*'.$backup_excludes.' | pigz > '.escapeshellarg($web_backup_dir.'/'.$web_backup_file), $tmp_output, $retval);
+									$app->system->exec_safe('tar pcf - --exclude=./backup\*'.$backup_excludes.' --directory ? . | pigz > ?', $web_path, $web_backup_dir.'/'.$web_backup_file);
+									$retval = $app->system->last_exec_retcode();
 								} else {
-									exec('tar pczf '.escapeshellarg($web_backup_dir.'/'.$web_backup_file).' --exclude=./backup\*'.$backup_excludes.' --directory '.escapeshellarg($web_path).' .', $tmp_output, $retval);
-}
+									$app->system->exec_safe('tar pczf ? --exclude=./backup\*'.$backup_excludes.' --directory ? .', $web_backup_dir.'/'.$web_backup_file, $web_path);
+									$retval = $app->system->last_exec_retcode();
+								}
 							}
 							if($retval == 0 || ($backup_mode != 'userzip' && $retval == 1) || ($backup_mode == 'userzip' && $retval == 12)) { // tar can return 1, zip can return 12(due to harmless warings) and still create valid backups  
 								if(is_file($web_backup_dir.'/'.$web_backup_file)){
@@ -225,6 +229,11 @@ class cronjob_backup extends cronjob {
 				if(is_array($records)) {
 
 					include '/usr/local/ispconfig/server/lib/mysql_clientdb.conf';
+					
+					//* Check mysqldump capabilities
+					exec('mysqldump --help',$tmp);
+					$mysqldump_routines = (strpos(implode($tmp),'--routines') !== false)?'--routines':'';
+					unset($tmp);
 
 					foreach($records as $rec) {
 
@@ -251,13 +260,16 @@ class cronjob_backup extends cronjob {
 							$db_id = $rec['database_id'];
 							$db_name = $rec['database_name'];
 							$db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql';
-							//$command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
-							$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." -c --add-drop-table --create-options --quick --max_allowed_packet=512M --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
-							exec($command, $tmp_output, $retval);
-
+							$command = "mysqldump -h ? -u ? -p? -c --add-drop-table --create-options --quick --max_allowed_packet=512M ".$mysqldump_routines." --result-file=? ?";
+							$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $db_backup_dir.'/'.$db_backup_file, $db_name);
+							$retval = $app->system->last_exec_retcode();
+							
 							//* Compress the backup with gzip / pigz
-							if($retval == 0) exec("$zip_cmd -c '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file)."' > '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".gz'", $tmp_output, $retval);
-
+							if($retval == 0) {
+								$app->system->exec_safe("$zip_cmd -c ? > ?", $db_backup_dir.'/'.$db_backup_file, $db_backup_dir.'/'.$db_backup_file . '.gz');
+								$retval = $app->system->last_exec_retcode();
+							}
+							
 							if($retval == 0){
 								if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')){
 									chmod($db_backup_dir.'/'.$db_backup_file.'.gz', 0750);
diff --git a/server/lib/classes/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php
index b05caf70d70af4fc6c86c9c1c3243bf834b2242c..234f02771db841d194e38f3e5050b4e6004e5868 100644
--- a/server/lib/classes/cron.d/500-backup_mail.inc.php
+++ b/server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -69,9 +69,9 @@ class cronjob_backup_mail extends cronjob {
 			$records = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE server_id = ? AND maildir != ''", intval($conf['server_id']));
 			if(is_array($records) && $run_backups) {
 				if(!is_dir($backup_dir)) {
-					mkdir(escapeshellcmd($backup_dir), $backup_dir_permissions, true);
+					mkdir($backup_dir, $backup_dir_permissions, true);
 				} else {
-					chmod(escapeshellcmd($backup_dir), $backup_dir_permissions);
+					chmod($backup_dir, $backup_dir_permissions);
 				}
 				system('which pigz > /dev/null', $ret);
 				if($ret === 0) {
@@ -122,24 +122,28 @@ class cronjob_backup_mail extends cronjob {
 						if ($rec['maildir_format'] == 'mdbox') {
 							if (empty($this->tmp_backup_dir)) $this->tmp_backup_dir = $rec['maildir'];
 							// Create temporary backup-mailbox
-							exec("su -c 'dsync backup -u \"".$rec["email"]."\" mdbox:".$this->tmp_backup_dir."/backup'", $tmp_output, $retval);
+							$app->system->exec_safe("su -c ?", 'dsync backup -u "'.$rec["email"].'" mdbox:' . $this->tmp_backup_dir . '/backup');
 		
 							if($backup_mode == 'userzip') {
 								$mail_backup_file.='.zip';
-								exec('cd '.$this->tmp_backup_dir.' && zip '.$mail_backup_dir.'/'.$mail_backup_file.' -b '.escapeshellarg($backup_tmp).' -r backup > /dev/null && rm -rf backup', $tmp_output, $retval);
-							}
-							else {
+								$app->system->exec_safe('cd ? && zip ? -b ? -r backup > /dev/null && rm -rf backup', $this->tmp_backup_dir, $mail_backup_dir.'/'.$mail_backup_file, $backup_tmp);
+								$retval = $app->system->last_exec_retcode();
+							} else {
 								$mail_backup_file.='.tar.gz';
 								if ($use_pigz) {
-									exec('tar pcf - --directory '.escapeshellarg($this->tmp_backup_dir).' backup | pigz > '.$mail_backup_dir.'/'.$mail_backup_file.' && rm -rf '.$this->tmp_backup_dir.'/backup', $tmp_output, $retval);
+									$app->system->exec_safe('tar pcf - --directory ? backup | pigz > ? && rm -rf ?', $this->tmp_backup_dir, $mail_backup_dir.'/'.$mail_backup_file, $this->tmp_backup_dir.'/backup');
+									$retval = $app->system->last_exec_retcode();
 								} else {
-									exec(escapeshellcmd('tar pczf '.$mail_backup_dir.'/'.$mail_backup_file.' --directory '.$this->tmp_backup_dir.' backup && rm -rf '.$this->tmp_backup_dir.'/backup'), $tmp_output, $retval);
+									$app->system->exec_safe('tar pczf ? --directory ? backup && rm -rf ?', $mail_backup_dir.'/'.$mail_backup_file, $this->tmp_backup_dir, $this->tmp_backup_dir.'/backup');
+									$retval = $app->system->last_exec_retcode();
 								}
 							}
 							
 							if ($retval != 0) {
 								// Cleanup
-								if (file_exists($this->tmp_backup_dir.'/backup')) exec('rm -rf '.$this->tmp_backup_dir.'/backup');
+								if(file_exists($this->tmp_backup_dir . '/backup')) {
+									$app->system->exec_safe('rm -rf ?', $this->tmp_backup_dir . '/backup');
+								}
 							}
 						}
 						else {
@@ -154,15 +158,17 @@ class cronjob_backup_mail extends cronjob {
 							//* create archives
 							if($backup_mode == 'userzip') {
 								$mail_backup_file.='.zip';
-								exec('cd '.$domain_dir.' && zip '.$mail_backup_dir.'/'.$mail_backup_file.' -b '.escapeshellarg($backup_tmp).' -r '.$source_dir.' > /dev/null', $tmp_output, $retval);
+								$app->system->exec_safe('cd ? && zip ? -b ? -r ? > /dev/null', $domain_dir, $mail_backup_dir.'/'.$mail_backup_file, $backup_tmp, $source_dir);
+								$retval = $app->system->last_exec_retcode();
 							} else {
 								/* Create a tar.gz backup */
 								$mail_backup_file.='.tar.gz';
 								if ($use_pigz) {
-									exec('tar pcf - --directory '.escapeshellarg($domain_dir).' '.escapeshellarg($source_dir).' | pigz > '.$mail_backup_dir.'/'.$mail_backup_file, $tmp_output, $retval);
+									$app->system->exec_safe('tar pcf - --directory ? ? | pigz > ?', $domain_dir, $source_dir, $mail_backup_dir.'/'.$mail_backup_file);
 								} else {
-									exec(escapeshellcmd('tar pczf '.$mail_backup_dir.'/'.$mail_backup_file.' --directory '.$domain_dir.' '.$source_dir), $tmp_output, $retval);
+									$app->system->exec_safe('tar pczf ? --directory ? ?', $mail_backup_dir.'/'.$mail_backup_file, $domain_dir, $source_dir);
 								}
+								$retval = $app->system->last_exec_retcode();
 							}
 						}
 						
@@ -181,7 +187,9 @@ class cronjob_backup_mail extends cronjob {
 							if(is_file($mail_backup_dir.'/'.$mail_backup_file)) unlink($mail_backup_dir.'/'.$mail_backup_file);
 							// And remove backup-mdbox
 							if ($rec['maildir_format'] == 'mdbox') {
-								if(file_exists($rec['maildir'].'/backup'))  exec("su -c 'rm -rf ".$rec['maildir']."/backup'");
+								if(file_exists($rec['maildir'] . '/backup')) {
+									$app->system->exec_safe('rm -rf ?', $rec['maildir'] . '/backup');
+								}
 							}
 							$app->log($mail_backup_file.' NOK:'.implode('',$tmp_output), LOGLEVEL_WARN);
 						}
diff --git a/server/lib/classes/cron.d/600-purge_mailboxes.inc.php b/server/lib/classes/cron.d/600-purge_mailboxes.inc.php
index 59775fb7be2512c9b10fc2a3d74f7149b83a8a5f..451eb56642751e9ce25b025406855fa70513dcf9 100644
--- a/server/lib/classes/cron.d/600-purge_mailboxes.inc.php
+++ b/server/lib/classes/cron.d/600-purge_mailboxes.inc.php
@@ -58,7 +58,7 @@ class cronjob_purge_mailboxes extends cronjob {
 		
 		if(is_array($records)) {
 			foreach($records as $rec){
-				exec("su -c 'doveadm purge -u \"".$rec["email"]."\"'");
+				$app->system->exec_safe("su -c ?", 'doveadm purge -u "' . $rec["email"] . '"');
 			}
 		}
 
diff --git a/server/lib/classes/cron.d/900-letsencrypt.inc.php b/server/lib/classes/cron.d/900-letsencrypt.inc.php
index d03d4a184a7c2626f7d05816c9aa628d80da14f4..b0f6f39c51a96ae205d151539fa7fd0f1c011620 100644
--- a/server/lib/classes/cron.d/900-letsencrypt.inc.php
+++ b/server/lib/classes/cron.d/900-letsencrypt.inc.php
@@ -35,8 +35,6 @@ class cronjob_letsencrypt extends cronjob {
 
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
-		global $app;
-
 		parent::onPrepare();
 	}
 
@@ -44,6 +42,7 @@ class cronjob_letsencrypt extends cronjob {
 	public function onBeforeRun() {
 		global $app;
 
+		$app->modules->loadModules('web_module');
 		return parent::onBeforeRun();
 	}
 
@@ -51,10 +50,19 @@ class cronjob_letsencrypt extends cronjob {
 		global $app, $conf;
 		
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-		if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {
-			$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
-			$letsencrypt = reset($letsencrypt);
-			if(is_executable($letsencrypt)) {
+		if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {			
+			$acme = $app->letsencrypt->get_acme_script();
+			if($acme) {
+				// skip letsencrypt
+				parent::onRunJob();
+				return;
+			}
+			
+			$letsencrypt = $app->letsencrypt->get_certbot_script();
+			if($letsencrypt) {
+				$ret = null;
+				$val = 0;
+				$matches = array();
 				$version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
 				if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $version, $matches)) {
 					$type = strtolower($matches[1]);
@@ -65,7 +73,7 @@ class cronjob_letsencrypt extends cronjob {
 					} else {
 						$marker_file = '/usr/local/ispconfig/server/le.restart';
 						$cmd = "echo '1' > " . $marker_file;
-						exec($letsencrypt . ' -n renew --post-hook ' . escapeshellarg($cmd));
+						$app->system->exec_safe($letsencrypt . ' -n renew --post-hook ?', $cmd);
 						if(file_exists($marker_file) && trim(file_get_contents($marker_file)) == '1') {
 							unlink($marker_file);
 							$app->services->restartServiceDelayed('httpd', 'force-reload');
@@ -85,11 +93,7 @@ class cronjob_letsencrypt extends cronjob {
 
 	/* this function is optional if it contains no custom code */
 	public function onAfterRun() {
-		global $app;
-
 		parent::onAfterRun();
 	}
 
-}
-
-?>
+}
\ No newline at end of file
diff --git a/server/lib/classes/cron.inc.php b/server/lib/classes/cron.inc.php
index 48ca09373901eb3c1cfaf977bdfcf1248531db64..67be475fe37249d1df27d13c1d7408a72e9ba1e0 100644
--- a/server/lib/classes/cron.inc.php
+++ b/server/lib/classes/cron.inc.php
@@ -264,9 +264,9 @@ class cron {
 		if(!array_key_exists($sField, $this->_aValidValues)) return false;
 
 		reset($this->_aValidValues[$sField]);
-		while(($cur = each($this->_aValidValues[$sField])) !== false) {
-			if($bIncludeCurrent == true && $cur['value'] >= $iValue) return $cur['value'];
-			elseif($cur['value'] > $iValue) return $cur['value'];
+		foreach($this->_aValidValues[$sField] as $cur) {
+			if($bIncludeCurrent == true && $cur >= $iValue) return $cur;
+			elseif($cur > $iValue) return $cur;
 		}
 		return reset($this->_aValidValues[$sField]);
 	}
diff --git a/server/lib/classes/cronjob.inc.php b/server/lib/classes/cronjob.inc.php
index 23b3c766e8d12c1357c975d52fedd3bb5c5a221b..27bc7038cf69dfa25efb05b128b0460afa8d8cc0 100644
--- a/server/lib/classes/cronjob.inc.php
+++ b/server/lib/classes/cronjob.inc.php
@@ -76,18 +76,18 @@ class cronjob {
 
 
 	/** run through cronjob sequence **/
-	public function run() {
+	public function run($debug_mode = false) {
 		global $conf;
 		
 		if($conf['log_priority'] <= LOGLEVEL_DEBUG) print "Called run() for class " . get_class($this) . "\n";
 		if($conf['log_priority'] <= LOGLEVEL_DEBUG) print "Job has schedule: " . $this->getSchedule() . "\n";
 		$this->onPrepare();
 		$run_it = $this->onBeforeRun();
-		if($run_it == true) {
+		if($run_it == true || $debug_mode === true) {
 			$this->onRunJob();
 			$this->onAfterRun();
+			$this->onCompleted();
 		}
-		$this->onCompleted();
 
 		return;
 	}
@@ -100,7 +100,7 @@ class cronjob {
 		// check the run time and values for this job
 
 		// get previous run data
-		$data = $app->db->queryOneRecord("SELECT `last_run`, `next_run`, `running` FROM `sys_cron` WHERE `name` = ?", get_class($this));
+		$data = $app->db->queryOneRecord("SELECT `last_run`, `next_run`, IF(`last_run` IS NOT NULL AND `last_run` < DATE_SUB(NOW(), INTERVAL 24 HOUR), 0, `running`) as `running` FROM `sys_cron` WHERE `name` = ?", get_class($this));
 		if($data) {
 			if($data['last_run']) $this->_last_run = $data['last_run'];
 			if($data['next_run']) $this->_next_run = $data['next_run'];
@@ -174,7 +174,7 @@ class cronjob {
 	}
 
 	// child classes may NOT override this!
-	private function onCompleted() {
+	protected function onCompleted() {
 		global $app, $conf;
 
 		if($conf['log_priority'] <= LOGLEVEL_DEBUG) print "Called onCompleted() for class " . get_class($this) . "\n";
diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index b03ad55676ddb3c30cf01c4e12eed534865d8585..9c7269e568624cb7ae2f696929130ad1817b9e63 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -272,7 +272,7 @@ class db
 				if(!is_object($this->_iConnId)) {
 					$this->_iConnId = mysqli_init();
 				}
-				if(!mysqli_real_connect($this->_isConnId, $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) {
+				if(!mysqli_real_connect($this->_iConnId, $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) {
 					if(mysqli_connect_errno() == '111') {
 						// server is not available
 						if($try > 9) {
@@ -514,16 +514,16 @@ class db
 	public function escape($sString) {
 		global $app;
 		if(!is_string($sString) && !is_numeric($sString)) {
-			$app->log('NON-String given in escape function! (' . gettype($sString) . ')', LOGLEVEL_INFO);
+			$app->log('NON-String given in escape function! (' . gettype($sString) . ')', LOGLEVEL_DEBUG);
 			//$sAddMsg = getDebugBacktrace();
-			$app->log($sAddMsg, LOGLEVEL_DEBUG);
+			//$app->log($sAddMsg, LOGLEVEL_DEBUG);
 			$sString = '';
 		}
 
 		$cur_encoding = mb_detect_encoding($sString);
 		if($cur_encoding != "UTF-8") {
 			if($cur_encoding != 'ASCII') {
-				if(is_object($app) && method_exists($app, 'log')) $app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_INFO);
+				if(is_object($app) && method_exists($app, 'log')) $app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_DEBUG);
 				if($cur_encoding) $sString = mb_convert_encoding($sString, 'UTF-8', $cur_encoding);
 				else $sString = mb_convert_encoding($sString, 'UTF-8');
 			}
@@ -709,7 +709,7 @@ class db
 
 		if($diff_num > 0) {
 			$diffstr = serialize($diffrec_full);
-			if(isset($_SESSION)) {
+			if(!empty($_SESSION['s']['user']['username'])) {
 				$username = $_SESSION['s']['user']['username'];
 			} else {
 				$username = 'admin';
@@ -719,8 +719,8 @@ class db
 			if($action == 'INSERT') $action = 'i';
 			if($action == 'UPDATE') $action = 'u';
 			if($action == 'DELETE') $action = 'd';
-			$sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES (?, ?, ?, ?, ?, ?, ?)";
-			$app->db->query($sql, $db_table, $dbidx, $server_id, $action, time(), $username, $diffstr);
+			$sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data,session_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
+			$app->db->query($sql, $db_table, $dbidx, $server_id, $action, time(), $username, $diffstr, session_id());
 		}
 
 		return true;
@@ -759,6 +759,9 @@ class db
 		
 		$old_rec = array();
 		$index_value = $this->insertID();
+		if(!$index_value && isset($insert_data[$index_field])) {
+			$index_value = $insert_data[$index_field];
+		}
 		$new_rec = $this->queryOneRecord("SELECT * FROM ?? WHERE ?? = ?", $tablename, $index_field, $index_value);
 		$this->datalogSave($tablename, 'INSERT', $index_field, $index_value, $old_rec, $new_rec);
 
diff --git a/server/lib/classes/functions.inc.php b/server/lib/classes/functions.inc.php
index e36ed5b04f5f4b8853a2f35bcec5358d7dc9f09e..1d9dd67569448a2cee200ec71281685fd568517a 100644
--- a/server/lib/classes/functions.inc.php
+++ b/server/lib/classes/functions.inc.php
@@ -425,9 +425,9 @@ class functions {
 		if(file_exists($id_rsa_file)) unset($id_rsa_file);
 		if(file_exists($id_rsa_pub_file)) unset($id_rsa_pub_file);
 		if(!file_exists($id_rsa_file) && !file_exists($id_rsa_pub_file)) {
-			exec('ssh-keygen -t rsa -C '.$username.'-rsa-key-'.time().' -f '.$id_rsa_file.' -N ""');
+			$app->system->exec_safe('ssh-keygen -t rsa -C ? -f ? -N ""', $username.'-rsa-key-'.time(), $id_rsa_file);
 			$app->db->query("UPDATE client SET created_at = UNIX_TIMESTAMP(), id_rsa = ?, ssh_rsa = ? WHERE client_id = ?", $app->system->file_get_contents($id_rsa_file), $app->system->file_get_contents($id_rsa_pub_file), $client_id);
-			exec('rm -f '.$id_rsa_file.' '.$id_rsa_pub_file);
+			$app->system->exec_safe('rm -f ? ?', $id_rsa_file, $id_rsa_pub_file);
 		} else {
 			$app->log("Failed to create SSH keypair for ".$username, LOGLEVEL_WARN);
 		}
diff --git a/server/lib/classes/ispcmail.inc.php b/server/lib/classes/ispcmail.inc.php
index 305b39f35ba47e235413cf4e364cdc4987cd6ce0..cc83c7413725801af4d0cb6e3192f6a41b833186 100644
--- a/server/lib/classes/ispcmail.inc.php
+++ b/server/lib/classes/ispcmail.inc.php
@@ -598,7 +598,13 @@ class ispcmail {
 		if($this->smtp_crypt == 'tls') {
 			fputs($this->_smtp_conn, 'STARTTLS' . $this->_crlf);
 			fgets($this->_smtp_conn, 515);
-			stream_socket_enable_crypto($this->_smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
+			$crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
+
+			if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
+				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
+				$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
+			}
+			stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method);
 		}
 
 		//AUTH LOGIN
diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 4f681cc4852e5ed1b08ee6ec05f0769b4883f2c1..f60ad040e72013707babe5c7ebabefc0318bc3f2 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -37,15 +37,143 @@ class letsencrypt {
 	 */
 	private $base_path = '/etc/letsencrypt';
 	private $renew_config_path = '/etc/letsencrypt/renewal';
-
+	private $certbot_use_certcommand = false;
 
 	public function __construct(){
 
 	}
+	
+	public function get_acme_script() {
+		$acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh'));
+		$acme = reset($acme);
+		if(is_executable($acme)) {
+			return $acme;
+		} else {
+			return false;
+		}
+	}
+	
+	public function get_acme_command($domains, $key_file, $bundle_file, $cert_file, $server_type = 'apache') {
+		global $app;
+		
+		$letsencrypt = $this->get_acme_script();
+		
+		$cmd = '';
+		// generate cli format
+		foreach($domains as $domain) {
+			$cmd .= (string) " -d " . $domain;
+		}
+		
+		if($cmd == '') {
+			return false;
+		}
+
+		if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) {
+			$cert_arg = '--fullchain-file ' . escapeshellarg($cert_file);
+		} else {
+			$cert_arg = '--fullchain-file ' . escapeshellarg($bundle_file) . ' --cert-file ' . escapeshellarg($cert_file);
+		}
+		
+		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme ; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' ' . $cert_arg . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
+		
+		return $cmd;
+	}
+	
+	public function get_certbot_script() {
+		$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
+		$letsencrypt = reset($letsencrypt);
+		if(is_executable($letsencrypt)) {
+			return $letsencrypt;
+		} else {
+			return false;
+		}
+	}
 
+	private function install_acme() {
+		$install_cmd = 'wget -O -  https://get.acme.sh | sh';
+		$ret = null;
+		$val = 0;
+		exec($install_cmd . ' 2>&1', $ret, $val);
+		
+		return ($val == 0 ? true : false);
+	}
+	
+	private function get_reload_command() {
+		global $app, $conf;
+		
+		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
+
+		$daemon = '';
+		switch ($web_config['server_type']) {
+			case 'nginx':
+				$daemon = $web_config['server_type'];
+				break;
+			default:
+				if(is_file($conf['init_scripts'] . '/' . 'httpd24-httpd') || is_dir('/opt/rh/httpd24/root/etc/httpd')) {
+					$daemon = 'httpd24-httpd';
+				} elseif(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) {
+					$daemon = 'httpd';
+				} else {
+					$daemon = 'apache2';
+				}
+		}
+
+		$cmd = $app->system->getinitcommand($daemon, 'force-reload');
+		return $cmd;
+	}
+	
+	public function get_certbot_command($domains) {
+		global $app;
+		
+		$letsencrypt = $this->get_certbot_script();
+		
+		$cmd = '';
+		// generate cli format
+		foreach($domains as $domain) {
+			$cmd .= (string) " --domains " . $domain;
+		}
+		
+		if($cmd == '') {
+			return false;
+		}
+		
+		$matches = array();
+		$ret = null;
+		$val = 0;
+		
+		$letsencrypt_version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
+		if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $letsencrypt_version, $matches)) {
+			$letsencrypt_version = $matches[2];
+		}
+		if (version_compare($letsencrypt_version, '0.22', '>=')) {
+			$acme_version = 'https://acme-v02.api.letsencrypt.org/directory';
+		} else {
+			$acme_version = 'https://acme-v01.api.letsencrypt.org/directory';
+		}
+		if (version_compare($letsencrypt_version, '0.30', '>=')) {
+			$app->log("LE version is " . $letsencrypt_version . ", so using certificates command", LOGLEVEL_DEBUG);
+			$this->certbot_use_certcommand = true;
+			$webroot_map = array();
+			for($i = 0; $i < count($domains); $i++) {
+				$webroot_map[$domains[$i]] = '/usr/local/ispconfig/interface/acme';
+			}
+			$webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map)));
+		} else {
+			$webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme";
+		}
+		
+		$cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $cmd --webroot-path /usr/local/ispconfig/interface/acme";
+		
+		return $cmd;
+	}
+	
 	public function get_letsencrypt_certificate_paths($domains = array()) {
 		global $app;
 		
+		if($this->get_acme_script()) {
+			return false;
+		}
+		
 		if(empty($domains)) return false;
 		if(!is_dir($this->renew_config_path)) return false;
 		
@@ -133,9 +261,13 @@ class letsencrypt {
 	}
 	
 	private function get_ssl_domain($data) {
-		$domain = $data['new']['ssl_domain'];
-		if(!$domain) $domain = $data['new']['domain'];
+		global $app;
 		
+		$domain = $data['new']['ssl_domain'];
+		if(!$domain) {
+			$domain = $data['new']['domain'];
+		}
+
 		if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') {
 			$domain = $data['new']['domain'];
 			if(substr($domain, 0, 2) === '*.') {
@@ -149,8 +281,6 @@ class letsencrypt {
 	}
 	
 	public function get_website_certificate_paths($data) {
-		global $app;
-		
 		$ssl_dir = $data['new']['document_root'].'/ssl';
 		$domain = $this->get_ssl_domain($data);
 		
@@ -183,11 +313,17 @@ class letsencrypt {
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		
+		$use_acme = false;
+		if($this->get_acme_script()) {
+			$use_acme = true;
+		} elseif(!$this->get_certbot_script()) {
+			// acme and le missing
+			$this->install_acme();
+		}
+		
 		$tmp = $app->letsencrypt->get_website_certificate_paths($data);
 		$domain = $tmp['domain'];
 		$key_file = $tmp['key'];
-		$key_file2 = $tmp['key2'];
-		$csr_file = $tmp['csr'];
 		$crt_file = $tmp['crt'];
 		$bundle_file = $tmp['bundle'];
 		
@@ -256,44 +392,88 @@ class letsencrypt {
 			$app->log("There were " . $le_domain_count . " domains in the domain list. LE only supports 100, so we strip the rest.", LOGLEVEL_WARN);
 		}
 
-		// generate cli format
-		foreach($temp_domains as $temp_domain) {
-			$cli_domain_arg .= (string) " --domains " . $temp_domain;
-		}
-
 		// unset useless data
 		unset($subdomains);
 		unset($aliasdomains);
 		
+		$this->certbot_use_certcommand = false;
 		$letsencrypt_cmd = '';
+		$allow_return_codes = null;
+		if($use_acme) {
+			$letsencrypt_cmd = $this->get_acme_command($temp_domains, $key_file, $bundle_file, $crt_file, $server_type);
+			$allow_return_codes = array(2);
+		} else {
+			$letsencrypt_cmd = $this->get_certbot_command($temp_domains);
+		}
+		
 		$success = false;
-		if(!empty($cli_domain_arg)) {
+		if($letsencrypt_cmd) {
 			if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {
 				$app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
 				$app->log("Let's Encrypt SSL Cert domains: $cli_domain_arg", LOGLEVEL_DEBUG);
-			
-				$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
-				$letsencrypt = reset($letsencrypt);
-				if(is_executable($letsencrypt)) {
-				    $letsencrypt_version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
-                    if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $letsencrypt_version, $matches)) {
-                        $letsencrypt_version = $matches[2];
-                    }
-                    if ($letsencrypt_version >=0.22) {
-                        $acme_version = 'https://acme-v02.api.letsencrypt.org/directory';
-                    } else {
-                        $acme_version = 'https://acme-v01.api.letsencrypt.org/directory';
-                    }
-                    $letsencrypt_cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $cli_domain_arg --webroot-path /usr/local/ispconfig/interface/acme";
-					$success = $app->system->_exec($letsencrypt_cmd);
-				}
+
+				$success = $app->system->_exec($letsencrypt_cmd, $allow_return_codes);
 			} else {
 				$app->log("Migration mode active, skipping Let's Encrypt SSL Cert creation for: $domain", LOGLEVEL_DEBUG);
 				$success = true;
 			}
 		}
+
+		if($use_acme === true) {
+			if(!$success) {
+				$app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN);
+				$app->log($letsencrypt_cmd, LOGLEVEL_WARN);
+				return false;
+			} else {
+				return true;
+			}
+		}
 		
-		$le_files = $this->get_letsencrypt_certificate_paths($temp_domains);
+		$le_files = array();
+		if($this->certbot_use_certcommand === true && $letsencrypt_cmd) {
+			$letsencrypt_cmd = $letsencrypt_cmd . " certificates " . $cli_domain_arg;
+			$output = explode("\n", shell_exec($letsencrypt_cmd . " 2>/dev/null | grep -v '^\$'"));
+			$le_path = '';
+			$skip_to_next = true;
+			$matches = null;
+			foreach($output as $outline) {
+				$outline = trim($outline);
+				$app->log("LE CERT OUTPUT: " . $outline, LOGLEVEL_DEBUG);
+				
+				if($skip_to_next === true && !preg_match('/^\s*Certificate Name/', $outline)) {
+					continue;
+				}
+				$skip_to_next = false;
+				
+				if(preg_match('/^\s*Expiry.*?VALID:\s+\D/', $outline)) {
+					$app->log("Found LE path is expired or invalid: " . $matches[1], LOGLEVEL_DEBUG);
+					$skip_to_next = true;
+					continue;
+				}
+				
+				if(preg_match('/^\s*Certificate Path:\s*(\/.*?)\s*$/', $outline, $matches)) {
+					$app->log("Found LE path: " . $matches[1], LOGLEVEL_DEBUG);
+					$le_path = dirname($matches[1]);
+					if(is_dir($le_path)) {
+						break;
+					} else {
+						$le_path = false;
+					}
+				}
+			}
+			
+			if($le_path) {
+				$le_files = array(
+					'privkey' => $le_path . '/privkey.pem',
+					'chain' => $le_path . '/chain.pem',
+					'cert' => $le_path . '/cert.pem',
+					'fullchain' => $le_path . '/fullchain.pem'
+				);
+			}
+		}
+		if(empty($le_files)) {
+			$le_files = $this->get_letsencrypt_certificate_paths($temp_domains);
+		}
 		unset($temp_domains);
 		
 		if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) {
@@ -328,12 +508,8 @@ class letsencrypt {
 				$app->system->unlink($key_file);
 			}
 
-			if ($web_config["website_symlinks_rel"] == 'y') {
-				$app->system->create_relative_link(escapeshellcmd($key_tmp_file), escapeshellcmd($key_file));
-			} else {
-				if(@is_link($key_file)) $app->system->unlink($key_file);
-				if(@file_exists($key_tmp_file)) exec("ln -s ".escapeshellcmd($key_tmp_file)." ".escapeshellcmd($key_file));
-			}
+			if(@is_link($key_file)) $app->system->unlink($key_file);
+			if(@file_exists($key_tmp_file)) $app->system->exec_safe("ln -s ? ?", $key_tmp_file, $key_file);
 
 			if(is_file($crt_file)) {
 				$app->system->copy($crt_file, $crt_file.'.old.'.$date);
@@ -341,12 +517,8 @@ class letsencrypt {
 				$app->system->unlink($crt_file);
 			}
 
-			if($web_config["website_symlinks_rel"] == 'y') {
-				$app->system->create_relative_link(escapeshellcmd($crt_tmp_file), escapeshellcmd($crt_file));
-			} else {
-				if(@is_link($crt_file)) $app->system->unlink($crt_file);
-				if(@file_exists($crt_tmp_file))exec("ln -s ".escapeshellcmd($crt_tmp_file)." ".escapeshellcmd($crt_file));
-			}
+			if(@is_link($crt_file)) $app->system->unlink($crt_file);
+			if(@file_exists($crt_tmp_file))$app->system->exec_safe("ln -s ? ?", $crt_tmp_file, $crt_file);
 
 			if(is_file($bundle_file)) {
 				$app->system->copy($bundle_file, $bundle_file.'.old.'.$date);
@@ -354,12 +526,8 @@ class letsencrypt {
 				$app->system->unlink($bundle_file);
 			}
 
-			if($web_config["website_symlinks_rel"] == 'y') {
-				$app->system->create_relative_link(escapeshellcmd($bundle_tmp_file), escapeshellcmd($bundle_file));
-			} else {
-				if(@is_link($bundle_file)) $app->system->unlink($bundle_file);
-				if(@file_exists($bundle_tmp_file)) exec("ln -s ".escapeshellcmd($bundle_tmp_file)." ".escapeshellcmd($bundle_file));
-			}
+			if(@is_link($bundle_file)) $app->system->unlink($bundle_file);
+			if(@file_exists($bundle_tmp_file)) $app->system->exec_safe("ln -s ? ?", $bundle_tmp_file, $bundle_file);
 			
 			return true;
 		} else {
@@ -367,6 +535,4 @@ class letsencrypt {
 			return false;
 		}
 	}
-}
-
-?>
+}
\ No newline at end of file
diff --git a/server/lib/classes/modules.inc.php b/server/lib/classes/modules.inc.php
index aa95d473b23fd612cc2e4fe0b991e98f86fb305b..3fd788d0a9c4dff7c78704b699418f4ac803a142 100644
--- a/server/lib/classes/modules.inc.php
+++ b/server/lib/classes/modules.inc.php
@@ -37,18 +37,32 @@ class modules {
 	/*
 	 This function is called to load the modules from the mods-enabled or the mods-core folder
 	*/
-	function loadModules($type) {
+	function loadModules($type = 'all') {
 		global $app, $conf;
 
 		$subPath = 'mods-enabled';
-		if ($type == 'core') $subPath = 'mods-core';
+		if ($type == 'core') {
+			$subPath = 'mods-core';
+		} elseif ($type == 'all') {
+			$type = '';
+		} elseif (!preg_match('/^\w+$/', $type)) {
+			$app->log('Invalid loadModules type ' . $type, LOGLEVEL_ERROR);
+			return false;
+		} else {
+			$subPath = 'mods-available';
+		}
 
+		$loaded = false;
 		$modules_dir = $conf['rootpath'].$conf['fs_div'].$subPath.$conf['fs_div'];
 		if (is_dir($modules_dir)) {
 			if ($dh = opendir($modules_dir)) {
 				while (($file = readdir($dh)) !== false) {
 					if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
 						$module_name = substr($file, 0, -8);
+						if($type && $type !== 'core' && $type != $module_name) {
+							continue;
+						}
+						$loaded = true;
 						include_once $modules_dir.$file;
 						if($this->debug) $app->log('Loading Module: '.$module_name, LOGLEVEL_DEBUG);
 						$app->loaded_modules[$module_name] = new $module_name;
@@ -60,6 +74,9 @@ class modules {
 			$app->log('Modules directory missing: '.$modules_dir, LOGLEVEL_ERROR);
 		}
 
+		if($type && $type !== 'core' && $loaded === false) {
+			$app->log('Module ' . $type . ' not found.', LOGLEVEL_ERROR);
+		}
 	}
 
 	/*
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index 7cc37f94f265f3bb76e353e790b9df2c46fabb77..d8d325fe60fbfc3d1d100ca77ee5c762bbabc9b6 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -200,17 +200,23 @@ class monitor_tools {
 			$distver = 'Wheezy/Sid';
 			$distid = 'debian60';
 			$distbaseid = 'debian';
-		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '8') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') {
+		} elseif(substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') {
 			$distname = 'Debian';
 			$distver = 'Jessie';
 			$distid = 'debian60';
 			$distbaseid = 'debian';
-		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '9') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '9') {
+		} elseif(substr(trim(file_get_contents('/etc/debian_version')),0,1) == '9') {
 			$distname = 'Debian';
 			$distver = 'Stretch';
 			$distconfid = 'debian90';
 			$distid = 'debian60';
 			$distbaseid = 'debian';
+		} elseif(substr(trim(file_get_contents('/etc/debian_version')),0,2) == '10') {
+			$distname = 'Debian';
+			$distver = 'Buster';
+			$distconfid = 'debian100';
+			$distid = 'debian60';
+			$distbaseid = 'debian';
 		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) {
 			$distname = 'Debian';
 			$distver = 'Testing';
@@ -220,7 +226,8 @@ class monitor_tools {
 		} else {
 			$distname = 'Debian';
 			$distver = 'Unknown';
-			$distid = 'debian40';
+			$distid = 'debian60';
+			$distconfid = 'debian100';
 			$distbaseid = 'debian';
 		}
 	}
@@ -242,6 +249,14 @@ class monitor_tools {
 			$distver = '11.2';
 			$distid = 'opensuse112';
 			$distbaseid = 'opensuse';
+		} elseif(stristr(file_get_contents('/etc/os-release'), 'opensuse')) {
+			$content = file_get_contents('/etc/os-release');
+            preg_match_all('/NAME=\"([\w ]+)\"/m', $content, $name);
+            preg_match_all('/VERSION_ID=\"([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*).$/m', $content, $version);
+			$distname = is_array($name) ? $name[1][0] : 'openSUSE';
+			$distver = is_array($version) ? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) : 'Unknown';
+			$distid = 'opensuse112';
+			$distbaseid = 'opensuse';
 		}  else {
 			$distname = 'openSUSE';
 			$distver = 'Unknown';
@@ -292,8 +307,9 @@ class monitor_tools {
 			$distid = 'centos53';
 			$distbaseid = 'fedora';
 		} elseif(stristr($content, 'CentOS Linux release 7')) {
+			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
 			$distname = 'CentOS';
-			$distver = 'Unknown';
+			$distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
 			$distbaseid = 'fedora';
 			$var=explode(" ", $content);
 			$var=explode(".", $var[3]);
@@ -586,13 +602,12 @@ class monitor_tools {
 
 		// Getting the logfile content
 		if ($logfile != '') {
-			$logfile = escapeshellcmd($logfile);
 			if (stristr($logfile, ';') or substr($logfile, 0, 9) != '/var/log/' or stristr($logfile, '..')) {
 				$log = 'Logfile path error.';
 			} else {
 				$log = '';
 				if (is_readable($logfile)) {
-					$fd = popen('tail -n 100 ' . $logfile, 'r');
+					$fd = popen('tail -n 100 ' . escapeshellarg($logfile), 'r');
 					if ($fd) {
 						while (!feof($fd)) {
 							$log .= fgets($fd, 4096);
diff --git a/server/lib/classes/services.inc.php b/server/lib/classes/services.inc.php
index 7a8841ece5f9607ea301c698ad472ae924f50607..0914081672af92e04461202457f0ac11e5b59f3b 100644
--- a/server/lib/classes/services.inc.php
+++ b/server/lib/classes/services.inc.php
@@ -41,7 +41,7 @@ class services {
 		if(is_array($this->registered_services[$service_name])) {
 			$this->delayed_restarts[$service_name] = $action;
 		} else {
-			$app->log("Unable to add a delayed restart for '$service_name'. Service not registered.", LOGLEVEL_WARNING);
+			$app->log("Unable to add a delayed restart for '$service_name'. Service not registered.", LOGLEVEL_WARN);
 		}
 
 	}
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index f4d94743a16c82903215378d2aac5993a4a05af9..551e4e485315948f4bf1da53cabb62022dc79808 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -37,6 +37,9 @@ class system{
 	var $min_uid = 500;
 	var $min_gid = 500;
 	
+	private $_last_exec_out = null;
+	private $_last_exec_retcode = null;
+	
 	/**
 	 * Construct for this class
 	 *
@@ -716,8 +719,10 @@ class system{
 	function posix_getgrnam($group) {
 		if(!function_exists('posix_getgrnam')){
 			$group_datei = $this->server_conf['group_datei'];
-			$cmd = 'grep -m 1 "^'.$group.':" '.$group_datei;
-			exec($cmd, $output, $return_var);
+			$cmd = 'grep -m 1 ? ?';
+			$this->exec_safe($cmd, '^'.$group.':', $group_datei);
+			$output = $this->last_exec_out();
+			$return_var = $this->last_exec_retcode();
 			if($return_var != 0 || !$output[0]) return false;
 			list($f1, $f2, $f3, $f4) = explode(':', $output[0]);
 			$f2 = trim($f2);
@@ -829,23 +834,55 @@ class system{
 		}
 	}
 
-	function file_put_contents($filename, $data, $allow_symlink = false) {
+	function file_put_contents($filename, $data, $allow_symlink = false, $run_as_user = null) {
 		global $app;
 		if($allow_symlink == false && $this->checkpath($filename) == false) {
 			$app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
 			return false;
 		}
-		if(file_exists($filename)) unlink($filename);
-		return file_put_contents($filename, $data);
+		if($run_as_user !== null && $run_as_user !== 'root') {
+			if(!$this->check_run_as_user($run_as_user)) {
+				$app->log("Action aborted, invalid run-as-user: $run_as_user", LOGLEVEL_WARN);
+				return false;
+			}
+			if(file_exists($filename)) {
+				$cmd = $this->get_sudo_command('rm ' . escapeshellarg($filename), $run_as_user);
+				$this->exec_safe($cmd);
+			}
+			$cmd = $this->get_sudo_command('cat - > ' . escapeshellarg($filename), $run_as_user);
+			$retval = null;
+			$stderr = '';
+			$this->pipe_exec($cmd, $data, $retval, $stderr);
+			if($retval > 0) {
+				$app->log("Safe file_put_contents failed: $stderr", LOGLEVEL_WARN);
+				return false;
+			} else {
+				$size = filesize($filename);
+				return $size;
+			}
+		} else {
+			if(file_exists($filename)) unlink($filename);
+			return file_put_contents($filename, $data);
+		}
 	}
 
-	function file_get_contents($filename, $allow_symlink = false) {
+	function file_get_contents($filename, $allow_symlink = false, $run_as_user = null) {
 		global $app;
 		if($allow_symlink == false && $this->checkpath($filename) == false) {
 			$app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
 			return false;
 		}
-		return file_get_contents($filename, $data);
+		
+		if($run_as_user !== null && $run_as_user !== 'root') {
+			if(!$this->check_run_as_user($run_as_user)) {
+				$app->log("Action aborted, invalid run-as-user: $run_as_user", LOGLEVEL_WARN);
+				return false;
+			}
+			$cmd = $this->get_sudo_command('cat ' . escapeshellarg($filename), $run_as_user) . ' 2>/dev/null';
+			return $this->system_safe($cmd);
+		} else {
+			return file_get_contents($filename);
+		}
 	}
 
 	function rename($filename, $new_filename, $allow_symlink = false) {
@@ -857,13 +894,29 @@ class system{
 		return rename($filename, $new_filename);
 	}
 
-	function mkdir($dirname, $allow_symlink = false, $mode = 0777, $recursive = false) {
+	function mkdir($dirname, $allow_symlink = false, $mode = 0777, $recursive = false, $run_as_user = null) {
 		global $app;
 		if($allow_symlink == false && $this->checkpath($dirname) == false) {
 			$app->log("Action aborted, file is a symlink: $dirname", LOGLEVEL_WARN);
 			return false;
 		}
-		if(@mkdir($dirname, $mode, $recursive)) {
+		if($run_as_user !== null && !$this->check_run_as_user($run_as_user)) {
+			$app->log("Action aborted, invalid run-as-user: $run_as_user", LOGLEVEL_WARN);
+			return false;
+		}
+		$success = false;
+		if($run_as_user !== null && $run_as_user !== 'root') {
+			$cmd = $this->get_sudo_command('mkdir ' . ($recursive ? '-p ' : '') . escapeshellarg($dirname), $run_as_user) . ' >/dev/null 2>&1';
+			$this->exec_safe($cmd);
+			if($this->last_exec_retcode() != 0) {
+				$success = false;
+			} else {
+				$success = true;
+			}
+		} else {
+			$success = @mkdir($dirname, $mode, $recursive);
+		}
+		if($success) {
 			return true;
 		} else {
 			$app->log("mkdir failed: $dirname", LOGLEVEL_DEBUG);
@@ -918,7 +971,7 @@ class system{
 
 		// Add ($cnt_to-1) number of "../" elements to left side of $cfrom
 		for ($c = 0; $c < (count($a2)-1); $c++) { $cfrom = '../'.$cfrom; }
-		if(strstr($to,'/etc/letsencrypt/archive/')) $to = str_replace('/etc/letsencrypt/archive/','/etc/letsencrypt/live/',$to);
+		//if(strstr($to,'/etc/letsencrypt/archive/')) $to = str_replace('/etc/letsencrypt/archive/','/etc/letsencrypt/live/',$to);
 
 		return symlink($cfrom, $to);
 	}
@@ -1073,10 +1126,10 @@ class system{
 		} else { // Linux
 			if(substr($dist, 0, 4) == 'suse'){
 				if($action == 'on'){
-					exec("chkconfig --add $service &> /dev/null");
+					$this->exec_safe("chkconfig --add ? &> /dev/null", $service);
 				}
 				if($action == 'off'){
-					exec("chkconfig --del $service &> /dev/null");
+					$this->exec_safe("chkconfig --del ? &> /dev/null", $service);
 				}
 			} else {
 				$runlevels = explode(',', $rl);
@@ -1375,7 +1428,7 @@ class system{
 					if(!empty($ifconfig['IP'])){
 						foreach($ifconfig['IP'] as $key => $val){
 							if(!strstr($val, 'lo') && !strstr($val, 'lp') && strstr($val, $main_interface)){
-								exec('ifconfig '.$val.' down &> /dev/null');
+								$this->exec_safe('ifconfig ? down &> /dev/null', $val);
 								unset($ifconfig['INTERFACE'][$val]);
 							}
 						}
@@ -1391,7 +1444,7 @@ class system{
 									$i = -1;
 								}
 							}
-							exec('ifconfig '.$new_interface.' '.$to.' netmask '.$this->server_conf['server_netzmaske'].' up &> /dev/null');
+							$this->exec_safe('ifconfig ? ? netmask ? up &> /dev/null', $new_interface, $to, $this->server_conf['server_netzmaske']);
 							$ifconfig['INTERFACE'][$new_interface] = $to;
 						}
 					}
@@ -1535,7 +1588,14 @@ class system{
 		$found = 0;
 		if(is_array($lines)) {
 			foreach($lines as $line) {
-				if($strict == 0) {
+				if($strict == 0 && preg_match('/^REGEX:(.*)$/', $search_pattern)) {
+					if(preg_match(substr($search_pattern, 6), $line)) {
+						$out .= $new_line."\n";
+						$found = 1;
+					} else {
+						$out .= $line;
+					}
+				} elseif($strict == 0) {
 					if(stristr($line, $search_pattern)) {
 						$out .= $new_line."\n";
 						$found = 1;
@@ -1573,7 +1633,14 @@ class system{
 		if($lines = @file($filename)) {
 			$out = '';
 			foreach($lines as $line) {
-				if($strict == 0) {
+				if($strict == 0 && preg_match('/^REGEX:(.*)$/', $search_pattern)) {
+					if(preg_match(substr($search_pattern, 6), $line)) {
+						$out .= $new_line."\n";
+						$found = 1;
+					} else {
+						$out .= $line;
+					}
+				} elseif($strict == 0) {
 					if(!stristr($line, $search_pattern)) {
 						$out .= $line;
 					}
@@ -1596,22 +1663,20 @@ class system{
 		$mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail');
 
 		if($subfolder != '') {
-			$dir = escapeshellcmd($maildir_path.'/.'.$subfolder);
+			$dir = $maildir_path.'/.'.$subfolder;
 		} else {
-			$dir = escapeshellcmd($maildir_path);
+			$dir = $maildir_path;
 		}
 
 		if(!is_dir($dir)) mkdir($dir, 0700, true);
 
 		if($user != '' && $user != 'root' && $this->is_user($user)) {
-			$user = escapeshellcmd($user);
 			if(is_dir($dir)) $this->chown($dir, $user);
 
 			$chown_mdsub = true;
 		}
 
 		if($group != '' && $group != 'root' && $this->is_group($group)) {
-			$group = escapeshellcmd($group);
 			if(is_dir($dir)) $this->chgrp($dir, $group);
 		
 			$chgrp_mdsub = true;
@@ -1627,22 +1692,13 @@ class system{
 
 		chmod($dir, 0700);
 
-		/*
-		if($user != '' && $this->is_user($user) && $user != 'root') {
-			$user = escapeshellcmd($user);
-			// I assume that the name of the (vmail group) is the same as the name of the mail user in ISPConfig 3
-			$group = $user;
-			exec("chown $user:$group $dir $dir_cur $dir_new $dir_tmp");
-		}
-		*/
-
 		//* Add the subfolder to the subscriptions and courierimapsubscribed files
 		if($subfolder != '') {
 			
 			// Courier
 			if($mail_config['pop3_imap_daemon'] == 'courier') {
 				if(!is_file($maildir_path.'/courierimapsubscribed')) {
-					$tmp_file = escapeshellcmd($maildir_path.'/courierimapsubscribed');
+					$tmp_file = $maildir_path.'/courierimapsubscribed';
 					touch($tmp_file);
 					chmod($tmp_file, 0744);
 					chown($tmp_file, 'vmail');
@@ -1654,7 +1710,7 @@ class system{
 			// Dovecot
 			if($mail_config['pop3_imap_daemon'] == 'dovecot') {
 				if(!is_file($maildir_path.'/subscriptions')) {
-					$tmp_file = escapeshellcmd($maildir_path.'/subscriptions');
+					$tmp_file = $maildir_path.'/subscriptions';
 					touch($tmp_file);
 					chmod($tmp_file, 0744);
 					chown($tmp_file, 'vmail');
@@ -1669,14 +1725,14 @@ class system{
 	}
 
 	//* Function to create directory paths and chown them to a user and group
-	function mkdirpath($path, $mode = 0755, $user = '', $group = '') {
+	function mkdirpath($path, $mode = 0755, $user = '', $group = '', $run_as_user = null) {
 		$path_parts = explode('/', $path);
 		$new_path = '';
 		if(is_array($path_parts)) {
 			foreach($path_parts as $part) {
 				$new_path .= '/'.$part;
 				if(!@is_dir($new_path)) {
-					$this->mkdir($new_path);
+					$this->mkdir($new_path, false, 0777, false, $run_as_user);
 					$this->chmod($new_path, $mode);
 					if($user != '') $this->chown($new_path, $user);
 					if($group != '') $this->chgrp($new_path, $group);
@@ -1686,19 +1742,22 @@ class system{
 
 	}
 	
-	function _exec($command) {
+	function _exec($command, $allow_return_codes = null) {
 		global $app;
 		$out = array();
 		$ret = 0;
 		$app->log('exec: '.$command, LOGLEVEL_DEBUG);
 		exec($command, $out, $ret);
-		if($ret != 0) return false;
+		if(is_array($allow_return_codes) && in_array($ret, $allow_return_codes)) return true;
+		elseif($ret != 0) return false;
 		else return true;
 	}
 
 	//* Check if a application is installed
 	function is_installed($appname) {
-		exec('which '.escapeshellcmd($appname).' 2> /dev/null', $out, $returncode);
+		$this->exec_safe('which ? 2> /dev/null', $appname);
+		$out = $this->last_exec_out();
+		$returncode = $this->last_exec_retcode();
 		if(isset($out[0]) && stristr($out[0], $appname) && $returncode == 0) {
 			return true;
 		} else {
@@ -1720,10 +1779,10 @@ class system{
 
 		if($protect == true && $web_config['web_folder_protection'] == 'y') {
 			//* Add protection
-			if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) exec('chattr +i '.escapeshellcmd($document_root));
+			if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) $this->exec_safe('chattr +i ?', $document_root);
 		} else {
 			//* Remove protection
-			if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) exec('chattr -i '.escapeshellcmd($document_root));
+			if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) $this->exec_safe('chattr -i ?', $document_root);
 		}
 	}
 
@@ -1835,8 +1894,9 @@ class system{
 
 	function is_mounted($mountpoint){
 		//$cmd = 'df 2>/dev/null | grep " '.$mountpoint.'$"';
-		$cmd = 'mount 2>/dev/null | grep " on '.$mountpoint.' type "';
-		exec($cmd, $output, $return_var);
+		$cmd = 'mount 2>/dev/null | grep ?';
+		$this->exec_safe($cmd, ' on '. $mountpoint . ' type ');
+		$return_var = $this->last_exec_retcode();
 		return $return_var == 0 ? true : false;
 	}
 
@@ -1908,7 +1968,8 @@ class system{
 		// systemd
 		if(is_executable('/bin/systemd') || is_executable('/usr/bin/systemctl')){
 			if ($check_service) {
-				exec("systemctl is-enabled ".$servicename." 2>&1", $out, $ret_val);
+				$this->exec_safe("systemctl is-enabled ? 2>&1", $servicename);
+				$ret_val = $this->last_exec_retcode();
 			}
 			if ($ret_val == 0 || !$check_service) {
 				return 'systemctl '.$action.' '.$servicename.'.service';
@@ -2049,6 +2110,173 @@ class system{
 		return true;
 	}
 	
-}
+	public function last_exec_out() {
+		return $this->_last_exec_out;
+	}
+	
+	public function last_exec_retcode() {
+		return $this->_last_exec_retcode;
+	}
+	
+	public function exec_safe($cmd) {
+		global $app;
+		
+		$arg_count = func_num_args();
+		if($arg_count != substr_count($cmd, '?') + 1) {
+			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
+			return false;
+		}
+		if($arg_count > 1) {
+			$args = func_get_args();
+			array_shift($args);
+
+			$pos = 0;
+			$a = 0;
+			foreach($args as $value) {
+				$a++;
+				
+				$pos = strpos($cmd, '?', $pos);
+				if($pos === false) {
+					break;
+				}
+				$value = escapeshellarg($value);
+				$cmd = substr_replace($cmd, $value, $pos, 1);
+				$pos += strlen($value);
+			}
+		}
+		
+		$this->_last_exec_out = null;
+		$this->_last_exec_retcode = null;
+		$ret = exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
+		
+		$app->log("safe_exec cmd: " . $cmd . " - return code: " . $this->_last_exec_retcode, LOGLEVEL_DEBUG);
+		
+		return $ret;
+	}
+	
+	public function system_safe($cmd) {
+		call_user_func_array(array($this, 'exec_safe'), func_get_args());
+		return implode("\n", $this->_last_exec_out);
+	}
+	
+	public function create_jailkit_user($username, $home_dir, $user_home_dir, $shell = '/bin/bash', $p_user = null, $p_user_home_dir = null) {
+		// Check if USERHOMEDIR already exists
+		if(!is_dir($home_dir . '/.' . $user_home_dir)) {
+			$this->mkdirpath($home_dir . '/.' . $user_home_dir, 0755, $username);
+		}
+
+		// Reconfigure the chroot home directory for the user
+		$cmd = 'usermod --home=? ? 2>/dev/null';
+		$this->exec_safe($cmd, $home_dir . '/.' . $user_home_dir, $username);
+
+		// Add the chroot user
+		$cmd = 'jk_jailuser -n -s ? -j ? ?';
+		$this->exec_safe($cmd, $shell, $home_dir, $username);
+
+		//  We have to reconfigure the chroot home directory for the parent user
+		if($p_user !== null) {
+			$cmd = 'usermod --home=? ? 2>/dev/null';
+			$this->exec_safe($cmd, $home_dir . '/.' . $p_user_home_dir, $p_user);
+		}
+		
+		return true;
+	}
+	
+	public function create_jailkit_programs($home_dir, $programs = array()) {
+		if(empty($programs)) {
+			return true;
+		} elseif(is_string($programs)) {
+			$programs = preg_split('/[\s,]+/', $programs);
+		}
+		$program_args = '';
+		foreach($programs as $prog) {
+			$program_args .= ' ' . escapeshellarg($prog);
+		}
+		
+		$cmd = 'jk_cp -k ?' . $program_args;
+		$this->exec_safe($cmd, $home_dir);
+		
+		return true;
+	}
+	
+	public function create_jailkit_chroot($home_dir, $app_sections = array()) {
+		if(empty($app_sections)) {
+			return true;
+		} elseif(is_string($app_sections)) {
+			$app_sections = preg_split('/[\s,]+/', $app_sections);
+		}
+		
+		// Change ownership of the chroot directory to root
+		$this->chown($home_dir, 'root');
+		$this->chgrp($home_dir, 'root');
+
+		$app_args = '';
+		foreach($app_sections as $app_section) {
+			$app_args .= ' ' . escapeshellarg($app_section);
+		}
+		
+		// Initialize the chroot into the specified directory with the specified applications
+		$cmd = 'jk_init -f -k -c /etc/jailkit/jk_init.ini -j ?' . $app_args;
+		$this->exec_safe($cmd, $home_dir);
 
-?>
+		// Create the temp directory
+		if(!is_dir($home_dir . '/tmp')) {
+			$this->mkdirpath($home_dir . '/tmp', 0777);
+		} else {
+			$this->chmod($home_dir . '/tmp', 0777, true);
+		}
+
+		// Fix permissions of the root firectory
+		$this->chmod($home_dir . '/bin', 0755, true);  // was chmod g-w $CHROOT_HOMEDIR/bin
+
+		// mysql needs the socket in the chrooted environment
+		$this->mkdirpath($home_dir . '/var/run/mysqld');
+		
+		// ln /var/run/mysqld/mysqld.sock $CHROOT_HOMEDIR/var/run/mysqld/mysqld.sock
+		if(!file_exists("/var/run/mysqld/mysqld.sock")) {
+			$this->exec_safe('ln ? ?', '/var/run/mysqld/mysqld.sock', $home_dir . '/var/run/mysqld/mysqld.sock');
+		}
+		
+		return true;
+	}
+	
+	
+	public function pipe_exec($cmd, $stdin, &$retval = null, &$stderr = null) {
+		$descriptors = array(
+			0 => array('pipe', 'r'),
+			1 => array('pipe', 'w'),
+			2 => array('pipe', 'w')
+		);
+		
+		$result = '';
+		$pipes = null;
+		$proc = proc_open($cmd, $descriptors, $pipes);
+		if(is_resource($proc)) {
+			fwrite($pipes[0], $stdin);
+			fclose($pipes[0]);
+			
+			$result = stream_get_contents($pipes[1]);
+			$stderr = stream_get_contents($pipes[2]);
+			fclose($pipes[1]);
+			fclose($pipes[2]);
+			
+			$retval = proc_close($proc);
+			
+			return $result;
+		} else {
+			return false;
+		}
+	}
+	
+	private function get_sudo_command($cmd, $run_as_user) {
+		return 'sudo -u ' . escapeshellarg($run_as_user) . ' sh -c ' . escapeshellarg($cmd);
+	}
+	
+	private function check_run_as_user($username) {
+		if(preg_match('/^[a-zA-Z0-9_\-]+$/', $username)) {
+			return true;
+		} else{
+			return false;
+		}
+	}
+}
diff --git a/server/mods-available/mail_module.inc.php b/server/mods-available/mail_module.inc.php
index bc6d2901457169db191ef871c8acbabff74c03a1..e13839d344fe0ae8245e3bf22f521b37b00212eb 100644
--- a/server/mods-available/mail_module.inc.php
+++ b/server/mods-available/mail_module.inc.php
@@ -55,7 +55,14 @@ class mail_module {
 		'mail_content_filter_delete',
 		'mail_mailinglist_insert',
 		'mail_mailinglist_update',
-		'mail_mailinglist_delete');
+		'mail_mailinglist_delete',
+		'spamfilter_users_insert',
+		'spamfilter_users_update',
+		'spamfilter_users_delete',
+		'spamfilter_wblist_insert',
+		'spamfilter_wblist_update',
+		'spamfilter_wblist_delete'
+		);
 
 	//* This function is called during ispconfig installation to determine
 	//  if a symlink shall be created for this plugin.
@@ -102,7 +109,11 @@ class mail_module {
 		$app->modules->registerTableHook('mail_get', 'mail_module', 'process');
 		$app->modules->registerTableHook('mail_content_filter', 'mail_module', 'process');
 		$app->modules->registerTableHook('mail_mailinglist', 'mail_module', 'process');
+		$app->modules->registerTableHook('spamfilter_users', 'mail_module', 'process');
+		$app->modules->registerTableHook('spamfilter_wblist', 'mail_module', 'process'); 
 
+		$app->services->registerService('rspamd', 'mail_module', 'restartRspamd');
+		$app->services->registerService('postfix', 'mail_module', 'restartPostfix');
 	}
 
 	/*
@@ -154,9 +165,50 @@ class mail_module {
 			if($action == 'u') $app->plugins->raiseEvent('mail_mailinglist_update', $data);
 			if($action == 'd') $app->plugins->raiseEvent('mail_mailinglist_delete', $data);
 			break;
+		case 'spamfilter_users':
+			if($action == 'i') $app->plugins->raiseEvent('spamfilter_users_insert', $data);
+			if($action == 'u') $app->plugins->raiseEvent('spamfilter_users_update', $data);
+			if($action == 'd') $app->plugins->raiseEvent('spamfilter_users_delete', $data);
+			break;
+		case 'spamfilter_wblist':
+			if($action == 'i') $app->plugins->raiseEvent('spamfilter_wblist_insert', $data);
+			if($action == 'u') $app->plugins->raiseEvent('spamfilter_wblist_update', $data);
+			if($action == 'd') $app->plugins->raiseEvent('spamfilter_wblist_delete', $data);
+			break;
 		} // end switch
 	} // end function
 
+	function restartRspamd($action = 'reload') {
+		global $app;
+
+		$app->uses('system');
+
+		$daemon = 'rspamd';
+
+		$retval = array('output' => '', 'retval' => 0);
+		if($action == 'restart') {
+			exec($app->system->getinitcommand($daemon, 'restart').' 2>&1', $retval['output'], $retval['retval']);
+		} else {
+			exec($app->system->getinitcommand($daemon, 'reload').' 2>&1', $retval['output'], $retval['retval']);
+		}
+		return $retval;
+	}
+	
+	function restartPostfix($action = 'reload') {
+		global $app;
+
+		$app->uses('system');
+
+		$daemon = 'postfix';
+
+		$retval = array('output' => '', 'retval' => 0);
+		if($action == 'restart') {
+			exec($app->system->getinitcommand($daemon, 'restart').' 2>&1', $retval['output'], $retval['retval']);
+		} else {
+			exec($app->system->getinitcommand($daemon, 'reload').' 2>&1', $retval['output'], $retval['retval']);
+		}
+		return $retval;
+	}
 } // end class
 
 ?>
diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php
index 807de5060ab28bfbee5257760b812e60ba65a655..3b6bb9fb497366c4e2d05d2324777a6eb0273620 100644
--- a/server/mods-available/remoteaction_core_module.inc.php
+++ b/server/mods-available/remoteaction_core_module.inc.php
@@ -150,12 +150,12 @@ class remoteaction_core_module {
 					$parts = explode(':', $action['action_param']);
 					$veid = intval($parts[0]);
 					$template_cache_dir = '/vz/template/cache/';
-					$template_name = escapeshellcmd($parts[1]);
+					$template_name = $parts[1];
 					if($veid > 0 && $template_name != '' && is_dir($template_cache_dir)) {
-						$command = "vzdump --suspend --compress --stdexcludes --dumpdir $template_cache_dir $veid";
-						exec($command);
-						exec("mv ".$template_cache_dir."vzdump-openvz-".$veid."*.tgz ".$template_cache_dir.$template_name.".tar.gz");
-						exec("rm -f ".$template_cache_dir."vzdump-openvz-".$veid."*.log");
+						$command = "vzdump --suspend --compress --stdexcludes --dumpdir ? ?";
+						$app->system->exec_safe($command, $template_cache_dir, $veid);
+						$app->system->exec_safe("mv ?*.tgz ?", $template_cache_dir."vzdump-openvz-".$veid, $template_cache_dir.$template_name.".tar.gz");
+						$app->system->exec_safe("rm -f ?*.log", $template_cache_dir."vzdump-openvz-".$veid);
 					}
 					$this->_actionDone($action['action_id'], 'ok');
 					/* this action takes so much time,
@@ -191,7 +191,8 @@ class remoteaction_core_module {
 	}
 
 	private function _doIspCUpdate($action) {
-
+		global $app;
+		
 		// Ensure that this code is not executed twice as this would cause a loop in case of a failure
 		$this->_actionDone($action['action_id'], 'ok');
 
@@ -210,14 +211,14 @@ class remoteaction_core_module {
 		chdir("/tmp");
 
 		/* delete the old files (if there are any...) */
-		exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz");
+		$app->system->exec_safe("rm ?", "/tmp/ISPConfig-" . $new_version . ".tar.gz");
 		exec("rm /tmp/ispconfig3_install -R");
 
 		/* get the newest version */
-		exec("wget http://www.ispconfig.org/downloads/ISPConfig-" . $new_version . ".tar.gz");
+		$app->system->exec_safe("wget ?", "http://www.ispconfig.org/downloads/ISPConfig-" . $new_version . ".tar.gz");
 
 		/* extract the files */
-		exec("tar xvfz ISPConfig-" . $new_version . ".tar.gz");
+		$app->system->exec_safe("tar xvfz ?", "ISPConfig-" . $new_version . ".tar.gz");
 
 		/*
 		 * Initialize the automated update
@@ -229,7 +230,7 @@ class remoteaction_core_module {
 		/*
 		 * do some clean-up
 		 */
-		exec("rm /tmp/ISPConfig-" . $new_version . ".tar.gz");
+		$app->system->exec_safe("rm ?", "/tmp/ISPConfig-" . $new_version . ".tar.gz");
 
 		/*
 		 * go back to the "old path"
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index bfa4526fc359aa482f1bfe82dfabfe27f34234db..59e97629cb6d1a2694ce62d2365e62a42c301d8d 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -332,36 +332,38 @@ class apache2_plugin {
 			$ssl_cnf_file = $ssl_dir.'/openssl.conf';
 			$app->system->file_put_contents($ssl_cnf_file, $ssl_cnf);
 
-			$rand_file = escapeshellcmd($rand_file);
-			$key_file2 = escapeshellcmd($key_file2);
+			$rand_file = $rand_file;
+			$key_file2 = $key_file2;
 			$openssl_cmd_key_file2 = $key_file2;
 			if(substr($domain, 0, 2) == '*.' && strpos($key_file2, '/ssl/\*.') !== false) $key_file2 = str_replace('/ssl/\*.', '/ssl/*.', $key_file2); // wildcard certificate
-			$key_file = escapeshellcmd($key_file);
+			$key_file = $key_file;
 			$openssl_cmd_key_file = $key_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($key_file, '/ssl/\*.') !== false) $key_file = str_replace('/ssl/\*.', '/ssl/*.', $key_file); // wildcard certificate
 			$ssl_days = 3650;
-			$csr_file = escapeshellcmd($csr_file);
+			$csr_file = $csr_file;
 			$openssl_cmd_csr_file = $csr_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($csr_file, '/ssl/\*.') !== false) $csr_file = str_replace('/ssl/\*.', '/ssl/*.', $csr_file); // wildcard certificate
-			$config_file = escapeshellcmd($ssl_cnf_file);
-			$crt_file = escapeshellcmd($crt_file);
+			$config_file = $ssl_cnf_file;
+			$crt_file = $crt_file;
 			$openssl_cmd_crt_file = $crt_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($crt_file, '/ssl/\*.') !== false) $crt_file = str_replace('/ssl/\*.', '/ssl/*.', $crt_file); // wildcard certificate
 
 			if(is_file($ssl_cnf_file) && !is_link($ssl_cnf_file)) {
 
-				exec("openssl genrsa -des3 -rand $rand_file -passout pass:$ssl_password -out $openssl_cmd_key_file2 2048");
-				exec("openssl req -new -sha256 -passin pass:$ssl_password -passout pass:$ssl_password -key $openssl_cmd_key_file2 -out $openssl_cmd_csr_file -days $ssl_days -config $config_file");
-				exec("openssl rsa -passin pass:$ssl_password -in $openssl_cmd_key_file2 -out $openssl_cmd_key_file");
+				$app->system->exec_safe("openssl genrsa -des3 -rand ? -passout pass:? -out ? 2048", $rand_file, $ssl_password, $openssl_cmd_key_file2);
+				$app->system->exec_safe("openssl req -new -sha256 -passin pass:? -passout pass:? -key ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $ssl_days, $config_file);
+				$app->system->exec_safe("openssl rsa -passin pass:? -in ? -out ?", $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_key_file);
 
 				if(file_exists($web_config['CA_path'].'/openssl.cnf'))
 				{
-					exec("openssl ca -batch -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file");
+					$app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file);
 					$app->log("Creating CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
-					if (filesize($crt_file)==0 || !file_exists($crt_file)) $app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file", LOGLEVEL_ERROR);
+					if(filesize($crt_file) == 0 || !file_exists($crt_file)) {
+						$app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config " . $web_config['CA_path'] . "/openssl.cnf -passin pass:" . $web_config['CA_pass'] . " -in $openssl_cmd_csr_file", LOGLEVEL_ERROR);
+					}
 				};
 				if (@filesize($crt_file)==0 || !file_exists($crt_file)){
-					exec("openssl req -x509 -passin pass:$ssl_password -passout pass:$ssl_password -key $openssl_cmd_key_file2 -in $openssl_cmd_csr_file -out $openssl_cmd_crt_file -days $ssl_days -config $config_file ");
+					$app->system->exec_safe("openssl req -x509 -passin pass:? -passout pass:? -key ? -in ? -out ? -days ? -config ? ", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $openssl_cmd_crt_file, $ssl_days, $config_file);
 					$app->log("Creating self-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 				};
 
@@ -402,7 +404,8 @@ class apache2_plugin {
 		if($data["new"]["ssl_action"] == 'save') {
 			$tmp = array();
 			$crt_data = '';
-			exec('openssl x509 -noout -text -in '.escapeshellarg($crt_file),$tmp);
+			$app->system->exec_safe('openssl x509 -noout -text -in ?', $crt_file);
+			$tmp = $app->system->last_exec_out();
 			$crt_data = implode("\n",$tmp);
 			if(stristr($crt_data,'.acme.invalid')) {
 				$data["new"]["ssl_action"] = '';
@@ -473,7 +476,7 @@ class apache2_plugin {
 		if($data['new']['ssl_action'] == 'del') {
 			if(file_exists($web_config['CA_path'].'/openssl.cnf') && !is_link($web_config['CA_path'].'/openssl.cnf'))
 			{
-				exec("openssl ca -batch -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -revoke ".escapeshellcmd($crt_file));
+				$app->system->exec_safe("openssl ca -batch -config ? -passin pass:? -revoke ?", $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $crt_file);
 				$app->log("Revoking CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 			};
 			$app->system->unlink($csr_file);
@@ -591,31 +594,31 @@ class apache2_plugin {
 
 			//* Check if a ispconfigend user and group exists and create them
 			if(!$app->system->is_group('ispconfigend')) {
-				exec('groupadd --gid '.($connect_userid_to_webid_start + 10000).' ispconfigend');
+				$app->system->exec_safe('groupadd --gid ? ispconfigend', $connect_userid_to_webid_start + 10000);
 			}
 			if(!$app->system->is_user('ispconfigend')) {
-				exec('useradd -g ispconfigend -d /usr/local/ispconfig --uid '.($connect_userid_to_webid_start + 10000).' ispconfigend');
+				$app->system->exec_safe('useradd -g ispconfigend -d /usr/local/ispconfig --uid ? ispconfigend', $connect_userid_to_webid_start + 10000);
 			}
 		} else {
 			$fixed_uid_param = '';
 			$fixed_gid_param = '';
 		}
 
-		$groupname = escapeshellcmd($data['new']['system_group']);
+		$groupname = $data['new']['system_group'];
 		if($data['new']['system_group'] != '' && !$app->system->is_group($data['new']['system_group'])) {
-			exec('groupadd '.$fixed_gid_param.' '.$groupname);
-			if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' groupadd '.$groupname);
+			$app->system->exec_safe('groupadd ' . $fixed_gid_param . ' ?', $groupname);
+			if($apache_chrooted) $app->system->exec_safe('chroot ? groupadd ?', $web_config['website_basedir'], $groupname);
 			$app->log('Adding the group: '.$groupname, LOGLEVEL_DEBUG);
 		}
 
-		$username = escapeshellcmd($data['new']['system_user']);
+		$username = $data['new']['system_user'];
 		if($data['new']['system_user'] != '' && !$app->system->is_user($data['new']['system_user'])) {
 			if($web_config['add_web_users_to_sshusers_group'] == 'y') {
-				exec('useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param -G sshusers $username -s /bin/false");
-				if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param -G sshusers $username -s /bin/false");
+				$app->system->exec_safe('useradd -d ? -g ? ' . $fixed_uid_param . ' -G sshusers ? -s /bin/false', $data['new']['document_root'], $groupname, $username);
+				if($apache_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ' . $fixed_uid_param . ' -G sshusers ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $username);
 			} else {
-				exec('useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param $username -s /bin/false");
-				if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param $username -s /bin/false");
+				$app->system->exec_safe('useradd -d ? -g ? ' . $fixed_uid_param . ' ? -s /bin/false', $data['new']['document_root'], $groupname, $username);
+				if($apache_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ' . $fixed_uid_param . ' ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $username);
 			}
 			$app->log('Adding the user: '.$username, LOGLEVEL_DEBUG);
 		}
@@ -638,7 +641,7 @@ class apache2_plugin {
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// create the symlinks, if not exist
 					if(is_link($tmp_symlink)) {
-						exec('rm -f '.escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe('rm -f ?', $tmp_symlink);
 						$app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG);
 					}
 				}
@@ -665,13 +668,12 @@ class apache2_plugin {
 				}
 				
 				//* Unmount the old log directory bfore we move the log dir
-				//exec('fuser -km '.escapeshellcmd($old_dir.'/log'));
-				exec('umount '.escapeshellcmd($data['old']['document_root'].'/log'));
+				$app->system->exec_safe('umount ?', $data['old']['document_root'].'/log');
 
 				//* Create new base directory, if it does not exist yet
 				if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
 				$app->system->web_folder_protection($data['old']['document_root'], false);
-				exec('mv '.escapeshellarg($data['old']['document_root']).' '.escapeshellarg($new_dir));
+				$app->system->exec_safe('mv ? ?', $data['old']['document_root'], $new_dir);
 				//$app->system->rename($data['old']['document_root'],$new_dir);
 				$app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir, LOGLEVEL_DEBUG);
 
@@ -679,17 +681,17 @@ class apache2_plugin {
 				$data['new']['php_open_basedir'] = str_replace($data['old']['document_root'], $data['new']['document_root'], $data['old']['php_open_basedir']);
 
 				//* Change the owner of the website files to the new website owner
-				exec('chown --recursive --from='.escapeshellcmd($data['old']['system_user']).':'.escapeshellcmd($data['old']['system_group']).' '.escapeshellcmd($data['new']['system_user']).':'.escapeshellcmd($data['new']['system_group']).' '.$new_dir);
+				$app->system->exec_safe('chown --recursive --from=?:? ?:? ?', $data['old']['system_user'], $data['old']['system_group'], $data['new']['system_user'], $data['new']['system_group'], $new_dir);
 
 				//* Change the home directory and group of the website user
-				$command = 'killall -u '.escapeshellcmd($data['new']['system_user']).' ; usermod';
-				$command .= ' --home '.escapeshellcmd($data['new']['document_root']);
-				$command .= ' --gid '.escapeshellcmd($data['new']['system_group']);
-				$command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null';
-				exec($command);
+				$command = 'killall -u ? ; usermod';
+				$command .= ' --home ?';
+				$command .= ' --gid ?';
+				$command .= ' ? 2>/dev/null';
+				$app->system->exec_safe($command, $data['new']['system_user'], $data['new']['document_root'], $data['new']['system_group'], $data['new']['system_user']);
 			}
 
-			if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+			if($apache_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 			//* Change the log mount
 			/*
@@ -711,7 +713,7 @@ class apache2_plugin {
 				$app->system->replaceLine('/etc/fstab', $fstab_line_old, $fstab_line, 0, 1);
 			}
 			
-			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
+			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 			
 		}
 
@@ -723,7 +725,6 @@ class apache2_plugin {
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/error') and $data['new']['errordocs']) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/error');
 		if($data['new']['stats_type'] != '' && !is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/stats');
-		//if(!is_dir($data['new']['document_root'].'/'.$log_folder)) exec('mkdir -p '.$data['new']['document_root'].'/'.$log_folder);
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
 		if(!is_dir($data['new']['document_root'].'/cgi-bin')) $app->system->mkdirpath($data['new']['document_root'].'/cgi-bin');
 		if(!is_dir($data['new']['document_root'].'/tmp')) $app->system->mkdirpath($data['new']['document_root'].'/tmp');
@@ -747,7 +748,7 @@ class apache2_plugin {
 
 		// Remove the symlink for the site, if site is renamed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) exec('rm -rf /var/log/ispconfig/httpd/'.$data['old']['domain']);
+			if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) $app->system->exec_safe('rm -rf ?', '/var/log/ispconfig/httpd/'.$data['old']['domain']);
 			if(is_link($data['old']['document_root'].'/'.$old_log_folder)) $app->system->unlink($data['old']['document_root'].'/'.$old_log_folder);
 
 			//* remove old log mount
@@ -755,19 +756,18 @@ class apache2_plugin {
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 
 			//* Unmount log directory
-			//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
-			exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
+			$app->system->exec_safe('umount ?', $data['old']['document_root'].'/'.$old_log_folder);
 		}
 
 		//* Create the log dir if nescessary and mount it
 		if(!is_dir($data['new']['document_root'].'/'.$log_folder) || !is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain']) || is_link($data['new']['document_root'].'/'.$log_folder)) {
 			if(is_link($data['new']['document_root'].'/'.$log_folder)) unlink($data['new']['document_root'].'/'.$log_folder);
-			if(!is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain'])) exec('mkdir -p /var/log/ispconfig/httpd/'.$data['new']['domain']);
+			if(!is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain'])) $app->system->exec_safe('mkdir -p ?', '/var/log/ispconfig/httpd/'.$data['new']['domain']);
 			$app->system->mkdirpath($data['new']['document_root'].'/'.$log_folder);
 			$app->system->chown($data['new']['document_root'].'/'.$log_folder, 'root');
 			$app->system->chgrp($data['new']['document_root'].'/'.$log_folder, 'root');
 			$app->system->chmod($data['new']['document_root'].'/'.$log_folder, 0755);
-			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
+			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 			//* add mountpoint to fstab
 			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nobootwait';
 			$fstab_line .= @($web_config['network_filesystem'] == 'y')?',_netdev    0 0':'    0 0';
@@ -792,7 +792,7 @@ class apache2_plugin {
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// remove the symlinks, if not exist
 					if(is_link($tmp_symlink)) {
-						exec('rm -f '.escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe('rm -f ?', $tmp_symlink);
 						$app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG);
 					}
 				}
@@ -813,11 +813,10 @@ class apache2_plugin {
 				}
 				// create the symlinks, if not exist
 				if(!is_link($tmp_symlink)) {
-					//     exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
 					if ($web_config["website_symlinks_rel"] == 'y') {
-						$app->system->create_relative_link(escapeshellcmd($data["new"]["document_root"]), escapeshellcmd($tmp_symlink));
+						$app->system->create_relative_link($data["new"]["document_root"], $tmp_symlink);
 					} else {
-						exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe("ln -s ? ?", $data["new"]["document_root"]."/", $tmp_symlink);
 					}
 
 					$app->log('Creating symlink: ln -s '.$data['new']['document_root'].'/ '.$tmp_symlink, LOGLEVEL_DEBUG);
@@ -837,69 +836,67 @@ class apache2_plugin {
 
 			// Copy the error pages
 			if($data['new']['errordocs']) {
-				$error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/';
-				if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-					exec('cp ' . $conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+				$error_page_path = $data['new']['document_root'].'/' . $web_folder . '/error/';
+				if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2))) {
+					$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 				}
 				else {
 					if (file_exists($conf['rootpath'] . '/conf-custom/error/400.html')) {
-						exec('cp '. $conf['rootpath'] . '/conf-custom/error/*.html '.$error_page_path);
+						$app->system->exec_safe('cp ?*.html ?', $conf['rootpath'] . '/conf-custom/error/', $error_page_path);
 					}
 					else {
-						exec('cp ' . $conf['rootpath'] . '/conf/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+						$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 					}
 				}
-				exec('chmod -R a+r '.$error_page_path);
+				$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
 			}
 
 			//* Copy the web skeleton files only when there is no index.ph or index.html file yet
 			if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php')) {
-				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-					if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2).' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2))) {
+					if(!file_exists($data['new']['document_root'] . '/' . $web_folder . '/index.html')) {
+						$app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_' . substr($conf['language'], 0, 2), $data['new']['document_root'] . '/' . $web_folder . '/index.html');
+					}
 
 					if(is_file($conf['rootpath'] . '/conf-custom/index/favicon.ico')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/favicon.ico')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/favicon.ico '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/');
 					}
 					if(is_file($conf['rootpath'] . '/conf-custom/index/robots.txt')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/robots.txt')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/robots.txt '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/');
 					}
-					//if(is_file($conf['rootpath'] . '/conf-custom/index/.htaccess')) {
-					//	exec('cp ' . $conf['rootpath'] . '/conf-custom/index/.htaccess '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
-					//}
 				} else {
 					if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/standard_index.html '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html', $data['new']['document_root'].'/' . $web_folder . '/index.html');
 					} else {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2).' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html');
 						if(is_file($conf['rootpath'] . '/conf/index/favicon.ico')){
-							if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/favicon.ico')) exec('cp ' . $conf['rootpath'] . '/conf/index/favicon.ico '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+							if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/');
 						}
 						if(is_file($conf['rootpath'] . '/conf/index/robots.txt')){
-							if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/robots.txt')) exec('cp ' . $conf['rootpath'] . '/conf/index/robots.txt '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+							if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/');
 						}
-						//if(is_file($conf['rootpath'] . '/conf/index/.htaccess')) exec('cp ' . $conf['rootpath'] . '/conf/index/.htaccess '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
 					}
 				}
 			}
-			exec('chmod -R a+r '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+			$app->system->exec_safe('chmod -R a+r ?', $data['new']['document_root'].'/' . $web_folder . '/');
 
 			//** Copy the error documents on update when the error document checkbox has been activated and was deactivated before
 		} elseif ($this->action == 'update' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') && $data['old']['errordocs'] == 0 && $data['new']['errordocs'] == 1) {
 
-			$error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/';
-			if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-				exec('cp ' . $conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+			$error_page_path = $data['new']['document_root'].'/' . $web_folder . '/error/';
+			if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2))) {
+				$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 			}
 			else {
 				if (file_exists($conf['rootpath'] . '/conf-custom/error/400.html')) {
-					exec('cp ' . $conf['rootpath'] . '/conf-custom/error/*.html '.$error_page_path);
+					$app->system->exec_safe('cp ?*.html ?', $conf['rootpath'] . '/conf-custom/error/', $error_page_path);
 				}
 				else {
-					exec('cp ' . $conf['rootpath'] . '/conf/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+					$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 				}
 			}
-			exec('chmod -R a+r '.$error_page_path);
-			exec('chown -R '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.$error_page_path);
+			$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
+			$app->system->exec_safe('chown -R ?:? ?', $data['new']['system_user'], $data['new']['system_group'], $error_page_path);
 		}  // end copy error docs
 
 		// Set the quota for the user, but only for vhosts, not vhostsubdomains or vhostalias
@@ -914,39 +911,39 @@ class apache2_plugin {
 			}
 
 			// get the primitive folder for document_root and the filesystem, will need it later.
-			$df_output=explode(" ", exec("df -T " . escapeshellarg($data['new']['document_root']) . "|awk 'END{print \$2,\$NF}'"));
+			$df_output=explode(" ", $app->system->exec_safe("df -T ?|awk 'END{print \$2,\$NF}'", $data['new']['document_root']));
 			$file_system = $df_output[0];
 			$primitive_root = $df_output[1];
 
 			if($file_system == 'xfs') {
-				exec("xfs_quota -x -c " . escapeshellarg("limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " " . $username) . " " . escapeshellarg($primitive_root));
+				$app->system->exec_safe("xfs_quota -x -c ? ?", "limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " " . $username, $primitive_root);
 
 				// xfs only supports timers globally, not per user.
-				exec("xfs_quota -x -c 'timer -bir -i 604800' " . escapeshellarg($primitive_root));
+				$app->system->exec_safe("xfs_quota -x -c 'timer -bir -i 604800' ?", $primitive_root);
 
 				unset($project_uid, $username_position, $xfs_projects);
 				unset($primitive_root, $df_output, $mb_hard, $mb_soft);
 			} else {
 				if($app->system->is_installed('setquota')) {
-					exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
-					exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
+					$app->system->exec_safe('setquota -u ? ? ? 0 0 -a &> /dev/null', $username, $blocks_soft, $blocks_hard);
+					$app->system->exec_safe('setquota -T -u ? 604800 604800 -a &> /dev/null', $username);
 				}
 			}
 		}
 
 		if($this->action == 'insert' || $data["new"]["system_user"] != $data["old"]["system_user"]) {
 			// Chown and chmod the directories below the document root
-			$app->system->_exec('chown -R '.$username.':'.$groupname.' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder);
 			// The document root itself has to be owned by root in normal level and by the web owner in security level 20
 			if($web_config['security_level'] == 20) {
-				$app->system->_exec('chown '.$username.':'.$groupname.' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+				$app->system->exec_safe('chown ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder);
 			} else {
-				$app->system->_exec('chown root:root '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+				$app->system->exec_safe('chown root:root ?', $data['new']['document_root'].'/' . $web_folder);
 			}
 		}
 
 		//* add the Apache user to the client group if this is a vhost and security level is set to high, no matter if this is an insert or update and regardless of set_folder_permissions_on_update
-		if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, escapeshellcmd($web_config['user']));
+		if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, $web_config['user']);
 
 		//* If the security level is set to high
 		if(($this->action == 'insert' && $data['new']['type'] == 'vhost') or ($web_config['set_folder_permissions_on_update'] == 'y' && $data['new']['type'] == 'vhost')) {
@@ -975,18 +972,18 @@ class apache2_plugin {
 				if($web_config['add_web_users_to_sshusers_group'] == 'y') {
 					$command = 'usermod';
 					$command .= ' --groups sshusers';
-					$command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null';
-					$app->system->_exec($command);
+					$command .= ' ? 2>/dev/null';
+					$app->system->exec_safe($command, $data['new']['system_user']);
 				}
 
 				//* if we have a chrooted Apache environment
 				if($apache_chrooted) {
-					$app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+					$app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 					//* add the apache user to the client group in the chroot environment
 					$tmp_groupfile = $app->system->server_conf['group_datei'];
 					$app->system->server_conf['group_datei'] = $web_config['website_basedir'].'/etc/group';
-					$app->system->add_user_to_group($groupname, escapeshellcmd($web_config['user']));
+					$app->system->add_user_to_group($groupname, $web_config['user']);
 					$app->system->server_conf['group_datei'] = $tmp_groupfile;
 					unset($tmp_groupfile);
 				}
@@ -1089,7 +1086,9 @@ class apache2_plugin {
 
 		if($data['new']['type'] == 'vhost') {
 			// Change the ownership of the error log to the root user
-			if(!@is_file('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log')) exec('touch '.escapeshellcmd('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log'));
+			if(!@is_file('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log')) {
+				$app->system->exec_safe('touch ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log');
+			}
 			$app->system->chown('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 			$app->system->chgrp('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 		}
@@ -1162,7 +1161,7 @@ class apache2_plugin {
 		$vhost_data['php_open_basedir'] = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
 		$vhost_data['ssl_domain'] = $data['new']['ssl_domain'];
 		$vhost_data['has_custom_php_ini'] = $has_custom_php_ini;
-		$vhost_data['custom_php_ini_dir'] = escapeshellcmd($custom_php_ini_dir);
+		$vhost_data['custom_php_ini_dir'] = $custom_php_ini_dir;
 		$vhost_data['logging'] = $web_config['logging'];
 
 		// Custom Apache directives
@@ -1223,8 +1222,9 @@ class apache2_plugin {
 				$app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ? AND `server_id` = ?", $data['new']['ssl'], 'n', $data['new']['domain'], $conf['server_id']);
  			}
 		}
-
-		if(@is_file($bundle_file)) $vhost_data['has_bundle_cert'] = 1;
+		
+		// Use separate bundle file only for apache versions < 2.4.8
+		if(@is_file($bundle_file) && version_compare($app->system->getapacheversion(true), '2.4.8', '<')) $vhost_data['has_bundle_cert'] = 1;
 
 		// HTTP/2.0 ?
 		$vhost_data['enable_http2']  = 'n';
@@ -1451,13 +1451,10 @@ class apache2_plugin {
 
 			if (!is_dir($fastcgi_starter_path)) {
 				$app->system->mkdirpath($fastcgi_starter_path);
-				//exec('chown '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.escapeshellcmd($fastcgi_starter_path));
-
 
 				$app->log('Creating fastcgi starter script directory: '.$fastcgi_starter_path, LOGLEVEL_DEBUG);
 			}
 
-			//exec('chown -R '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.escapeshellcmd($fastcgi_starter_path));
 			$app->system->chown($fastcgi_starter_path, $data['new']['system_user']);
 			$app->system->chgrp($fastcgi_starter_path, $data['new']['system_group']);
 			if($web_config['security_level'] == 10) {
@@ -1479,29 +1476,29 @@ class apache2_plugin {
 			}
 
 			if($has_custom_php_ini) {
-				$fcgi_tpl->setVar('php_ini_path', escapeshellcmd($custom_php_ini_dir));
+				$fcgi_tpl->setVar('php_ini_path', $custom_php_ini_dir);
 			} else {
 				if($default_fastcgi_php){
-					$fcgi_tpl->setVar('php_ini_path', escapeshellcmd($fastcgi_config['fastcgi_phpini_path']));
+					$fcgi_tpl->setVar('php_ini_path', $fastcgi_config['fastcgi_phpini_path']);
 				} else {
-					$fcgi_tpl->setVar('php_ini_path', escapeshellcmd($custom_fastcgi_php_ini_dir));
+					$fcgi_tpl->setVar('php_ini_path', $custom_fastcgi_php_ini_dir);
 				}
 			}
-			$fcgi_tpl->setVar('document_root', escapeshellcmd($data['new']['document_root']));
-			$fcgi_tpl->setVar('php_fcgi_children', escapeshellcmd($fastcgi_config['fastcgi_children']));
-			$fcgi_tpl->setVar('php_fcgi_max_requests', escapeshellcmd($fastcgi_config['fastcgi_max_requests']));
+			$fcgi_tpl->setVar('document_root', $data['new']['document_root']);
+			$fcgi_tpl->setVar('php_fcgi_children', $fastcgi_config['fastcgi_children']);
+			$fcgi_tpl->setVar('php_fcgi_max_requests', $fastcgi_config['fastcgi_max_requests']);
 			if($default_fastcgi_php){
-				$fcgi_tpl->setVar('php_fcgi_bin', escapeshellcmd($fastcgi_config['fastcgi_bin']));
+				$fcgi_tpl->setVar('php_fcgi_bin', $fastcgi_config['fastcgi_bin']);
 			} else {
-				$fcgi_tpl->setVar('php_fcgi_bin', escapeshellcmd($custom_fastcgi_php_executable));
+				$fcgi_tpl->setVar('php_fcgi_bin', $custom_fastcgi_php_executable);
 			}
 			$fcgi_tpl->setVar('security_level', intval($web_config['security_level']));
-			$fcgi_tpl->setVar('domain', escapeshellcmd($data['new']['domain']));
+			$fcgi_tpl->setVar('domain', $data['new']['domain']);
 
 			$php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
-			$fcgi_tpl->setVar('open_basedir', escapeshellcmd($php_open_basedir));
+			$fcgi_tpl->setVar('open_basedir', $php_open_basedir);
 
-			$fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : ''));
+			$fcgi_starter_script = $fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '');
 			$app->system->file_put_contents($fcgi_starter_script, $fcgi_tpl->grab());
 			unset($fcgi_tpl);
 
@@ -1561,14 +1558,15 @@ class apache2_plugin {
 		}
 
 		if($default_php_fpm){
-			$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+			$pool_dir = $web_config['php_fpm_pool_dir'];
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
 		$pool_dir = trim($pool_dir);
+
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['new']['domain_id'];
-		$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
+		$socket_dir = $web_config['php_fpm_socket_dir'];
 		if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
 		
 		if($data['new']['php_fpm_use_socket'] == 'y'){
@@ -1580,6 +1578,8 @@ class apache2_plugin {
 		}
 		$tpl->setVar('use_tcp', $use_tcp);
 		$tpl->setVar('use_socket', $use_socket);
+		$tpl->setVar('php_fpm_chroot', $data['new']['php_fpm_chroot']);
+		$tpl->setVar('php_fpm_chroot_web_folder', sprintf('/%s', trim($web_folder, '/')));
 		$fpm_socket = $socket_dir.$pool_name.'.sock';
 		$tpl->setVar('fpm_socket', $fpm_socket);
 		$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1);
@@ -1619,8 +1619,8 @@ class apache2_plugin {
 
 			// This works because PHP "rewrites" a symlink to the physical path
 			$php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
-			$cgi_tpl->setVar('open_basedir', escapeshellcmd($php_open_basedir));
-			$cgi_tpl->setVar('document_root', escapeshellcmd($data['new']['document_root']));
+			$cgi_tpl->setVar('open_basedir', $php_open_basedir);
+			$cgi_tpl->setVar('document_root', $data['new']['document_root']);
 
 			// This will NOT work!
 			//$cgi_tpl->setVar('open_basedir', '/var/www/' . $data['new']['domain']);
@@ -1629,12 +1629,12 @@ class apache2_plugin {
 
 			$cgi_tpl->setVar('has_custom_php_ini', $has_custom_php_ini);
 			if($has_custom_php_ini) {
-				$cgi_tpl->setVar('php_ini_path', escapeshellcmd($custom_php_ini_dir));
+				$cgi_tpl->setVar('php_ini_path', $custom_php_ini_dir);
 			} else {
-				$cgi_tpl->setVar('php_ini_path', escapeshellcmd($fastcgi_config['fastcgi_phpini_path']));
+				$cgi_tpl->setVar('php_ini_path', $fastcgi_config['fastcgi_phpini_path']);
 			}
 
-			$cgi_starter_script = escapeshellcmd($cgi_starter_path.$cgi_config['cgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : ''));
+			$cgi_starter_script = $cgi_starter_path.$cgi_config['cgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '');
 			$app->system->file_put_contents($cgi_starter_script, $cgi_tpl->grab());
 			unset($cgi_tpl);
 
@@ -1654,7 +1654,7 @@ class apache2_plugin {
 
 		}
 
-		$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_file = $web_config['vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost';
 		//* Make a backup copy of vhost file
 		if(file_exists($vhost_file)) $app->system->copy($vhost_file, $vhost_file.'~');
 
@@ -1747,17 +1747,17 @@ class apache2_plugin {
 
 		//* Set the symlink to enable the vhost
 		//* First we check if there is a old type of symlink and remove it
-		$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost';
 		if(is_link($vhost_symlink)) $app->system->unlink($vhost_symlink);
 
 		//* Remove old or changed symlinks
 		if($data['new']['subdomain'] != $data['old']['subdomain'] or $data['new']['active'] == 'n') {
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -1766,9 +1766,9 @@ class apache2_plugin {
 
 		//* New symlink
 		if($data['new']['subdomain'] == '*') {
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost';
 		} else {
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost';
 		}
 		if($data['new']['active'] == 'y' && !is_link($vhost_symlink)) {
 			symlink($vhost_file, $vhost_symlink);
@@ -1777,43 +1777,45 @@ class apache2_plugin {
 
 		// remove old symlink and vhost file, if domain name of the site has changed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $web_config['vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 			$app->system->unlink($vhost_file);
 			$app->log('Removing file: '.$vhost_file, LOGLEVEL_DEBUG);
 		}
 
 		//* Create .htaccess and .htpasswd file for website statistics
 		//if(!is_file($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess') or $data['old']['document_root'] != $data['new']['document_root']) {
-		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats');
-		$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user";
-		$app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', $ht_file);
-		$app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', 0755);
-		unset($ht_file);
-		//}
 
-		if(!is_file($data['new']['document_root'].'/web/stats/.htpasswd_stats') || $data['new']['stats_password'] != $data['old']['stats_password']) {
-			if(trim($data['new']['stats_password']) != '') {
-				$htp_file = 'admin:'.trim($data['new']['stats_password']);
-				$app->system->web_folder_protection($data['new']['document_root'], false);
-				$app->system->file_put_contents($data['new']['document_root'].'/web/stats/.htpasswd_stats', $htp_file);
-				$app->system->web_folder_protection($data['new']['document_root'], true);
-				$app->system->chmod($data['new']['document_root'].'/web/stats/.htpasswd_stats', 0755);
-				unset($htp_file);
+		if($data['new']['stats_type'] != '') {
+			if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats');
+			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user";
+			$app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', $ht_file);
+			$app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', 0755);
+			unset($ht_file);
+
+			if(!is_file($data['new']['document_root'].'/web/stats/.htpasswd_stats') || $data['new']['stats_password'] != $data['old']['stats_password']) {
+				if(trim($data['new']['stats_password']) != '') {
+					$htp_file = 'admin:'.trim($data['new']['stats_password']);
+					$app->system->web_folder_protection($data['new']['document_root'], false);
+					$app->system->file_put_contents($data['new']['document_root'].'/web/stats/.htpasswd_stats', $htp_file);
+					$app->system->web_folder_protection($data['new']['document_root'], true);
+					$app->system->chmod($data['new']['document_root'].'/web/stats/.htpasswd_stats', 0755);
+					unset($htp_file);
+				}
 			}
 		}
 
@@ -1822,7 +1824,12 @@ class apache2_plugin {
 			$this->awstats_update($data, $web_config);
 		}
 
-		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir);
+		//* Remove Stats-Folder when Statistics set to none
+		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
+			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
+		}
+
+		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder);
 		$this->hhvm_update($data, $web_config);
 
 		if($web_config['check_apache_config'] == 'y') {
@@ -2019,14 +2026,10 @@ class apache2_plugin {
 		if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias'){
 			if(is_array($log_folders) && !empty($log_folders)){
 				foreach($log_folders as $log_folder){
-					//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
-					//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
-					exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
+					$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 				}
 			} else {
-				//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
-				//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
-				exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
+				$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 			}
 			
 			// remove letsencrypt if it exists (renew will always fail otherwise)
@@ -2066,19 +2069,19 @@ class apache2_plugin {
 		} else {
 			//* This is a website
 			// Deleting the vhost file, symlink and the data directory
-			$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $web_config['vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -2088,11 +2091,11 @@ class apache2_plugin {
 			$app->log('Removing vhost file: '.$vhost_file, LOGLEVEL_DEBUG);
 
 			if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') {
-				$docroot = escapeshellcmd($data['old']['document_root']);
+				$docroot = $data['old']['document_root'];
 				if($docroot != '' && !stristr($docroot, '..')) {
 					if($data['old']['type'] == 'vhost') {
 						// this is a vhost - we delete everything in here.
-						exec('rm -rf '.$docroot);
+						$app->system->exec_safe('rm -rf ?', $docroot);
 					} elseif(!stristr($data['old']['web_folder'], '..')) {
 						// this is a vhost subdomain
 						// IMPORTANT: do some folder checks before we delete this!
@@ -2142,7 +2145,7 @@ class apache2_plugin {
 							unset($used_paths);
 						}
 
-						if($do_delete === true && $delete_folder !== '') exec('rm -rf '.$docroot.'/'.$delete_folder);
+						if($do_delete === true && $delete_folder !== '') $app->system->exec_safe('rm -rf ?', $docroot.'/'.$delete_folder);
 
 						unset($delete_folder);
 						unset($path_elements);
@@ -2154,12 +2157,12 @@ class apache2_plugin {
 					$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $fastcgi_config['fastcgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($fastcgi_starter_path)) {
-							exec('rm -rf '.$fastcgi_starter_path);
+							$app->system->exec_safe('rm -rf ?', $fastcgi_starter_path);
 						}
 					} else {
 						$fcgi_starter_script = $fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].'_web'.$data['old']['domain_id'];
 						if (file_exists($fcgi_starter_script)) {
-							exec('rm -f '.$fcgi_starter_script);
+							$app->system->exec_safe('rm -f ?', $fcgi_starter_script);
 						}
 					}
 				}
@@ -2179,12 +2182,12 @@ class apache2_plugin {
 					$cgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['cgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($cgi_starter_path)) {
-							exec('rm -rf '.$cgi_starter_path);
+							$app->system->exec_safe('rm -rf ?', $cgi_starter_path);
 						}
 					} else {
 						$cgi_starter_script = $cgi_starter_path.'php-cgi-starter_web'.$data['old']['domain_id'];
 						if (file_exists($cgi_starter_script)) {
-							exec('rm -f '.$cgi_starter_script);
+							$app->system->exec_safe('rm -f ?', $cgi_starter_script);
 						}
 					}
 				}
@@ -2213,16 +2216,15 @@ class apache2_plugin {
 			}
 
 			// Delete the log file directory
-			$vhost_logfile_dir = escapeshellcmd('/var/log/ispconfig/httpd/'.$data['old']['domain']);
-			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) exec('rm -rf '.$vhost_logfile_dir);
+			$vhost_logfile_dir = '/var/log/ispconfig/httpd/'.$data['old']['domain'];
+			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) $app->system->exec_safe('rm -rf ?', $vhost_logfile_dir);
 			$app->log('Removing website logfile directory: '.$vhost_logfile_dir, LOGLEVEL_DEBUG);
 
 			if($data['old']['type'] == 'vhost') {
 				//delete the web user
-				$command = 'killall -u '.escapeshellcmd($data['old']['system_user']).' ; userdel';
-				$command .= ' '.escapeshellcmd($data['old']['system_user']);
-				exec($command);
-				if($apache_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+				$command = 'killall -u ? ; userdel ?';
+				$app->system->exec_safe($command, $data['old']['system_user'], $data['old']['system_user']);
+				if($apache_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 			}
 
@@ -2254,7 +2256,7 @@ class apache2_plugin {
 					if($mount_backup){
 						$web_backup_dir = $backup_dir.'/web'.$data_old['domain_id'];
 						//** do not use rm -rf $web_backup_dir because database(s) may exits
-						exec(escapeshellcmd('rm -f '.$web_backup_dir.'/web'.$data_old['domain_id'].'_').'*');
+						$app->system->exec_safe('rm -f ?*', $web_backup_dir.'/web'.$data_old['domain_id'].'_');
 						//* cleanup database
 						$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename LIKE ?";
 						$app->db->query($sql, $conf['server_id'], $data_old['domain_id'], "web".$data_old['domain_id']."_%");
@@ -2309,7 +2311,7 @@ class apache2_plugin {
 			$tpl->setLoop('ip_adresses', $records_out);
 		}
 
-		$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'].'/ispconfig.conf');
+		$vhost_file = $web_config['vhost_conf_dir'].'/ispconfig.conf';
 		$app->system->file_put_contents($vhost_file, $tpl->grab());
 		$app->log('Writing the conf file: '.$vhost_file, LOGLEVEL_DEBUG);
 		unset($tpl);
@@ -2342,7 +2344,7 @@ class apache2_plugin {
 		//* Get the folder path.
 		if(substr($folder['path'], 0, 1) == '/') $folder['path'] = substr($folder['path'], 1);
 		if(substr($folder['path'], -1) == '/') $folder['path'] = substr($folder['path'], 0, -1);
-		$folder_path = escapeshellcmd($website['document_root'].'/' . $web_folder . '/'.$folder['path']);
+		$folder_path = $website['document_root'].'/' . $web_folder . '/'.$folder['path'];
 		if(substr($folder_path, -1) != '/') $folder_path .= '/';
 
 		//* Check if the resulting path is inside the docroot
@@ -2488,7 +2490,7 @@ class apache2_plugin {
 
 		if(substr($data['new']['path'], 0, 1) == '/') $data['new']['path'] = substr($data['new']['path'], 1);
 		if(substr($data['new']['path'], -1) == '/') $data['new']['path'] = substr($data['new']['path'], 0, -1);
-		$new_folder_path = escapeshellcmd($website['document_root'].'/' . $web_folder . '/'.$data['new']['path']);
+		$new_folder_path = $website['document_root'].'/' . $web_folder . '/'.$data['new']['path'];
 		if(substr($new_folder_path, -1) != '/') $new_folder_path .= '/';
 
 		//* Check if the resulting path is inside the docroot
@@ -2668,8 +2670,6 @@ class apache2_plugin {
 			/*
 			 * The webdav - Root needs the group/user as owner and the apache as read and write
 			*/
-			//$app->system->_exec('chown ' . $user . ':' . $group . ' ' . escapeshellcmd($documentRoot . '/webdav/'));
-			//$app->system->_exec('chmod 770 ' . escapeshellcmd($documentRoot . '/webdav/'));
 			$app->system->chown($documentRoot . '/webdav', $user);
 			$app->system->chgrp($documentRoot . '/webdav', $group);
 			$app->system->chmod($documentRoot . '/webdav', 0770);
@@ -2678,8 +2678,6 @@ class apache2_plugin {
 			 * The webdav folder (not the webdav-root!) needs the same (not in ONE step, because the
 			 * pwd-files are owned by root)
 			*/
-			//$app->system->_exec('chown ' . $user . ':' . $group . ' ' . escapeshellcmd($webdav_user_dir.' -R'));
-			//$app->system->_exec('chmod 770 ' . escapeshellcmd($webdav_user_dir.' -R'));
 			$app->system->chown($webdav_user_dir, $user);
 			$app->system->chgrp($webdav_user_dir, $group);
 			$app->system->chmod($webdav_user_dir, 0770);
@@ -2699,7 +2697,7 @@ class apache2_plugin {
 			/*
 			 * Next step, patch the vhost - file
 			*/
-			$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'] . '/' . $domain . '.vhost');
+			$vhost_file = $web_config['vhost_conf_dir'] . '/' . $domain . '.vhost';
 			$this->_patchVhostWebdav($vhost_file, $documentRoot . '/webdav');
 
 			/*
@@ -2731,7 +2729,7 @@ class apache2_plugin {
 			/*
 			 * Next step, patch the vhost - file
 			*/
-			$vhost_file = escapeshellcmd($web_config['vhost_conf_dir'] . '/' . $domain . '.vhost');
+			$vhost_file = $web_config['vhost_conf_dir'] . '/' . $domain . '.vhost';
 			$this->_patchVhostWebdav($vhost_file, $documentRoot . '/webdav');
 
 			/*
@@ -2991,9 +2989,9 @@ class apache2_plugin {
 
 			$content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content);
 			file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content);
-			exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1');
-			exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1');
-			exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
+			$app->system->exec_safe('chmod +x ? >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
+			$app->system->exec_safe('/usr/sbin/update-rc.d ? defaults >/dev/null 2>&1', 'hhvm_' . $data['new']['system_user']);
+			$app->system->exec_safe('? restart >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
 			
 			if(is_dir('/etc/monit/conf.d')){
 				$monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
@@ -3004,8 +3002,8 @@ class apache2_plugin {
 			
  		} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
 			if($data['old']['system_user'] != ''){
-				exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
-				exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1');
+				$app->system->exec_safe('? stop >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['old']['system_user']);
+				$app->system->exec_safe('/usr/sbin/update-rc.d ? remove >/dev/null 2>&1', 'hhvm_' . $data['old']['system_user']);
 				unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
 				if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
 			}
@@ -3023,7 +3021,7 @@ class apache2_plugin {
 	}
 
 	//* Update the PHP-FPM pool configuration file
-	private function php_fpm_pool_update ($data, $web_config, $pool_dir, $pool_name, $socket_dir) {
+	private function php_fpm_pool_update ($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder = null) {
 		global $app, $conf;
 		$pool_dir = trim($pool_dir);
 		//$reload = false;
@@ -3048,6 +3046,8 @@ class apache2_plugin {
 
 		$app->uses("getconf");
 		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
+		
+		$php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart';
 
 		if($data['new']['php'] != 'php-fpm'){
 			if(@is_file($pool_dir.$pool_name.'.conf')){
@@ -3056,9 +3056,9 @@ class apache2_plugin {
 			}
 			if($data['old']['php'] == 'php-fpm'){
 				if(!$default_php_fpm){
-					$app->services->restartService('php-fpm', 'reload:'.$custom_php_fpm_init_script);
+					$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$custom_php_fpm_init_script);
 				} else {
-					$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+					$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 				}
 			}
 			//if($reload == true) $app->services->restartService('php-fpm','reload');
@@ -3102,7 +3102,7 @@ class apache2_plugin {
 		$tpl->setVar('document_root', $data['new']['document_root']);
 		$tpl->setVar('security_level', $web_config['security_level']);
 		$tpl->setVar('domain', $data['new']['domain']);
-		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
+		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
 		$tpl->setVar('php_open_basedir', $php_open_basedir);
 		if($php_open_basedir != ''){
 			$tpl->setVar('enable_php_open_basedir', '');
@@ -3110,6 +3110,15 @@ class apache2_plugin {
 			$tpl->setVar('enable_php_open_basedir', ';');
 		}
 
+		// Chrooted PHP-FPM
+		if ($data['new']['php_fpm_chroot'] === 'y') {
+			$tpl->setVar('php_fpm_chroot', $data['new']['php_fpm_chroot']);
+			$tpl->setVar('php_fpm_chroot_dir', $data['new']['document_root']);
+			$tpl->setVar('php_fpm_chroot_web_folder', sprintf('/%s', trim($web_folder, '/')));
+			$tpl->setVar('php_open_basedir', str_replace($tpl->getVar('document_root'), '', $tpl->getVar('php_open_basedir')));
+			$tpl->setVar('document_root', '');
+		}
+
 		// Custom php.ini settings
 		$final_php_ini_settings = array();
 		$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
@@ -3180,13 +3189,13 @@ class apache2_plugin {
 		unset($tpl);
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
+		$default_pool_dir = trim($web_config['php_fpm_pool_dir']);
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
 				$app->system->unlink($default_pool_dir.$pool_name.'.conf');
 				$app->log('Removed PHP-FPM config file: '.$default_pool_dir.$pool_name.'.conf', LOGLEVEL_DEBUG);
-				$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+				$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 			}
 		}
 		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $conf["server_id"]);
@@ -3198,7 +3207,7 @@ class apache2_plugin {
 					if ( @is_file($php_version['php_fpm_pool_dir'].$pool_name.'.conf') ) {
 						$app->system->unlink($php_version['php_fpm_pool_dir'].$pool_name.'.conf');
 						$app->log('Removed PHP-FPM config file: '.$php_version['php_fpm_pool_dir'].$pool_name.'.conf', LOGLEVEL_DEBUG);
-						$app->services->restartService('php-fpm', 'reload:'.$php_version['php_fpm_init_script']);
+						$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$php_version['php_fpm_init_script']);
 					}
 				}
 			}
@@ -3206,9 +3215,9 @@ class apache2_plugin {
 		// Reload current PHP-FPM after all others
 		sleep(1);
 		if(!$default_php_fpm){
-			$app->services->restartService('php-fpm', 'reload:'.$custom_php_fpm_init_script);
+			$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$custom_php_fpm_init_script);
 		} else {
-			$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+			$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 		}
 
 		//$reload = true;
@@ -3219,6 +3228,11 @@ class apache2_plugin {
 	//* Delete the PHP-FPM pool configuration file
 	private function php_fpm_pool_delete ($data, $web_config) {
 		global $app, $conf;
+		
+		$app->uses("getconf");
+		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
+		
+		$php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart';
 
 		if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){
 			$default_php_fpm = false;
@@ -3229,7 +3243,7 @@ class apache2_plugin {
 		}
 
 		if($default_php_fpm){
-			$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+			$pool_dir = $web_config['php_fpm_pool_dir'];
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
@@ -3246,13 +3260,13 @@ class apache2_plugin {
 		}
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
+		$default_pool_dir = trim($web_config['php_fpm_pool_dir']);
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
 				$app->system->unlink($default_pool_dir.$pool_name.'.conf');
 				$app->log('Removed PHP-FPM config file: '.$default_pool_dir.$pool_name.'.conf', LOGLEVEL_DEBUG);
-				$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+				$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 			}
 		}
 		$php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = ?", $data['old']['server_id']);
@@ -3264,7 +3278,7 @@ class apache2_plugin {
 					if ( @is_file($php_version['php_fpm_pool_dir'].$pool_name.'.conf') ) {
 						$app->system->unlink($php_version['php_fpm_pool_dir'].$pool_name.'.conf');
 						$app->log('Removed PHP-FPM config file: '.$php_version['php_fpm_pool_dir'].$pool_name.'.conf', LOGLEVEL_DEBUG);
-						$app->services->restartService('php-fpm', 'reload:'.$php_version['php_fpm_init_script']);
+						$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$php_version['php_fpm_init_script']);
 					}
 				}
 			}
@@ -3273,9 +3287,9 @@ class apache2_plugin {
 		// Reload current PHP-FPM after all others
 		sleep(1);
 		if(!$default_php_fpm){
-			$app->services->restartService('php-fpm', 'reload:'.$custom_php_fpm_init_script);
+			$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$custom_php_fpm_init_script);
 		} else {
-			$app->services->restartService('php-fpm', 'reload:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
+			$app->services->restartService('php-fpm', $php_fpm_reload_mode.':'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 		}
 	}
 
@@ -3306,7 +3320,7 @@ class apache2_plugin {
 			}
 
 			if($app->system->is_group('client'.$client_id)){
-				$app->system->_exec('groupdel client'.$client_id);
+				$app->system->exec_safe('groupdel ?', 'client'.$client_id);
 				$app->log('Removed group client'.$client_id, LOGLEVEL_DEBUG);
 			}
 		}
diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php
index b843e3c8a4e45f86adedf8106207d79e1c4b586f..4d0866d1de9f283d25e23c857d6b652bf6975e15 100644
--- a/server/plugins-available/apps_vhost_plugin.inc.php
+++ b/server/plugins-available/apps_vhost_plugin.inc.php
@@ -106,6 +106,16 @@ class apps_vhost_plugin {
 				$vhost_port_listen = '#';
 			}
 			$tpl->setVar('vhost_port_listen', $vhost_port_listen);
+			
+			$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+			if($mail_config['content_filter'] == 'rspamd'){
+				$use_rspamd = true;
+				exec('/usr/sbin/a2enmod proxy');
+				exec('/usr/sbin/a2enmod proxy_http');
+			} else {
+				$use_rspamd = false;
+			}
+			$tpl->setVar('use_rspamd', $use_rspamd);
 
 			$content = $tpl->grab();
 
@@ -121,7 +131,7 @@ class apps_vhost_plugin {
 			$app->system->file_put_contents("$vhost_conf_dir/apps.vhost", $content);
 
 			// enabled / disable apps-vhost
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/000-apps.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/000-apps.vhost';
 			if(is_link($vhost_symlink) && $web_config['apps_vhost_enabled'] == 'n') {
 				$app->system->unlink($vhost_symlink);
 			}
@@ -156,11 +166,11 @@ class apps_vhost_plugin {
 				$apps_vhost_ip = $web_config['apps_vhost_ip'].':';
 			}
 
-			$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
+			$socket_dir = $web_config['php_fpm_socket_dir'];
 			if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
-			if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
+			if(!is_dir($socket_dir)) $app->system->exec_safe('mkdir -p ?', $socket_dir);
 			$fpm_socket = $socket_dir.'apps.sock';
-			$cgi_socket = escapeshellcmd($web_config['nginx_cgi_socket']);
+			$cgi_socket = $web_config['nginx_cgi_socket'];
 
 			$content = str_replace('{apps_vhost_ip}', $apps_vhost_ip, $content);
 			$content = str_replace('{apps_vhost_port}', $web_config['apps_vhost_port'], $content);
@@ -184,6 +194,14 @@ class apps_vhost_plugin {
 			$content = str_replace('{use_tcp}', $use_tcp, $content);
 			$content = str_replace('{use_socket}', $use_socket, $content);
 			
+			$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+			if($mail_config['content_filter'] == 'rspamd'){
+				$use_rspamd = '';
+			} else {
+				$use_rspamd = '#';
+			}
+			$content = str_replace('{use_rspamd}', $use_rspamd, $content);
+
 			// Fix socket path on PHP 7 systems
 			if(file_exists('/var/run/php/php7.0-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
 			if(file_exists('/var/run/php/php7.1-fpm.sock'))	$content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content);
@@ -207,7 +225,7 @@ class apps_vhost_plugin {
 			file_put_contents("$vhost_conf_dir/apps.vhost", $content);
 
 			// enabled / disable apps-vhost
-			$vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/000-apps.vhost');
+			$vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/000-apps.vhost';
 			if(is_link($vhost_symlink) && $web_config['apps_vhost_enabled'] == 'n') {
 				$app->system->unlink($vhost_symlink);
 			}
@@ -221,7 +239,3 @@ class apps_vhost_plugin {
 
 
 } // end class
-
-
-
-?>
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index 6ce8c98939ae236f0246aecd574812d1a1c32673..3308289d41dfff03564450137cced34aaedb3d8e 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -104,13 +104,13 @@ class backup_plugin {
 						// extract tar.gz archive
 						$dump_directory = str_replace(".tar.gz", "", $backup['filename']);
 						$extracted = "/usr/local/ispconfig/server/temp";
-						exec("tar -xzvf ".escapeshellarg($backup_dir.'/'.$backup['filename'])." --directory=".escapeshellarg($extracted));
+						$app->system->exec_safe("tar -xzvf ? --directory=?", $backup_dir.'/'.$backup['filename'], $extracted);
 						$restore_directory = $extracted."/".$dump_directory."/".$db_name;
 
 						// mongorestore -h 127.0.0.1 -u root -p 123456 --authenticationDatabase admin -d c1debug --drop ./toRestore
-						$command = "mongorestore -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d ".$db_name." --drop ".escapeshellarg($restore_directory);
-						exec($command);
-						exec("rm -rf ".escapeshellarg($extracted."/".$dump_directory));
+						$command = "mongorestore -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d ? --drop ?";
+						$app->system->exec_safe($command, $db_name, $restore_directory);
+						$app->system->exec_safe("rm -rf ?", $extracted."/".$dump_directory);
 					}
 
 					unset($clientdb_host);
@@ -129,8 +129,8 @@ class backup_plugin {
 						//$db_name = $parts[1];
 						preg_match('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql\.gz$@', $backup['filename'], $matches);
 						$db_name = $matches[1];
-						$command = "gunzip --stdout ".escapeshellarg($backup_dir.'/'.$backup['filename'])." | mysql -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".escapeshellarg($db_name);
-						exec($command);
+						$command = "gunzip --stdout ? | mysql -h ? -u ? -p? ?";
+						$app->system->exec_safe($command, $backup_dir.'/'.$backup['filename'], $clientdb_host, $clientdb_user, $clientdb_password, $db_name);
 					}
 					unset($clientdb_host);
 					unset($clientdb_user);
@@ -147,8 +147,8 @@ class backup_plugin {
 							copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']);
 							chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']);
 							//chown($web['document_root'].'/backup/'.$backup['filename'],$web['system_user']);
-							$command = 'sudo -u '.escapeshellarg($web['system_user']).' unzip -qq -o  '.escapeshellarg($web['document_root'].'/backup/'.$backup['filename']).' -d '.escapeshellarg($web['document_root']).' 2> /dev/null';
-							exec($command);
+							$command = 'sudo -u ? unzip -qq -o ? -d ? 2> /dev/null';
+							$app->system->exec_safe($command, $web['system_user'], $web['document_root'].'/backup/'.$backup['filename'], $web['document_root']);
 							unlink($web['document_root'].'/backup/'.$backup['filename']);
 							if(file_exists($web['document_root'].'/backup/'.$backup['filename'].'.bak')) rename($web['document_root'].'/backup/'.$backup['filename'].'.bak', $web['document_root'].'/backup/'.$backup['filename']);
 							$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
@@ -156,8 +156,8 @@ class backup_plugin {
 					}
 					if($backup['backup_mode'] == 'rootgz') {
 						if(file_exists($backup_dir.'/'.$backup['filename']) && $web['document_root'] != '' && $web['document_root'] != '/' && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-							$command = 'tar xzf '.escapeshellarg($backup_dir.'/'.$backup['filename']).' --directory '.escapeshellarg($web['document_root']);
-							exec($command);
+							$command = 'tar xzf ? --directory ?';
+							$app->system->exec_safe($command, $backup_dir.'/'.$backup['filename'], $web['document_root']);
 							$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
 						}
 					}
@@ -237,22 +237,24 @@ class backup_plugin {
 							if($mail_backup['backup_mode'] == 'userzip') {
 								copy($mail_backup_file, $record['maildir'].'/'.$mail_backup['filename']);
 								chgrp($record['maildir'].'/'.$mail_backup['filename'], $mail_config['mailuser_group']);
-								$command = 'sudo -u '.$mail_config['mailuser_name'].' unzip -qq -o  '.escapeshellarg($record['maildir'].'/'.$mail_backup['filename']).' -d '.escapeshellarg($record['maildir']).' 2> /dev/null';
-								exec($command,$tmp_output, $retval);
+								$command = 'sudo -u ? unzip -qq -o ? -d ? 2> /dev/null';
+								$app->system->exec_safe($command, $mail_config['mailuser_name'], $record['maildir'].'/'.$mail_backup['filename'], $record['maildir']);
+								$retval = $app->system->last_exec_retcode();
 								unlink($record['maildir'].'/'.$mail_backup['filename']);
-							}
-							if($mail_backup['backup_mode'] == 'rootgz') {
-								$command='tar xfz '.escapeshellarg($mail_backup_file).' --directory '.escapeshellarg($record['maildir']);
-								exec($command,$tmp_output, $retval);
+							} elseif($mail_backup['backup_mode'] == 'rootgz') {
+								$command='tar xfz ? --directory ?';
+								$app->system->exec_safe($command, $mail_backup_file, $record['maildir']);
+								$retval = $app->system->last_exec_retcode();
 							}
 							
 							if($retval == 0) {
 								// Now import backup-mailbox into special backup-folder
 								$backupname = "backup-".date("Y-m-d", $mail_backup['tstamp']);
-								exec("doveadm mailbox create -u \"".$record["email"]."\" $backupname");
-								exec("doveadm import -u \"".$record["email"]."\" mdbox:".$record['maildir']."/backup $backupname all", $tmp_output, $retval);
-								exec("for f in `doveadm mailbox list -u \"".$record["email"]."\" $backupname*`; do doveadm mailbox subscribe -u \"".$record["email"]."\" \$f; done", $tmp_output, $retval);
-								exec('rm -rf '.$record['maildir'].'/backup');
+								$app->system->exec_safe("doveadm mailbox create -u ? ?", $record["email"], $backupname);
+								$app->system->exec_safe("doveadm import -u ? mdbox:? ? all", $record["email"], $record['maildir']."/backup", $backupname);
+								$app->system->exec_safe("for f in `doveadm mailbox list -u ? ?*`; do doveadm mailbox subscribe -u ? \$f; done", $record["email"], $backupname, $record["email"]);
+								$retval = $app->system->last_exec_retcode();
+								$app->system->exec_safe('rm -rf ?', $record['maildir'].'/backup');
 							}
 							
 							if($retval == 0){
@@ -260,7 +262,7 @@ class backup_plugin {
 							} else {
 								// cleanup
 								if (file_exists($record['maildir'].'/'.$mail_backup['filename'])) unlink($record['maildir'].'/'.$mail_backup['filename']);
-								if (file_exists($record['maildir']."/backup")) exec('rm -rf '.$record['maildir']."/backup");
+								if (file_exists($record['maildir']."/backup")) $app->system->exec_safe('rm -rf ?', $record['maildir']."/backup");
 								
 								$app->log('Unable to restore Mail backup '.$mail_backup_file.' '.$tmp_output,LOGLEVEL_ERROR);
 							}
@@ -269,8 +271,10 @@ class backup_plugin {
 							if($mail_backup['backup_mode'] == 'userzip') {
 								copy($mail_backup_file, $domain_dir.'/'.$mail_backup['filename']);
 								chgrp($domain_dir.'/'.$mail_backup['filename'], $mail_config['mailuser_group']);
-								$command = 'sudo -u '.$mail_config['mailuser_name'].' unzip -qq -o  '.escapeshellarg($domain_dir.'/'.$mail_backup['filename']).' -d '.escapeshellarg($domain_dir).' 2> /dev/null';
-								exec($command,$tmp_output, $retval);
+								$command = 'sudo -u ? unzip -qq -o ? -d ? 2> /dev/null';
+								$app->system->exec_safe($command, $mail_config['mailuser_name'], $domain_dir.'/'.$mail_backup['filename'], $domain_dir);
+								$retval = $app->system->last_exec_retcode();
+								$tmp_output = $app->system->last_exec_out();
 								unlink($domain_dir.'/'.$mail_backup['filename']);
 								if($retval == 0){
 									$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
@@ -279,8 +283,10 @@ class backup_plugin {
 								}
 							}
 							if($mail_backup['backup_mode'] == 'rootgz') {
-								$command='tar xfz '.escapeshellarg($mail_backup_file).' --directory '.escapeshellarg($domain_dir);
-								exec($command,$tmp_output, $retval);
+								$command='tar xfz ? --directory ?';
+								$app->system->exec_safe($command, $mail_backup_file, $domain_dir);
+								$retval = $app->system->last_exec_retcode();
+								$tmp_output = $app->system->last_exec_out();
 								if($retval == 0){
 									$app->log('Restored Mail backup '.$mail_backup_file,LOGLEVEL_DEBUG);
 								} else {
diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index 23856f0c8661f3317f4beaa91f2fb20c92ac93c2..e8b72b5dbc8b65a612158766f34414f536d11378 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -114,9 +114,7 @@ class bind_plugin {
 		}
 		
 		//Do some magic...
-		exec('cd '.escapeshellcmd($dns_config['bind_zonefiles_dir']).';'.
-		'dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE '.escapeshellcmd($domain).';'.
-		'dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE '.escapeshellcmd($domain));
+		$app->system->exec_safe('cd ?; dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE ?; dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE ?', $dns_config['bind_zonefiles_dir'], $domain, $domain);
 
 		$this->soa_dnssec_sign($data); //Now sign the zone for the first time
 		$data['new']['dnssec_initialized']='Y';
@@ -148,8 +146,7 @@ class bind_plugin {
 		file_put_contents($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain, $zonefile);
 		
 		//Sign the zone and set it valid for max. 16 days
-		exec('cd '.escapeshellcmd($dns_config['bind_zonefiles_dir']).';'.
-			 'dnssec-signzone -A -e +1382400 -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N increment -o '.escapeshellcmd($domain).' -t '.$filespre.escapeshellcmd($domain));
+		$app->system->exec_safe('cd ?; dnssec-signzone -A -e +1382400 -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N increment -o ? -t ?', $dns_config['bind_zonefiles_dir'], $domain, $filespre.$domain);
 			 
 		//Write Data back ino DB
 		$dnssecdata = "DS-Records:\n".file_get_contents($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.');
@@ -187,8 +184,8 @@ class bind_plugin {
 		if (!$new && !file_exists($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.')) $this->soa_dnssec_create($data);
 		
 		$dbdata = $app->db->queryOneRecord('SELECT id,serial FROM dns_soa WHERE id=?', intval($data['new']['id']));
-		exec('cd '.escapeshellcmd($dns_config['bind_zonefiles_dir']).';'.
-			 'named-checkzone '.escapeshellcmd($domain).' '.escapeshellcmd($dns_config['bind_zonefiles_dir']).'/'.$filespre.escapeshellcmd($domain).' | egrep -ho \'[0-9]{10}\'', $serial, $retState);
+		$app->system->exec_safe('cd ?; named-checkzone ? ? | egrep -ho \'[0-9]{10}\'', $dns_config['bind_zonefiles_dir'], $domain, $dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain);
+		$retState = $app->system->last_exec_retcode();
 		if ($retState != 0) {
 			$app->log('DNSSEC Error: Error in Zonefile for '.$domain, LOGLEVEL_ERR);
 			return false;
@@ -236,6 +233,17 @@ class bind_plugin {
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
 
+		//* Get the bind version
+		$bind_caa = false;
+        $bind = explode("\n", shell_exec('which named bind'));
+        $bind = reset($bind);
+        if(is_executable($bind)) {
+			exec($bind . ' -v 2>&1', $tmp);
+			$bind_caa = @(version_compare($tmp[0],"BIND 9.9.6", '>='))?true:false;
+			unset($tmp);
+		}
+		unset($bind);
+
 		//* Write the domain file
 		if(!empty($data['new']['id'])) {
 			$tpl = new tpl();
@@ -253,26 +261,41 @@ class bind_plugin {
 					if($records[$i]['type'] == 'TXT' && strlen($records[$i]['data']) > 255) {
 						$records[$i]['data'] = implode('" "',str_split( $records[$i]['data'], 255));
 					}
+					//* CAA-Records - Type257 for older bind-versions
+					if($records[$i]['type'] == 'CAA' && !$bind_caa) {
+						$records[$i]['type'] = 'TYPE257';
+						$temp = explode(' ', $records[$i]['data']);
+						unset($temp[0]);
+						$records[$i]['data'] = implode(' ', $temp);
+						$data_new = str_replace(array('"', ' '), '', $records[$i]['data']);
+						$hex = unpack('H*', $data_new);
+						$hex[1] = '0005'.strtoupper($hex[1]);
+						$length = strlen($hex[1])/2;
+						$data_new = "\# $length $hex[1]";
+						$records[$i]['data'] = $data_new;
+					}
 				}
 			}
 			$tpl->setLoop('zones', $records);
 
 			//TODO : change this when distribution information has been integrated into server record
 			if (file_exists('/etc/gentoo-release')) {
-				$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
+				$filename = $dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($zone['origin'], 0, -1));
 			}
 			else {
-				$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
+				$filename = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1));
 			}
 
 			$old_zonefile = @file_get_contents($filename);
 			file_put_contents($filename, $tpl->grab());
-			chown($filename, escapeshellcmd($dns_config['bind_user']));
-			chgrp($filename, escapeshellcmd($dns_config['bind_group']));
+			chown($filename, $dns_config['bind_user']);
+			chgrp($filename, $dns_config['bind_group']);
 
 			//* Check the zonefile
 			if(is_file($filename.'.err')) unlink($filename.'.err');
-			exec('named-checkzone '.escapeshellarg($zone['origin']).' '.escapeshellarg($filename), $out, $return_status);
+			$app->system->exec_safe('named-checkzone ? ?', $zone['origin'], $filename);
+			$out = $app->system->last_exec_out();
+			$return_status = $app->system->last_exec_retcode();
 			if($return_status === 0) {
 				$app->log("Writing BIND domain file: ".$filename, LOGLEVEL_DEBUG);
 			} else {
@@ -285,8 +308,8 @@ class bind_plugin {
 				if ($old_zonefile != '') {
 					rename($filename, $filename.'.err');
 					file_put_contents($filename, $old_zonefile);
-					chown($filename, escapeshellcmd($dns_config['bind_user']));
-					chgrp($filename, escapeshellcmd($dns_config['bind_group']));
+					chown($filename, $dns_config['bind_user']);
+					chgrp($filename, $dns_config['bind_group']);
 				} else {
 					rename($filename, $filename.'.err');
 				}
@@ -368,7 +391,10 @@ class bind_plugin {
 		$app->log("Deleting BIND domain file: ".$zone_file_name, LOGLEVEL_DEBUG);
 
  		//* DNSSEC-Implementation
- 		if ($data['old']['dnssec_initialized'] == 'Y') exec('/usr/local/ispconfig/server/scripts/dnssec-delete.sh '.$data['old']['origin']); //delete keys
+ 		if($data['old']['dnssec_initialized'] == 'Y' && file_exists('/usr/local/ispconfig/server/scripts/dnssec-delete.sh')) {
+			//delete keys
+			$app->system->exec_safe('/usr/local/ispconfig/server/scripts/dnssec-delete.sh ?', $data['old']['origin']);
+		}
  		
 		//* Reload bind nameserver
 		$app->services->restartServiceDelayed('bind', 'reload');
@@ -558,11 +584,6 @@ class bind_plugin {
 				'zonefile_path' => $sec_zonefiles_path.str_replace("/", "_", substr($tmp['origin'], 0, -1)),
 				'options' => $options
 			);
-
-			//   $filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/slave/sec.'.substr($tmp['origin'],0,-1));
-			//   $app->log("Writing BIND domain file: ".$filename,LOGLEVEL_DEBUG);
-
-
 		}
 
 		$tpl_sec = new tpl();
diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php
index c652f299ebc44dd87c5cc3f1c65f118cdbebb144..0650ad87a3aefee4057d4d78d6a40214c2454852 100644
--- a/server/plugins-available/cron_jailkit_plugin.inc.php
+++ b/server/plugins-available/cron_jailkit_plugin.inc.php
@@ -103,20 +103,6 @@ class cron_jailkit_plugin {
 			if ($data['new']['type'] == "chrooted")
 			{
 				// load the server configuration options
-				/*
-				$app->uses("getconf");
-				$this->data = $data;
-				$this->app = $app;
-				$this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit');
-                $this->parent_domain = $parent_domain;
-
-				$this->_setup_jailkit_chroot();
-
-				//$command .= 'usermod -U '.escapeshellcmd($parent_domain['system_user']);
-				//exec($command);
-
-				$this->_add_jailkit_user();
-				*/
 				$app->uses("getconf");
 				$this->data = $data;
 				$this->app = $app;
@@ -130,8 +116,8 @@ class cron_jailkit_plugin {
 
 				$this->_add_jailkit_user();
 
-				$command .= 'usermod -U '.escapeshellcmd($parent_domain["system_user"]).' 2>/dev/null';
-				exec($command);
+				$command .= 'usermod -U ? 2>/dev/null';
+				$app->system->exec_safe($command, $parent_domain["system_user"]);
 
 				$this->_update_website_security_level();
 
@@ -230,14 +216,9 @@ class cron_jailkit_plugin {
 		//check if the chroot environment is created yet if not create it with a list of program sections from the config
 		if (!is_dir($this->parent_domain['document_root'].'/etc/jailkit'))
 		{
-			$command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh';
-			$command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
-			$command .= ' \''.$this->jailkit_config['jailkit_chroot_app_sections'].'\'';
-			exec($command.' 2>/dev/null');
-
-			$this->app->log("Added jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
+			$app->system->create_jailkit_chroot($this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_app_sections']);
 
-			//$this->_add_jailkit_programs(); // done later on
+			$this->app->log("Added jailkit chroot", LOGLEVEL_DEBUG);
 
 			$this->app->load('tpl');
 
@@ -248,7 +229,7 @@ class cron_jailkit_plugin {
 			$tpl->setVar('domain', $this->parent_domain['domain']);
 			$tpl->setVar('home_dir', $this->_get_home_dir(""));
 
-			$bashrc = escapeshellcmd($this->parent_domain['document_root']).'/etc/bash.bashrc';
+			$bashrc = $this->parent_domain['document_root'].'/etc/bash.bashrc';
 			if(@is_file($bashrc) || @is_link($bashrc)) unlink($bashrc);
 
 			$app->system->file_put_contents($bashrc, $tpl->grab());
@@ -261,7 +242,7 @@ class cron_jailkit_plugin {
 
 			$tpl->setVar('domain', $this->parent_domain['domain']);
 
-			$motd = escapeshellcmd($this->parent_domain['document_root']).'/var/run/motd';
+			$motd = $this->parent_domain['document_root'].'/var/run/motd';
 			if(@is_file($motd) || @is_link($motd)) unlink($motd);
 
 			$app->system->file_put_contents($motd, $tpl->grab());
@@ -275,19 +256,11 @@ class cron_jailkit_plugin {
 		global $app;
 
 		//copy over further programs and its libraries
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
-		$command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
-		$command .= ' \''.$this->jailkit_config['jailkit_chroot_app_programs'].'\'';
-		exec($command.' 2>/dev/null');
-
-		$this->app->log("Added programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
-
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
-		$command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
-		$command .= ' \''.$this->jailkit_config['jailkit_chroot_cron_programs'].'\'';
-		exec($command.' 2>/dev/null');
-
-		$this->app->log("Added cron programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
+		$app->system->create_jailkit_programs($this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_app_programs']);
+		$this->app->log("Added app programs to jailkit chroot", LOGLEVEL_DEBUG);
+		
+		$app->system->create_jailkit_programs($this->parent_domain['document_root'], $this->jailkit_config['jailkit_chroot_cron_programs']);
+		$this->app->log("Added cron programs to jailkit chroot", LOGLEVEL_DEBUG);
 	}
 
 	function _add_jailkit_user()
@@ -298,30 +271,23 @@ class cron_jailkit_plugin {
 		$jailkit_chroot_userhome = $this->_get_home_dir($this->parent_domain['system_user']);
 
 		if(!is_dir($this->parent_domain['document_root'].'/etc')) mkdir($this->parent_domain['document_root'].'/etc');
-		if(!is_file($this->parent_domain['document_root'].'/etc/passwd')) exec('touch '.$this->parent_domain['document_root'].'/etc/passwd');
+		if(!is_file($this->parent_domain['document_root'].'/etc/passwd')) $app->system->exec_safe('touch ?', $this->parent_domain['document_root'].'/etc/passwd');
 
 		// IMPORTANT!
 		// ALWAYS create the user. Even if the user was created before
 		// if we check if the user exists, then a update (no shell -> jailkit) will not work
 		// and the user has FULL ACCESS to the root of the server!
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_user.sh';
-		$command .= ' '.escapeshellcmd($this->parent_domain['system_user']);
-		$command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
-		$command .= ' '.$jailkit_chroot_userhome;
-		$command .= ' '.escapeshellcmd("/bin/bash");
-		exec($command.' 2>/dev/null');
-
-		$this->app->log("Added jailkit user to chroot with command: ".$command, LOGLEVEL_DEBUG);
+		$app->system->create_jailkit_user($this->parent_domain['system_user'], $this->parent_domain['document_root'], $jailkit_chroot_userhome);
 
-		$app->system->mkdir(escapeshellcmd($this->parent_domain['document_root'].$jailkit_chroot_userhome), 0755, true);
-		$app->system->chown(escapeshellcmd($this->parent_domain['document_root'].$jailkit_chroot_userhome), escapeshellcmd($this->parent_domain['system_user']));
-		$app->system->chgrp(escapeshellcmd($this->parent_domain['document_root'].$jailkit_chroot_userhome), escapeshellcmd($this->parent_domain['system_group']));
+		$app->system->mkdir($this->parent_domain['document_root'].$jailkit_chroot_userhome, 0755, true);
+		$app->system->chown($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_user']);
+		$app->system->chgrp($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_group']);
 
 	}
 
 	function _get_home_dir($username)
 	{
-		return str_replace("[username]", escapeshellcmd($username), $this->jailkit_config["jailkit_chroot_home"]);
+		return str_replace("[username]", $username, $this->jailkit_config["jailkit_chroot_home"]);
 	}
 
 	//* Update the website root directory permissions depending on the security level
@@ -345,15 +311,5 @@ class cron_jailkit_plugin {
 		}
 	}
 
-	//* Wrapper for exec function for easier debugging
-	private function _exec($command) {
-		global $app;
-		$app->log('exec: '.$command, LOGLEVEL_DEBUG);
-		exec($command);
-	}
-
-
-
 } // end class
 
-?>
diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index fb623b9213e436a916ab4c3ebc2ce59efe839417..af4e24d97429faf08e2acea80fb57eb21ab88583 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -112,15 +112,15 @@ class cron_plugin {
 		// Create group and user, if not exist
 		$app->uses("system");
 
-		$groupname = escapeshellcmd($parent_domain["system_group"]);
+		$groupname = $parent_domain["system_group"];
 		if($parent_domain["system_group"] != '' && !$app->system->is_group($parent_domain["system_group"])) {
-			exec("groupadd $groupname");
+			$app->system->exec_safe("groupadd ?", $groupname);
 			$app->log("Adding the group: $groupname", LOGLEVEL_DEBUG);
 		}
 
-		$username = escapeshellcmd($parent_domain["system_user"]);
+		$username = $parent_domain["system_user"];
 		if($parent_domain["system_user"] != '' && !$app->system->is_user($parent_domain["system_user"])) {
-			exec("useradd -d ".escapeshellcmd($parent_domain["document_root"])." -g $groupname $username -s /bin/false");
+			$app->system->exec_safe("useradd -d ? -g ? ? -s /bin/false", $parent_domain["document_root"], $groupname, $username);
 			$app->log("Adding the user: $username", LOGLEVEL_DEBUG);
 		}
         
@@ -136,19 +136,19 @@ class cron_plugin {
             }
 
             // get the primitive folder for document_root and the filesystem, will need it later.
-            $df_output=explode(" ", exec("df -T " . escapeshellarg($parent_domain["document_root"]) . "|awk 'END{print \$2,\$NF}'"));
+            $df_output=explode(" ", $app->system->exec_safe("df -T ?|awk 'END{print \$2,\$NF}'", $parent_domain["document_root"]));
             $file_system = $df_output[0];
             $primitive_root = $df_output[1];
 
             if ( in_array($file_system , array('ext2','ext3','ext4'),true) ) {
-              exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
-              exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
+              $app->system->exec_safe('setquota -u ? ? ? 0 0 -a &> /dev/null', $username, $blocks_soft, $blocks_hard);
+              $app->system->exec_safe('setquota -T -u ? 604800 604800 -a &> /dev/null', $username);
             } elseif ($file_system == 'xfs') {
                 
-              exec("xfs_quota -x -c 'limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " $username' $primitive_root");
+              $app->system->exec_safe("xfs_quota -x -c ? ?", "limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " $username", $primitive_root);
 
               // xfs only supports timers globally, not per user.
-              exec("xfs_quota -x -c 'timer -bir -i 604800' $primitive_root");
+              $app->system->exec_safe("xfs_quota -x -c 'timer -bir -i 604800' ?", $primitive_root);
 
               unset($project_uid, $username_position, $xfs_projects);
               unset($primitive_root, $df_output, $mb_hard, $mb_soft);
@@ -164,7 +164,7 @@ class cron_plugin {
 		}
 
 		// make temp directory writable for the apache and website users
-		$app->system->chmod(escapeshellcmd($parent_domain["document_root"].'/tmp'), 0777);
+		$app->system->chmod($parent_domain["document_root"].'/tmp', 0777);
 
 		/** TODO READ CRON MASTER **/
 
@@ -272,7 +272,7 @@ class cron_plugin {
 			}
 		}
 
-		$cron_file = escapeshellcmd($cron_config["crontab_dir"].'/ispc_'.$this->parent_domain["system_user"]);
+		$cron_file = $cron_config["crontab_dir"].'/ispc_'.$this->parent_domain["system_user"];
 		//TODO : change this when distribution information has been integrated into server record
 		//* Gentoo vixie-cron requires files to end with .cron in the cron.d directory
 		if (file_exists('/etc/gentoo-release')) {
@@ -287,7 +287,7 @@ class cron_plugin {
 			$app->log("Deleted Cron file $cron_file", LOGLEVEL_DEBUG);
 		}
 
-		$cron_file = escapeshellcmd($cron_config["crontab_dir"].'/ispc_chrooted_'.$this->parent_domain["system_user"]);
+		$cron_file = $cron_config["crontab_dir"].'/ispc_chrooted_'.$this->parent_domain["system_user"];
 		if($chr_cmd_count > 0) {
 			$app->system->file_put_contents($cron_file, $chr_cron_content);
 			$app->log("Wrote Cron file $cron_file with content:\n$chr_cron_content", LOGLEVEL_DEBUG);
diff --git a/server/plugins-available/firewall_plugin.inc.php b/server/plugins-available/firewall_plugin.inc.php
index 67ed2379fbbe554b595efceef048c761cbff2667..b924f43a2620a35813aebee9a3bb5a082f99daab 100644
--- a/server/plugins-available/firewall_plugin.inc.php
+++ b/server/plugins-available/firewall_plugin.inc.php
@@ -145,7 +145,7 @@ class firewall_plugin {
 		//* add tcp ports
 		foreach($tcp_ports_new_array as $port) {
 			if(!in_array($port, $tcp_ports_old_array) && $port > 0) {
-				exec('ufw allow '.$port.'/tcp');
+				$app->system->exec_safe('ufw allow ?', $port.'/tcp');
 				$app->log('ufw allow '.$port.'/tcp', LOGLEVEL_DEBUG);
 				sleep(1);
 			}
@@ -154,7 +154,7 @@ class firewall_plugin {
 		//* remove tcp ports
 		foreach($tcp_ports_old_array as $port) {
 			if(!in_array($port, $tcp_ports_new_array) && $port > 0) {
-				exec('ufw delete allow '.$port.'/tcp');
+				$app->system->exec_safe('ufw delete allow ?', $port.'/tcp');
 				$app->log('ufw delete allow '.$port.'/tcp', LOGLEVEL_DEBUG);
 				sleep(1);
 			}
@@ -163,7 +163,7 @@ class firewall_plugin {
 		//* add udp ports
 		foreach($udp_ports_new_array as $port) {
 			if(!in_array($port, $udp_ports_old_array) && $port > 0) {
-				exec('ufw allow '.$port.'/udp');
+				$app->system->exec_safe('ufw allow ?', $port.'/udp');
 				$app->log('ufw allow '.$port.'/udp', LOGLEVEL_DEBUG);
 				sleep(1);
 			}
@@ -172,32 +172,12 @@ class firewall_plugin {
 		//* remove udp ports
 		foreach($udp_ports_old_array as $port) {
 			if(!in_array($port, $udp_ports_new_array) && $port > 0) {
-				exec('ufw delete allow '.$port.'/udp');
+				$app->system->exec_safe('ufw delete allow ?', $port.'/udp');
 				$app->log('ufw delete allow '.$port.'/udp', LOGLEVEL_DEBUG);
 				sleep(1);
 			}
 		}
 
-		/*
-		if($tcp_ports_new != $tcp_ports_old) {
-			exec('ufw allow to any proto tcp port '.$tcp_ports_new);
-			$app->log('ufw allow to any proto tcp port '.$tcp_ports_new,LOGLEVEL_DEBUG);
-			if($event_name == 'firewall_update') {
-				exec('ufw delete allow to any proto tcp port '.$tcp_ports_old);
-				$app->log('ufw delete allow to any proto tcp port '.$tcp_ports_old,LOGLEVEL_DEBUG);
-			}
-		}
-
-		if($udp_ports_new != $udp_ports_old) {
-			exec('ufw allow to any proto udp port '.$udp_ports_new);
-			$app->log('ufw allow to any proto udp port '.$udp_ports_new,LOGLEVEL_DEBUG);
-			if($event_name == 'firewall_update') {
-				exec('ufw delete allow to any proto udp port '.$udp_ports_old);
-				$app->log('ufw delete allow to any proto udp port '.$udp_ports_old,LOGLEVEL_DEBUG);
-			}
-		}
-		*/
-
 		if($data['new']['active'] == 'y') {
 			if($data['new']['active'] == $data['old']['active']) {
 				exec('ufw reload');
diff --git a/server/plugins-available/ftpuser_base_plugin.inc.php b/server/plugins-available/ftpuser_base_plugin.inc.php
index af5870a4bae04662b065666b4aad77ae99db4479..c34371a18121a3b2502036213a28d7810a38140b 100644
--- a/server/plugins-available/ftpuser_base_plugin.inc.php
+++ b/server/plugins-available/ftpuser_base_plugin.inc.php
@@ -83,8 +83,7 @@ class ftpuser_base_plugin {
 			}
 
 			$app->system->web_folder_protection($web['document_root'], false);
-			exec('mkdir -p '.escapeshellcmd($data['new']['dir']));
-			exec('chown '.escapeshellcmd($web["system_user"]).':'.escapeshellcmd($web['system_group']).' '.$data['new']['dir']);
+			$app->system->mkdirpath($data['new']['dir'], 0755, $web["system_user"], $web["system_group"]);
 			$app->system->web_folder_protection($web['document_root'], true);
 
 			$app->log("Added ftpuser_dir: ".$data['new']['dir'], LOGLEVEL_DEBUG);
@@ -109,8 +108,7 @@ class ftpuser_base_plugin {
 			}
 
 			$app->system->web_folder_protection($web['document_root'], false);
-			exec('mkdir -p '.escapeshellcmd($data['new']['dir']));
-			exec('chown '.escapeshellcmd($web["system_user"]).':'.escapeshellcmd($web['system_group']).' '.$data['new']['dir']);
+			$app->system->mkdirpath($data['new']['dir'], 0755, $web["system_user"], $web["system_group"]);
 			$app->system->web_folder_protection($web['document_root'], true);
 			
 			
diff --git a/server/plugins-available/getmail_plugin.inc.php b/server/plugins-available/getmail_plugin.inc.php
index 5b1edfbab97c6c44f9040005d4c2881ec546e867..c3f4f7e1dcd48f210bcf935398f9960cb28fe80f 100644
--- a/server/plugins-available/getmail_plugin.inc.php
+++ b/server/plugins-available/getmail_plugin.inc.php
@@ -76,6 +76,9 @@ class getmail_plugin {
 
 	function update($event_name, $data) {
 		global $app, $conf;
+		
+		// Do not write getmail config files on mirror servers to avoid double fetching of emails.
+		if($conf['mirror_server_id'] > 0) return true;
 
 		// load the server specific configuration options for getmail
 		$app->uses("getconf");
@@ -91,7 +94,7 @@ class getmail_plugin {
 			$this->delete($event_name, $data);
 
 			// Get the new config file path
-			$config_file_path = escapeshellcmd($this->getmail_config_dir.'/'.$this->_clean_path($data["new"]["source_server"]).'_'.$this->_clean_path($data["new"]["source_username"]).'.conf');
+			$config_file_path = $this->getmail_config_dir.'/'.$this->_clean_path($data["new"]["source_server"]).'_'.$this->_clean_path($data["new"]["source_username"]).'.conf';
 			if(stristr($config_file_path, "..") or stristr($config_file_path, "|") or stristr($config_file_path, ";") or stristr($config_file_path, '$')) {
 				$app->log("Possibly faked path for getmail config file: '$config_file_path'. File is not written.", LOGLEVEL_ERROR);
 				return false;
@@ -159,7 +162,7 @@ class getmail_plugin {
 		$getmail_config = $app->getconf->get_server_config($conf["server_id"], 'getmail');
 		$this->getmail_config_dir = $getmail_config["getmail_config_dir"];
 
-		$config_file_path = escapeshellcmd($this->getmail_config_dir.'/'.$this->_clean_path($data["old"]["source_server"]).'_'.$this->_clean_path($data["old"]["source_username"]).'.conf');
+		$config_file_path = $this->getmail_config_dir.'/'.$this->_clean_path($data["old"]["source_server"]).'_'.$this->_clean_path($data["old"]["source_username"]).'.conf';
 		if(stristr($config_file_path, "..") || stristr($config_file_path, "|") || stristr($config_file_path, ";") || stristr($config_file_path, '$')) {
 			$app->log("Possibly faked path for getmail config file: '$config_file_path'. File is not written.", LOGLEVEL_ERROR);
 			return false;
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 8275696620fbe1612aa78c816f9a9deaf1f11c7d..4d5ac826d3780f4d264f07c0060a9f0ffe13bd56 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -125,23 +125,22 @@ class mail_plugin {
 		$group = $app->system->getgroup($data['new']['gid']);
 		//* Create the mail domain directory, if it does not exist
 		if(!empty($base_path) && !is_dir($base_path)) {
-			//exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']);
 			$app->system->mkdirpath($base_path, 0770, $mail_config['mailuser_name'], $mail_config['mailuser_group']); // needs group-access because users of subfolders may differ from vmail
 			$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
 		}
 
 		if ($data['new']['maildir_format'] == 'mdbox') {
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" INBOX'");
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Sent'");
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Trash'");
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Junk'");
-			exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Drafts'");
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? INBOX'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Sent'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]);
 			
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" INBOX'");
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Sent'");
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Trash'");
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Junk'");
-			exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Drafts'");
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Junk'", $data["new"]["email"]);
+			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Drafts'", $data["new"]["email"]);
 		}
 		else {
 			// Dovecot uses a different mail layout with a separate 'Maildir' subdirectory.
@@ -154,53 +153,44 @@ class mail_plugin {
 			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
 				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
-				exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
-				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+				$app->system->exec_safe("su -c ? vmail", "mv -f " . $data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']);
+				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN);
 			}
 	
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!empty($maildomain_path) && !is_dir($maildomain_path)) {
 	
-				//exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
 				$app->system->maildirmake($maildomain_path, $user, '', $group);
 	
 				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
 				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
-					if(is_dir($maildomain_path)) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user); // Avoid maildirmake quota bug, see debian bug #214911
-					$app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user, LOGLEVEL_DEBUG);
+					if(is_dir($maildomain_path)) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$maildomain_path, $user); // Avoid maildirmake quota bug, see debian bug #214911
+					$app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$maildomain_path."' ".$user, LOGLEVEL_DEBUG);
 				}
 			}
 	
 			if(!is_dir($data['new']['maildir'].'/.Sent')) {
-				//exec("su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Sent: '."su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Drafts')) {
-				//exec("su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Drafts: '."su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Drafts', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Trash')) {
-				//exec("su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Trash: '."su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Trash', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Junk')) {
-				//exec("su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Junk: '."su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
 			}
 	
 			// Set permissions now recursive
-			exec('chown -R '.$user.':'.$group.' '.escapeshellcmd($data['new']['maildir']));
-			$app->log('Set ownership on '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_DEBUG);
+			$app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']);
+			$app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 	
 			//* Set the maildir quota
 			if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
 				if($data['new']['quota'] > 0) {
-					if(is_dir($data['new']['maildir'])) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user);
-					$app->log('Set Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user, LOGLEVEL_DEBUG);
+					if(is_dir($data['new']['maildir'])) $app->system->exec_safe("su -c ? ? ", "maildirmake -q ".$data['new']['quota']."S ". $data['new']['maildir'], $user);
+					$app->log('Set Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$data['new']['maildir']."' ".$user, LOGLEVEL_DEBUG);
 				}
 			}
 		}
@@ -269,19 +259,6 @@ class mail_plugin {
 		$app->uses('getconf,system');
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 
-		// convert to lower case - it could cause problems if some directory above has upper case name
-		// $data['new']['maildir'] = strtolower($data['new']['maildir']);
-
-		// Create the maildir, if it does not exist
-		/*
-		if(!is_dir($data['new']['maildir'])) {
-			mkdir(escapeshellcmd($data['new']['maildir']), 0, true);
-			chown(escapeshellcmd($data['new']['maildir']), $mail_config['mailuser_name']);
-			chgrp(escapeshellcmd($data['new']['maildir']), $mail_config['mailuser_group']);
-			$app->log('Created Maildir: '.$data['new']['maildir'],LOGLEVEL_DEBUG);
-		}
-		*/
-
 		// Maildir-Format must not be changed on this way !!
 		$data['new']['maildir_format'] = $data['old']['maildir_format'];
 		
@@ -324,7 +301,6 @@ class mail_plugin {
 
 		//* Create the mail domain directory, if it does not exist
 		if(!empty($base_path) && !is_dir($base_path)) {
-			//exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']);
 			$app->system->mkdirpath($base_path, 0770, $mail_config['mailuser_name'], $mail_config['mailuser_group']); // needs group-access because users of subfolders may differ from vmail
 			$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
 		}
@@ -333,29 +309,26 @@ class mail_plugin {
 			// Move mailbox, if domain has changed and delete old mailbox
 			if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
 				if(is_dir($data['new']['maildir'])) {
-					exec("rm -fr ".escapeshellcmd($data['new']['maildir']));
+					$app->system->exec_safe("rm -fr ?", $data['new']['maildir']);
 					//rmdir($data['new']['maildir']);
 				}
-				exec('mv -f '.escapeshellcmd($data['old']['maildir']).' '.escapeshellcmd($data['new']['maildir']));
-				// exec('mv -f '.escapeshellcmd($data['old']['maildir']).'/* '.escapeshellcmd($data['new']['maildir']));
-				// if(is_file($data['old']['maildir'].'.ispconfig_mailsize'))exec('mv -f '.escapeshellcmd($data['old']['maildir']).'.ispconfig_mailsize '.escapeshellcmd($data['new']['maildir']));
-				// rmdir($data['old']['maildir']);
+				$app->system->exec_safe('mv -f ? ?'. $data['old']['maildir'], $data['new']['maildir']);
 				$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 			}
 				
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!is_dir($data['new']['maildir'].'/mdbox')) {
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" INBOX'");
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Sent'");
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Trash'");
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Junk'");
-				exec("su -c 'doveadm mailbox create -u \"".$data["new"]["email"]."\" Drafts'");
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? INBOX'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Sent'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]);
 					
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" INBOX'");
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Sent'");
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Trash'");
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Junk'");
-				exec("su -c 'doveadm mailbox subscribe -u \"".$data["new"]["email"]."\" Drafts'");
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Junk'", $data["new"]["email"]);
+				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Drafts'", $data["new"]["email"]);
 			}
 		}
 		else {
@@ -369,21 +342,19 @@ class mail_plugin {
 			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
 				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
-				exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
-				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+				$app->system->exec_safe("su -c ? ?", "mv -f ".$data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 'vmail');
+				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN);
 			}
 	
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!empty($maildomain_path) && !is_dir($maildomain_path.'/new')) {
-				//exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log("Created Maildir "."su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, '', $group);
 	
 				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
 				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
 					if($data['new']['quota'] > 0) {
-						if(is_dir($maildomain_path)) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user); // Avoid maildirmake quota bug, see debian bug #214911
-						$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$user, LOGLEVEL_DEBUG);
+						if(is_dir($maildomain_path)) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$maildomain_path, $user); // Avoid maildirmake quota bug, see debian bug #214911
+						$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$maildomain_path."' ".$user, LOGLEVEL_DEBUG);
 					} else {
 						if(file_exists($data['new']['maildir'].'/maildirsize')) unlink($data['new']['maildir'].'/maildirsize');
 						$app->log('Set Maildir quota to unlimited.', LOGLEVEL_DEBUG);
@@ -392,48 +363,36 @@ class mail_plugin {
 			}
 	
 			if(!is_dir($data['new']['maildir'].'/.Sent')) {
-				//exec("su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Sent: '."su -c 'maildirmake -f Sent ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Drafts')) {
-				//exec("su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Drafts: '."su -c 'maildirmake -f Drafts ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Drafts', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Trash')) {
-				//exec("su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Trash: '."su -c 'maildirmake -f Trash ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Trash', $group);
 			}
 			if(!is_dir($data['new']['maildir'].'/.Junk')) {
-				//exec("su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
-				//$app->log('Created submaildir Junk: '."su -c 'maildirmake -f Junk ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
 				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
 			}
 	
 			// Set permissions now recursive
-			exec('chown -R '.$user.':'.$group.' '.escapeshellcmd($data['new']['maildir']));
-			$app->log('Set ownership on '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_DEBUG);
+			$app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']);
+			$app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 	
 			// Move mailbox, if domain has changed and delete old mailbox
 			if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
 				if(is_dir($data['new']['maildir'])) {
-					exec("rm -fr ".escapeshellcmd($data['new']['maildir']));
-					//rmdir($data['new']['maildir']);
+					$app->system->exec_safe("rm -fr ?", $data['new']['maildir']);
 				}
-				exec('mv -f '.escapeshellcmd($data['old']['maildir']).' '.escapeshellcmd($data['new']['maildir']));
-				// exec('mv -f '.escapeshellcmd($data['old']['maildir']).'/* '.escapeshellcmd($data['new']['maildir']));
-				// if(is_file($data['old']['maildir'].'.ispconfig_mailsize'))exec('mv -f '.escapeshellcmd($data['old']['maildir']).'.ispconfig_mailsize '.escapeshellcmd($data['new']['maildir']));
-				// rmdir($data['old']['maildir']);
+				$app->system->exec_safe('mv -f ? ?', $data['old']['maildir'], $data['new']['maildir']);
 				$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 			}
 			//This is to fix the maildrop quota not being rebuilt after the quota is changed.
 			// Courier Layout
 			if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
 				if($data['new']['quota'] > 0) {
-					if(is_dir($data['new']['maildir'])) exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user);
-					$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$user, LOGLEVEL_DEBUG);
+					if(is_dir($data['new']['maildir'])) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$data['new']['maildir'], $user);
+					$app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$data['new']['maildir']."' ".$user, LOGLEVEL_DEBUG);
 				} else {
 					if(file_exists($data['new']['maildir'].'/maildirsize')) unlink($data['new']['maildir'].'/maildirsize');
 					$app->log('Set Maildir quota to unlimited.', LOGLEVEL_DEBUG);
@@ -450,9 +409,9 @@ class mail_plugin {
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 
 		$maildir_path_deleted = false;
-		$old_maildir_path = escapeshellcmd($data['old']['maildir']);
+		$old_maildir_path = $data['old']['maildir'];
 		if($old_maildir_path != $mail_config['homedir_path'] && strlen($old_maildir_path) > strlen($mail_config['homedir_path']) && !stristr($old_maildir_path, '//') && !stristr($old_maildir_path, '..') && !stristr($old_maildir_path, '*') && strlen($old_maildir_path) >= 10) {
-			exec('rm -rf '.escapeshellcmd($old_maildir_path));
+			$app->system->exec_safe('rm -rf ?', $old_maildir_path);
 			$app->log('Deleted the Maildir: '.$data['old']['maildir'], LOGLEVEL_DEBUG);
 			$maildir_path_deleted = true;
 		} else {
@@ -474,7 +433,7 @@ class mail_plugin {
 				if (is_array($domain_rec)) {
 					$mail_backup_dir = $backup_dir.'/mail'.$domain_rec['domain_id'];
 					$mail_backup_files = 'mail'.$data['old']['mailuser_id'];
-					exec(escapeshellcmd('rm -f '.$mail_backup_dir.'/'.$mail_backup_files).'*');
+					$app->system->exec_safe('rm -f ?*', $mail_backup_dir.'/'.$mail_backup_files);
 					//* cleanup database
 					$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ? AND mailuser_id = ?";
 					$app->db->query($sql, $conf['server_id'], $domain_rec['domain_id'], $data['old']['mailuser_id']);
@@ -494,9 +453,9 @@ class mail_plugin {
 
 		$maildomain_path_deleted = false;
 		//* Delete maildomain path
-		$old_maildomain_path = escapeshellcmd($mail_config['homedir_path'].'/'.$data['old']['domain']);
+		$old_maildomain_path = $mail_config['homedir_path'].'/'.$data['old']['domain'];
 		if($old_maildomain_path != $mail_config['homedir_path'] && !stristr($old_maildomain_path, '//') && !stristr($old_maildomain_path, '..') && !stristr($old_maildomain_path, '*') && !stristr($old_maildomain_path, '&') && strlen($old_maildomain_path) >= 10  && !empty($data['old']['domain'])) {
-			exec('rm -rf '.escapeshellcmd($old_maildomain_path));
+			$app->system->exec_safe('rm -rf ?', $old_maildomain_path);
 			$app->log('Deleted the mail domain directory: '.$old_maildomain_path, LOGLEVEL_DEBUG);
 			$maildomain_path_deleted = true;
 		} else {
@@ -504,9 +463,9 @@ class mail_plugin {
 		}
 
 		//* Delete mailfilter path
-		$old_maildomain_path = escapeshellcmd($mail_config['homedir_path'].'/mailfilters/'.$data['old']['domain']);
+		$old_maildomain_path = $mail_config['homedir_path'].'/mailfilters/'.$data['old']['domain'];
 		if($old_maildomain_path != $mail_config['homedir_path'].'/mailfilters/' && !stristr($old_maildomain_path, '//') && !stristr($old_maildomain_path, '..') && !stristr($old_maildomain_path, '*') && !stristr($old_maildomain_path, '&') && strlen($old_maildomain_path) >= 10 && !empty($data['old']['domain'])) {
-			exec('rm -rf '.escapeshellcmd($old_maildomain_path));
+			$app->system->exec_safe('rm -rf ?', $old_maildomain_path);
 			$app->log('Deleted the mail domain mailfilter directory: '.$old_maildomain_path, LOGLEVEL_DEBUG);
 		} else {
 			$app->log('Possible security violation when deleting the mail domain mailfilter directory: '.$old_maildomain_path, LOGLEVEL_ERROR);
@@ -521,7 +480,7 @@ class mail_plugin {
 			if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $mount_backup = false;
 			if($mount_backup){
 				$mail_backup_dir = $backup_dir.'/mail'.$data['old']['domain_id'];
-				exec(escapeshellcmd('rm -rf '.$mail_backup_dir));
+				$app->system->exec_safe('rm -rf ?', $mail_backup_dir);
 				//* cleanup database
 				$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ?";
 				$app->db->query($sql, $conf['server_id'], $data['old']['domain_id']);
diff --git a/server/plugins-available/mail_plugin_dkim.inc.php b/server/plugins-available/mail_plugin_dkim.inc.php
index 6f042e9070c0a53be51d99e7f7029a3558e5e332..b937f82275192fbcef06f19e2e9f14eebb79a240 100755
--- a/server/plugins-available/mail_plugin_dkim.inc.php
+++ b/server/plugins-available/mail_plugin_dkim.inc.php
@@ -29,6 +29,7 @@
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
  @author Florian Schaal, info@schaal-24.de
+ @author Marius Burkard, m.burkard@ispconfig.org (modified for rspamd)
  @copyright Florian Schaal, info@schaal-24.de
  */
 
@@ -59,8 +60,8 @@ class mail_plugin_dkim {
 	/**
 	 * This function is called when the plugin is loaded
 	 */
-	function onLoad() {
-		global $app, $conf;
+	public function onLoad() {
+		global $app;
 		/*
 		Register for the events
 		*/
@@ -73,7 +74,7 @@ class mail_plugin_dkim {
 	 * This function gets the amavisd-config file
 	 * @return string path to the amavisd-config for dkim-keys
 	 */
-	function get_amavis_config() {
+	private function get_amavis_config() {
 		$pos_config=array(
 			'/etc/amavisd.conf/50-user',
 			'/etc/amavis/conf.d/50-user',
@@ -101,42 +102,59 @@ class mail_plugin_dkim {
 	 * @param array $data mail-settings
 	 * @return boolean - true when the amavis-config and the dkim-dir are writeable
 	 */
-	function check_system($data) {
-		global $app, $mail_config;
+	private function check_system() {
+		global $app, $conf, $mail_config;
 
 		$app->uses('getconf');
-		$check=true;
+		$check = true;
 
-		/* check for amavis-config */
-		$amavis_configfile = $this->get_amavis_config();
-
-		//* Create the file if it does not exists.
-		if (substr_compare($amavis_configfile, '60-dkim', -7) === 0 && !file_exists($amavis_configfile))
-			$app->system->touch($amavis_configfile);
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		if($mail_config['content_filter'] != 'rspamd') {
+			/* check for amavis-config */
+			$amavis_configfile = $this->get_amavis_config();
 
-		if ( $amavis_configfile == '' || !is_writeable($amavis_configfile) ) {
-			$app->log('Amavis-config not found or not writeable.', LOGLEVEL_ERROR);
-			$check=false;
+			//* Create the file if it does not exists.
+			if (substr_compare($amavis_configfile, '60-dkim', -7) === 0 && !file_exists($amavis_configfile)) {
+				$app->system->touch($amavis_configfile);
+			}
+			
+			if ( $amavis_configfile == '' || !is_writeable($amavis_configfile) ) {
+				$app->log('Amavis-config not found or not writeable.', LOGLEVEL_ERROR);
+				$check = false;
+			}
 		}
 
 		/* dir for dkim-keys writeable? */
-		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 		if (isset($mail_config['dkim_path']) && !empty($mail_config['dkim_path']) && $mail_config['dkim_path'] != '/') {
             if (!is_dir($mail_config['dkim_path'])) {
                 $app->log('DKIM Path '.$mail_config['dkim_path'].' not found - (re)created.', LOGLEVEL_DEBUG);
 				if($app->system->is_user('amavis')) { 
 					$amavis_user='amavis'; 
+				} elseif($app->system->is_user('_rspamd')) {
+					$amavis_user = '_rspamd';
+				} elseif($app->system->is_user('rspamd')) {
+					$amavis_user = 'rspamd';
 				} elseif ($app->system->is_user('vscan')) { 
-					$amavis_user='vscan'; 
+					$amavis_user = 'vscan'; 
+				} else { 
+					$amavis_user = ''; 
 				}
-				else { 
-					$amavis_user=''; 
+				if($app->system->is_user('amavis')) { 
+					$amavis_group='amavis'; 
+				} elseif($app->system->is_user('_rspamd')) {
+					$amavis_group = '_rspamd';
+				} elseif($app->system->is_user('rspamd')) {
+					$amavis_group = 'rspamd';
+				} elseif ($app->system->is_user('vscan')) { 
+					$amavis_group = 'vscan'; 
+				} else { 
+					$amavis_group = ''; 
 				}
+				
 				if(!empty($amavis_user)) {
-					mkdir($mail_config['dkim_path'], 0750, true);
-					$app->system->chown($mail_config['dkim_path'], $amavis_user);
+					$app->system->mkdirpath($mail_config['dkim_path'], 0750, $amavis_user, $amavis_group);
 				} else {
-					mkdir($mail_config['dkim_path'], 0755, true);
+					$app->system->mkdirpath($mail_config['dkim_path'], 0755);
 					$app->log('No user amavis or vscan found - using root for '.$mail_config['dkim_path'], LOGLEVEL_WARNING);
 				}
             } else {
@@ -166,12 +184,15 @@ class mail_plugin_dkim {
 	/**
 	 * This function restarts amavis
 	 */
-    function restart_amavis() {
+    private function restart_amavis() {
         global $app;
+		$output = null;
 		$initcommand = $app->system->getinitcommand(array('amavis', 'amavisd'), 'restart');
 		$app->log('Restarting amavis: '.$initcommand.'.', LOGLEVEL_DEBUG);
 		exec($initcommand, $output);
-		foreach($output as $logline) $app->log($logline, LOGLEVEL_DEBUG);
+		foreach($output as $logline) {
+			$app->log($logline, LOGLEVEL_DEBUG);
+		}
     }
 
 	/**
@@ -181,8 +202,8 @@ class mail_plugin_dkim {
 	 * @param string $key_domain mail-domain
 	 * @return bool - true when the private key was written to disk
 	 */
-	function write_dkim_key($key_file, $key_value, $key_domain) {
-		global $app, $mailconfig;
+	private function write_dkim_key($key_file, $key_value, $key_domain) {
+		global $app;
 		$success=false;
 		if ($key_file == '' || $key_value  == '' || $key_domain == '') {
 			$app->log('DKIM internal error for domain '.$key_domain, LOGLEVEL_ERROR);
@@ -191,14 +212,21 @@ class mail_plugin_dkim {
 		if ( $app->system->file_put_contents($key_file.'.private', $key_value) ) {
 			$app->log('Saved DKIM Private-key to '.$key_file.'.private', LOGLEVEL_DEBUG);
 			$success=true;
+			$pubkey = null;
+			$result = 0;
 			/* now we get the DKIM Public-key */
-			exec('cat '.escapeshellarg($key_file.'.private').'|openssl rsa -pubout 2> /dev/null', $pubkey, $result);
+			$app->system->exec_safe('cat ?|openssl rsa -pubout 2> /dev/null', $key_file.'.private');
+			$pubkey = $app->system->last_exec_out();
 			$public_key='';
-			foreach($pubkey as $values) $public_key=$public_key.$values."\n";
+			foreach($pubkey as $values) {
+				$public_key = $public_key . $values . "\n";
+			}
 			/* save the DKIM Public-key in dkim-dir */
-			if ( $app->system->file_put_contents($key_file.'.public', $public_key) )
+			if($app->system->file_put_contents($key_file.'.public', $public_key)) {
 				$app->log('Saved DKIM Public to '.$key_domain.'.', LOGLEVEL_DEBUG);
-			else $app->log('Unable to save DKIM Public to '.$key_domain.'.', LOGLEVEL_DEBUG);
+			} else {
+				$app->log('Unable to save DKIM Public to '.$key_domain.'.', LOGLEVEL_DEBUG);
+			}
 		} else {
 			$app->log('Unable to save DKIM Private-key to '.$key_file.'.private', LOGLEVEL_ERROR);
 		}
@@ -210,26 +238,32 @@ class mail_plugin_dkim {
 	 * @param string $key_file full path to the key-file
 	 * @param string $key_domain mail-domain
 	 */
-	function remove_dkim_key($key_file, $key_domain) {
+	private function remove_dkim_key($key_file, $key_domain) {
 		global $app;
 		if (file_exists($key_file.'.private')) {
 			$app->system->unlink($key_file.'.private');
 			$app->log('Deleted the DKIM Private-key for '.$key_domain.'.', LOGLEVEL_DEBUG);
-		} else $app->log('Unable to delete the DKIM Private-key for '.$key_domain.' (not found).', LOGLEVEL_DEBUG);
+		} else {
+			$app->log('Unable to delete the DKIM Private-key for '.$key_domain.' (not found).', LOGLEVEL_DEBUG);
+		}
 		if (file_exists($key_file.'.public')) {
 			$app->system->unlink($key_file.'.public');
 			$app->log('Deleted the DKIM Public-key for '.$key_domain.'.', LOGLEVEL_DEBUG);
-		} else $app->log('Unable to delete the DKIM Public-key for '.$key_domain.' (not found).', LOGLEVEL_DEBUG);
+		} else {
+			$app->log('Unable to delete the DKIM Public-key for '.$key_domain.' (not found).', LOGLEVEL_DEBUG);
+		}
 	}
 
 	/**
 	 * This function adds the entry to the amavisd-config
 	 * @param string $key_domain mail-domain
 	 */
-	function add_to_amavis($key_domain, $selector, $old_selector) {
+	private function add_to_amavis($key_domain, $selector, $old_selector) {
 		global $app, $mail_config;
 
-		if (empty($selector)) $selector = 'default';
+		if (empty($selector)) {
+			$selector = 'default';
+		}
 		$restart = false;
 		$amavis_configfile = $this->get_amavis_config();
 
@@ -267,7 +301,7 @@ class mail_plugin_dkim {
 	 * This function removes the entry from the amavisd-config
 	 * @param string $key_domain mail-domain
 	 */
-	function remove_from_amavis($key_domain) {
+	private function remove_from_amavis($key_domain) {
 		global $app;
 
 		$restart = false;
@@ -305,14 +339,20 @@ class mail_plugin_dkim {
 	 * This function controlls new key-files and amavisd-entries
 	 * @param array $data mail-settings
 	 */
-	function add_dkim($data) {
-		global $app;
+	private function add_dkim($data) {
+		global $app, $conf;
 		if ($data['new']['active'] == 'y') {
 			$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-			if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' )
+			if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
 				$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+			}
 			if ($this->write_dkim_key($mail_config['dkim_path']."/".$data['new']['domain'], $data['new']['dkim_private'], $data['new']['domain'])) {
-				if ($this->add_to_amavis($data['new']['domain'], $data['new']['dkim_selector'], $data['old']['dkim_selector'] )) {
+				if($mail_config['content_filter'] == 'rspamd') {
+					$app->system->replaceLine('/etc/rspamd/local.d/dkim_domains.map', 'REGEX:/^' . preg_quote($data['new']['domain'], '/') . ' /', $data['new']['domain'] . ' ' . $mail_config['dkim_path']."/".$data['new']['domain'] . '.private');
+					$app->system->replaceLine('/etc/rspamd/local.d/dkim_selectors.map', 'REGEX:/^' . preg_quote($data['new']['domain'], '/') . ' /', $data['new']['domain'] . ' ' . $data['new']['dkim_selector']);
+					
+					$app->services->restartServiceDelayed('rspamd', 'reload');
+				} elseif ($this->add_to_amavis($data['new']['domain'], $data['new']['dkim_selector'], $data['old']['dkim_selector'] )) {
 					$this->restart_amavis();
 				} else {
 					$this->remove_dkim_key($mail_config['dkim_path']."/".$data['new']['domain'], $data['new']['domain']);
@@ -326,86 +366,91 @@ class mail_plugin_dkim {
 	/**
 	 * This function controlls the removement of keyfiles (public and private)
 	 * and the entry in the amavisd-config
-	 * @param array $data mail-settings
+	 * @param array $_data mail-settings
 	 */
-	function remove_dkim($_data) {
-		global $app;
+	private function remove_dkim($_data) {
+		global $app, $conf;
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
-		if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' )
+		if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
 			$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+		}
 		$this->remove_dkim_key($mail_config['dkim_path']."/".$_data['domain'], $_data['domain']);
-		if ($this->remove_from_amavis($_data['domain']))
+		
+		if($mail_config['content_filter'] == 'rspamd') {
+			$app->system->removeLine('/etc/rspamd/local.d/dkim_domains.map', 'REGEX:/^' . preg_quote($_data['domain'], '/') . ' /');
+			$app->system->removeLine('/etc/rspamd/local.d/dkim_selectors.map', 'REGEX:/^' . preg_quote($_data['domain'], '/') . ' /');
+			$app->services->restartServiceDelayed('rspamd', 'reload');
+		} elseif ($this->remove_from_amavis($_data['domain'])) {
 			$this->restart_amavis();
+		}
 	}
 
 	/**
 	 * Function called by onLoad
 	 * deletes dkim-keys
 	 */
-	function domain_dkim_delete($event_name, $data) {
-		if (isset($data['old']['dkim']) && $data['old']['dkim'] == 'y' && $data['old']['active'] == 'y')
+	public function domain_dkim_delete($event_name, $data) {
+		if (isset($data['old']['dkim']) && $data['old']['dkim'] == 'y' && $data['old']['active'] == 'y') {
 			$this->remove_dkim($data['old']);
+		}
 	}
 
 	/**
 	 * Function called by onLoad
 	 * insert dkim-keys
 	 */
-	function domain_dkim_insert($event_name, $data) {
-		if (isset($data['new']['dkim']) && $data['new']['dkim']=='y' && $this->check_system($data))
+	public function domain_dkim_insert($event_name, $data) {
+		if (isset($data['new']['dkim']) && $data['new']['dkim']=='y' && $this->check_system()) {
 			$this->add_dkim($data);
+		}
 	}
 
 	/**
 	 * Function called by onLoad
 	 * chang dkim-settings
 	 */
-	function domain_dkim_update($event_name, $data) {
+	public function domain_dkim_update($event_name, $data) {
 		global $app;
 		if($data['new']['dkim'] == 'y' || $data['old']['dkim'] == 'y'){
-			if ($this->check_system($data)) {
+			if ($this->check_system()) {
 				/* maildomain disabled */
 				if ($data['new']['active'] == 'n' && $data['old']['active'] == 'y' && $data['new']['dkim']=='y') {
 					$app->log('Maildomain '.$data['new']['domain'].' disabled - remove DKIM-settings', LOGLEVEL_DEBUG);
 					$this->remove_dkim($data['new']);
 				}
 				/* maildomain re-enabled */
-				if ($data['new']['active'] == 'y' && $data['old']['active'] == 'n' && $data['new']['dkim']=='y') 
+				if ($data['new']['active'] == 'y' && $data['old']['active'] == 'n' && $data['new']['dkim']=='y') {
 					$this->add_dkim($data);
-
+				}
+				
 				/* maildomain active - only dkim changes */
 				if ($data['new']['active'] == 'y' && $data['old']['active'] == 'y') {
 					/* dkim disabled */
 					if ($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'n') {
 						$this->remove_dkim($data['new']);
 					}
-					/* dkim enabled */
-					elseif ($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'y') {
-						$this->add_dkim($data);
-					}
-					/* new private-key */
-					if ($data['new']['dkim_private'] != $data['old']['dkim_private'] && $data['new']['dkim'] == 'y') {
-						$this->add_dkim($data);
-					}
-					/* new selector */
-					if ($data['new']['dkim_selector'] != $data['old']['dkim_selector'] && $data['new']['dkim'] == 'y') {
+					/* dkim enabled
+					 * or new private-key
+					 * or new selector
+					 * or new domain-name
+					 */
+					elseif (
+							($data['new']['dkim'] != $data['old']['dkim'] && $data['new']['dkim'] == 'y')
+							|| ($data['new']['dkim_private'] != $data['old']['dkim_private'] && $data['new']['dkim'] == 'y')
+							|| ($data['new']['dkim_selector'] != $data['old']['dkim_selector'] && $data['new']['dkim'] == 'y')
+							|| ($data['new']['domain'] != $data['old']['domain'])
+							) {
+						if ($data['new']['domain'] != $data['old']['domain']) {
+							$this->remove_dkim($data['old']);
+						}
 						$this->add_dkim($data);
 					}
-					/* new domain-name */
-					if ($data['new']['domain'] != $data['old']['domain']) {
-						$this->remove_dkim($data['old']);
+					/* resync */
+					elseif($data['new'] == $data['old'] && $data['new']['dkim']=='y') {
 						$this->add_dkim($data);
 					}
 				}
-
-				/* resync */
-				if ($data['new']['active'] == 'y' && $data['new'] == $data['old'] && $data['new']['dkim']=='y') {
-					$this->add_dkim($data);
-				}
 			}
 		}
 	}
-
 }
-
-?>
diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php
index 99ac9db7d23d8add4c1a0f5d94f447c265e282b9..e6251aedf10637a4891900f3ec2c9e13455660b9 100644
--- a/server/plugins-available/mailman_plugin.inc.php
+++ b/server/plugins-available/mailman_plugin.inc.php
@@ -73,7 +73,7 @@ class mailman_plugin {
 
 		$this->update_config();
 
-		$pid = exec("nohup /usr/lib/mailman/bin/newlist -u ".escapeshellcmd($data["new"]["domain"])." -e ".escapeshellcmd($data["new"]["domain"])." ".escapeshellcmd($data["new"]["listname"])." ".escapeshellcmd($data["new"]["email"])." ".escapeshellcmd($data["new"]["password"])." >/dev/null 2>&1 & echo $!;");
+		$pid = $app->system->exec_safe("nohup /usr/lib/mailman/bin/newlist -u ? -e ? ? ? ? >/dev/null 2>&1 & echo $!;", $data["new"]["domain"], $data["new"]["domain"], $data["new"]["listname"], $data["new"]["email"], $data["new"]["password"]);
 		// wait for /usr/lib/mailman/bin/newlist-call
 		$running = true;
 		do {
@@ -91,7 +91,7 @@ class mailman_plugin {
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 		
 		// Fix list URL
-		exec('/usr/sbin/withlist -l -r fix_url '.escapeshellcmd($data["new"]["listname"]));
+		$app->system->exec_safe('/usr/sbin/withlist -l -r fix_url ?', $data["new"]["listname"]);
 
 		$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']);
 
@@ -104,7 +104,7 @@ class mailman_plugin {
 		$this->update_config();
 
 		if($data["new"]["password"] != $data["old"]["password"] && $data["new"]["password"] != '') {
-			exec("nohup /usr/lib/mailman/bin/change_pw -l ".escapeshellcmd($data["new"]["listname"])." -p ".escapeshellcmd($data["new"]["password"])." >/dev/null 2>&1 &");
+			$app->system->exec_safe("nohup /usr/lib/mailman/bin/change_pw -l ? -p ? >/dev/null 2>&1 &", $data["new"]["listname"], $data["new"]["password"]);
 			exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 			$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']);
 		}
@@ -118,7 +118,7 @@ class mailman_plugin {
 
 		$this->update_config();
 
-		exec("nohup /usr/lib/mailman/bin/rmlist -a ".escapeshellcmd($data["old"]["listname"])." >/dev/null 2>&1 &");
+		$app->system->exec_safe("nohup /usr/lib/mailman/bin/rmlist -a ? >/dev/null 2>&1 &", $data["old"]["listname"]);
 
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 		
diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index efe7142c8d68e953942839652b98cb90d5665a92..a26129eed96e1b8e9499c61efa7ecb831da5114d 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -344,15 +344,15 @@ class mysql_clientdb_plugin {
 							$triggers_array[] = $row;
 						}
 						$app->log('Dumping triggers from '.$old_name, LOGLEVEL_DEBUG);
-						$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".$old_name." -d -t -R -E > ".$timestamp.$old_name.'.triggers';
-						exec($command, $out, $ret);
+						$command = "mysqldump -h ? -u ? -p? ? -d -t -R -E > ?";
+						$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $old_name, $timestamp.$old_name.'.triggers');
+						$ret = $app->system->last_exec_retcode();
 						$app->system->chmod($timestamp.$old_name.'.triggers', 0600);
 						if ($ret != 0) {
 							unset($triggers_array);
 							$app->system->unlink($timestamp.$old_name.'.triggers');
 							$app->log('Unable to dump triggers from '.$old_name, LOGLEVEL_ERROR);
 						}
-						unset($out);
 					}
 
 					//* save views
@@ -366,15 +366,15 @@ class mysql_clientdb_plugin {
 						}
 						$app->log('Dumping views from '.$old_name, LOGLEVEL_DEBUG);
 						$temp_views = implode(' ', $temp);
-						$command = "mysqldump -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".$old_name." ".$temp_views." > ".$timestamp.$old_name.'.views';
-						exec($command, $out, $ret);
+						$command = "mysqldump -h ? -u ? -p? ? ? > ?";
+						$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $old_name, $temp_views, $timestamp.$old_name.'.views');
+						$ret = $app->system->last_exec_retcode();
 						$app->system->chmod($timestamp.$old_name.'.views', 0600);
 						if ($ret != 0) {
 							unset($views_array);
 							$app->system->unlink($timestamp.$old_name.'.views');
 							$app->log('Unable to dump views from '.$old_name, LOGLEVEL_ERROR);
 						}
-						unset($out);
 						unset($temp);
 						unset($temp_views);
 					}
@@ -405,8 +405,9 @@ class mysql_clientdb_plugin {
 								unset($_trigger);
 							}
 							//* update triggers, routines and events
-							$command = "mysql -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".$new_name." < ".$timestamp.$old_name.'.triggers';
-							exec($command, $out, $ret);
+							$command = "mysql -h ? -u ? -p? ? < ?";
+							$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $new_name, $timestamp.$old_name.'.triggers');
+							$ret = $app->system->last_exec_retcode();
 							if ($ret != 0) {
 								$app->log('Unable to import triggers for '.$new_name, LOGLEVEL_ERROR);
 							} else {
@@ -416,8 +417,9 @@ class mysql_clientdb_plugin {
 
 						//* loading views
 						if (@is_array($views_array)) {
-							$command = "mysql -h ".escapeshellarg($clientdb_host)." -u ".escapeshellarg($clientdb_user)." -p".escapeshellarg($clientdb_password)." ".$new_name." < ".$timestamp.$old_name.'.views';
-							exec($command, $out, $ret);
+							$command = "mysql -h ? -u ? -p? ? < ?";
+							$app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $new_name, $timestamp.$old_name.'.views');
+							$ret = $app->system->last_exec_retcode();
 							if ($ret != 0) {
 								$app->log('Unable to import views for '.$new_name, LOGLEVEL_ERROR);
 							} else {
diff --git a/server/plugins-available/network_settings_plugin.inc.php b/server/plugins-available/network_settings_plugin.inc.php
index 5ce6f934b810c64148b997690f57fc4263b41f9c..1ed12f3a1c5a87bcc792f64274a332e6dd08b14f 100644
--- a/server/plugins-available/network_settings_plugin.inc.php
+++ b/server/plugins-available/network_settings_plugin.inc.php
@@ -280,8 +280,8 @@ class network_settings_plugin {
 				
 				//* Executing the postconf commands
 				foreach($postconf_commands as $cmd) {
-					$command = "postconf -e '$cmd'";
-					exec($command);
+					$command = "postconf -e ?";
+					$app->system->exec_safe($command, $cmd);
 				}
 				
 				$app->log('Changed changed myhostname and mydestination in postfix main.cf to '.$new_hostname, LOGLEVEL_DEBUG);
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 4df2f843171754d3ce5206187e5300d1ab20f0ea..a8a3c3bf16be22f3e737ef8bfb6adf9ef32d2572 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -105,7 +105,6 @@ class nginx_plugin {
 		//* Only vhosts can have a ssl cert
 		if($data["new"]["type"] != "vhost" && $data["new"]["type"] != "vhostsubdomain" && $data["new"]["type"] != "vhostalias") return;
 
-		// if(!is_dir($data['new']['document_root'].'/ssl')) exec('mkdir -p '.$data['new']['document_root'].'/ssl');
 		if(!is_dir($data['new']['document_root'].'/ssl') && !is_dir($data['old']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
 
 		$ssl_dir = $data['new']['document_root'].'/ssl';
@@ -170,36 +169,36 @@ class nginx_plugin {
 			$ssl_cnf_file = $ssl_dir.'/openssl.conf';
 			$app->system->file_put_contents($ssl_cnf_file, $ssl_cnf);
 
-			$rand_file = escapeshellcmd($rand_file);
-			$key_file2 = escapeshellcmd($key_file2);
+			$rand_file = $rand_file;
+			$key_file2 = $key_file2;
 			$openssl_cmd_key_file2 = $key_file2;
 			if(substr($domain, 0, 2) == '*.' && strpos($key_file2, '/ssl/\*.') !== false) $key_file2 = str_replace('/ssl/\*.', '/ssl/*.', $key_file2); // wildcard certificate
-			$key_file = escapeshellcmd($key_file);
+			$key_file = $key_file;
 			$openssl_cmd_key_file = $key_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($key_file, '/ssl/\*.') !== false) $key_file = str_replace('/ssl/\*.', '/ssl/*.', $key_file); // wildcard certificate
 			$ssl_days = 3650;
-			$csr_file = escapeshellcmd($csr_file);
+			$csr_file = $csr_file;
 			$openssl_cmd_csr_file = $csr_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($csr_file, '/ssl/\*.') !== false) $csr_file = str_replace('/ssl/\*.', '/ssl/*.', $csr_file); // wildcard certificate
-			$config_file = escapeshellcmd($ssl_cnf_file);
-			$crt_file = escapeshellcmd($crt_file);
+			$config_file = $ssl_cnf_file;
+			$crt_file = $crt_file;
 			$openssl_cmd_crt_file = $crt_file;
 			if(substr($domain, 0, 2) == '*.' && strpos($crt_file, '/ssl/\*.') !== false) $crt_file = str_replace('/ssl/\*.', '/ssl/*.', $crt_file); // wildcard certificate
 
 			if(is_file($ssl_cnf_file) && !is_link($ssl_cnf_file)) {
 
-				exec("openssl genrsa -des3 -rand $rand_file -passout pass:$ssl_password -out $openssl_cmd_key_file2 2048");
-				exec("openssl req -new -sha256 -passin pass:$ssl_password -passout pass:$ssl_password -key $openssl_cmd_key_file2 -out $openssl_cmd_csr_file -days $ssl_days -config $config_file");
-				exec("openssl rsa -passin pass:$ssl_password -in $openssl_cmd_key_file2 -out $openssl_cmd_key_file");
+				$app->system->exec_safe("openssl genrsa -des3 -rand ? -passout pass:? -out ? 2048", $rand_file, $ssl_password, $openssl_cmd_key_file2);
+				$app->system->exec_safe("openssl req -new -sha256 -passin pass:? -passout pass:? -key ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $ssl_days, $config_file);
+				$app->system->exec_safe("openssl rsa -passin pass:? -in ? -out ?", $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_key_file);
 
 				if(file_exists($web_config['CA_path'].'/openssl.cnf'))
 				{
-					exec("openssl ca -batch -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file");
+					$app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file);
 					$app->log("Creating CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 					if (filesize($crt_file)==0 || !file_exists($crt_file)) $app->log("CA-Certificate signing failed.  openssl ca -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file", LOGLEVEL_ERROR);
 				};
 				if (@filesize($crt_file)==0 || !file_exists($crt_file)){
-					exec("openssl req -x509 -passin pass:$ssl_password -passout pass:$ssl_password -key $openssl_cmd_key_file2 -in $openssl_cmd_csr_file -out $openssl_cmd_crt_file -days $ssl_days -config $config_file ");
+					$app->system->exec_safe("openssl req -x509 -passin pass:? -passout pass:? -key ? -in ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $openssl_cmd_crt_file, $ssl_days, $config_file);
 					$app->log("Creating self-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 				};
 
@@ -240,7 +239,8 @@ class nginx_plugin {
 		if($data["new"]["ssl_action"] == 'save') {
 			$tmp = array();
 			$crt_data = '';
-			exec('openssl x509 -noout -text -in '.escapeshellarg($crt_file),$tmp);
+			$app->system->exec_safe('openssl x509 -noout -text -in ?', $crt_file);
+			$tmp = $app->system->last_exec_out();
 			$crt_data = implode("\n",$tmp);
 			if(stristr($crt_data,'.acme.invalid')) {
 				$data["new"]["ssl_action"] = '';
@@ -303,7 +303,7 @@ class nginx_plugin {
 		if($data['new']['ssl_action'] == 'del') {
 			if(file_exists($web_config['CA_path'].'/openssl.cnf') && !is_link($web_config['CA_path'].'/openssl.cnf'))
 			{
-				exec("openssl ca -batch -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -revoke ".escapeshellcmd($crt_file));
+				$app->system->exec_safe("openssl ca -batch -config ? -passin pass:? -revoke ?", $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $crt_file);
 				$app->log("Revoking CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG);
 			};
 			$app->system->unlink($csr_file);
@@ -439,31 +439,31 @@ class nginx_plugin {
 
 			//* Check if a ispconfigend user and group exists and create them
 			if(!$app->system->is_group('ispconfigend')) {
-				exec('groupadd --gid '.($connect_userid_to_webid_start + 10000).' ispconfigend');
+				$app->system->exec_safe('groupadd --gid ? ispconfigend', $connect_userid_to_webid_start + 10000);
 			}
 			if(!$app->system->is_user('ispconfigend')) {
-				exec('useradd -g ispconfigend -d /usr/local/ispconfig --uid '.($connect_userid_to_webid_start + 10000).' ispconfigend');
+				$app->system->exec_safe('useradd -g ispconfigend -d /usr/local/ispconfig --uid ? ispconfigend', $connect_userid_to_webid_start + 10000);
 			}
 		} else {
 			$fixed_uid_param = '';
 			$fixed_gid_param = '';
 		}
 
-		$groupname = escapeshellcmd($data['new']['system_group']);
+		$groupname = $data['new']['system_group'];
 		if($data['new']['system_group'] != '' && !$app->system->is_group($data['new']['system_group'])) {
-			exec('groupadd '.$fixed_gid_param.' '.$groupname);
-			if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' groupadd '.$groupname);
+			$app->system->exec_safe('groupadd ' . $fixed_gid_param . ' ?', $groupname);
+			if($nginx_chrooted) $app->system->exec_safe('chroot ? groupadd ?', $web_config['website_basedir'], $groupname);
 			$app->log('Adding the group: '.$groupname, LOGLEVEL_DEBUG);
 		}
 
-		$username = escapeshellcmd($data['new']['system_user']);
+		$username = $data['new']['system_user'];
 		if($data['new']['system_user'] != '' && !$app->system->is_user($data['new']['system_user'])) {
 			if($web_config['add_web_users_to_sshusers_group'] == 'y') {
-				exec('useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param -G sshusers $username -s /bin/false");
-				if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param -G sshusers $username -s /bin/false");
+				$app->system->exec_safe('useradd -d ? -g ? ' . $fixed_uid_param . ' -G sshusers ? -s /bin/false', $data['new']['document_root'], $groupname, $username);
+				if($nginx_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ' . $fixed_uid_param . ' -G sshusers ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $username);
 			} else {
-				exec('useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param $username -s /bin/false");
-				if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' useradd -d '.escapeshellcmd($data['new']['document_root'])." -g $groupname $fixed_uid_param $username -s /bin/false");
+				$app->system->exec_safe('useradd -d ? -g ? ' . $fixed_uid_param . ' ? -s /bin/false', $data['new']['document_root'], $groupname, $username);
+				if($nginx_chrooted) $app->system->exec_safe('chroot ? useradd -d ? -g ? ' . $fixed_uid_param . ' ? -s /bin/false', $web_config['website_basedir'], $data['new']['document_root'], $groupname, $username);
 			}
 			$app->log('Adding the user: '.$username, LOGLEVEL_DEBUG);
 		}
@@ -486,7 +486,7 @@ class nginx_plugin {
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// create the symlinks, if not exist
 					if(is_link($tmp_symlink)) {
-						exec('rm -f '.escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe('rm -f ?', $tmp_symlink);
 						$app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG);
 					}
 				}
@@ -510,12 +510,12 @@ class nginx_plugin {
 				}
 				
 				//* Unmount the old log directory bfore we move the log dir
-				exec('umount '.escapeshellcmd($old_dir.'/log'));
+				$app->system->exec_safe('umount ?', $old_dir.'/log');
 
 				//* Create new base directory, if it does not exist yet
 				if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
 				$app->system->web_folder_protection($data['old']['document_root'], false);
-				exec('mv '.escapeshellarg($data['old']['document_root']).' '.escapeshellarg($new_dir));
+				$app->system->exec_safe('mv ? ?', $data['old']['document_root'], $new_dir);
 				//$app->system->rename($data['old']['document_root'],$new_dir);
 				$app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir, LOGLEVEL_DEBUG);
 
@@ -523,17 +523,17 @@ class nginx_plugin {
 				$data['new']['php_open_basedir'] = str_replace($data['old']['document_root'], $data['new']['document_root'], $data['old']['php_open_basedir']);
 
 				//* Change the owner of the website files to the new website owner
-				exec('chown --recursive --from='.escapeshellcmd($data['old']['system_user']).':'.escapeshellcmd($data['old']['system_group']).' '.escapeshellcmd($data['new']['system_user']).':'.escapeshellcmd($data['new']['system_group']).' '.$new_dir);
+				$app->system->exec_safe('chown --recursive --from=?:? ?:? ?', $data['old']['system_user'], $data['old']['system_group'], $data['new']['system_user'], $data['new']['system_group'], $new_dir);
 
 				//* Change the home directory and group of the website user
-				$command = 'killall -u '.escapeshellcmd($data['new']['system_user']).' ; usermod';
-				$command .= ' --home '.escapeshellcmd($data['new']['document_root']);
-				$command .= ' --gid '.escapeshellcmd($data['new']['system_group']);
-				$command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null';
-				exec($command);
+				$command = 'killall -u ? ; usermod';
+				$command .= ' --home ?';
+				$command .= ' --gid ?';
+				$command .= ' ? 2>/dev/null';
+				$app->system->exec_safe($command, $data['new']['system_user'], $data['new']['document_root'], $data['new']['system_group'], $data['new']['system_user']);
 			}
 
-			if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+			if($nginx_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 			//* Change the log mount
 			/*
@@ -555,7 +555,7 @@ class nginx_plugin {
 				$app->system->replaceLine('/etc/fstab', $fstab_line_old, $fstab_line, 0, 1);
 			}
 			
-			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
+			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 
 		}
 
@@ -567,11 +567,9 @@ class nginx_plugin {
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/error') and $data['new']['errordocs']) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/error');
 		if($data['new']['stats_type'] != '' && !is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/stats');
-		//if(!is_dir($data['new']['document_root'].'/'.$log_folder)) exec('mkdir -p '.$data['new']['document_root'].'/'.$log_folder);
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
 		if(!is_dir($data['new']['document_root'].'/cgi-bin')) $app->system->mkdirpath($data['new']['document_root'].'/cgi-bin');
 		if(!is_dir($data['new']['document_root'].'/tmp')) $app->system->mkdirpath($data['new']['document_root'].'/tmp');
-		//if(!is_dir($data['new']['document_root'].'/webdav')) $app->system->mkdirpath($data['new']['document_root'].'/webdav');
 		
 		if(!is_dir($data['new']['document_root'].'/.ssh')) {
 			$app->system->mkdirpath($data['new']['document_root'].'/.ssh');
@@ -591,7 +589,7 @@ class nginx_plugin {
 
 		// Remove the symlink for the site, if site is renamed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) exec('rm -rf /var/log/ispconfig/httpd/'.$data['old']['domain']);
+			if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) $app->system->exec_safe('rm -rf ?', '/var/log/ispconfig/httpd/'.$data['old']['domain']);
 			if(is_link($data['old']['document_root'].'/'.$old_log_folder)) $app->system->unlink($data['old']['document_root'].'/'.$old_log_folder);
 
 			//* remove old log mount
@@ -599,19 +597,18 @@ class nginx_plugin {
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 
 			//* Unmount log directory
-			//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
-			exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder));
+			$app->system->exec_safe('umount ?', $data['old']['document_root'].'/'.$old_log_folder);
 		}
 
 		//* Create the log dir if nescessary and mount it
 		if(!is_dir($data['new']['document_root'].'/'.$log_folder) || !is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain']) || is_link($data['new']['document_root'].'/'.$log_folder)) {
 			if(is_link($data['new']['document_root'].'/'.$log_folder)) unlink($data['new']['document_root'].'/'.$log_folder);
-			if(!is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain'])) exec('mkdir -p /var/log/ispconfig/httpd/'.$data['new']['domain']);
+			if(!is_dir('/var/log/ispconfig/httpd/'.$data['new']['domain'])) $app->system->exec_safe('mkdir -p ?', '/var/log/ispconfig/httpd/'.$data['new']['domain']);
 			$app->system->mkdirpath($data['new']['document_root'].'/'.$log_folder);
 			$app->system->chown($data['new']['document_root'].'/'.$log_folder, 'root');
 			$app->system->chgrp($data['new']['document_root'].'/'.$log_folder, 'root');
 			$app->system->chmod($data['new']['document_root'].'/'.$log_folder, 0755);
-			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
+			$app->system->exec_safe('mount --bind ? ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'], $data['new']['document_root'].'/'.$log_folder);
 			//* add mountpoint to fstab
 			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nobootwait';
 			$fstab_line .= @($web_config['network_filesystem'] == 'y')?',_netdev    0 0':'    0 0';
@@ -636,7 +633,7 @@ class nginx_plugin {
 					if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
 					// remove the symlinks, if not exist
 					if(is_link($tmp_symlink)) {
-						exec('rm -f '.escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe('rm -f ?', $tmp_symlink);
 						$app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG);
 					}
 				}
@@ -657,11 +654,10 @@ class nginx_plugin {
 				}
 				// create the symlinks, if not exist
 				if(!is_link($tmp_symlink)) {
-					//     exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
 					if ($web_config["website_symlinks_rel"] == 'y') {
-						$app->system->create_relative_link(escapeshellcmd($data["new"]["document_root"]), escapeshellcmd($tmp_symlink));
+						$app->system->create_relative_link($data["new"]["document_root"], $tmp_symlink);
 					} else {
-						exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
+						$app->system->exec_safe("ln -s ? ?", $data["new"]["document_root"]."/", $tmp_symlink);
 					}
 
 					$app->log('Creating symlink: ln -s '.$data['new']['document_root'].'/ '.$tmp_symlink, LOGLEVEL_DEBUG);
@@ -681,69 +677,65 @@ class nginx_plugin {
 
 			// Copy the error pages
 			if($data['new']['errordocs']) {
-				$error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/';
-				if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-					exec('cp ' . $conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+				$error_page_path = $data['new']['document_root'].'/' . $web_folder . '/error/';
+				if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2))) {
+					$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 				}
 				else {
 					if (file_exists($conf['rootpath'] . '/conf-custom/error/400.html')) {
-						exec('cp '. $conf['rootpath'] . '/conf-custom/error/*.html '.$error_page_path);
+						$app->system->exec_safe('cp ?*.html ?', $conf['rootpath'] . '/conf-custom/error/', $error_page_path);
 					}
 					else {
-						exec('cp ' . $conf['rootpath'] . '/conf/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+						$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 					}
 				}
-				exec('chmod -R a+r '.$error_page_path);
+				$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
 			}
 			
 			//* Copy the web skeleton files only when there is no index.ph or index.html file yet
 			if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php')) {
-				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-					if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2).' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+				if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2))) {
+					if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html');
 
 					if(is_file($conf['rootpath'] . '/conf-custom/index/favicon.ico')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/favicon.ico')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/favicon.ico '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/');
 					}
 					if(is_file($conf['rootpath'] . '/conf-custom/index/robots.txt')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/robots.txt')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/robots.txt '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/');
 					}
-					//if(is_file($conf['rootpath'] . '/conf-custom/index/.htaccess')) {
-					//	exec('cp ' . $conf['rootpath'] . '/conf-custom/index/.htaccess '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
-					//}
 				} else {
 					if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html')) {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf-custom/index/standard_index.html '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html', $data['new']['document_root'].'/' . $web_folder . '/index.html');
 					} else {
-						if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html')) exec('cp ' . $conf['rootpath'] . '/conf/index/standard_index.html_'.substr(escapeshellcmd($conf['language']), 0, 2).' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/index.html');
+						if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html');
 						if(is_file($conf['rootpath'] . '/conf/index/favicon.ico')){
-							if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/favicon.ico')) exec('cp ' . $conf['rootpath'] . '/conf/index/favicon.ico '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+							if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/');
 						}
 						if(is_file($conf['rootpath'] . '/conf/index/robots.txt')){
-							if(!file_exists(escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/robots.txt')) exec('cp ' . $conf['rootpath'] . '/conf/index/robots.txt '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+							if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/');
 						}
-						//if(is_file($conf['rootpath'] . '/conf/index/.htaccess')) exec('cp ' . $conf['rootpath'] . '/conf/index/.htaccess '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
 					}
 				}
 			}
-			exec('chmod -R a+r '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/');
+			$app->system->exec_safe('chmod -R a+r ?', $data['new']['document_root'].'/' . $web_folder . '/');
 
 			//** Copy the error documents on update when the error document checkbox has been activated and was deactivated before
 		} elseif ($this->action == 'update' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') && $data['old']['errordocs'] == 0 && $data['new']['errordocs'] == 1) {
 
-			$error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/';
-			if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) {
-				exec('cp ' . $conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+			$error_page_path = $data['new']['document_root'].'/' . $web_folder . '/error/';
+			if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2))) {
+				$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf-custom/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 			}
 			else {
 				if (file_exists($conf['rootpath'] . '/conf-custom/error/400.html')) {
-					exec('cp ' . $conf['rootpath'] . '/conf-custom/error/*.html '.$error_page_path);
+					$app->system->exec_safe('cp ?*.html ?', $conf['rootpath'] . '/conf-custom/error/', $error_page_path);
 				}
 				else {
-					exec('cp ' . $conf['rootpath'] . '/conf/error/'.substr(escapeshellcmd($conf['language']), 0, 2).'/* '.$error_page_path);
+					$app->system->exec_safe('cp ?* ?', $conf['rootpath'] . '/conf/error/'.substr($conf['language'], 0, 2).'/', $error_page_path);
 				}
 			}
-			exec('chmod -R a+r '.$error_page_path);
-			exec('chown -R '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.$error_page_path);
+			$app->system->exec_safe('chmod -R a+r ?', $error_page_path);
+			$app->system->exec_safe('chown -R ?:? ?', $data['new']['system_user'], $data['new']['system_group'], $error_page_path);
 		}  // end copy error docs
 
 		// Set the quota for the user, but only for vhosts, not vhostsubdomains or vhostalias
@@ -758,39 +750,39 @@ class nginx_plugin {
 			}
 
 			// get the primitive folder for document_root and the filesystem, will need it later.
-			$df_output=explode(" ", exec("df -T " . escapeshellarg($data['new']['document_root']) . "|awk 'END{print \$2,\$NF}'"));
+			$df_output=explode(" ", $app->system->exec_safe("df -T ?|awk 'END{print \$2,\$NF}'", $data['new']['document_root']));
 			$file_system = $df_output[0];
 			$primitive_root = $df_output[1];
 
 			if($file_system == 'xfs') {
-				exec("xfs_quota -x -c " . escapeshellarg("limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " " . $username) . " " . escapeshellarg($primitive_root));
+				$app->system->exec_safe("xfs_quota -x -c ? ?", "limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " " . $username, $primitive_root);
 
 				// xfs only supports timers globally, not per user.
-				exec("xfs_quota -x -c 'timer -bir -i 604800' " . escapeshellarg($primitive_root));
+				$app->system->exec_safe("xfs_quota -x -c 'timer -bir -i 604800' ?", $primitive_root);
 
 				unset($project_uid, $username_position, $xfs_projects);
 				unset($primitive_root, $df_output, $mb_hard, $mb_soft);
 			} else {
 				if($app->system->is_installed('setquota')) {
-					exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
-					exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
+					$app->system->exec_safe('setquota -u ? ? ? 0 0 -a &> /dev/null', $username, $blocks_soft, $blocks_hard);
+					$app->system->exec_safe('setquota -T -u ? 604800 604800 -a &> /dev/null', $username);
 				}
 			}
 		}
 
 		if($this->action == 'insert' || $data["new"]["system_user"] != $data["old"]["system_user"]) {
 			// Chown and chmod the directories below the document root
-			$app->system->_exec('chown -R '.$username.':'.$groupname.' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder);
 			// The document root itself has to be owned by root in normal level and by the web owner in security level 20
 			if($web_config['security_level'] == 20) {
-				$app->system->_exec('chown '.$username.':'.$groupname.' '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+				$app->system->exec_safe('chown ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder);
 			} else {
-				$app->system->_exec('chown root:root '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder);
+				$app->system->exec_safe('chown root:root ?', $data['new']['document_root'].'/' . $web_folder);
 			}
 		}
 
 		//* add the nginx user to the client group if this is a vhost and security level is set to high, no matter if this is an insert or update and regardless of set_folder_permissions_on_update
-		if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, escapeshellcmd($web_config['nginx_user']));
+		if($data['new']['type'] == 'vhost' && $web_config['security_level'] == 20) $app->system->add_user_to_group($groupname, $web_config['nginx_user']);
 
 		//* If the security level is set to high
 		if(($this->action == 'insert' && $data['new']['type'] == 'vhost') or ($web_config['set_folder_permissions_on_update'] == 'y' && $data['new']['type'] == 'vhost') or ($web_folder != $old_web_folder && $data['new']['type'] == 'vhost')) {
@@ -820,18 +812,18 @@ class nginx_plugin {
 				if($web_config['add_web_users_to_sshusers_group'] == 'y') {
 					$command = 'usermod';
 					$command .= ' --groups sshusers';
-					$command .= ' '.escapeshellcmd($data['new']['system_user']).' 2>/dev/null';
-					$app->system->_exec($command);
+					$command .= ' ? 2>/dev/null';
+					$app->system->exec_safe($command, $data['new']['system_user']);
 				}
 
 				//* if we have a chrooted nginx environment
 				if($nginx_chrooted) {
-					$app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+					$app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 					//* add the nginx user to the client group in the chroot environment
 					$tmp_groupfile = $app->system->server_conf['group_datei'];
 					$app->system->server_conf['group_datei'] = $web_config['website_basedir'].'/etc/group';
-					$app->system->add_user_to_group($groupname, escapeshellcmd($web_config['nginx_user']));
+					$app->system->add_user_to_group($groupname, $web_config['nginx_user']);
 					$app->system->server_conf['group_datei'] = $tmp_groupfile;
 					unset($tmp_groupfile);
 				}
@@ -945,7 +937,7 @@ class nginx_plugin {
 
 		if($data['new']['type'] == 'vhost') {
 			// Change the ownership of the error log to the root user
-			if(!@is_file('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log')) exec('touch '.escapeshellcmd('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log'));
+			if(!@is_file('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log')) $app->system->exec_safe('touch ?', '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log');
 			$app->system->chown('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 			$app->system->chgrp('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root');
 		}
@@ -991,6 +983,7 @@ class nginx_plugin {
 				}
 			}
 		}
+		if($data['new']['ip_address'] == '*' && $data['new']['ipv6_address'] == '') $tpl->setVar('ipv6_wildcard', 1);
 
 		// PHP-FPM
 		// Support for multiple PHP versions
@@ -1022,14 +1015,14 @@ class nginx_plugin {
 		}
 
 		if($default_php_fpm){
-			$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+			$pool_dir = $web_config['php_fpm_pool_dir'];
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
 		$pool_dir = trim($pool_dir);
 		if(substr($pool_dir, -1) != '/') $pool_dir .= '/';
 		$pool_name = 'web'.$data['new']['domain_id'];
-		$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
+		$socket_dir = $web_config['php_fpm_socket_dir'];
 		if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
 
 		if($data['new']['php_fpm_use_socket'] == 'y'){
@@ -1041,6 +1034,8 @@ class nginx_plugin {
 		}
 		$tpl->setVar('use_tcp', $use_tcp);
 		$tpl->setVar('use_socket', $use_socket);
+		$tpl->setVar('php_fpm_chroot', $data['new']['php_fpm_chroot']);
+		$tpl->setVar('php_fpm_chroot_web_folder', sprintf('/%s', trim($web_folder, '/')));
 		$fpm_socket = $socket_dir.$pool_name.'.sock';
 		$tpl->setVar('fpm_socket', $fpm_socket);
 		$tpl->setVar('rnd_php_dummy_file', '/'.md5(uniqid(microtime(), 1)).'.htm');
@@ -1811,7 +1806,7 @@ class nginx_plugin {
 		$basic_auth_locations = $this->_create_web_folder_auth_configuration($data['new']);
 		if(is_array($basic_auth_locations) && !empty($basic_auth_locations)) $tpl->setLoop('basic_auth_locations', $basic_auth_locations);
 
-		$vhost_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_file = $web_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost';
 		//* Make a backup copy of vhost file
 		if(file_exists($vhost_file)) copy($vhost_file, $vhost_file.'~');
 
@@ -1822,17 +1817,17 @@ class nginx_plugin {
 
 		//* Set the symlink to enable the vhost
 		//* First we check if there is a old type of symlink and remove it
-		$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost';
 		if(is_link($vhost_symlink)) $app->system->unlink($vhost_symlink);
 
 		//* Remove old or changed symlinks
 		if($data['new']['subdomain'] != $data['old']['subdomain'] or $data['new']['active'] == 'n') {
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -1841,9 +1836,9 @@ class nginx_plugin {
 
 		//* New symlink
 		if($data['new']['subdomain'] == '*') {
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost';
 		} else {
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost';
 		}
 		if($data['new']['active'] == 'y' && !is_link($vhost_symlink)) {
 			symlink($vhost_file, $vhost_symlink);
@@ -1852,22 +1847,22 @@ class nginx_plugin {
 
 		// remove old symlink and vhost file, if domain name of the site has changed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)) {
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 			$app->system->unlink($vhost_file);
 			$app->log('Removing file: '.$vhost_file, LOGLEVEL_DEBUG);
 		}
@@ -1887,7 +1882,12 @@ class nginx_plugin {
 			$this->awstats_update($data, $web_config);
 		}
 
-		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir);
+		//* Remove Stats-Folder when Statistics set to none
+		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
+			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
+		}
+
+		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder);
 		$this->hhvm_update($data, $web_config);
 
 		if($web_config['check_apache_config'] == 'y') {
@@ -2054,14 +2054,10 @@ class nginx_plugin {
 		if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias'){
 			if(is_array($log_folders) && !empty($log_folders)){
 				foreach($log_folders as $log_folder){
-					//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
-					//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
-					exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
+					$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 				}
 			} else {
-				//if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder));
-				//exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
-				exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
+				$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 			}
 			
 			// remove letsencrypt if it exists (renew will always fail otherwise)
@@ -2101,19 +2097,19 @@ class nginx_plugin {
 		} else {
 			//* This is a website
 			// Deleting the vhost file, symlink and the data directory
-			$vhost_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $web_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 			}
-			$vhost_symlink = escapeshellcmd($web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $web_config['nginx_vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost';
 			if(is_link($vhost_symlink)){
 				$app->system->unlink($vhost_symlink);
 				$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -2123,11 +2119,11 @@ class nginx_plugin {
 			$app->log('Removing vhost file: '.$vhost_file, LOGLEVEL_DEBUG);
 
 			if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') {
-				$docroot = escapeshellcmd($data['old']['document_root']);
+				$docroot = $data['old']['document_root'];
 				if($docroot != '' && !stristr($docroot, '..')) {
 					if($data['old']['type'] == 'vhost') {
 						// this is a vhost - we delete everything in here.
-						exec('rm -rf '.$docroot);
+						$app->system->exec_safe('rm -rf ?', $docroot);
 					} elseif(!stristr($data['old']['web_folder'], '..')) {
 						// this is a vhost subdomain
 						// IMPORTANT: do some folder checks before we delete this!
@@ -2177,7 +2173,7 @@ class nginx_plugin {
 							unset($used_paths);
 						}
 
-						if($do_delete === true && $delete_folder !== '') exec('rm -rf '.$docroot.'/'.$delete_folder);
+						if($do_delete === true && $delete_folder !== '') $app->system->exec_safe('rm -rf ?', $docroot.'/'.$delete_folder);
 
 						unset($delete_folder);
 						unset($path_elements);
@@ -2190,12 +2186,12 @@ class nginx_plugin {
 					$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['fastcgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($fastcgi_starter_path)) {
-							exec('rm -rf '.$fastcgi_starter_path);
+							$app->system->exec_safe('rm -rf ?', $fastcgi_starter_path);
 						}
 					} else {
 						$fcgi_starter_script = $fastcgi_starter_path.$web_config['fastcgi_starter_script'].'_web'.$data['old']['domain_id'];
 						if (file_exists($fcgi_starter_script)) {
-							exec('rm -f '.$fcgi_starter_script);
+							$app->system->exec_safe('rm -f ?', $fcgi_starter_script);
 						}
 					}
 				}
@@ -2216,12 +2212,12 @@ class nginx_plugin {
 					$cgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $web_config['cgi_starter_path']);
 					if($data['old']['type'] == 'vhost') {
 						if (is_dir($cgi_starter_path)) {
-							exec('rm -rf '.$cgi_starter_path);
+							$app->system->exec_safe('rm -rf ?', $cgi_starter_path);
 						}
 					} else {
 						$cgi_starter_script = $cgi_starter_path.'php-cgi-starter_web'.$data['old']['domain_id'];
 						if (file_exists($cgi_starter_script)) {
-							exec('rm -f '.$cgi_starter_script);
+							$app->system->exec_safe('rm -f ?', $cgi_starter_script);
 						}
 					}
 				}
@@ -2250,16 +2246,16 @@ class nginx_plugin {
 			}
 
 			// Delete the log file directory
-			$vhost_logfile_dir = escapeshellcmd('/var/log/ispconfig/httpd/'.$data['old']['domain']);
-			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) exec('rm -rf '.$vhost_logfile_dir);
+			$vhost_logfile_dir = '/var/log/ispconfig/httpd/'.$data['old']['domain'];
+			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) $app->system->exec_safe('rm -rf ?', $vhost_logfile_dir);
 			$app->log('Removing website logfile directory: '.$vhost_logfile_dir, LOGLEVEL_DEBUG);
 
 			if($data['old']['type'] == 'vhost') {
 				//delete the web user
-				$command = 'killall -u '.escapeshellcmd($data['old']['system_user']).' ; userdel';
-				$command .= ' '.escapeshellcmd($data['old']['system_user']);
-				exec($command);
-				if($nginx_chrooted) $app->system->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command);
+				$command = 'killall -u ? ; userdel';
+				$command .= ' ?';
+				$app->system->exec_safe($command, $data['old']['system_user'], $data['old']['system_user']);
+				if($nginx_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command);
 
 			}
 
@@ -2280,7 +2276,7 @@ class nginx_plugin {
 					if($mount_backup){
 						$web_backup_dir = $backup_dir.'/web'.$data_old['domain_id'];
 						//** do not use rm -rf $web_backup_dir because database(s) may exits
-						exec(escapeshellcmd('rm -f '.$web_backup_dir.'/web'.$data_old['domain_id'].'_').'*');
+						$app->system->exec_safe('rm -f ?*', $web_backup_dir.'/web'.$data_old['domain_id'].'_');
 						//* cleanup database
 						$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename LIKE ?";
 						$app->db->query($sql, $conf['server_id'], $data_old['domain_id'], "web".$data_old['domain_id']."_%");
@@ -2330,7 +2326,7 @@ class nginx_plugin {
 		//* Get the folder path.
 		if(substr($folder['path'], 0, 1) == '/') $folder['path'] = substr($folder['path'], 1);
 		if(substr($folder['path'], -1) == '/') $folder['path'] = substr($folder['path'], 0, -1);
-		$folder_path = escapeshellcmd($website['document_root'].'/' . $web_folder . '/'.$folder['path']);
+		$folder_path = $website['document_root'].'/' . $web_folder . '/'.$folder['path'];
 		if(substr($folder_path, -1) != '/') $folder_path .= '/';
 
 		//* Check if the resulting path is inside the docroot
@@ -2436,7 +2432,7 @@ class nginx_plugin {
 
 		if(substr($data['new']['path'], 0, 1) == '/') $data['new']['path'] = substr($data['new']['path'], 1);
 		if(substr($data['new']['path'], -1) == '/') $data['new']['path'] = substr($data['new']['path'], 0, -1);
-		$new_folder_path = escapeshellcmd($website['document_root'].'/' . $web_folder . '/'.$data['new']['path']);
+		$new_folder_path = $website['document_root'].'/' . $web_folder . '/'.$data['new']['path'];
 		if(substr($new_folder_path, -1) != '/') $new_folder_path .= '/';
 
 		//* Check if the resulting path is inside the docroot
@@ -2483,7 +2479,7 @@ class nginx_plugin {
 		//* Create the domain.auth file which is included in the vhost configuration file
 		$app->uses('getconf');
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
-		$basic_auth_file = escapeshellcmd($web_config['nginx_vhost_conf_dir'].'/'.$website['domain'].'.auth');
+		$basic_auth_file = $web_config['nginx_vhost_conf_dir'].'/'.$website['domain'].'.auth';
 		//$app->load('tpl');
 		//$tpl = new tpl();
 		//$tpl->newTemplate('nginx_http_authentication.auth.master');
@@ -2608,9 +2604,9 @@ class nginx_plugin {
 
 			$content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content);
 			file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content);
-			exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1');
-			exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1');
-			exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
+			$app->system->exec_safe('chmod +x ? >/dev/null 2>&1', '/etc/init.d/hhvm_' . $data['new']['system_user']);
+			$app->system->exec_safe('/usr/sbin/update-rc.d ? defaults >/dev/null 2>&1', 'hhvm_' . $data['new']['system_user']);
+			$app->system->exec_safe('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' restart >/dev/null 2>&1');
 			
 			if(is_dir('/etc/monit/conf.d')){
 				$monit_content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $monit_content);
@@ -2622,7 +2618,7 @@ class nginx_plugin {
  		} elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') {
 			if($data['old']['system_user'] != ''){
 				exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1');
-				exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1');
+				$app->system->exec_safe('/usr/sbin/update-rc.d remove >/dev/null 2>&1', 'hhvm_' . $data['old']['system_user']);
 				unlink('/etc/init.d/hhvm_' . $data['old']['system_user']);
 				if(is_file('/etc/hhvm/'.$data['old']['system_user'].'.ini')) unlink('/etc/hhvm/'.$data['old']['system_user'].'.ini');
 			}
@@ -2640,7 +2636,7 @@ class nginx_plugin {
 	}
 
 	//* Update the PHP-FPM pool configuration file
-	private function php_fpm_pool_update ($data, $web_config, $pool_dir, $pool_name, $socket_dir) {
+	private function php_fpm_pool_update ($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder = null) {
 		global $app, $conf;
 		$pool_dir = trim($pool_dir);
 		$rh_releasefiles = array('/etc/centos-release', '/etc/redhat-release');
@@ -2735,7 +2731,7 @@ class nginx_plugin {
 		$tpl->setVar('document_root', $data['new']['document_root']);
 		$tpl->setVar('security_level', $web_config['security_level']);
 		$tpl->setVar('domain', $data['new']['domain']);
-		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
+		$php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir'];
 		$tpl->setVar('php_open_basedir', $php_open_basedir);
 		if($php_open_basedir != ''){
 			$tpl->setVar('enable_php_open_basedir', '');
@@ -2743,6 +2739,15 @@ class nginx_plugin {
 			$tpl->setVar('enable_php_open_basedir', ';');
 		}
 
+		// Chrooted PHP-FPM
+		if ($data['new']['php_fpm_chroot'] === 'y') {
+			$tpl->setVar('php_fpm_chroot', $data['new']['php_fpm_chroot']);
+			$tpl->setVar('php_fpm_chroot_dir', $data['new']['document_root']);
+			$tpl->setVar('php_fpm_chroot_web_folder', sprintf('/%s', trim($web_folder, '/')));
+			$tpl->setVar('php_open_basedir', str_replace($tpl->getVar('document_root'), '', $tpl->getVar('php_open_basedir')));
+			$tpl->setVar('document_root', '');
+		}
+
 		// Custom php.ini settings
 		$final_php_ini_settings = array();
 		$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
@@ -2813,7 +2818,7 @@ class nginx_plugin {
 		unset($tpl);
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
+		$default_pool_dir = trim($web_config['php_fpm_pool_dir']);
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -2858,7 +2863,7 @@ class nginx_plugin {
 		}
 
 		if($default_php_fpm){
-			$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
+			$pool_dir = $web_config['php_fpm_pool_dir'];
 		} else {
 			$pool_dir = $custom_php_fpm_pool_dir;
 		}
@@ -2873,7 +2878,7 @@ class nginx_plugin {
 		}
 
 		// delete pool in all other PHP versions
-		$default_pool_dir = trim(escapeshellcmd($web_config['php_fpm_pool_dir']));
+		$default_pool_dir = trim($web_config['php_fpm_pool_dir']);
 		if(substr($default_pool_dir, -1) != '/') $default_pool_dir .= '/';
 		if($default_pool_dir != $pool_dir){
 			if ( @is_file($default_pool_dir.$pool_name.'.conf') ) {
@@ -3076,7 +3081,7 @@ class nginx_plugin {
 			}
 
 			if($app->system->is_group('client'.$client_id)){
-				$app->system->_exec('groupdel client'.$client_id);
+				$app->system->exec_safe('groupdel ?', 'client'.$client_id);
 				$app->log('Removed group client'.$client_id, LOGLEVEL_DEBUG);
 			}
 		}
diff --git a/server/plugins-available/nginx_reverseproxy_plugin.inc.php b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
index b5881dbf240886b5cc6127847a84f1e2dfa954de..1013042254ba2a2c63980394e6dc964021beb1f8 100644
--- a/server/plugins-available/nginx_reverseproxy_plugin.inc.php
+++ b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
@@ -176,7 +176,7 @@ class nginx_reverseproxy_plugin {
 		}
 
 
-		$vhost_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_file = $nginx_config['nginx_vhost_conf_dir'].'/'.$data['new']['domain'].'.vhost';
 		//* Make a backup copy of vhost file
 		copy($vhost_file, $vhost_file.'~');
 
@@ -187,7 +187,7 @@ class nginx_reverseproxy_plugin {
 
 
 		// Set the symlink to enable the vhost
-		$vhost_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost');
+		$vhost_symlink = $nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost';
 		if($data['new']['active'] == 'y' && !is_link($vhost_symlink)) {
 			symlink($vhost_file, $vhost_symlink);
 			$app->log('Creating symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
@@ -199,18 +199,18 @@ class nginx_reverseproxy_plugin {
 			$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 		}
 
-		if(!is_dir('/var/log/ispconfig/nginx/'.$data['new']['domain'])) exec('mkdir -p /var/log/ispconfig/nginx/'.$data['new']['domain']);
+		if(!is_dir('/var/log/ispconfig/nginx/'.$data['new']['domain'])) $app->system->exec_safe('mkdir -p ?', '/var/log/ispconfig/nginx/'.$data['new']['domain']);
 
 		// remove old symlink and vhost file, if domain name of the site has changed
 		if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) {
-			$vhost_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			unlink($vhost_symlink);
 			$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
-			$vhost_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $nginx_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 			unlink($vhost_file);
 			$app->log('Removing file: '.$vhost_file, LOGLEVEL_DEBUG);
 
-			if(is_dir('/var/log/ispconfig/nginx/'.$data['old']['domain'])) exec('rm -rf /var/log/ispconfig/nginx/'.$data['old']['domain']);
+			if(is_dir('/var/log/ispconfig/nginx/'.$data['old']['domain'])) $app->system->exec_safe('rm -rf ?', '/var/log/ispconfig/nginx/'.$data['old']['domain']);
 		}
 
 		// request a httpd reload when all records have been processed
@@ -232,7 +232,7 @@ class nginx_reverseproxy_plugin {
 	function ssl($event_name, $data) {
 		global $app, $conf;
 
-		if(!is_dir($conf['nginx']['config_dir'].'/ssl')) exec('mkdir -p '.$conf['nginx']['config_dir'].'/ssl');
+		if(!is_dir($conf['nginx']['config_dir'].'/ssl')) $app->system->exec_safe('mkdir -p ?', $conf['nginx']['config_dir'].'/ssl');
 		$ssl_dir = $conf['nginx']['config_dir'].'/ssl';
 		$domain = $data['new']['ssl_domain'];
 		$key_file = $ssl_dir.'/'.$domain.'.key.org';
@@ -250,7 +250,7 @@ class nginx_reverseproxy_plugin {
 			//$csr_file = $ssl_dir.'/'.$domain.".csr";
 			//$crt_file = $ssl_dir.'/'.$domain.".crt";
 			//$bundle_file = $ssl_dir.'/'.$domain.".bundle";
-			$this->_exec('rsync -v -e ssh root@'.$web['ip_address'].':~/$src_ssl_dir '.$ssl_dir);
+			$app->system->exec_safe('rsync -v -e ssh root@?:? ?', $web['ip_address'], '~/'.$src_ssl_dir, $ssl_dir);
 
 			$app->log('Syncing SSL Cert for: '.$domain, LOGLEVEL_DEBUG);
 		}
@@ -284,31 +284,24 @@ class nginx_reverseproxy_plugin {
 
 			//* This is a website
 			// Deleting the vhost file, symlink and the data directory
-			$vhost_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_symlink = $nginx_config['nginx_vhost_conf_enabled_dir'].'/'.$data['old']['domain'].'.vhost';
 			unlink($vhost_symlink);
 			$app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file, LOGLEVEL_DEBUG);
 
-			$vhost_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost');
+			$vhost_file = $nginx_config['nginx_vhost_conf_dir'].'/'.$data['old']['domain'].'.vhost';
 			unlink($vhost_file);
 			$app->log('Removing vhost file: '.$vhost_file, LOGLEVEL_DEBUG);
 
 
 
 			// Delete the log file directory
-			$vhost_logfile_dir = escapeshellcmd('/var/log/ispconfig/nginx/'.$data['old']['domain']);
-			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) exec('rm -rf '.$vhost_logfile_dir);
+			$vhost_logfile_dir = '/var/log/ispconfig/nginx/'.$data['old']['domain'];
+			if($data['old']['domain'] != '' && !stristr($vhost_logfile_dir, '..')) $app->system->exec_safe('rm -rf ?', $vhost_logfile_dir);
 			$app->log('Removing website logfile directory: '.$vhost_logfile_dir, LOGLEVEL_DEBUG);
 
 		}
 	}
 
-	//* Wrapper for exec function for easier debugging
-	private function _exec($command) {
-		global $app;
-		$app->log('exec: '.$command, LOGLEVEL_DEBUG);
-		exec($command);
-	}
-
 	function rewrite_insert($event_name, $data) {
 		global $app, $conf;
 
@@ -329,7 +322,7 @@ class nginx_reverseproxy_plugin {
 		$tpl->newTemplate("nginx_reverseproxy_rewrites.conf.master");
 		if (!empty($rules))$tpl->setLoop('nginx_rewrite_rules', $rules);
 
-		$rewrites_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'].'/default.rewrites.conf');
+		$rewrites_file = $nginx_config['nginx_vhost_conf_dir'].'/default.rewrites.conf';
 		//* Make a backup copy of vhost file
 		copy($rewrites_file, $rewrites_file.'~');
 
@@ -340,7 +333,7 @@ class nginx_reverseproxy_plugin {
 
 
 		// Set the symlink to enable the vhost
-		$rewrite_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'].'/default.rewrites.conf');
+		$rewrite_symlink = $nginx_config['nginx_vhost_conf_enabled_dir'].'/default.rewrites.conf';
 
 		if(!is_link($rewrite_symlink)) {
 			symlink($rewrites_file, $rewrite_symlink);
diff --git a/server/plugins-available/openvz_plugin.inc.php b/server/plugins-available/openvz_plugin.inc.php
index 5cc4bf6522aaf1a64ab8d375b96ed8b6f89de18a..f17edb7b8c1882844b26eb6afb147eba9416075f 100644
--- a/server/plugins-available/openvz_plugin.inc.php
+++ b/server/plugins-available/openvz_plugin.inc.php
@@ -86,11 +86,11 @@ class openvz_plugin {
 		}
 
 		$tmp = $app->db->queryOneRecord("SELECT template_file FROM openvz_ostemplate WHERE ostemplate_id = ?", $data['new']['ostemplate_id']);
-		$ostemplate = escapeshellcmd($tmp['template_file']);
+		$ostemplate = $tmp['template_file'];
 		unset($tmp);
 
 		//* Create the virtual machine
-		exec("vzctl create $veid --ostemplate $ostemplate");
+		$app->system->exec_safe("vzctl create ? --ostemplate ?", $veid, $ostemplate);
 		$app->log("Create OpenVZ VM: vzctl create $veid --ostemplate $ostemplate", LOGLEVEL_DEBUG);
 
 		//* Write the configuration of the VM
@@ -103,7 +103,7 @@ class openvz_plugin {
 		}
 
 		//* Set the root password in the virtual machine
-		exec("vzctl set $veid --userpasswd root:".escapeshellcmd($data['new']['vm_password']));
+		$app->system->exec_safe("vzctl set ? --userpasswd root:?", $veid, $data['new']['vm_password']);
 
 	}
 
@@ -123,7 +123,7 @@ class openvz_plugin {
 
 		//* new diskspace for ploop-containers requieres "vzctl set"
 		if($data['new']['diskspace'] != $data['old']['diskspace']) {
-			exec("vzctl set ".$veid." --diskspace ".$data['new']['diskspace']."G --save");
+			escapeshell("vzctl set ? --diskspace ? --save", $veid, $data['new']['diskspace']."G");
 		}
 
 		//* Apply config changes to the VM
@@ -140,7 +140,7 @@ class openvz_plugin {
 
 		//* Set the root password in the virtual machine
 		if($data['new']['vm_password'] != $data['old']['vm_password']) {
-			exec("vzctl set $veid --userpasswd root:".escapeshellcmd($data['new']['vm_password']));
+			$app->system->exec_safe("vzctl set ? --userpasswd root:?", $veid, $data['new']['vm_password']);
 		}
 
 
@@ -193,12 +193,12 @@ class openvz_plugin {
 			$parts = explode(':', $data);
 			$veid = intval($parts[0]);
 			$template_cache_dir = '/vz/template/cache/';
-			$template_name = escapeshellcmd($parts[1]);
+			$template_name = $parts[1];
 			if($veid > 0 && $template_name != '' && is_dir($template_cache_dir)) {
-				$command = "vzdump --suspend --compress --stdexcludes --dumpdir $template_cache_dir $veid";
-				exec($command);
-				exec("mv ".$template_cache_dir."vzdump-openvz-".$veid."*.tgz ".$template_cache_dir.$template_name.".tar.gz");
-				exec("rm -f ".$template_cache_dir."vzdump-openvz-".$veid."*.log");
+				$command = "vzdump --suspend --compress --stdexcludes --dumpdir ? ?";
+				$app->system->exec_safe($command, $template_cache_dir, $veid);
+				$app->system->exec_safe("mv ?*.tgz ?", $template_cache_dir."vzdump-openvz-".$veid, $template_cache_dir.$template_name.".tar.gz");
+				$app->system->exec_safe("rm -f ?*.log", $template_cache_dir."vzdump-openvz-".$veid);
 			}
 			$app->log("Created OpenVZ OStemplate $template_name from VM $veid", LOGLEVEL_DEBUG);
 			return 'ok';
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 2b0b1ba67b584f9e640e6a5a26e22e2aeee1adf8..ad48e3dee87064ed2ecc913a2ae5128fb90e8155 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -60,15 +60,11 @@ class postfix_server_plugin {
 		Register for the events
 		*/
 
-		$app->plugins->registerEvent('server_insert', 'postfix_server_plugin', 'insert');
-		$app->plugins->registerEvent('server_update', 'postfix_server_plugin', 'update');
-
-
-
+		$app->plugins->registerEvent('server_insert', $this->plugin_name, 'insert');
+		$app->plugins->registerEvent('server_update', $this->plugin_name, 'update');
 	}
 
 	function insert($event_name, $data) {
-		global $app, $conf;
 
 		$this->update($event_name, $data);
 
@@ -99,7 +95,7 @@ class postfix_server_plugin {
 				exec("postconf -e 'smtp_sasl_auth_enable = no'");
 			}
 			
-			exec("postconf -e 'relayhost = ".$mail_config['relayhost']."'");
+			$app->system->exec_safe("postconf -e ?", 'relayhost = '.$mail_config['relayhost']);
 			file_put_contents('/etc/postfix/sasl_passwd', $content);
 			chmod('/etc/postfix/sasl_passwd', 0600);
 			chown('/etc/postfix/sasl_passwd', 'root');
@@ -116,7 +112,7 @@ class postfix_server_plugin {
 			if($rbl_hosts != ''){
 				$rbl_hosts = explode(",", $rbl_hosts);
 			}
-			$options = explode(", ", exec("postconf -h smtpd_recipient_restrictions"));
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 			$new_options = array();
 			foreach ($options as $key => $value) {
 				if (!preg_match('/reject_rbl_client/', $value)) {
@@ -138,7 +134,7 @@ class postfix_server_plugin {
 					if($value != '') $new_options[] = "reject_rbl_client ".$value;
 				}
 			}
-			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+			$app->system->exec_safe("postconf -e ?", 'smtpd_recipient_restrictions = '.implode(", ", $new_options));
 			exec('postfix reload');
 		}
 		
@@ -157,12 +153,13 @@ class postfix_server_plugin {
 				while (isset($new_options[$i]) && substr($new_options[$i], 0, 19) == 'check_sender_access') ++$i;
 				array_splice($new_options, $i, 0, array('reject_authenticated_sender_login_mismatch'));
 			}
-			exec("postconf -e 'smtpd_sender_restrictions = ".implode(", ", $new_options)."'");
+			$app->system->exec_safe("postconf -e ?", 'smtpd_sender_restrictions = '.implode(", ", $new_options));
 			exec('postfix reload');
 		}		
 		
 		if($app->system->is_installed('dovecot')) {
-			$temp = exec("postconf -n virtual_transport", $out);
+			$out = null;
+			exec("postconf -n virtual_transport", $out);
 			if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
 				// If dovecot switch to lmtp
 				if($out[0] != "virtual_transport = lmtp:unix:private/dovecot-lmtp") {
@@ -182,12 +179,74 @@ class postfix_server_plugin {
 			}
 		}
 
-		exec("postconf -e 'mailbox_size_limit = ".intval($mail_config['mailbox_size_limit']*1024*1024)."'"); //TODO : no reload?
-		exec("postconf -e 'message_size_limit = ".intval($mail_config['message_size_limit']*1024*1024)."'"); //TODO : no reload?
+		if($mail_config['content_filter'] != $old_ini_data['mail']['content_filter']) {
+			if($mail_config['content_filter'] == 'rspamd'){
+				exec("postconf -X 'receive_override_options'");
+				exec("postconf -X 'content_filter'");
+				
+				exec("postconf -e 'smtpd_milters = inet:localhost:11332'");
+				exec("postconf -e 'non_smtpd_milters = inet:localhost:11332'");
+				exec("postconf -e 'milter_protocol = 6'");
+				exec("postconf -e 'milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}'");
+				exec("postconf -e 'milter_default_action = accept'");
+				
+				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
+				
+				$new_options = array();
+				$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+				foreach ($options as $key => $value) {
+					if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
+						$new_options[] = $value;
+					}
+				}
+				exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+				
+				// get all domains that have dkim enabled
+				if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) {
+					$mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1);
+				}
+				$dkim_domains = $app->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM `mail_domain` WHERE `dkim` = ? ORDER BY `domain` ASC', 'y');
+				$fpp = fopen('/etc/rspamd/local.d/dkim_domains.map', 'w');
+				$fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w');
+				foreach($dkim_domains as $dkim_domain) {
+					fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n");
+					fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector'] . "\n");
+				}
+				fclose($fpp);
+				fclose($fps);
+				unset($dkim_domains);
+			} else {
+				exec("postconf -X 'smtpd_milters'");
+				exec("postconf -X 'milter_protocol'");
+				exec("postconf -X 'milter_mail_macros'");
+				exec("postconf -X 'milter_default_action'");
+				
+				exec("postconf -e 'receive_override_options = no_address_mappings'");
+				exec("postconf -e 'content_filter = amavis:[127.0.0.1]:10024'");
+				
+				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'");
+			}
+		}
 		
+		if($mail_config['content_filter'] == 'rspamd' && ($mail_config['rspamd_password'] != $old_ini_data['mail']['rspamd_password'] || $mail_config['content_filter'] != $old_ini_data['mail']['content_filter'])) {
+			$app->load('tpl');
 
-	}
+			$rspamd_password = $mail_config['rspamd_password'];
+			$crypted_password = trim(exec('rspamadm pw -p ' . escapeshellarg($rspamd_password)));
+			if($crypted_password) {
+				$rspamd_password = $crypted_password;
+			}
+			
+			$tpl = new tpl();
+			$tpl->newTemplate('rspamd_worker-controller.inc.master');
+			$tpl->setVar('rspamd_password', $rspamd_password);
+			$app->system->file_put_contents('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());
+			chmod('/etc/rspamd/local.d/worker-controller.inc', 0644);
+			$app->services->restartServiceDelayed('rspamd', 'reload');
+		}
 
+		exec("postconf -e 'mailbox_size_limit = ".intval($mail_config['mailbox_size_limit']*1024*1024)."'");
+		exec("postconf -e 'message_size_limit = ".intval($mail_config['message_size_limit']*1024*1024)."'");
+		$app->services->restartServiceDelayed('postfix', 'reload');
+	}
 } // end class
-
-?>
diff --git a/server/plugins-available/powerdns_plugin.inc.php b/server/plugins-available/powerdns_plugin.inc.php
index f5f5158c44825f9093f44f33710c4c6480e64859..7ab23ec5494cd57d6f877e8a1afcbd864f48926f 100644
--- a/server/plugins-available/powerdns_plugin.inc.php
+++ b/server/plugins-available/powerdns_plugin.inc.php
@@ -7,14 +7,14 @@ All rights reserved.
 Redistribution and use in source and binary forms, with or without modification,
 are permitted provided that the following conditions are met:
 
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
+	* Redistributions of source code must retain the above copyright notice,
+	  this list of conditions and the following disclaimer.
+	* Redistributions in binary form must reproduce the above copyright notice,
+	  this list of conditions and the following disclaimer in the documentation
+	  and/or other materials provided with the distribution.
+	* Neither the name of ISPConfig nor the names of its contributors
+	  may be used to endorse or promote products derived from this software without
+	  specific prior written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -97,7 +97,7 @@ class powerdns_plugin {
 
 
 	/*
-	 	This function is called when the plugin is loaded
+		This function is called when the plugin is loaded
 	*/
 
 	function onLoad() {
@@ -421,15 +421,23 @@ class powerdns_plugin {
 		}
 	}
 
-	function find_pdns_pdnssec() {
+	function find_pdns_pdnssec_or_pdnsutil() {
 		$output = array();
 		$retval = '';
+
+		// The command is named pdnssec in PowerDNS 3
 		exec("type -p pdnssec", $output, $retval);
 		if ($retval == 0 && is_file($output[0])){
 			return $output[0];
-		} else {
-			return false;
 		}
+
+		// But in PowerNDS 4 they renamed it to pdnsutil
+		exec("type -p pdnsutil", $output, $retval);
+		if ($retval == 0 && is_file($output[0])){
+			return $output[0];
+		}
+
+		return false;
 	}
 
 	function zoneRediscover() {
@@ -440,16 +448,20 @@ class powerdns_plugin {
 	}
 
 	function notifySlave($data) {
+		global $app;
+		
 		$pdns_control = $this->find_pdns_control();
 		if ( $pdns_control != false ) {
-			exec($pdns_control . ' notify ' . rtrim($data["new"]["origin"],"."));
+			$app->system->exec_safe($pdns_control . ' notify ?', rtrim($data["new"]["origin"],"."));
 		}
 	}
 
 	function fetchFromMaster($data) {
+		global $app;
+		
 		$pdns_control = $this->find_pdns_control();
 		if ( $pdns_control != false ) {
-			exec($pdns_control . ' retrieve ' . rtrim($data["new"]["origin"],"."));
+			$app->system->exec_safe($pdns_control . ' retrieve ?', rtrim($data["new"]["origin"],"."));
 		}
 	}
 
@@ -466,6 +478,14 @@ class powerdns_plugin {
 		}
 	}
 
+	function is_pdns_version_supported() {
+		if (preg_match('/^[34]/',$this->get_pdns_version())) {
+			return true;
+		}
+
+		return false;
+	}
+
 	function handle_dnssec($data) {
 		// If origin changed, delete keys first
 		if ($data['old']['origin'] != $data['new']['origin']) {
@@ -475,14 +495,14 @@ class powerdns_plugin {
 		}
 
 		// If DNSSEC is disabled, but was enabled before, just disable DNSSEC but leave the keys in dns_info
-		if ($data['new']['dnssec_wanted'] === 'N' && $data['old']['dnssec_initialized'] === 'Y') {
+		if ($data['new']['dnssec_wanted'] === 'N' && $data['old']['dnssec_wanted'] === 'Y') {
 			$this->soa_dnssec_disable($data);
 
 			return;
 		}
 
 		// If DNSSEC is wanted, enable it
-		if ($data['new']['dnssec_wanted'] === 'Y') {
+		if ($data['new']['dnssec_wanted'] === 'Y' && $data['old']['dnssec_wanted'] === 'N') {
 			$this->soa_dnssec_create($data);
 		}
 	}
@@ -490,11 +510,11 @@ class powerdns_plugin {
 	function soa_dnssec_create($data) {
 		global $app;
 
-		if (!preg_match('/^3/',$this->get_pdns_version()) ) {
+		if (false === $this->is_pdns_version_supported()) {
 			return;
 		}
 
-		$pdns_pdnssec = $this->find_pdns_pdnssec();
+		$pdns_pdnssec = $this->find_pdns_pdnssec_or_pdnsutil();
 		if ($pdns_pdnssec === false) {
 			return;
 		}
@@ -504,22 +524,26 @@ class powerdns_plugin {
 
 		// We don't log the actual commands here, because having commands in the dnssec_info field will trigger
 		// the IDS if you try to save the record using the interface afterwards.
-		$cmd_secure_zone = sprintf('%s secure-zone %s 2>&1', $pdns_pdnssec, $zone);
-		$log[] = sprintf("\r\n%s %s", date('c'), 'Running secure-zone command...');
-		exec($cmd_secure_zone, $log);
+		$cmd_add_zone_key_ksk = sprintf('%s add-zone-key %s ksk active 2048 rsasha256', $pdns_pdnssec, $zone);
+		$log[] = sprintf("\r\n%s %s", date('c'), 'Running add-zone-key ksk command...');
+		exec($cmd_add_zone_key_ksk, $log);
+
+		$cmd_add_zone_key_zsk = sprintf('%s add-zone-key %s zsk active 1024 rsasha256', $pdns_pdnssec, $zone);
+		$log[] = sprintf("\r\n%s %s", date('c'), 'Running add-zone-key zsk command...');
+		exec($cmd_add_zone_key_zsk, $log);
 
 		$cmd_set_nsec3 = sprintf('%s set-nsec3 %s "1 0 10 deadbeef" 2>&1', $pdns_pdnssec, $zone);
 		$log[] = sprintf("\r\n%s %s", date('c'), 'Running set-nsec3 command...');
 		exec($cmd_set_nsec3, $log);
 
-		$pubkeys = [];
+		$pubkeys = array();
 		$cmd_show_zone = sprintf('%s show-zone %s 2>&1', $pdns_pdnssec, $zone);
 		$log[] = sprintf("\r\n%s %s", date('c'), 'Running show-zone command...');
 		exec($cmd_show_zone, $pubkeys);
 
 		$log = array_merge($log, $pubkeys);
 
-		$dnssec_info = array_merge($this->format_dnssec_pubkeys($pubkeys), ['', '== Raw log ============================'], $log);
+		$dnssec_info = array_merge($this->format_dnssec_pubkeys($pubkeys), array('', '== Raw log ============================'), $log);
 		$dnssec_info = implode("\r\n", $dnssec_info);
 
 		if ($app->dbmaster !== $app->db) {
@@ -529,7 +553,7 @@ class powerdns_plugin {
 	}
 
 	function format_dnssec_pubkeys($lines) {
-		$formatted = [];
+		$formatted = array();
 
 		// We don't care about the first two lines about presigning and NSEC
 		array_shift($lines);
@@ -539,17 +563,19 @@ class powerdns_plugin {
 			switch ($part = substr($line, 0, 3)) {
 				case 'ID ':
 					// Only process active keys
-					if (!strpos($line, 'Active: 1')) {
-						continue;
+					// 'Active: 1' is pdnssec (PowerDNS 3.x) output
+					// 'Active (' is pdnsutil (PowerDNS 4.x) output
+					if (!strpos($line, 'Active: 1') && !strpos($line, 'Active ( ')) {
+						break;
 					}
 
-					// Determine key type (KSK or ZSK)
-					preg_match('/(KSK|ZSK)/', $line, $matches_key_type);
+					// Determine key type (KSK, ZSK or CSK)
+					preg_match('/(KSK|ZSK|CSK)/', $line, $matches_key_type);
 					$key_type = $matches_key_type[1];
 
-					// We only care about the KSK
-					if ('ZSK' === $key_type) {
-						continue;
+					// We only care about the KSK or CSK
+					if (!in_array($key_type, array('KSK', 'CSK'), true)) {
+						break;
 					}
 
 					// Determine key tag
@@ -568,6 +594,7 @@ class powerdns_plugin {
 					break;
 
 				case 'KSK':
+				case 'CSK':
 					// Determine DNSKEY
 					preg_match('/ IN DNSKEY \d+ \d+ \d+ (.*) ;/', $line, $matches_dnskey);
 					$formatted[] = sprintf('DNSKEY: %s', $matches_dnskey[1]);
@@ -604,11 +631,11 @@ class powerdns_plugin {
 	function soa_dnssec_disable($data) {
 		global $app;
 
-		if (!preg_match('/^3/',$this->get_pdns_version()) ) {
+		if (false === $this->is_pdns_version_supported()) {
 			return;
 		}
 
-		$pdns_pdnssec = $this->find_pdns_pdnssec();
+		$pdns_pdnssec = $this->find_pdns_pdnssec_or_pdnsutil();
 		if ($pdns_pdnssec === false) {
 			return;
 		}
@@ -631,11 +658,11 @@ class powerdns_plugin {
 	function soa_dnssec_delete($data) {
 		global $app;
 
-		if (!preg_match('/^3/',$this->get_pdns_version()) ) {
+		if (false === $this->is_pdns_version_supported()) {
 			return;
 		}
 
-		$pdns_pdnssec = $this->find_pdns_pdnssec();
+		$pdns_pdnssec = $this->find_pdns_pdnssec_or_pdnsutil();
 		if ($pdns_pdnssec === false) {
 			return;
 		}
@@ -650,7 +677,7 @@ class powerdns_plugin {
 		exec($cmd_disable_dnssec, $log);
 
 
-		$dnssec_info = array_merge(['== Raw log ============================'], $log);
+		$dnssec_info = array_merge(array('== Raw log ============================'), $log);
 		$dnssec_info = implode("\r\n", $dnssec_info);
 
 		if ($app->dbmaster !== $app->db) {
@@ -661,17 +688,20 @@ class powerdns_plugin {
 
 	function rectifyZone($data) {
 		global $app, $conf;
-		if ( preg_match('/^3/',$this->get_pdns_version()) ) {
-			$pdns_pdnssec = $this->find_pdns_pdnssec();
-			if ( $pdns_pdnssec != false ) {
-				if (isset($data["new"]["origin"])) {
-					//* data has origin field only for SOA recordtypes
-					exec($pdns_pdnssec . ' rectify-zone ' . rtrim($data["new"]["origin"],"."));
-				} else {
-					// get origin from DB for all other recordtypes
-					$zn = $app->db->queryOneRecord("SELECT d.name AS name FROM powerdns.domains d, powerdns.records r WHERE r.ispconfig_id=? AND r.domain_id = d.id", $data["new"]["id"]);
-					exec($pdns_pdnssec . ' rectify-zone ' . trim($zn["name"]));
-				}
+
+		if (false === $this->is_pdns_version_supported()) {
+			return;
+		}
+
+		$pdns_pdnssec = $this->find_pdns_pdnssec_or_pdnsutil();
+		if ( $pdns_pdnssec != false ) {
+			if (isset($data["new"]["origin"])) {
+				//* data has origin field only for SOA recordtypes
+				$app->system->exec_safe($pdns_pdnssec . ' rectify-zone ?', rtrim($data["new"]["origin"],"."));
+			} else {
+				// get origin from DB for all other recordtypes
+				$zn = $app->db->queryOneRecord("SELECT d.name AS name FROM powerdns.domains d, powerdns.records r WHERE r.ispconfig_id=? AND r.domain_id = d.id", $data["new"]["id"]);
+				$app->system->exec_safe($pdns_pdnssec . ' rectify-zone ?', trim($zn["name"]));
 			}
 		}
 	}
diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..f6bb5d5a8ea3e9f33752d50237cd5738de3ddfa1
--- /dev/null
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -0,0 +1,408 @@
+<?php
+
+/*
+Copyright (c) 2018, Falko Timme, Timme Hosting GmbH & Co. KG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class rspamd_plugin {
+
+	var $plugin_name = 'rspamd_plugin';
+	var $class_name  = 'rspamd_plugin';
+	var $users_config_dir = '/etc/rspamd/local.d/users/';
+	
+	//* This function is called during ispconfig installation to determine
+	//  if a symlink shall be created for this plugin.
+	function onInstall() {
+		global $conf;
+
+		if($conf['services']['mail'] == true) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/*
+	 	This function is called when the plugin is loaded
+	*/
+
+	function onLoad() {
+		global $app;
+
+		/*
+		Register for the events
+		*/
+
+		//* spamfilter_wblist
+		$app->plugins->registerEvent('spamfilter_wblist_insert', $this->plugin_name, 'spamfilter_wblist_insert');
+		$app->plugins->registerEvent('spamfilter_wblist_update', $this->plugin_name, 'spamfilter_wblist_update');
+		$app->plugins->registerEvent('spamfilter_wblist_delete', $this->plugin_name, 'spamfilter_wblist_delete');
+		
+		//* global mail access filters
+		$app->plugins->registerEvent('mail_access_insert', $this->plugin_name, 'spamfilter_wblist_insert');
+		$app->plugins->registerEvent('mail_access_update', $this->plugin_name, 'spamfilter_wblist_update');
+		$app->plugins->registerEvent('mail_access_delete', $this->plugin_name, 'spamfilter_wblist_delete');
+		
+		//* server ip
+		$app->plugins->registerEvent('server_ip_insert', $this->plugin_name, 'server_ip');
+		$app->plugins->registerEvent('server_ip_update', $this->plugin_name, 'server_ip');
+		$app->plugins->registerEvent('server_ip_delete', $this->plugin_name, 'server_ip');
+		
+		//* spamfilter_users
+		$app->plugins->registerEvent('spamfilter_users_insert', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('spamfilter_users_update', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('spamfilter_users_delete', $this->plugin_name, 'user_settings_update');
+
+		//* mail user / fwd / catchall changed (greylisting)
+		$app->plugins->registerEvent('mail_user_insert', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_user_update', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_user_delete', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_forwarding_insert', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_forwarding_update', $this->plugin_name, 'user_settings_update');
+		$app->plugins->registerEvent('mail_forwarding_delete', $this->plugin_name, 'user_settings_update');
+	}
+
+	function user_settings_update($event_name, $data) {
+		global $app, $conf;
+		
+		if(!is_dir('/etc/rspamd')) {
+			return;
+		}
+		
+		$use_data = 'new';
+		if(substr($event_name, -7) === '_delete') {
+			$mode = 'delete';
+			$use_data = 'old';
+		} elseif(substr($event_name, -7) === '_insert') {
+			$mode = 'insert';
+		} else {
+			$mode = 'update';
+		}
+
+		// get the config
+		$app->uses('getconf,system,functions');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		$type = false;
+		$identifier = false;
+		$entry_id = false;
+		if(substr($event_name, 0, 17) === 'spamfilter_users_') {
+			$identifier = 'email';
+			$type = 'spamfilter_user';
+			$entry_id = $data[$use_data]['id'];
+		} elseif(substr($event_name, 0, 16) === 'mail_forwarding_') {
+			$identifier = 'source';
+			$type = 'mail_forwarding';
+			$entry_id = $data[$use_data]['forwarding_id'];
+		} elseif(substr($event_name, 0, 10) === 'mail_user_') {
+			$identifier = 'email';
+			$type = 'mail_user';
+			$entry_id = $data[$use_data]['mailuser_id'];
+		} else {
+			// invalid event
+			$app->log('Invalid event name for rspamd_plugin: ' . $event_name, LOGLEVEL_WARN);
+			return;
+		}
+		
+		$is_domain = false;
+		$email_address = $data[$use_data][$identifier];
+		$settings_name =  $email_address;
+		if($email_address === '*@' || $email_address === '@') {
+			// we will ignore those global targets
+			$app->log('Ignoring @ spamfilter_user as rspamd does not support it this way.', LOGLEVEL_DEBUG);
+			return;
+		} elseif(!$email_address) {
+			// problem reading identifier
+			$app->log('Empty email address in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN);
+			return;
+		} elseif(substr($email_address, 0, 1) === '@') {
+			$settings_name = substr($email_address, 1);
+			$is_domain = true;
+		} elseif(strpos($email_address, '@') === false) {
+			$email_address = '@' . $email_address;
+			$is_domain = true;
+		}
+		
+		if($settings_name == '') {
+			// missing settings file name
+			$app->log('Empty rspamd identifier in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN);
+			return;
+		}
+		
+		$settings_file = $this->users_config_dir . str_replace('@', '_', $settings_name) . '.conf';
+		//$app->log('Settings file for rspamd is ' . $settings_file, LOGLEVEL_WARN);
+		if($mode === 'delete') {
+			if(is_file($settings_file)) {
+				unlink($settings_file);
+			}
+		} else {
+			$settings_priority = 20;
+			if(isset($data[$use_data]['priority'])) {
+				$settings_priority = intval($data[$use_data]['priority']);
+			} elseif($is_domain === true) {
+				$settings_priority = 18;
+			}
+			
+			// get policy for entry
+			if($type === 'spamfilter_user') {
+				$policy = $app->db->queryOneRecord("SELECT * FROM spamfilter_policy WHERE id = ?", intval($data['new']['policy_id']));
+				
+				$check = $app->db->queryOneRecord('SELECT `greylisting` FROM `mail_user` WHERE `server_id` = ? AND `email` = ? UNION SELECT `greylisting` FROM `mail_forwarding` WHERE `server_id` = ? AND `source` = ? ORDER BY (`greylisting` = ?) DESC', $conf['server_id'], $email_address, $conf['server_id'], $email_address, 'y');
+				if($check) {
+					$greylisting = $check['greylisting'];
+				} else {
+					$greylisting = 'n';
+				}
+			} else {
+				$search_for_policy[] = $email_address;
+				$search_for_policy[] = substr($email_address, strpos($email_address, '@'));
+				
+				$policy = $app->db->queryOneRecord("SELECT p.* FROM spamfilter_users as u INNER JOIN spamfilter_policy as p ON (p.id = u.policy_id) WHERE u.server_id = ? AND u.email IN ? ORDER BY u.priority DESC", $conf['server_id'], $search_for_policy);
+				
+				$greylisting = $data[$use_data]['greylisting'];
+			}
+			
+			if(!is_dir($this->users_config_dir)){
+				$app->system->mkdirpath($this->users_config_dir);
+			}
+			
+			$app->load('tpl');
+			
+			$tpl = new tpl();
+			$tpl->newTemplate('rspamd_users.inc.conf.master');
+			
+			$tpl->setVar('record_identifier', 'ispc_' . $type . '_' . $entry_id);
+			$tpl->setVar('priority', $settings_priority);
+			
+			if($type === 'spamfilter_user') {
+				if($data[$use_data]['local'] === 'Y') {
+					$tpl->setVar('to_email', $app->functions->idn_encode($email_address));
+				} else {
+					$tpl->setVar('from_email', $app->functions->idn_encode($email_address));
+				}
+				$spamfilter = $data[$use_data];
+			} else {
+				$tpl->setVar('to_email', $app->functions->idn_encode($email_address));
+				
+				// need to get matching spamfilter user if any
+				$spamfilter = $app->db->queryOneRecord('SELECT * FROM spamfilter_users WHERE `email` = ?', $email_address);
+			}
+			
+			if(!isset($policy['rspamd_spam_tag_level'])) {
+				$policy['rspamd_spam_tag_level'] = 6.0;
+			}
+			if(!isset($policy['rspamd_spam_tag_method'])) {
+				$policy['rspamd_spam_tag_method'] = 'add_header';
+			}
+			if(!isset($policy['rspamd_spam_kill_level'])) {
+				$policy['rspamd_spam_kill_level'] = 15.0;
+			}
+			if(!isset($policy['rspamd_virus_kill_level'])) {
+				$policy['rspamd_virus_kill_level'] = floatval($policy['rspamd_spam_kill_level']) + 1000;
+			}
+			
+			$tpl->setVar('rspamd_spam_tag_level', floatval($policy['rspamd_spam_tag_level']));
+			$tpl->setVar('rspamd_spam_tag_method', floatval($policy['rspamd_spam_tag_method']));
+			$tpl->setVar('rspamd_spam_kill_level', floatval($policy['rspamd_spam_kill_level']));
+			$tpl->setVar('rspamd_virus_kill_level', floatval($policy['rspamd_spam_kill_level']) + 1000);
+			
+			if(isset($policy['spam_lover']) && $policy['spam_lover'] == 'Y') {
+				$tpl->setVar('spam_lover', true);
+			}
+			if(isset($policy['virus_lover']) && $policy['virus_lover'] == 'Y') {
+				$tpl->setVar('virus_lover', true);
+			}
+			
+			$tpl->setVar('greylisting', $greylisting);
+
+			if(isset($policy['rspamd_spam_greylisting_level'])) {
+				$tpl->setVar('greylisting_level', floatval($policy['rspamd_spam_greylisting_level']));
+			} else {
+				$tpl->setVar('greylisting_level', 0.1);
+			}
+
+			$app->system->file_put_contents($settings_file, $tpl->grab());
+		}
+
+		if($mail_config['content_filter'] == 'rspamd'){
+			$app->services->restartServiceDelayed('rspamd', 'reload');
+		}
+	}
+
+	function spamfilter_wblist_insert($event_name, $data) {
+		$this->action = 'insert';
+		// just run the spamfilter_wblist_update function
+		$this->spamfilter_wblist_update($event_name, $data);
+	}
+
+	function spamfilter_wblist_update($event_name, $data) {
+		global $app, $conf;
+
+		$app->uses('getconf,system,functions');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		if(is_dir('/etc/rspamd')) {
+			$global_filter = false;
+			//* Create the config file
+			$filter = null;
+			if($event_name === 'mail_access_insert' || $event_name === 'mail_access_update') {
+				$global_filter = true;
+				$record_id = intval($data['new']['access_id']);
+				$wblist_file = $this->users_config_dir.'global_wblist_'.$record_id.'.conf';
+				$filter = array(
+					'wb' => ($data['new']['access'] === 'OK' ? 'W' : 'B'),
+					'from' => ($data['new']['type'] === 'sender' ? $app->functions->idn_encode($data['new']['source']) : ''),
+					'rcpt' => ($data['new']['type'] === 'recipient' ? $app->functions->idn_encode($data['new']['source']) : ''),
+					'ip' => ($data['new']['type'] === 'client' && $this->_is_valid_ip_address($data['new']['source']) ? $data['new']['source'] : ''),
+					'hostname' => ($data['new']['type'] === 'client' && !$this->_is_valid_ip_address($data['new']['source']) ? $data['new']['source'] : '')
+				);
+			} else {
+				$record_id = intval($data['new']['wblist_id']);
+				$wblist_file = $this->users_config_dir.'spamfilter_wblist_'.$record_id.'.conf';
+				$tmp = $app->db->queryOneRecord("SELECT email FROM spamfilter_users WHERE id = ?", intval($data['new']['rid']));
+				if($tmp && !empty($tmp)) {
+					$filter = array(
+						'wb' => $data['new']['wb'],
+						'from' => $app->functions->idn_encode($data['new']['email']),
+						'rcpt' => $app->functions->idn_encode($tmp['email']),
+						'ip' => '',
+						'hostname' => ''
+					);
+				}
+			}
+		
+			if($data['new']['active'] == 'y' && is_array($filter) && !empty($filter)){
+				if(!is_dir($this->users_config_dir)){
+					$app->system->mkdirpath($this->users_config_dir);
+				}
+		
+				$app->load('tpl');
+
+				$filter_from = $filter['from'];
+				if($filter_from != '') {
+					if(strpos($filter_from, '@') === false) {
+						$filter_from = '@' . $filter_from;
+					} elseif(substr($filter_from, 0, 2) === '*@') {
+						$filter_from = substr($filter_from, 1);
+					}
+				}
+				$filter_rcpt = $filter['rcpt'];
+				if($filter_rcpt != '') {
+					if(strpos($filter_rcpt, '@') === false) {
+						$filter_rcpt = '@' . $filter_rcpt;
+					} elseif(substr($filter_rcpt, 0, 2) === '*@') {
+						$filter_rcpt = substr($filter_rcpt, 1);
+					}
+				}
+				
+				$tpl = new tpl();
+				$tpl->newTemplate('rspamd_wblist.inc.conf.master');
+				$tpl->setVar('list_scope', ($global_filter ? 'global' : 'spamfilter'));
+				$tpl->setVar('record_id', $record_id);
+				// we need to add 10 to priority to avoid mailbox/domain spamfilter settings overriding white/blacklists
+				$tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 10 : 20));
+				$tpl->setVar('from', $filter_from);
+				$tpl->setVar('recipient', $filter_rcpt);
+				$tpl->setVar('hostname', $filter['hostname']);
+				$tpl->setVar('ip', $filter['ip']);
+				$tpl->setVar('wblist', $filter['wb']);
+		
+				$app->system->file_put_contents($wblist_file, $tpl->grab());
+			} elseif(is_file($wblist_file)) {
+				unlink($wblist_file);
+			}
+			
+			if($mail_config['content_filter'] == 'rspamd' && is_file('/etc/init.d/rspamd')) {
+				$app->services->restartServiceDelayed('rspamd', 'reload');
+			}
+		}
+	}
+	
+	function spamfilter_wblist_delete($event_name, $data) {
+		global $app, $conf;
+
+		$app->uses('getconf');
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+
+		if(is_dir('/etc/rspamd')) {
+			//* delete the config file
+			if($event_name === 'mail_access_delete') {
+				$wblist_file = $this->users_config_dir.'global_wblist_'.intval($data['old']['access_id']).'.conf';
+			} else {
+				$wblist_file = $this->users_config_dir.'spamfilter_wblist_'.intval($data['old']['wblist_id']).'.conf';
+			}
+			if(is_file($wblist_file)) {
+				unlink($wblist_file);
+			}
+
+			if($mail_config['content_filter'] == 'rspamd'){
+				if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload');
+			}
+		}
+	}
+
+	function server_ip($event_name, $data) {
+		global $app, $conf;
+ 
+		// get the config
+		$app->uses("getconf,system");
+		$app->load('tpl');
+
+		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
+		
+		if(is_dir('/etc/rspamd')) {
+			$tpl = new tpl();
+			$tpl->newTemplate('rspamd_users.conf.master');
+				
+			$whitelist_ips = array();
+			$ips = $app->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']);
+			if(is_array($ips) && !empty($ips)){
+				foreach($ips as $ip){
+					$whitelist_ips[] = array('ip' => $ip['ip_address']);
+				}
+			}
+			$tpl->setLoop('whitelist_ips', $whitelist_ips);
+			$app->system->file_put_contents('/etc/rspamd/local.d/users.conf', $tpl->grab());
+				
+			if($mail_config['content_filter'] == 'rspamd'){
+				$app->services->restartServiceDelayed('rspamd', 'reload');
+			}
+		}
+	}
+	
+	private function _is_valid_ip_address($ip) {
+		if(function_exists('filter_var')) {
+			if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6)) {
+				return false;
+			} else {
+				return true;
+			}
+		} else {
+			return false;
+		}
+	}
+} // end class
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 9c4568901deef3e73b8051929ca94247070e6fd2..9f19c2be58cb397f8b2fa4acf3b48c0ccca05440 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -115,34 +115,36 @@ class shelluser_base_plugin {
 				
 				// Create home base directory if it does not exist
 				if(!is_dir($data['new']['dir'].'/home')){
-					$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0755');
+					$app->file->mkdirs($data['new']['dir'].'/home', '0755');
 				}
 				
 				// Change ownership of home base dir to root user
-				$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),'root');
-				$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),'root');
-				$app->system->chmod(escapeshellcmd($data['new']['dir'].'/home'),0755);
+				$app->system->chown($data['new']['dir'].'/home','root');
+				$app->system->chgrp($data['new']['dir'].'/home','root');
+				$app->system->chmod($data['new']['dir'].'/home',0755);
 				
 				if(!is_dir($homedir)){
-					$app->file->mkdirs(escapeshellcmd($homedir), '0750');
-					$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['puser']),false);
-					$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']),false);
+					$app->file->mkdirs($homedir, '0750');
+					$app->system->chown($homedir,$data['new']['puser'],false);
+					$app->system->chgrp($homedir,$data['new']['pgroup'],false);
 				}
-				$command = 'useradd';
-				$command .= ' -d '.escapeshellcmd($homedir);
-				$command .= ' -g '.escapeshellcmd($data['new']['pgroup']);
-				$command .= ' -o '; // non unique
-				if($data['new']['password'] != '') $command .= ' -p '.escapeshellcmd($data['new']['password']);
-				$command .= ' -s '.escapeshellcmd($data['new']['shell']);
-				$command .= ' -u '.escapeshellcmd($uid);
-				$command .= ' '.escapeshellcmd($data['new']['username']);
-
-				exec($command);
+				$command = 'useradd -d ? -g ? -o'; // non unique
+				$command .= ' -s ? -u ? ?';
+				$app->system->exec_safe($command, $homedir, $data['new']['pgroup'], $data['new']['shell'], $uid, $data['new']['username']);
 				$app->log("Executed command: ".$command, LOGLEVEL_DEBUG);
 				$app->log("Added shelluser: ".$data['new']['username'], LOGLEVEL_DEBUG);
-				
-				$app->system->chown(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['username']),false);
-				$app->system->chgrp(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['pgroup']),false);
+
+				if($data['new']['password'] != '') {
+					$retval = null;
+					$stderr = '';
+					$app->system->pipe_exec('chpasswd -e ' . escapeshellarg($data['new']['username']), $data['new']['username'] . ':' . $data['new']['password'], $retval, $stderr);
+					if($retval != 0) {
+						$app->log("Command chpasswd failed for user ".$data['new']['username'] . ' with code ' . $retval . ': ' . $stderr, LOGLEVEL_WARN);
+					}
+				}
+			
+				$app->system->chown($data['new']['dir'],$data['new']['username'],false);
+				$app->system->chgrp($data['new']['dir'],$data['new']['pgroup'],false);
 				
 
 				// call the ssh-rsa update function
@@ -152,21 +154,21 @@ class shelluser_base_plugin {
 				$this->_setup_ssh_rsa();
 
 				//* Create .bash_history file
-				$app->system->touch(escapeshellcmd($homedir).'/.bash_history');
-				$app->system->chmod(escapeshellcmd($homedir).'/.bash_history', 0750);
-				$app->system->chown(escapeshellcmd($homedir).'/.bash_history', $data['new']['username']);
-				$app->system->chgrp(escapeshellcmd($homedir).'/.bash_history', $data['new']['pgroup']);
+				$app->system->touch($homedir.'/.bash_history');
+				$app->system->chmod($homedir.'/.bash_history', 0750);
+				$app->system->chown($homedir.'/.bash_history', $data['new']['username']);
+				$app->system->chgrp($homedir.'/.bash_history', $data['new']['pgroup']);
 
 				//* Create .profile file
-				$app->system->touch(escapeshellcmd($homedir).'/.profile');
-				$app->system->chmod(escapeshellcmd($homedir).'/.profile', 0644);
-				$app->system->chown(escapeshellcmd($homedir).'/.profile', $data['new']['username']);
-				$app->system->chgrp(escapeshellcmd($homedir).'/.profile', $data['new']['pgroup']);
+				$app->system->touch($homedir.'/.profile');
+				$app->system->chmod($homedir.'/.profile', 0644);
+				$app->system->chown($homedir.'/.profile', $data['new']['username']);
+				$app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']);
 
 				//* Disable shell user temporarily if we use jailkit
 				if($data['new']['chroot'] == 'jailkit') {
-					$command = 'usermod -s /bin/false -L '.escapeshellcmd($data['new']['username']).' 2>/dev/null';
-					exec($command);
+					$command = 'usermod -s /bin/false -L ? 2>/dev/null';
+					$app->system->exec_safe($command, $data['new']['username']);
 					$app->log("Disabling shelluser temporarily: ".$command, LOGLEVEL_DEBUG);
 				}
 
@@ -233,55 +235,32 @@ class shelluser_base_plugin {
 				if($app->system->is_user($data['old']['username'])) {
 					//* Remove webfolder protection
 					$app->system->web_folder_protection($web['document_root'], false);
-					
-					/*
-					$command = 'usermod';
-					$command .= ' --home '.escapeshellcmd($data['new']['dir']);
-					$command .= ' --gid '.escapeshellcmd($data['new']['pgroup']);
-					// $command .= ' --non-unique ';
-					$command .= ' --password '.escapeshellcmd($data['new']['password']);
-					if($data['new']['chroot'] != 'jailkit') $command .= ' --shell '.escapeshellcmd($data['new']['shell']);
-					// $command .= ' --uid '.escapeshellcmd($uid);
-					$command .= ' --login '.escapeshellcmd($data['new']['username']);
-					$command .= ' '.escapeshellcmd($data['old']['username']);
-
-					exec($command);
-					$app->log("Executed command: $command ",LOGLEVEL_DEBUG);
-					*/
-					//$groupinfo = $app->system->posix_getgrnam($data['new']['pgroup']);
+
 					if($homedir != $homedir_old){
 						$app->system->web_folder_protection($web['document_root'], false);
 						// Rename dir, in case the new directory exists already.
 						if(is_dir($homedir)) {
 							$app->log("New Homedir exists, renaming it to ".$homedir.'_bak', LOGLEVEL_DEBUG);
-							$app->system->rename(escapeshellcmd($homedir),escapeshellcmd($homedir.'_bak'));
+							$app->system->rename($homedir,$homedir.'_bak');
 						}
-						/*if(!is_dir($data['new']['dir'].'/home')){
-							$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0750');
-							$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['puser']));
-							$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),escapeshellcmd($data['new']['pgroup']));
-						}
-						$app->file->mkdirs(escapeshellcmd($homedir), '0755');
-						$app->system->chown(escapeshellcmd($homedir),'root');
-						$app->system->chgrp(escapeshellcmd($homedir),'root');*/
 						
 						// Move old directory to new path
-						$app->system->rename(escapeshellcmd($homedir_old),escapeshellcmd($homedir));
-						$app->file->mkdirs(escapeshellcmd($homedir), '0750');
-						$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['puser']));
-						$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']));
+						$app->system->rename($homedir_old,$homedir);
+						$app->file->mkdirs($homedir, '0750');
+						$app->system->chown($homedir,$data['new']['puser']);
+						$app->system->chgrp($homedir,$data['new']['pgroup']);
 						$app->system->web_folder_protection($web['document_root'], true);
 					} else {
 						if(!is_dir($homedir)){
 							$app->system->web_folder_protection($web['document_root'], false);
 							if(!is_dir($data['new']['dir'].'/home')){
-								$app->file->mkdirs(escapeshellcmd($data['new']['dir'].'/home'), '0755');
-								$app->system->chown(escapeshellcmd($data['new']['dir'].'/home'),'root');
-								$app->system->chgrp(escapeshellcmd($data['new']['dir'].'/home'),'root');
+								$app->file->mkdirs($data['new']['dir'].'/home', '0755');
+								$app->system->chown($data['new']['dir'].'/home','root');
+								$app->system->chgrp($data['new']['dir'].'/home','root');
 							}
-							$app->file->mkdirs(escapeshellcmd($homedir), '0750');
-							$app->system->chown(escapeshellcmd($homedir),escapeshellcmd($data['new']['puser']));
-							$app->system->chgrp(escapeshellcmd($homedir),escapeshellcmd($data['new']['pgroup']));
+							$app->file->mkdirs($homedir, '0750');
+							$app->system->chown($homedir,$data['new']['puser']);
+							$app->system->chgrp($homedir,$data['new']['pgroup']);
 							$app->system->web_folder_protection($web['document_root'], true);
 						}
 					}
@@ -296,18 +275,18 @@ class shelluser_base_plugin {
 
 					//* Create .bash_history file
 					if(!is_file($data['new']['dir']).'/.bash_history') {
-						$app->system->touch(escapeshellcmd($homedir).'/.bash_history');
-						$app->system->chmod(escapeshellcmd($homedir).'/.bash_history', 0750);
-						$app->system->chown(escapeshellcmd($homedir).'/.bash_history', escapeshellcmd($data['new']['username']));
-						$app->system->chgrp(escapeshellcmd($homedir).'/.bash_history', escapeshellcmd($data['new']['pgroup']));
+						$app->system->touch($homedir.'/.bash_history');
+						$app->system->chmod($homedir.'/.bash_history', 0750);
+						$app->system->chown($homedir.'/.bash_history', $data['new']['username']);
+						$app->system->chgrp($homedir.'/.bash_history', $data['new']['pgroup']);
 					}
 					
 					//* Create .profile file
 					if(!is_file($data['new']['dir']).'/.profile') {
-						$app->system->touch(escapeshellcmd($homedir).'/.profile');
-						$app->system->chmod(escapeshellcmd($homedir).'/.profile', 0644);
-						$app->system->chown(escapeshellcmd($homedir).'/.profile', escapeshellcmd($data['new']['username']));
-						$app->system->chgrp(escapeshellcmd($homedir).'/.profile', escapeshellcmd($data['new']['pgroup']));
+						$app->system->touch($homedir.'/.profile');
+						$app->system->chmod($homedir.'/.profile', 0644);
+						$app->system->chown($homedir.'/.profile', $data['new']['username']);
+						$app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']);
 					}
 
 					//* Add webfolder protection again
@@ -362,7 +341,7 @@ class shelluser_base_plugin {
 						if(is_file($homedir . $delfile) && fileowner($homedir . $delfile) == $userid) unlink($homedir . $delfile);
 					}
 					foreach($dirs as $deldir) {
-						if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) exec('rm -rf ' . escapeshellarg($homedir . $deldir));
+						if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) $app->system->exec_safe('rm -rf ?', $homedir . $deldir);
 					}
 					$empty = true;
 					$dirres = opendir($homedir);
@@ -401,9 +380,8 @@ class shelluser_base_plugin {
 							$app->services->restartService('php-fpm', 'stop:'.$conf['init_scripts'].'/'.$web_config['php_fpm_init_script']);
 						}
 					}
-					$command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; userdel -f';
-					$command .= ' '.escapeshellcmd($data['old']['username']).' &> /dev/null';
-					exec($command);
+					$command = 'killall -u ? ; userdel -f ? &> /dev/null';
+					$app->system->exec_safe($command, $data['old']['username'], $data['old']['username']);
 					$app->log("Deleted shelluser: ".$data['old']['username'], LOGLEVEL_DEBUG);
 					// start PHP-FPM again
 					if($web['php'] == 'php-fpm'){
@@ -447,12 +425,10 @@ class shelluser_base_plugin {
 			}
 		}
 		$sshrsa = trim($sshrsa);
-		$usrdir = escapeshellcmd($this->data['new']['dir']);
+		$usrdir = $this->data['new']['dir'];
 		//* Home directory of the new shell user
-		if($this->data['new']['chroot'] == 'jailkit') {
-			$usrdir = escapeshellcmd($this->data['new']['dir']);
-		} else {
-			$usrdir = escapeshellcmd($this->data['new']['dir'].'/home/'.$this->data['new']['username']);
+		if($this->data['new']['chroot'] != 'jailkit') {
+			$usrdir = $this->data['new']['dir'].'/home/'.$this->data['new']['username'];
 		}
 		$sshdir = $usrdir.'/.ssh';
 		$sshkeys= $usrdir.'/.ssh/authorized_keys';
@@ -528,8 +504,8 @@ class shelluser_base_plugin {
 		$this->app->log("ssh-rsa key updated in ".$sshkeys, LOGLEVEL_DEBUG);
 
 		// set proper file permissions
-		exec("chown -R ".escapeshellcmd($this->data['new']['puser']).":".escapeshellcmd($this->data['new']['pgroup'])." ".$sshdir);
-		exec("chmod 600 '$sshkeys'");
+		$app->system->exec_safe("chown -R ?:? ?", $this->data['new']['puser'], $this->data['new']['pgroup'], $sshdir);
+		$app->system->exec_safe("chmod 600 ?", $sshkeys);
 
 	}
 
diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php
index 147d39d571947ae7026ca263623a70a74d89b836..43d636500808fdc59fc9637a8c1128a73c985b68 100755
--- a/server/plugins-available/shelluser_jailkit_plugin.inc.php
+++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -121,13 +121,11 @@ class shelluser_jailkit_plugin {
 						//* call the ssh-rsa update function
 						$this->_setup_ssh_rsa();
 
-						//$command .= 'usermod -s /usr/sbin/jk_chrootsh -U '.escapeshellcmd($data['new']['username']);
-						//exec($command);
 						$app->system->usermod($data['new']['username'], 0, 0, '', '/usr/sbin/jk_chrootsh', '', '');
 
 						//* Unlock user
-						$command = 'usermod -U '.escapeshellcmd($data['new']['username']).' 2>/dev/null';
-						exec($command);
+						$command = 'usermod -U ? 2>/dev/null';
+						$app->system->exec_safe($command, $data['new']['username']);
 
 						$this->_update_website_security_level();
 						$app->system->web_folder_protection($web['document_root'], true);
@@ -242,15 +240,12 @@ class shelluser_jailkit_plugin {
 
 			$jailkit_chroot_userhome = $this->_get_home_dir($data['old']['username']);
 
-			//commented out proved to be dangerous on config errors
-			//exec('rm -rf '.$data['old']['dir'].$jailkit_chroot_userhome);
-
 			$app->system->web_folder_protection($web['document_root'], false);
 			
 			$userid = intval($app->system->getuid($data['old']['username']));
-			$command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; ';
-			$command .= 'userdel -f '.escapeshellcmd($data['old']['username']).' &> /dev/null';
-			exec($command);
+			$command = 'killall -u ? ; ';
+			$command .= 'userdel -f ? &> /dev/null';
+			$app->system->exec_safe($command, $data['old']['username'], $data['old']['username']);
 			
 			// Remove the jailed user from passwd and shadow file inside the jail
 			$app->system->removeLine($data['old']['dir'].'/etc/passwd', $data['old']['username']);
@@ -278,12 +273,8 @@ class shelluser_jailkit_plugin {
 		//check if the chroot environment is created yet if not create it with a list of program sections from the config
 		if (!is_dir($this->data['new']['dir'].'/etc/jailkit'))
 		{
-			$command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh';
-			$command .= ' '.escapeshellcmd($this->data['new']['dir']);
-			$command .= ' \''.$this->jailkit_config['jailkit_chroot_app_sections'].'\'';
-			exec($command.' 2>/dev/null');
-
-			$this->app->log("Added jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
+			$app->system->create_jailkit_chroot($this->data['new']['dir'], $this->jailkit_config['jailkit_chroot_app_sections']);
+			$this->app->log("Added jailkit chroot", LOGLEVEL_DEBUG);
 
 			$this->_add_jailkit_programs();
 
@@ -300,7 +291,7 @@ class shelluser_jailkit_plugin {
 			$tpl->setVar('domain', $web['domain']);
 			$tpl->setVar('home_dir', $this->_get_home_dir(""));
 
-			$bashrc = escapeshellcmd($this->data['new']['dir']).'/etc/bash.bashrc';
+			$bashrc = $this->data['new']['dir'].'/etc/bash.bashrc';
 			if(@is_file($bashrc) || @is_link($bashrc)) unlink($bashrc);
 
 			file_put_contents($bashrc, $tpl->grab());
@@ -313,7 +304,7 @@ class shelluser_jailkit_plugin {
 
 			$tpl->setVar('domain', $web['domain']);
 
-			$motd = escapeshellcmd($this->data['new']['dir']).'/var/run/motd';
+			$motd = $this->data['new']['dir'].'/var/run/motd';
 			if(@is_file($motd) || @is_link($motd)) unlink($motd);
 
 			$app->system->file_put_contents($motd, $tpl->grab());
@@ -323,18 +314,15 @@ class shelluser_jailkit_plugin {
 
 	function _add_jailkit_programs()
 	{
+		global $app;
 		$jailkit_chroot_app_programs = preg_split("/[\s,]+/", $this->jailkit_config['jailkit_chroot_app_programs']);
 		if(is_array($jailkit_chroot_app_programs) && !empty($jailkit_chroot_app_programs)){
 			foreach($jailkit_chroot_app_programs as $jailkit_chroot_app_program){
 				$jailkit_chroot_app_program = trim($jailkit_chroot_app_program);
 				if(is_file($jailkit_chroot_app_program) || is_dir($jailkit_chroot_app_program)){			
 					//copy over further programs and its libraries
-					$command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
-					$command .= ' '.escapeshellcmd($this->data['new']['dir']);
-					$command .= ' '.$jailkit_chroot_app_program;
-					exec($command.' 2>/dev/null');
-
-					$this->app->log("Added programs to jailkit chroot with command: ".$command, LOGLEVEL_DEBUG);
+					$app->system->create_jailkit_programs($this->data['new']['dir'], $jailkit_chroot_app_program);
+					$this->app->log("Added programs to jailkit chroot", LOGLEVEL_DEBUG);
 				}
 			}
 		}
@@ -342,7 +330,7 @@ class shelluser_jailkit_plugin {
 
 	function _get_home_dir($username)
 	{
-		return str_replace("[username]", escapeshellcmd($username), $this->jailkit_config['jailkit_chroot_home']);
+		return str_replace("[username]", $username, $this->jailkit_config['jailkit_chroot_home']);
 	}
 
 	function _add_jailkit_user()
@@ -365,36 +353,7 @@ class shelluser_jailkit_plugin {
 		// ALWAYS create the user. Even if the user was created before
 		// if we check if the user exists, then a update (no shell -> jailkit) will not work
 		// and the user has FULL ACCESS to the root of the server!
-		$command = '/usr/local/ispconfig/server/scripts/create_jailkit_user.sh';
-		$command .= ' '.escapeshellcmd($this->data['new']['username']);
-		$command .= ' '.escapeshellcmd($this->data['new']['dir']);
-		$command .= ' '.$jailkit_chroot_userhome;
-		$command .= ' '.escapeshellcmd($this->data['new']['shell']);
-		$command .= ' '.$this->data['new']['puser'];
-		$command .= ' '.$jailkit_chroot_puserhome;
-		exec($command.' 2>/dev/null');
-
-		//* Change the homedir of the shell user and parent user
-		//* We have to do this manually as the usermod command fails
-		//* when the user is logged in or a command is running under that user
-		/*
-			$passwd_file_array = file('/etc/passwd');
-			$passwd_out = '';
-			if(is_array($passwd_file_array)) {
-				foreach($passwd_file_array as $line) {
-					$line = trim($line);
-					$parts = explode(':',$line);
-					if($parts[0] == $this->data['new']['username']) {
-						$parts[5] = escapeshellcmd($this->data['new']['dir'].'/.'.$jailkit_chroot_userhome);
-						$parts[6] = escapeshellcmd('/usr/sbin/jk_chrootsh');
-						$new_line = implode(':',$parts);
-						copy('/etc/passwd','/etc/passwd~');
-						chmod('/etc/passwd~',0600);
-						$app->uses('system');
-						$app->system->replaceLine('/etc/passwd',$line,$new_line,1,0);
-					}
-				}
-			}*/
+		$app->system->create_jailkit_user($this->data['new']['username'], $this->data['new']['dir'], $jailkit_chroot_userhome, $this->data['new']['shell'], $this->data['new']['puser'], $jailkit_chroot_puserhome);
 
 		$shell = '/usr/sbin/jk_chrootsh';
 		if($this->data['new']['active'] != 'y') $shell = '/bin/false';
@@ -402,23 +361,21 @@ class shelluser_jailkit_plugin {
 		$app->system->usermod($this->data['new']['username'], 0, 0, $this->data['new']['dir'].'/.'.$jailkit_chroot_userhome, $shell);
 		$app->system->usermod($this->data['new']['puser'], 0, 0, $this->data['new']['dir'].'/.'.$jailkit_chroot_puserhome, '/usr/sbin/jk_chrootsh');
 
-		$this->app->log("Added jailkit user to chroot with command: ".$command, LOGLEVEL_DEBUG);
-
 		if(!is_dir($this->data['new']['dir'].$jailkit_chroot_userhome)) {
 			if(is_dir($this->data['old']['dir'].$jailkit_chroot_userhome_old)) {
-				$app->system->rename(escapeshellcmd($this->data['old']['dir'].$jailkit_chroot_userhome_old),escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_userhome));
+				$app->system->rename($this->data['old']['dir'].$jailkit_chroot_userhome_old,$this->data['new']['dir'].$jailkit_chroot_userhome);
 			} else {
-				mkdir(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_userhome), 0750, true);
+				mkdir($this->data['new']['dir'].$jailkit_chroot_userhome, 0750, true);
 			}
 		}
-		$app->system->chown(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_userhome), $this->data['new']['username']);
-		$app->system->chgrp(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_userhome), $this->data['new']['pgroup']);
+		$app->system->chown($this->data['new']['dir'].$jailkit_chroot_userhome, $this->data['new']['username']);
+		$app->system->chgrp($this->data['new']['dir'].$jailkit_chroot_userhome, $this->data['new']['pgroup']);
 
 		$this->app->log("Added created jailkit user home in : ".$this->data['new']['dir'].$jailkit_chroot_userhome, LOGLEVEL_DEBUG);
 
-		if(!is_dir($this->data['new']['dir'].$jailkit_chroot_puserhome)) mkdir(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_puserhome), 0750, true);
-		$app->system->chown(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_puserhome), $this->data['new']['puser']);
-		$app->system->chgrp(escapeshellcmd($this->data['new']['dir'].$jailkit_chroot_puserhome), $this->data['new']['pgroup']);
+		if(!is_dir($this->data['new']['dir'].$jailkit_chroot_puserhome)) mkdir($this->data['new']['dir'].$jailkit_chroot_puserhome, 0750, true);
+		$app->system->chown($this->data['new']['dir'].$jailkit_chroot_puserhome, $this->data['new']['puser']);
+		$app->system->chgrp($this->data['new']['dir'].$jailkit_chroot_puserhome, $this->data['new']['pgroup']);
 
 		$this->app->log("Added jailkit parent user home in : ".$this->data['new']['dir'].$jailkit_chroot_puserhome, LOGLEVEL_DEBUG);
 
@@ -447,13 +404,6 @@ class shelluser_jailkit_plugin {
 
 	}
 
-	//* Wrapper for exec function for easier debugging
-	private function _exec($command) {
-		global $app;
-		$app->log('exec: '.$command, LOGLEVEL_DEBUG);
-		exec($command);
-	}
-
 	private function _setup_ssh_rsa() {
 		global $app;
 		$this->app->log("ssh-rsa setup shelluser_jailkit", LOGLEVEL_DEBUG);
@@ -469,7 +419,7 @@ class shelluser_jailkit_plugin {
 
 		// ssh-rsa authentication variables
 		$sshrsa = $this->data['new']['ssh_rsa'];
-		$usrdir = escapeshellcmd($this->data['new']['dir']).'/'.$this->_get_home_dir($this->data['new']['username']);
+		$usrdir = $this->data['new']['dir'].'/'.$this->_get_home_dir($this->data['new']['username']);
 		$sshdir = $usrdir.'/.ssh';
 		$sshkeys= $usrdir.'/.ssh/authorized_keys';
 
@@ -489,7 +439,8 @@ class shelluser_jailkit_plugin {
 		if (!file_exists($sshkeys)){
 			// add root's key
 			$app->file->mkdirs($sshdir, '0755');
-			if(is_file('/root/.ssh/authorized_keys')) $app->system->file_put_contents($sshkeys, $app->system->file_get_contents('/root/.ssh/authorized_keys'));
+			$authorized_keys_template = $this->jailkit_config['jailkit_chroot_authorized_keys_template'];
+			if(is_file($authorized_keys_template)) $app->system->file_put_contents($sshkeys, $app->system->file_get_contents($authorized_keys_template));
 
 			// Remove duplicate keys
 			$existing_keys = @file($sshkeys, FILE_IGNORE_NEW_LINES);
@@ -544,9 +495,9 @@ class shelluser_jailkit_plugin {
 		$this->app->log("ssh-rsa key updated in ".$sshkeys, LOGLEVEL_DEBUG);
 
 		// set proper file permissions
-		exec("chown -R ".escapeshellcmd($this->data['new']['puser']).":".escapeshellcmd($this->data['new']['pgroup'])." ".$sshdir);
-		exec("chmod 700 ".$sshdir);
-		exec("chmod 600 '$sshkeys'");
+		$app->system->exec_safe("chown -R ?:? ?", $this->data['new']['puser'], $this->data['new']['pgroup'], $sshdir);
+		$app->system->exec_safe("chmod 700 ?", $sshdir);
+		$app->system->exec_safe("chmod 600 ?", $sshkeys);
 
 	}
 	
@@ -568,7 +519,7 @@ class shelluser_jailkit_plugin {
 						if(is_file($homedir . $delfile) && fileowner($homedir . $delfile) == $userid) unlink($homedir . $delfile);
 					}
 					foreach($dirs as $deldir) {
-						if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) exec('rm -rf ' . escapeshellarg($homedir . $deldir));
+						if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) $app->system->exec_safe('rm -rf ?', $homedir . $deldir);
 					}
 					$empty = true;
 					$dirres = opendir($homedir);
diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php
index 587bd4f09a610c3ec496e1fa1edffe1e17e76b94..2626d1e75695bcefb79605ed7ae77e211a1755dd 100644
--- a/server/plugins-available/software_update_plugin.inc.php
+++ b/server/plugins-available/software_update_plugin.inc.php
@@ -111,11 +111,12 @@ class software_update_plugin {
 		$software_update["update_url"] = str_replace('{key}', $software_package['package_key'], $software_update["update_url"]);
 
 		//* Download the update package
-		$cmd = "cd $temp_dir && wget ".$software_update["update_url"];
 		if($installuser == '') {
-			exec($cmd);
+			$cmd = "cd ? && wget ?";
+			$app->system->exec_safe($cmd, $temp_dir, $software_update["update_url"]);
 		} else {
-			exec("su -c ".escapeshellarg($cmd)." $installuser");
+			$cmd = "cd $temp_dir && wget ".$software_update["update_url"];
+			$app->system->exec_safe("su -c ? ?", $cmd, $installuser);
 		}
 		$app->log("Downloading the update file from: ".$software_update["update_url"], LOGLEVEL_DEBUG);
 
@@ -135,7 +136,7 @@ class software_update_plugin {
 
 		if($update_filename == '') {
 			$app->log("No package file found. Download failed? Installation aborted.", LOGLEVEL_WARN);
-			exec("rm -rf $temp_dir");
+			$app->system->exec_safe("rm -rf ?", $temp_dir);
 			$app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG);
 			$this->set_install_status($data["new"]["software_update_inst_id"], "failed");
 			return false;
@@ -148,7 +149,7 @@ class software_update_plugin {
 			//* Checking the md5sum
 			if(md5_file($temp_dir.'/'.$update_filename) != $software_update["update_md5"]) {
 				$app->log("The md5 sum of the downloaded file is incorrect. Update aborted.", LOGLEVEL_WARN);
-				exec("rm -rf $temp_dir");
+				$app->system->exec_safe("rm -rf ", $temp_dir);
 				$app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG);
 				$this->set_install_status($data["new"]["software_update_inst_id"], "failed");
 				return false;
@@ -158,11 +159,13 @@ class software_update_plugin {
 
 
 			//* unpacking the update
-			$cmd = "cd $temp_dir && unzip $update_filename";
+			
 			if($installuser == '') {
-				exec($cmd);
+				$cmd = "cd ? && unzip ?";
+				$app->system->exec_safe($cmd, $temp_dir, $update_filename);
 			} else {
-				exec("su -c ".escapeshellarg($cmd)." $installuser");
+				$cmd = "cd $temp_dir && unzip $update_filename";
+				$app->system->exec_safe("su -c ? ?", $cmd, $installuser);
 			}
 
 			//* Create a database, if the package requires one
@@ -181,7 +184,7 @@ class software_update_plugin {
 						$db_config['database_password'] != '' &&
 						$db_config['database_name'] != '' &&
 						$db_config['database_host'] != '') {
-						system("mysql --default-character-set=utf8 --force -h '".$db_config['database_host']."' -u '".$db_config['database_user']."' ".$db_config['database_name']." < ".escapeshellcmd($temp_dir.'/setup.sql'));
+						$app->system->exec_safe("mysql --default-character-set=utf8 --force -h ? -u ? ? < ?", $db_config['database_host'], $db_config['database_user'], $db_config['database_name'], $temp_dir.'/setup.sql');
 						$app->log("Loading setup.sql dump into the app db.", LOGLEVEL_DEBUG);
 					}
 				}
@@ -196,13 +199,15 @@ class software_update_plugin {
 
 			if(is_file($temp_dir.'/setup.sh')) {
 				// Execute the setup script
-				exec('chmod +x '.$temp_dir.'/setup.sh');
+				$app->system->exec_safe('chmod +x ?', $temp_dir.'/setup.sh');
 				$app->log("Executing setup.sh file in directory $temp_dir", LOGLEVEL_DEBUG);
-				$cmd = 'cd '.$temp_dir.' && ./setup.sh > package_install.log';
+				
 				if($installuser == '') {
-					exec($cmd);
+					$cmd = 'cd ? && ./setup.sh > package_install.log';
+					$app->system->exec_safe($cmd, $temp_dir);
 				} else {
-					exec("su -c ".escapeshellarg($cmd)." $installuser");
+					$cmd = 'cd '.$temp_dir.' && ./setup.sh > package_install.log';
+					$app->system->exec_safe("su -c ? ?", $cmd, $installuser);
 				}
 
 				$log_data = @file_get_contents("{$temp_dir}/package_install.log");
@@ -223,7 +228,7 @@ class software_update_plugin {
 			$this->set_install_status($data["new"]["software_update_inst_id"], "failed");
 		}
 
-		if($temp_dir != '' && $temp_dir != '/') exec("rm -rf $temp_dir");
+		if($temp_dir != '' && $temp_dir != '/') $app->system->exec_safe("rm -rf ?", $temp_dir);
 		$app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG);
 	}
 
diff --git a/server/plugins-available/xmpp_plugin.inc.php b/server/plugins-available/xmpp_plugin.inc.php
index 128a88ebb47e76d9ce51dc1b05f578fc15a9ab2b..c680e62f0ed5e51f5ccf7b634b8321984942d808 100644
--- a/server/plugins-available/xmpp_plugin.inc.php
+++ b/server/plugins-available/xmpp_plugin.inc.php
@@ -240,8 +240,8 @@ class xmpp_plugin {
         $app->system->unlink("/etc/metronome/certs/$domain.csr");
         // Remove all stored data
         var_dump('rm -rf /var/lib/metronome/'.$folder);
-        exec('rm -rf /var/lib/metronome/'.$folder);
-        exec('rm -rf /var/lib/metronome/*%2e'.$folder);
+        $app->system->exec_safe('rm -rf ?', '/var/lib/metronome/'.$folder);
+        $app->system->exec_safe('rm -rf ?*?', '/var/lib/metronome/', '%2e'.$folder);
 
         $app->services->restartServiceDelayed('metronome', 'reload');
     }
@@ -264,7 +264,7 @@ class xmpp_plugin {
         // Don't allow manual user deletion for mailaccount controlled domains
 
         // Remove account from metronome
-        exec('metronomectl deluser '.$data['old']['jid']);
+        $app->system->exec_safe('metronomectl deluser ?', $data['old']['jid']);
     }
 
     // Handle the creation of SSL certificates
@@ -311,9 +311,9 @@ class xmpp_plugin {
             $app->system->file_put_contents($cnf_file, $tpl->grab());
 
             // Generate new key, csr and cert
-            exec("(cd /etc/metronome/certs && make $domain.key)");
-            exec("(cd /etc/metronome/certs && make $domain.csr)");
-            exec("(cd /etc/metronome/certs && make $domain.cert)");
+            $app->system->exec_safe("(cd /etc/metronome/certs && make ?)", "$domain.key");
+            $app->system->exec_safe("(cd /etc/metronome/certs && make ?)", "$domain.csr");
+            $app->system->exec_safe("(cd /etc/metronome/certs && make ?)", "$domain.cert");
 
             $ssl_key = $app->system->file_get_contents($key_file);
             $app->system->chmod($key_file, 0400);
diff --git a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..f88cbe9c0b4cdc20f6e653acd25ba2fbaccf6e3d
--- /dev/null
+++ b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
@@ -0,0 +1,189 @@
+<?php
+
+/**
+ * If your websites use PHP-FPM and you have incron installed, you can use this plugin to automatically add incron
+ * configuration which will take care of reloading the php-fpm pool when the file /private/php-fpm.reload is touched.
+ * Projects which use deployment tools can use this to reload php-fpm to clear the opcache at deploy time, without
+ * requiring superuser privileges.
+ *
+ * The plugin is prefixed with `z_` because plugins are executed alphabetically, and this plugin
+ * must only run after apache2/nginx plugins so we are sure the directories and user/group exist.
+ */
+class z_php_fpm_incron_reload_plugin {
+
+	var $plugin_name = 'z_php_fpm_incron_reload_plugin';
+	var $class_name = 'z_php_fpm_incron_reload_plugin';
+
+	function onInstall() {
+		global $conf;
+
+		return $conf['services']['web'] == true;
+	}
+
+	function onLoad() {
+		global $app;
+
+		if ($this->isPluginEnabled() === false) {
+			return;
+		}
+
+		if ($this->isIncronAvailable() === false) {
+			$app->log('You must install incron in order to use this plugin', LOGLEVEL_DEBUG);
+
+			return;
+		}
+
+		$app->plugins->registerEvent('web_domain_insert', $this->plugin_name, 'incronInsert');
+		$app->plugins->registerEvent('web_domain_update', $this->plugin_name, 'incronUpdate');
+		$app->plugins->registerEvent('web_domain_delete', $this->plugin_name, 'incronDelete');
+	}
+
+	function incronInsert($eventName, $data) {
+		$this->setup($data['new']);
+	}
+
+	function incronUpdate($eventName, $data) {
+		global $app;
+
+		if ($data['new']['document_root'] === $data['old']['document_root']) {
+			$app->log('Document root unchanged. Not updating incron configuration.', LOGLEVEL_DEBUG);
+
+			return;
+		}
+
+		$this->teardown($data['old']);
+		$this->setup($data['new']);
+	}
+
+	function incronDelete($eventName, $data) {
+		$this->teardown($data['old']);
+	}
+
+	private function setup($data)
+	{
+		$triggerFile = $this->getTriggerFilePath($data['document_root']);
+
+		$this->createTriggerFile($triggerFile, $data['system_user'], $data['system_group']);
+		$this->createIncronConfiguration(
+			$triggerFile,
+			$data['system_user'],
+			$data['fastcgi_php_version']
+		);
+
+		$this->restartIncronService();
+	}
+
+	private function teardown($data) {
+		$this->deleteIncronConfiguration($data['system_user']);
+		$this->deleteTriggerFile($this->getTriggerFilePath($data['document_root']));
+
+		$file = sprintf('/etc/incron.d/%s.conf', $data['system_user']);
+
+		@unlink($file);
+
+		$this->restartIncronService();
+	}
+
+	private function isIncronAvailable() {
+		exec('which incrond', $output, $retval);
+
+		return $retval === 0;
+	}
+
+	private function isPluginEnabled() {
+		global $app, $conf;
+
+		$app->uses('getconf');
+		$serverConfig = $app->getconf->get_server_config($conf['server_id'], 'web');
+
+		return $serverConfig['php_fpm_incron_reload'] === 'y';
+	}
+
+	private function createIncronConfiguration($triggerFile, $systemUser, $fastcgiPhpVersion) {
+		global $app;
+
+		$phpService = $this->getPhpService($fastcgiPhpVersion);
+		$configFile = $this->getIncronConfigurationFilePath($systemUser);
+
+		$content = sprintf(
+			'%s %s %s',
+			$triggerFile,
+			'IN_CLOSE_WRITE',
+			$app->system->getinitcommand($phpService, 'reload')
+		);
+
+		file_put_contents($configFile, $content);
+
+		$app->log(sprintf('Created incron configuration "%s"', $configFile), LOGLEVEL_DEBUG);
+	}
+
+	private function createTriggerFile($triggerFile, $systemUser, $systemGroup) {
+		global $app;
+
+		if (!file_exists($triggerFile)) {
+			exec(sprintf('touch %s', $triggerFile));
+		}
+
+		exec(sprintf('chown %s:%s %s', $systemUser, $systemGroup, $triggerFile));
+
+		$app->log(sprintf('Ensured incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG);
+	}
+
+	private function deleteIncronConfiguration($systemUser) {
+		global $app;
+
+		$configFile = $this->getIncronConfigurationFilePath($systemUser);
+		if (!file_exists($configFile)) {
+			return;
+		}
+
+		unlink($configFile);
+
+		$app->log(sprintf('Deleted incron configuration "%s"', $configFile), LOGLEVEL_DEBUG);
+	}
+
+	private function deleteTriggerFile($triggerFile) {
+		global $app;
+
+		if (!file_exists($triggerFile)) {
+			return;
+		}
+
+		unlink($triggerFile);
+
+		$app->log(sprintf('Deleted incron trigger file "%s"', $triggerFile), LOGLEVEL_DEBUG);
+	}
+
+	private function getTriggerFilePath($documentRoot) {
+		return sprintf('%s/private/php-fpm.reload', $documentRoot);
+	}
+
+	private function getIncronConfigurationFilePath($systemUser) {
+		return sprintf('/etc/incron.d/%s.conf', $systemUser);
+	}
+
+	private function getPhpService($fastcgiPhpVersion) {
+		$phpInfo = explode(':', $fastcgiPhpVersion);
+		if (empty($phpInfo)) {
+			return null;
+		}
+
+		$phpService = $phpInfo[1];
+		if (empty($phpService)) {
+			return null;
+		}
+
+		return $phpService;
+	}
+
+	private function restartIncronService() {
+		global $app;
+
+		$serviceName = 'incrond';
+		if (file_exists('/etc/debian_version')) {
+			$serviceName = 'incron';
+		}
+
+		exec($app->system->getinitcommand($serviceName, 'restart'));
+	}
+}
\ No newline at end of file
diff --git a/server/scripts/create_jailkit_user.sh b/server/scripts/create_jailkit_user.sh
index 5e1060be2503bc713842d3ef83910e675cf8d2d7..efefafe3ea808210639dd15021988a78221087dd 100755
--- a/server/scripts/create_jailkit_user.sh
+++ b/server/scripts/create_jailkit_user.sh
@@ -21,6 +21,12 @@ CHROOT_SHELL=$4
 CHROOT_P_USER=$5
 CHROOT_P_USER_HOMEDIR=$6
 
+### Check if USERHOMEDIR already exists ###
+if [ ! -d $CHROOT_HOMEDIR/.$CHROOT_USERHOMEDIR ]; then
+ mkdir -p $CHROOT_HOMEDIR/.$CHROOT_USERHOMEDIR
+ chown -R $CHROOT_USERNAME $CHROOT_HOMEDIR/.$CHROOT_USERHOMEDIR
+fi
+
 ### Reconfigure the chroot home directory for the user ###
 usermod --home=$CHROOT_HOMEDIR/.$CHROOT_USERHOMEDIR $CHROOT_USERNAME 2>/dev/null
 
diff --git a/server/scripts/ispconfig_patch b/server/scripts/ispconfig_patch
index 6ed2a3f5aebb078e787f726d95c1e10565025416..4470552c137e7c5fc5c0ee62178c8492a2a463a4 100644
--- a/server/scripts/ispconfig_patch
+++ b/server/scripts/ispconfig_patch
@@ -79,7 +79,9 @@ function simple_query($query, $answers, $default)
 }
 
 function is_installed($appname) {
-	exec('which '.escapeshellcmd($appname).' 2> /dev/null',$out,$returncode);
+	$out = array();
+	$returncode = null;
+	exec('which '.escapeshellarg($appname).' 2> /dev/null',$out,$returncode);
 	if(isset($out[0]) && stristr($out[0],$appname) && $returncode == 0) {
 		return true;
 	} else {
@@ -87,6 +89,13 @@ function is_installed($appname) {
 	}
 }
 
+$cmd_opt = getopt('', array('patch_id::'));
+$auto = false;
+if(isset($cmd_opt['patch_id'])) {
+	$patch_id = $cmd_opt['patch_id'];
+	$auto = true;
+}
+
 echo "\n\n".str_repeat('-',80)."\n";
 echo " _____ ___________   _____              __ _       
 |_   _/  ___| ___ \ /  __ \            / _(_)      
@@ -98,14 +107,18 @@ echo " _____ ___________   _____              __ _
                                              |___/ ";
 echo "\n".str_repeat('-',80)."\n";
 echo "\n\n>> Patch tool  \n\n";
-echo "Please enter the patch id that you want to be applied to your ISPConfig installation.\nPlease be aware that we take NO responsibility that this will work for you.\nOnly use patches if you know what you are doing.\n\n";
+if(!$auto) {
+	echo "Please enter the patch id that you want to be applied to your ISPConfig installation.\nPlease be aware that we take NO responsibility that this will work for you.\nOnly use patches if you know what you are doing.\n\n";
+}
 
 if(!is_installed('patch')) {
 	swriteln("The program 'patch' is missing on your server. Please install it and try again.");
 	exit;
 }
 
-$patch_id = simple_query('Enter patch id', false, '');
+if(!$auto) {
+	$patch_id = simple_query('Enter patch id', false, '');
+}
 if($patch_id == '') {
     swriteln("Patch terminated by user.\n");
     die();
@@ -122,8 +135,12 @@ if(!$patch_data) {
 
 $patch_text = @file_get_contents('http://ispconfig.org/downloads/patches/' . $patch_id . '.txt');
 if($patch_text) {
-    $ok = simple_query("Patch description:\n".str_repeat("-", 80)."\n".$patch_text."\n".str_repeat("-", 80)."\nDo you really want to apply this patch now?", array('y','n'), 'y');
-    if($ok != 'y') {
+    if($auto) {
+		$ok = 'y';
+	} else {
+		$ok = simple_query("Patch description:\n" . str_repeat("-", 80) . "\n" . $patch_text . "\n" . str_repeat("-", 80) . "\nDo you really want to apply this patch now?", array('y', 'n'), 'y');
+	}
+	if($ok != 'y') {
         swriteln("Patch terminated by user.\n");
         die();
     }
@@ -139,5 +156,3 @@ passthru('patch -p0 < ' . escapeshellarg($temp_file));
 unlink($temp_file);
 
 exit;
-
-?>
\ No newline at end of file
diff --git a/server/scripts/ispconfig_update.php b/server/scripts/ispconfig_update.php
index 0c2d3789e8e801ac93a97d71be21f8ba8db23180..2c77607b6576a44bf8fb0a6ca70c9a4f3d94d214 100644
--- a/server/scripts/ispconfig_update.php
+++ b/server/scripts/ispconfig_update.php
@@ -91,7 +91,7 @@ echo "Please choose the update method. For production systems select 'stable'. \
 $method = simple_query('Select update method', array('stable', 'git-stable', 'git-master'), 'stable');
 
 if($method == 'stable') {
-	$new_version = @file_get_contents('http://www.ispconfig.org/downloads/ispconfig3_version.txt') or die('Unable to retrieve version file.');
+	$new_version = @file_get_contents('https://www.ispconfig.org/downloads/ispconfig3_version.txt') or die('Unable to retrieve version file.');
 	$new_version = trim($new_version);
 	if(version_compare($new_version, ISPC_APP_VERSION, '>')) {
 		passthru('/usr/local/ispconfig/server/scripts/update_stable.sh');