diff --git a/.gitignore b/.gitignore
index 81d5108cae397b9151249495acd54897a8f1fe45..c49a12edc170f56db2006f682b46e8ab5401beef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,39 @@
-.DS_Store
 .idea
 /nbproject/private/
 .phplint-cache
 *.swp
+
+# macOS-specific things to exclude
+
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+Icon?
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# Configuration for the Nova editor
+.nova
\ No newline at end of file
diff --git a/docs/autoinstall_samples/autoinstall.conf_sample.php b/docs/autoinstall_samples/autoinstall.conf_sample.php
index 904d65403cb40c4060094c813dcc2eae4f121803..c8bf209f9fcb2d9284f2fed8b33f96091ec36496 100644
--- a/docs/autoinstall_samples/autoinstall.conf_sample.php
+++ b/docs/autoinstall_samples/autoinstall.conf_sample.php
@@ -29,7 +29,7 @@ $autoinstall['ssl_cert_email'] = 'hostmaster@'.$autoinstall['hostname'];
 
 /* optional expert mode settings, needed only for expert mode */
 $autoinstall['mysql_ispconfig_user'] = 'ispconfig'; // default: ispconfig
-$autoinstall['mysql_ispconfig_password'] = md5(uniqid(rand()));
+$autoinstall['mysql_ispconfig_password'] = bin2hex(random_bytes(20));
 $autoinstall['join_multiserver_setup'] = 'n'; // y, n (default)
 $autoinstall['mysql_master_hostname'] = 'master.example.com';
 $autoinstall['mysql_master_root_user'] = 'root';
@@ -70,4 +70,4 @@ $autoupdate['svc_detect_change_firewall_server'] = 'yes'; // yes (default), no
 $autoupdate['svc_detect_change_vserver_server'] = 'yes'; // yes (default), no
 $autoupdate['svc_detect_change_db_server'] = 'yes'; // yes (default), no
 
-?>
\ No newline at end of file
+?>
diff --git a/install/dist/conf/centos52.conf.php b/install/dist/conf/centos52.conf.php
index 6dff93f65f3a609cb32111f483fdb10727efbec4..9a7e2d0cadfd8e64cbb6e411f18446812237ea9e 100644
--- a/install/dist/conf/centos52.conf.php
+++ b/install/dist/conf/centos52.conf.php
@@ -221,4 +221,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/centos53.conf.php b/install/dist/conf/centos53.conf.php
index 6dff93f65f3a609cb32111f483fdb10727efbec4..9a7e2d0cadfd8e64cbb6e411f18446812237ea9e 100644
--- a/install/dist/conf/centos53.conf.php
+++ b/install/dist/conf/centos53.conf.php
@@ -221,4 +221,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/centos70.conf.php b/install/dist/conf/centos70.conf.php
index 0465e5618a0a33e6e4dc27813b237356c275d090..efe166e0791214cc26afc6768712a14283c31c2a 100644
--- a/install/dist/conf/centos70.conf.php
+++ b/install/dist/conf/centos70.conf.php
@@ -221,4 +221,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/centos72.conf.php b/install/dist/conf/centos72.conf.php
index 8bb2ca5239875b47d37a36a7ca940517f8091b57..f4a3c937baf7e1bcb42ae5701605458e1465a2af 100644
--- a/install/dist/conf/centos72.conf.php
+++ b/install/dist/conf/centos72.conf.php
@@ -224,4 +224,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/centos80.conf.php b/install/dist/conf/centos80.conf.php
index 0411fb9ce5e95238cf29c0cf1afb374cd5458209..1a354d3644f0033739b79a8406ac9a2d188b7c41 100644
--- a/install/dist/conf/centos80.conf.php
+++ b/install/dist/conf/centos80.conf.php
@@ -63,14 +63,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -224,4 +224,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/debian100.conf.php b/install/dist/conf/debian100.conf.php
index 0861af83deb1729230d9d978e0cdd38b0d0371d4..30f483980aad9cf651d70f2ca507085ece7d2814 100644
--- a/install/dist/conf/debian100.conf.php
+++ b/install/dist/conf/debian100.conf.php
@@ -65,14 +65,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -236,4 +236,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/debian110.conf.php b/install/dist/conf/debian110.conf.php
index c60152df5c846daa79feaa03868cc65236f0e32a..ce5bda7170aae2a3db322c9dd43650d67c462ef0 100644
--- a/install/dist/conf/debian110.conf.php
+++ b/install/dist/conf/debian110.conf.php
@@ -65,14 +65,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -236,4 +236,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/debian40.conf.php b/install/dist/conf/debian40.conf.php
index c04a54e998e5224e6d061937527184e18b27cc34..653b979a6735aef6823fc5a8ad0af603ec65e90c 100644
--- a/install/dist/conf/debian40.conf.php
+++ b/install/dist/conf/debian40.conf.php
@@ -229,4 +229,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 $conf['openvz']['installed'] = false;
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/debian60.conf.php b/install/dist/conf/debian60.conf.php
index e7c8f59845f5cf4b957c5c5fc791f61990ce493f..3577869bcd908616b54c7d4eb67756e01008f526 100644
--- a/install/dist/conf/debian60.conf.php
+++ b/install/dist/conf/debian60.conf.php
@@ -232,4 +232,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/debian90.conf.php b/install/dist/conf/debian90.conf.php
index e5d1d8a9b4f43c767ee5520b3cb61ce9d6f29424..1abbf732a1201da6d2ef036bc5c60f8affdb7d83 100644
--- a/install/dist/conf/debian90.conf.php
+++ b/install/dist/conf/debian90.conf.php
@@ -65,14 +65,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -236,4 +236,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/debiantesting.conf.php b/install/dist/conf/debiantesting.conf.php
index cbc380fffb931252aba4593aad1a8376a0b4d84a..6564be0dab1be4dc5924ce9157a15496459b65c5 100644
--- a/install/dist/conf/debiantesting.conf.php
+++ b/install/dist/conf/debiantesting.conf.php
@@ -65,14 +65,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -236,4 +236,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/fedora32.conf.php b/install/dist/conf/fedora32.conf.php
index 6701bb8729f66efaf198deed3b2037bc15475049..0280959988e0a2a8ef4ad57d354580dd350aba17 100644
--- a/install/dist/conf/fedora32.conf.php
+++ b/install/dist/conf/fedora32.conf.php
@@ -226,4 +226,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/fedora33.conf.php b/install/dist/conf/fedora33.conf.php
index 873376fa2cc5ddfbb1dcb63a360040083f196d32..677731c01e20c4c184218777e3c6e55f1b303b5e 100644
--- a/install/dist/conf/fedora33.conf.php
+++ b/install/dist/conf/fedora33.conf.php
@@ -226,4 +226,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/fedora9.conf.php b/install/dist/conf/fedora9.conf.php
index 23453ae48fc5fea77fbd965a8d57d28cafd49032..c05d21a155ee3545dafab4fb647b62d81bada6d8 100644
--- a/install/dist/conf/fedora9.conf.php
+++ b/install/dist/conf/fedora9.conf.php
@@ -221,4 +221,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/gentoo.conf.php b/install/dist/conf/gentoo.conf.php
index 24c7d0633e0b5b62db4004f329e83d503fb66aad..057d397796d931fe54a7a962227be66fe03a95e0 100644
--- a/install/dist/conf/gentoo.conf.php
+++ b/install/dist/conf/gentoo.conf.php
@@ -63,14 +63,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* SuPHP
 $conf['suphp']['config_file'] = '/etc/suphp.conf';
@@ -238,4 +238,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/opensuse110.conf.php b/install/dist/conf/opensuse110.conf.php
index 37f5a14d3b8e28f8517ac42e07690c8197480cb3..ac4f5a3e1850cf708199050e80d8c2bbdee2916d 100644
--- a/install/dist/conf/opensuse110.conf.php
+++ b/install/dist/conf/opensuse110.conf.php
@@ -221,4 +221,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';;
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/opensuse112.conf.php b/install/dist/conf/opensuse112.conf.php
index 378320a144eb645262d39e645a1e994d7d2823d7..eda4879004b23af81d6c9db6127b6c1b94697ba6 100644
--- a/install/dist/conf/opensuse112.conf.php
+++ b/install/dist/conf/opensuse112.conf.php
@@ -221,4 +221,7 @@ $conf['cron']['wget'] = '/usr/bin/wget';
 //* OpenVZ
 $conf['openvz']['installed'] = false;
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/ubuntu1604.conf.php b/install/dist/conf/ubuntu1604.conf.php
index 0d3fe23bada198df3c9aae42b6cb42784973a6c1..1893a93fbf09516e25b3e2cc0f2cbc6f22f7c187 100644
--- a/install/dist/conf/ubuntu1604.conf.php
+++ b/install/dist/conf/ubuntu1604.conf.php
@@ -65,14 +65,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -232,4 +232,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/ubuntu1710.conf.php b/install/dist/conf/ubuntu1710.conf.php
index 0730f8f2d533c712ee78173ebb28b3fed477c514..b37c91291f2182fd4cc7b506f4b657cc8c3608fd 100644
--- a/install/dist/conf/ubuntu1710.conf.php
+++ b/install/dist/conf/ubuntu1710.conf.php
@@ -65,14 +65,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -232,4 +232,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/ubuntu1804.conf.php b/install/dist/conf/ubuntu1804.conf.php
index 2a09f787db46f5abf8fc7d2e15e4804dfe9d3222..9c2721141329f762368f14003efd67243b6f3c14 100644
--- a/install/dist/conf/ubuntu1804.conf.php
+++ b/install/dist/conf/ubuntu1804.conf.php
@@ -65,14 +65,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -232,4 +232,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/conf/ubuntu2004.conf.php b/install/dist/conf/ubuntu2004.conf.php
index fe5a9b083b84db4cd400ef655e9cf5a84170f546..72bf90d45eefb06f65a54ff05c28057f4e5c12f7 100644
--- a/install/dist/conf/ubuntu2004.conf.php
+++ b/install/dist/conf/ubuntu2004.conf.php
@@ -65,14 +65,14 @@ $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']['ispconfig_password'] = md5(random_bytes(20));
 $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()));
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
 
 //* Apache
 $conf['apache']['installed'] = false; // will be detected automatically during installation
@@ -232,4 +232,7 @@ $conf['xmpp']['installed'] = false;
 $conf['xmpp']['init_script'] = 'metronome';
 
 
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
 ?>
diff --git a/install/dist/lib/centos_base.lib.php b/install/dist/lib/centos_base.lib.php
index 0fe988439d8098c255bf216489ab6e0053d99e2e..8c71db34a66531ec2cecc8f496ccb2113e4253d1 100644
--- a/install/dist/lib/centos_base.lib.php
+++ b/install/dist/lib/centos_base.lib.php
@@ -83,31 +83,28 @@ class installer_centos extends installer_dist {
 
 		$config_dir = $conf['postfix']['config_dir'];
 
-		// Adding amavis-services to the master.cf file if the service does not already exists
-		$add_amavis = !$this->get_postfix_service('amavis','unix');
-		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
-		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
-
-		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
-			//* backup master.cf
-			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-			// adjust amavis-config
-			if($add_amavis) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10025) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10027) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-		}
+		// Adding amavis-services to the master.cf file
+
+		// backup master.cf
+		if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+
+		// first remove the old service definitions
+		$this->remove_postfix_service('amavis','unix');
+		$this->remove_postfix_service('127.0.0.1:10025','inet');
+		$this->remove_postfix_service('127.0.0.1:10027','inet');
+
+		// then add them back
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
 
 		removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
 		replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 2e46ed16d351ae9bf906c588e8f39a36bd40989c..71809ac81ea0ec084a5dfa83031e3bb2e7859da2 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -330,31 +330,28 @@ class installer_dist extends installer_base {
 
 		$config_dir = $conf['postfix']['config_dir'];
 
-		// Adding amavis-services to the master.cf file if the service does not already exists
-		$add_amavis = !$this->get_postfix_service('amavis','unix');
-		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
-		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
-
-		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
-			//* backup master.cf
-			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-			// adjust amavis-config
-			if($add_amavis) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10025) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10027) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-		}
+		// Adding amavis-services to the master.cf file
+
+		// backup master.cf
+		if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+
+		// first remove the old service definitions
+		$this->remove_postfix_service('amavis','unix');
+		$this->remove_postfix_service('127.0.0.1:10025','inet');
+		$this->remove_postfix_service('127.0.0.1:10027','inet');
+
+		// then add them back
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
 
 		removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
 		replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index 83a4b5ffafee0b140530913f8c9bde449dad0b04..c98788e33cc60a3151c277ef4fd57fb360ee21c8 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -444,31 +444,28 @@ class installer extends installer_base
 
 		$config_dir = $conf['postfix']['config_dir'];
 
-		// Adding amavis-services to the master.cf file if the service does not already exists
-		$add_amavis = !$this->get_postfix_service('amavis','unix');
-		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
-		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
-
-		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
-			//* backup master.cf
-			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-			// adjust amavis-config
-			if($add_amavis) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10025) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10027) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-		}
+		// Adding amavis-services to the master.cf file
+
+		// backup master.cf
+		if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+
+		// first remove the old service definitions
+		$this->remove_postfix_service('amavis','unix');
+		$this->remove_postfix_service('127.0.0.1:10025','inet');
+		$this->remove_postfix_service('127.0.0.1:10027','inet');
+
+		// then add them back
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
 
 		//* Add the clamav user to the amavis group
 		exec('usermod -a -G amavis clamav');
@@ -509,7 +506,13 @@ class installer extends installer_base
 		 */
 
 
-		$content = preg_replace('/MISC_OTHER="[^"]+"/', 'MISC_OTHER="-b -A -E -Z -D -H -O clf:'.$logdir.'/transfer.log"', $content);
+		 //* Enable TLS if certificate file exists
+		 $enable_tls = '';
+		 if(file_exists('/etc/ssl/private/pure-ftpd.pem')) {
+			 $enable_tls = ' -Y 1';
+		 }
+
+		 $content = preg_replace('/MISC_OTHER="[^"]+"/', 'MISC_OTHER="-b -A -E -Z -D -H -O clf:'.$logdir.'/transfer.log'.$enable_tls.'"', $content);
 
 		$this->write_config_file($conf['pureftpd']['config_file'], $content);
 	}
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 3effb1d10c8cc61af717601cdaece67e784e9444..7cc368a14e3fdab0351f06f6c088c9c1d6611257 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -513,31 +513,28 @@ class installer_dist extends installer_base {
 
 		$config_dir = $conf['postfix']['config_dir'];
 
-		// Adding amavis-services to the master.cf file if the service does not already exists
-		$add_amavis = !$this->get_postfix_service('amavis','unix');
-		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
-		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
-
-		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
-			//* backup master.cf
-			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-			// adjust amavis-config
-			if($add_amavis) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10025) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10027) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-		}
+		// Adding amavis-services to the master.cf file
+
+		// backup master.cf
+		if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+
+		// first remove the old service definitions
+		$this->remove_postfix_service('amavis','unix');
+		$this->remove_postfix_service('127.0.0.1:10025','inet');
+		$this->remove_postfix_service('127.0.0.1:10027','inet');
+
+		// then add them back
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
+
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
+		af($config_dir.'/master.cf', $content);
+		unset($content);
 
 		// Add the clamav user to the vscan group
 		//exec('groupmod --add-user clamav vscan');
diff --git a/install/dist/tpl/gentoo/jk_init.ini.master b/install/dist/tpl/gentoo/jk_init.ini.master
index 6e11d05fd5414b5d3904bc3b188efd8b52e8f816..267210535b19d07877e101210ed5e2dab8079ce7 100644
--- a/install/dist/tpl/gentoo/jk_init.ini.master
+++ b/install/dist/tpl/gentoo/jk_init.ini.master
@@ -96,8 +96,8 @@ regularfiles = /etc/vimrc
 directories = /etc/joe, /etc/terminfo, /usr/share/vim, /usr/share/terminfo, /usr/lib/terminfo
 
 [netutils]
-comment = several internet utilities like wget, ftp, rsync, scp, ssh
-executables = /usr/bin/wget, /usr/bin/lynx, /usr/bin/ftp, /usr/bin/host, /usr/bin/rsync, /usr/bin/smbclient
+comment = several internet utilities like curl, wget, ftp, rsync, scp, ssh
+executables = /usr/bin/curl /usr/bin/wget, /usr/bin/lynx, /usr/bin/ftp, /usr/bin/host, /usr/bin/rsync, /usr/bin/smbclient
 includesections = netbasics, ssh, sftp, scp
 directories = /etc/ssl/certs/
 regularfiles = /usr/lib/ssl/certs
diff --git a/install/install.php b/install/install.php
index b94c1c7f6f78346b3b63ddb4583c766b2d47d7b3..9cc6bb5fa7db8127355fa62711428fe6bd4fbde3 100644
--- a/install/install.php
+++ b/install/install.php
@@ -500,6 +500,12 @@ if($force) {
 	swriteln('Configuring OpenVZ');
 }
 
+// Configure AppArmor
+if($conf['apparmor']['installed']){
+  swriteln('Configuring AppArmor');
+  $inst->configure_apparmor();
+}
+
 if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
 	//* Check for Firewall
 	if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
diff --git a/install/lib/compatibility.inc.php b/install/lib/compatibility.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..562e07ada42f404cae0708f32105dcf39a84768c
--- /dev/null
+++ b/install/lib/compatibility.inc.php
@@ -0,0 +1,80 @@
+<?php
+
+/*
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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.
+*/
+
+/* random_bytes can be dropped when php 5.6 support is dropped */
+if (! function_exists('random_bytes')) {
+	function random_bytes($length) {
+		return openssl_random_pseudo_bytes($length);
+	}
+}
+
+/* random_int can be dropped when php 5.6 support is dropped */
+if (! function_exists('random_int')) {
+	function random_int($min=null, $max=null) {
+		if (null === $min) {
+			$min = PHP_INT_MIN;
+		}
+
+		if (null === $max) {
+			$min = PHP_INT_MAX;
+		}
+
+		if (!is_int($min) || !is_int($max)) {
+			trigger_error('random_int: $min and $max must be integer values', E_USER_NOTICE);
+			$min = (int)$min;
+			$max = (int)$max;
+		}
+
+		if ($min > $max) {
+			trigger_error('random_int: $max can\'t be lesser than $min', E_USER_WARNING);
+			return null;
+		}
+
+		$range = $counter = $max - $min;
+		$bits = 1;
+
+		while ($counter >>= 1) {
+			++$bits;
+		}
+
+		$bytes = (int)max(ceil($bits/8), 1);
+		$bitmask = pow(2, $bits) - 1;
+
+		if ($bitmask >= PHP_INT_MAX) {
+			$bitmask = PHP_INT_MAX;
+		}
+
+		do {
+			$result = hexdec(bin2hex(random_bytes($bytes))) & $bitmask;
+		} while ($result > $range);
+
+		return $result + $min;
+	}
+}
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 6ff32bb785f27dd2c71adb610b23f1a0ce14e992..d9b482a842f835cd9feed7e52da9894c06d7fae6 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -29,6 +29,9 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 error_reporting(E_ALL|E_STRICT);
 
+if(version_compare(phpversion(), '7.0', '<')) {
+	require_once 'compatibility.inc.php';
+}
 
 $FILE = realpath('../install.php');
 
@@ -291,96 +294,89 @@ function get_distname() {
 		}
 	}
 
+	//** RHEL (including compatible clones) & Fedora
+        elseif(file_exists('/etc/redhat-release') && file_exists('/etc/os-release')) {
+
+		$content = file_get_contents('/etc/os-release');
+
+		preg_match('/(?<=PRETTY_NAME=\").+?(?=\")/', $content, $prettyname);
+		preg_match('/(?<=NAME=\").+?(?=\")/', $content, $name);
+		preg_match('/(?<=VERSION=\").+?(?=\")/', $content, $version);
+		preg_match('/(?<=VERSION_ID=\").+?(?=\")/', $content, $versionid);
+
+                if(stristr($prettyname[0], 'Fedora 32 (Thirty Two)')) {
+                        $distname = 'Fedora';
+                        $distver = '32';
+                        $distid = 'fedora32';
+                        $distbaseid = 'fedora';
+                        swriteln("Operating System: Fedora 32 or compatible\n");
+                } elseif(stristr($prettyname[0], 'Fedora 33 (Thirty Three)')) {
+                        $distname = 'Fedora';
+                        $distver = '33';
+                        $distid = 'fedora33';
+                        $distbaseid = 'fedora';
+                        swriteln("Operating System: Fedora 33 or compatible\n");
+                //** RHEL 7 and compatible clones
+                } elseif(preg_match('/^(?:7|7\.[0-9]{1,2})$/', $versionid[0])) {
+                        preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', file_get_contents('/etc/redhat-release'), $centos7_version);
+                        $distname = $name[0];
+                        $distver = is_array($centos7_version)? implode('.', array_filter(array($centos7_version[1][0],$centos7_version[2][0],$centos7_version[3][0]),'strlen')) : $version[0];
+                        $distid = 'centos72';
+			$distbaseid = 'fedora';
+                        swriteln("Operating System: " . $distname . " " .  $distver . "\n");
+		//** RHEL 8 and compatible clones
+                } elseif(preg_match('/^(?:8|8\.[0-9]{1,2})$/', $versionid[0])) {
+                        $distname = $name[0];
+                        $distver = $version[0];
+                        $distid = 'centos80';
+                        $distbaseid = 'fedora';
+                        swriteln("Operating System: " . $prettyname[0] . "\n");
+		} else {
+                        $distname = 'Redhat';
+                        $distver = 'Unknown';
+                        $distid = 'fedora9';
+                        $distbaseid = 'fedora';
+                        swriteln("Operating System: Redhat or compatible\n");
+		}
+	//** CentOS 6
+        } elseif(file_exists('/etc/redhat-release') && !file_exists('/etc/os-release') && !file_exists('/etc/els-release')) {
 
-	//** Redhat
-	elseif(file_exists('/etc/redhat-release')) {
-
-		$content = file_get_contents('/etc/redhat-release');
+                $content = file_get_contents('/etc/redhat-release');
 
-		if(stristr($content, 'Fedora release 9 (Sulphur)')) {
-			$distname = 'Fedora';
-			$distver = '9';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-			swriteln("Operating System: Fedora 9 or compatible\n");
-		} elseif(stristr($content, 'Fedora release 10 (Cambridge)')) {
-			$distname = 'Fedora';
-			$distver = '10';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-			swriteln("Operating System: Fedora 10 or compatible\n");
-		} elseif(stristr($content, 'Fedora release 10')) {
-			$distname = 'Fedora';
-			$distver = '11';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-			swriteln("Operating System: Fedora 11 or compatible\n");
-		} elseif(stristr($content, 'Fedora release 32 (Thirty Two)')) {
-			$distname = 'Fedora';
-			$distver = '32';
-			$distid = 'fedora32';
-			$distbaseid = 'fedora';
-			swriteln("Operating System: Fedora 32 or compatible\n");
-		} elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) {
-			$distname = 'Fedora';
-			$distver = '33';
-			$distid = 'fedora33';
-			$distbaseid = 'fedora';
-			swriteln("Operating System: Fedora 33 or compatible\n");
-		} elseif(stristr($content, 'CentOS release 5.2 (Final)')) {
-			$distname = 'CentOS';
-			$distver = '5.2';
-			$distid = 'centos52';
-			$distbaseid = 'fedora';
-			swriteln("Operating System: CentOS 5.2 or compatible\n");
-		} elseif(stristr($content, 'CentOS release 5.3 (Final)')) {
-			$distname = 'CentOS';
-			$distver = '5.3';
-			$distid = 'centos53';
-			$distbaseid = 'fedora';
-			swriteln("Operating System: CentOS 5.3 or compatible\n");
-		} elseif(stristr($content, 'CentOS release 5')) {
-			$distname = 'CentOS';
-			$distver = 'Unknown';
+                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+                        preg_match_all('/(6\.?([0-9]{0,2})\.?(\s)?([a-zA-Z()]+))$/', $content, $centos6_version);
+                        $distname = 'CentOS Linux';
+			$distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
 			$distid = 'centos53';
 			$distbaseid = 'fedora';
-			swriteln("Operating System: CentOS 5 or compatible\n");
-		} elseif(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
-			$distname = 'CentOS';
-			$distver = 'Unknown';
-			$distid = 'centos53';
-			$distbaseid = 'fedora';
-			swriteln("Operating System: CentOS 6 or compatible\n");
-		} elseif(stristr($content, 'CentOS Linux release 7')) {
-			$distname = 'CentOS';
-			$distver = 'Unknown';
-			$distbaseid = 'fedora';
-			$var=explode(" ", $content);
-			$var=explode(".", $var[3]);
-			$var=$var[0].".".$var[1];
-			if($var=='7.0' || $var=='7.1') {
-				$distid = 'centos70';
-			} else {
-				$distid = 'centos72';
-			}
-			swriteln("Operating System: CentOS $var\n");
-        } elseif(stristr($content, 'CentOS Linux release 8')) {
-			$distname = 'CentOS';
-			$distver = 'Unknown';
-			$distbaseid = 'fedora';
-			$distid = 'centos80';
-			$var=explode(" ", $content);
-			$var=explode(".", $var[3]);
-			$var=$var[0].".".$var[1];
-			swriteln("Operating System: CentOS $var\n");
-		} else {
-			$distname = 'Redhat';
-			$distver = 'Unknown';
-			$distid = 'fedora9';
+                        swriteln("Operating System: " . $distname . " " .  $distver . "\n");
+
+                } else {
+                        $distname = 'Redhat';
+                        $distver = 'Unknown';
+                        $distid = 'fedora9';
+                        $distbaseid = 'fedora';
+                }
+	//** CentOS 6 Extended Lifecycle Support by CloudLinux
+        } elseif(file_exists('/etc/redhat-release') && file_exists('/etc/els-release') && !file_exists('/etc/os-release')) {
+
+                $content = file_get_contents('/etc/els-release');
+
+                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+                        preg_match_all('/(6)\.?([0-9]{0,2})?\.?\s([a-zA-Z(), ]+)?$/', $content, $centos6_version);
+                        $distname = 'CentOS Linux';
+                        $distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
+                        $distid = 'centos53';
 			$distbaseid = 'fedora';
-			swriteln("Operating System: Redhat or compatible, unknown version.\n");
-		}
-	}
+                        swriteln("Operating System: " . $distname . " " .  $distver . "\n");
+                } else {
+                        $distname = 'Redhat';
+                        $distver = 'Unknown';
+                        $distid = 'fedora9';
+                        $distbaseid = 'fedora';
+                }
+        }
+
 
 	//** Gentoo
 	elseif(file_exists('/etc/gentoo-release')) {
@@ -842,7 +838,7 @@ function is_installed($appname) {
 
 function get_ispconfig_port_number() {
 	global $conf;
-	if($conf['nginx']['installed'] == true){
+	if(is_file($conf['nginx']['vhost_conf_dir'].'/ispconfig.vhost')) {
 		$ispconfig_vhost_file = $conf['nginx']['vhost_conf_dir'].'/ispconfig.vhost';
 		$regex = '/listen (\d+)/';
 	} else {
@@ -868,7 +864,7 @@ function get_ispconfig_port_number() {
 
 function get_apps_vhost_port_number() {
 	global $conf;
-	if($conf['nginx']['installed'] == true){
+	if(is_file($conf['nginx']['vhost_conf_dir'].'/apps.vhost')) {
 		$ispconfig_vhost_file = $conf['nginx']['vhost_conf_dir'].'/apps.vhost';
 		$regex = '/listen (\d+)/';
 	} else {
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index d5f3f6b6aadad22a94c6f373a04e24313afb9d87..a73b9d0922f82f3e29d4192f176aadd730f163fe 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -190,6 +190,7 @@ class installer_base {
 			$salt_length = 12;
 		}
 
+		// todo: replace the below with password_hash() when we drop php5.4 support
 		if(function_exists('openssl_random_pseudo_bytes')) {
 			$salt .= substr(bin2hex(openssl_random_pseudo_bytes($salt_length)), 0, $salt_length);
 		} else {
@@ -225,6 +226,7 @@ class installer_base {
 		if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true;
 		if(is_installed('squid')) $conf['squid']['installed'] = true;
 		if(is_installed('nginx')) $conf['nginx']['installed'] = true;
+		if(is_installed('apparmor_status')) $conf['apparmor']['installed'] = true;
 		if(is_installed('iptables') && is_installed('ufw')) {
 			$conf['ufw']['installed'] = true;
 		} elseif(is_installed('iptables')) {
@@ -247,6 +249,7 @@ class installer_base {
 		$msg = '';
 
 		if(version_compare(phpversion(), '5.4', '<')) $msg .= "PHP Version 5.4 or newer is required. The currently used PHP version is ".phpversion().".\n";
+		if(version_compare(phpversion(), '8.0', '>=')) $msg .= "PHP Version 8 is not supported yet. Change PHP version back to the default version of the OS. The currently used PHP version is ".phpversion().".\n";
 		if(!function_exists('curl_init')) $msg .= "PHP Curl Module is missing.\n";
 		if(!function_exists('mysqli_connect')) $msg .= "PHP MySQLi Module is nmissing.\n";
 		if(!function_exists('mb_detect_encoding')) $msg .= "PHP Multibyte Module (MB) is missing.\n";
@@ -788,7 +791,7 @@ class installer_base {
 					$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
 				}
 
-				$query = "GRANT SELECT, UPDATE(`dnssec_initialized`, `dnssec_info`, `dnssec_last_signed`) ON ?? TO ?@?";
+				$query = "GRANT SELECT, UPDATE(`dnssec_initialized`, `dnssec_info`, `dnssec_last_signed`, `rendered_zone`) ON ?? TO ?@?";
 				if ($verbose){
 					echo $query ."\n";
 				}
@@ -1107,7 +1110,7 @@ class installer_base {
 		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
 		unset($server_ini_rec);
 
-		//* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update
+		//* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removal after an update
 		$rbl_list = '';
 		if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') {
 			$rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list']));
@@ -1647,6 +1650,12 @@ class installer_base {
 	public function configure_amavis() {
 		global $conf;
 
+		//* These postconf commands will be executed on installation and update
+		$server_ini_rec = $this->db->queryOneRecord("SELECT mail_server, config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
+		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
+		$mail_server = ($server_ini_rec['mail_server']) ? true : false;
+		unset($server_ini_rec);
+
 		// amavisd user config file
 		$configfile = 'amavisd_user_config';
 		if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) copy($conf['amavis']['config_dir'].'/conf.d/50-user', $conf['amavis']['config_dir'].'/50-user~');
@@ -1661,63 +1670,82 @@ class installer_base {
 		chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
 		chgrp($conf['amavis']['config_dir'].'/conf.d/50-user', 'amavis');
 
-		// TODO: chmod and chown on the config file
-
-		// test if lmtp if available
-		$configure_lmtp = $this->get_postfix_service('lmtp','unix');
+		$config_dir = $conf['postfix']['config_dir'];
+		$quoted_config_dir = preg_quote($config_dir, '|');
 
-		// Adding the amavisd commands to the postfix configuration
-		// Add array for no error in foreach and maybe future options
-		$postconf_commands = array ();
+		$mail_config = $server_ini_array['mail'];
+		//* only change postfix config if amavisd is active filter
+		if($mail_server && $mail_config['content_filter'] === 'amavisd') {
+			// test if lmtp if available
+			$configure_lmtp = $this->get_postfix_service('lmtp','unix');
 
-		// Check for amavisd -> pure webserver with postfix for mailing without antispam
-		if ($conf['amavis']['installed']) {
-			$content_filter_service = ($configure_lmtp) ? 'lmtp' : 'amavis';
-			$postconf_commands[] = "content_filter = ${content_filter_service}:[127.0.0.1]:10024";
-			$postconf_commands[] = 'receive_override_options = no_address_mappings';
-		}
+			// Adding the amavisd commands to the postfix configuration
+			$postconf_commands = array ();
 
-		// Make a backup copy of the main.cf file
-		copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~2');
+			// Check for amavisd -> pure webserver with postfix for mailing without antispam
+			if ($conf['amavis']['installed']) {
+				$content_filter_service = ($configure_lmtp) ? 'lmtp' : 'amavis';
+				$postconf_commands[] = "content_filter = ${content_filter_service}:[127.0.0.1]:10024";
+				$postconf_commands[] = 'receive_override_options = no_address_mappings';
+				$postconf_commands[] = 'address_verify_virtual_transport = smtp:[127.0.0.1]:10025';
+				$postconf_commands[] = 'address_verify_transport_maps = static:smtp:[127.0.0.1]:10025';
+			}
 
-		// Executing the postconf commands
-		foreach($postconf_commands as $cmd) {
-			$command = "postconf -e '$cmd'";
-			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+			$new_options = array();
+			foreach ($options as $value) {
+				$value = trim($value);
+				if ($value == '') continue;
+				if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
+					continue;
+				}
+				$new_options[] = $value;
+			}
+			if ($configure_lmtp) {
+				for ($i = 0; isset($new_options[$i]); $i++) {
+					if ($new_options[$i] == 'reject_unlisted_recipient') {
+						array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf"));
+						break;
+					}
+				}
+				# postfix < 3.3 needs this when using reject_unverified_recipient:
+				if(version_compare($postfix_version, 3.3, '<')) {
+					$postconf_commands[] = "enable_original_recipient = yes";
+				}
+			}
+			$postconf_commands[] = "smtpd_recipient_restrictions = ".implode(", ", $new_options);
 
-		$config_dir = $conf['postfix']['config_dir'];
+			// Make a backup copy of the main.cf file
+			copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~2');
 
-		// Adding amavis-services to the master.cf file if the service does not already exists
-//		$add_amavis = !$this->get_postfix_service('amavis','unix');
-//		$add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
-//		$add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
-		//*TODO: check templates against existing postfix-services to make sure we use the template
+			// Executing the postconf commands
+			foreach($postconf_commands as $cmd) {
+				$command = "postconf -e '$cmd'";
+				caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+			}
 
-		// Or just remove the old service definitions and add them again?
-		$add_amavis = $this->remove_postfix_service('amavis','unix');
-		$add_amavis_10025 = $this->remove_postfix_service('127.0.0.1:10025','inet');
-		$add_amavis_10027 = $this->remove_postfix_service('127.0.0.1:10027','inet');
+			// Adding amavis-services to the master.cf file
 
-		if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
-			//* backup master.cf
+			// backup master.cf
 			if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
-			// adjust amavis-config
-			if($add_amavis) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10025) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-			}
-			if ($add_amavis_10027) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
-				af($config_dir.'/master.cf', $content);
-				unset($content);
-    		}
+
+			// first remove the old service definitions
+			$this->remove_postfix_service('amavis','unix');
+			$this->remove_postfix_service('127.0.0.1:10025','inet');
+			$this->remove_postfix_service('127.0.0.1:10027','inet');
+
+			// then add them back
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
+			af($config_dir.'/master.cf', $content);
+			unset($content);
+
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
+			af($config_dir.'/master.cf', $content);
+			unset($content);
+
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
+			af($config_dir.'/master.cf', $content);
+			unset($content);
 		}
 
 		// Add the clamav user to the amavis group
@@ -1747,14 +1775,21 @@ class installer_base {
 		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_rec = $this->db->queryOneRecord("SELECT mail_server, config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
 		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
+		$mail_server = ($server_ini_rec['mail_server']) ? true : false;
 		unset($server_ini_rec);
 
+		$config_dir = $conf['postfix']['config_dir'];
+		$quoted_config_dir = preg_quote($config_dir, '|');
+
 		$mail_config = $server_ini_array['mail'];
-		if($mail_config['content_filter'] === 'rspamd') {
-			exec("postconf -X 'receive_override_options'");
-			exec("postconf -X 'content_filter'");
+		//* only change postfix config if rspamd is active filter
+		if($mail_server && $mail_config['content_filter'] === 'rspamd') {
+			exec("postconf -X receive_override_options");
+			exec("postconf -X content_filter");
+			exec("postconf -X address_verify_virtual_transport");
+			exec("postconf -X address_verify_transport_maps");
 
 			exec("postconf -e 'smtpd_milters = inet:localhost:11332'");
 			exec("postconf -e 'non_smtpd_milters = inet:localhost:11332'");
@@ -1805,6 +1840,9 @@ class installer_base {
 				if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
 					continue;
 				}
+				if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
+					continue;
+				}
 				$new_options[] = $value;
 			}
 			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
@@ -2442,6 +2480,13 @@ class installer_base {
 		exec('chown root:root '.$conf["squid"]["config_dir"].'/'.$configfile);
 	}
 
+	public function configure_apparmor() {
+		$configfile = 'apparmor_usr.sbin.named';
+		if(is_file('/etc/apparmor.d/local/usr.sbin.named')) copy('/etc/apparmor.d/local/usr.sbin.named', '/etc/apparmor.d/local/usr.sbin.named~');
+		$content = rf("tpl/".$configfile.".master");
+		wf('/etc/apparmor.d/local/usr.sbin.named', $content);
+	}
+
 	public function configure_ufw_firewall()
 	{
 		if($this->is_update == false) {
@@ -2724,11 +2769,17 @@ class installer_base {
 			$content = str_replace('{use_socket}', $use_socket, $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);
+			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);
+			} elseif(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);
+			} elseif (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);
+			} elseif (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);
+			} elseif (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);
+			}
 
 			wf($vhost_conf_dir.'/apps.vhost', $content);
 
@@ -2825,7 +2876,7 @@ class installer_base {
 		if(@is_link($vhost_conf_enabled_dir.'/' . $use_symlink)) {
 			unlink($vhost_conf_enabled_dir.'/' . $use_symlink);
 		}
-		if(!@is_link($vhost_conf_enabled_dir.'/' . $use_symlink)) {
+		if(!@is_file($vhost_conf_enabled_dir.'/' . $use_symlink)) {
 			symlink($vhost_conf_dir.'/' . $use_name, $vhost_conf_enabled_dir.'/' . $use_symlink);
 		}
 	}
diff --git a/install/sql/incremental/upd_0096.sql b/install/sql/incremental/upd_0096.sql
new file mode 100644
index 0000000000000000000000000000000000000000..db4870ad663415a4eb1e7fa85d1fa09417690739
--- /dev/null
+++ b/install/sql/incremental/upd_0096.sql
@@ -0,0 +1,19 @@
+-- create mail_relay_domain and load with current domains from mail_transport table
+CREATE TABLE IF NOT EXISTS `mail_relay_domain` (
+	  `relay_domain_id` bigint(20) NOT NULL AUTO_INCREMENT,
+	  `sys_userid` int(11) NOT NULL DEFAULT '0',
+	  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+	  `sys_perm_user` varchar(5) DEFAULT NULL,
+	  `sys_perm_group` varchar(5) DEFAULT NULL,
+	  `sys_perm_other` varchar(5) DEFAULT NULL,
+	  `server_id` int(11) NOT NULL DEFAULT '0',
+	  `domain` varchar(255) DEFAULT NULL,
+	  `access` varchar(255) NOT NULL DEFAULT 'OK',
+	  `active` varchar(255) NOT NULL DEFAULT 'y',
+	  PRIMARY KEY (`relay_domain_id`),
+	  UNIQUE KEY `domain` (`domain`, `server_id`)
+	) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+INSERT INTO `mail_relay_domain` SELECT NULL, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `domain`, 'OK', `active` FROM `mail_transport` WHERE `domain` NOT LIKE '%@%' AND `domain` LIKE '%.%' GROUP BY `domain`, `server_id`;
+
+ALTER TABLE `dns_soa` ADD `rendered_zone` MEDIUMTEXT NULL AFTER `dnssec_info`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 4d61c38d8f56712160c8ba9bc8ec9a31813d3ee3..ec6596bc779e4274d5612273e5f9fa96fd9a27cd 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -635,6 +635,7 @@ CREATE TABLE `dns_soa` (
   `dnssec_algo` SET('NSEC3RSASHA1','ECDSAP256SHA256') NOT NULL DEFAULT 'ECDSAP256SHA256',
   `dnssec_last_signed` BIGINT NOT NULL DEFAULT '0',
   `dnssec_info` TEXT NULL,
+  `rendered_zone` MEDIUMTEXT NULL,
   PRIMARY KEY  (`id`),
   UNIQUE KEY `origin` (`origin`),
   KEY `active` (`active`)
@@ -970,6 +971,27 @@ CREATE TABLE `mail_mailinglist` (
 
 -- --------------------------------------------------------
 
+--
+-- Table structure for Table `mail_relay_domain`
+--
+
+CREATE TABLE IF NOT EXISTS `mail_relay_domain` (
+  `relay_domain_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `sys_userid` int(11) NOT NULL DEFAULT '0',
+  `sys_groupid` int(11) NOT NULL DEFAULT '0',
+  `sys_perm_user` varchar(5) DEFAULT NULL,
+  `sys_perm_group` varchar(5) DEFAULT NULL,
+  `sys_perm_other` varchar(5) DEFAULT NULL,
+  `server_id` int(11) NOT NULL DEFAULT '0',
+  `domain` varchar(255) DEFAULT NULL,
+  `access` varchar(255) NOT NULL DEFAULT 'OK',
+  `active` varchar(255) NOT NULL DEFAULT 'y',
+  PRIMARY KEY (`relay_domain_id`),
+  UNIQUE KEY `domain` (`domain`, `server_id`)
+) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
 --
 -- Table structure for Table `mail_relay_recipient`
 --
diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index 8d6df71b7da0cf2c07e7e57cce50c77d04787b2e..6957ed5eb8062dc8f65021710ebb637c5e22dc7d 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -9,10 +9,12 @@
 <VirtualHost {tmpl_var name='apps_vhost_ip'}:{tmpl_var name='apps_vhost_port'}>
   ServerAdmin webmaster@localhost
   {tmpl_var name='apps_vhost_servername'}
-
-  <FilesMatch "\.ph(p3?|tml)$">
-    SetHandler None
-  </FilesMatch>
+  
+  <Directory {tmpl_var name='apps_vhost_dir'}>
+    <FilesMatch "\.ph(p3?|tml)$">
+      SetHandler None
+    </FilesMatch>
+  </Directory>
 
   # SSL Configuration
   <tmpl_var name="ssl_comment">SSLEngine On
@@ -96,7 +98,7 @@
     DocumentRoot {tmpl_var name='apps_vhost_dir'}
     SuexecUserGroup ispapps ispapps
     <Directory {tmpl_var name='apps_vhost_dir'}>
-		Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
+		Options -Indexes +FollowSymLinks +MultiViews +ExecCGI
 		AllowOverride AuthConfig Indexes Limit Options FileInfo
 	    <FilesMatch "\.php$">
 		  SetHandler fcgid-script
@@ -109,6 +111,8 @@
 		Allow from all
 		</tmpl_if>
     </Directory>
+    IPCCommTimeout  7200
+    MaxRequestLen 15728640 
   </IfModule>
 
 {tmpl_if name="use_rspamd"}
diff --git a/install/tpl/apache_ispconfig.vhost.master b/install/tpl/apache_ispconfig.vhost.master
index 0d12694f7ae57b57f1a24c4407b37d45d9ae9492..df0b98fda7da7c7c4ff5896742a65ad1f8476350 100644
--- a/install/tpl/apache_ispconfig.vhost.master
+++ b/install/tpl/apache_ispconfig.vhost.master
@@ -112,4 +112,8 @@ NameVirtualHost *:<tmpl_var name="vhost_port">
   <tmpl_var name="ssl_comment">SSLStaplingResponderTimeout 5
   <tmpl_var name="ssl_comment">SSLStaplingReturnResponderErrors Off
   </tmpl_if>
+
+  # Redirect http to https
+  ErrorDocument 400 "<script>document.location.href='https://'+location.hostname+':'+location.port;</script><h1>Error 400 - trying to redirect</h1>"
+
 </VirtualHost>
diff --git a/install/tpl/apparmor_usr.sbin.named.master b/install/tpl/apparmor_usr.sbin.named.master
new file mode 100644
index 0000000000000000000000000000000000000000..38a30ffc875e1447001523efbcd42192fdb6082a
--- /dev/null
+++ b/install/tpl/apparmor_usr.sbin.named.master
@@ -0,0 +1,2 @@
+/etc/bind/slave/** lrw,
+/etc/bind/slave/ rw,
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 5023caf6bee402159e822caa7a396ccd8f910242..8bd34f6928b8a57c516bf4edd848c7892f8018c8 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -59,3 +59,5 @@ smtp_sender_dependent_authentication = yes
 smtp_sasl_auth_enable = yes
 smtp_sasl_security_options = noanonymous, noplaintext
 smtp_sasl_tls_security_options = noanonymous
+authorized_flush_users =
+authorized_mailq_users = nagios, icinga
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index c5786c6ea8cf54262d0325a0ebccbe97d2cca640..8d2b1a9dc25b5211e0c7a42dfb69354d53455b78 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -55,3 +55,5 @@ smtp_sender_dependent_authentication = yes
 smtp_sasl_auth_enable = yes
 smtp_sasl_security_options = noanonymous, noplaintext
 smtp_sasl_tls_security_options = noanonymous
+authorized_flush_users =
+authorized_mailq_users = nagios, icinga
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 405640f52a9dd4310289db241ee6fce61fec8aea..c6b1c2f9c509c6ba20ef94572192c676ac274d4a 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -54,3 +54,5 @@ smtp_sender_dependent_authentication = yes
 smtp_sasl_auth_enable = yes
 smtp_sasl_security_options = noanonymous, noplaintext
 smtp_sasl_tls_security_options = noanonymous
+authorized_flush_users =
+authorized_mailq_users = nagios, icinga
diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master
index e33383da5fd45d85fdf7c9286cfdd38eb1c95c3b..0f9acb1cedf6c6e733c49e73397a876730268cc9 100644
--- a/install/tpl/jk_init.ini.master
+++ b/install/tpl/jk_init.ini.master
@@ -87,7 +87,7 @@ paths = awk, bzip2, bunzip2, ldd, less, clear, cut, du, find, head, less, md5sum
 includesections = basicshell, midnightcommander, editors
 
 [terminfo]
-comment = terminfo databases, required for example for ncurses or vim 
+comment = terminfo databases, required for example for ncurses or vim
 paths = /etc/terminfo, /usr/share/terminfo, /lib/terminfo
 
 [editors]
@@ -96,8 +96,8 @@ includesections = terminfo
 paths = joe, nano, vi, vim, /etc/vimrc, /etc/joe, /usr/share/vim
 
 [netutils]
-comment = several internet utilities like wget, ftp, rsync, scp, ssh
-paths = wget, lynx, ftp, host, rsync, smbclient
+comment = several internet utilities like curl, wget, ftp, rsync, scp, ssh
+paths = curl, wget, lynx, ftp, host, rsync, smbclient
 includesections = netbasics, ssh, sftp, scp
 
 [apacheutils]
@@ -175,7 +175,7 @@ includesections = php, uidbasics, netbasics
 
 [node]
 comment = NodeJS
-paths = npm, node, nodejs, /usr/lib/nodejs, /usr/share/npm, /usr/share/node-mime, /usr/lib/node_modules, /usr/local/lib/nodejs, /usr/local/lib/node_modules, elmi-to-json, /usr/local/bin/elmi-to-json
+paths = npm, npx, node, nodejs, semver, /usr/lib/nodejs, /usr/share/nodejs, /usr/share/npm, /usr/share/node-mime, /usr/lib/node_modules, /usr/local/lib/nodejs, /usr/local/lib/node_modules, /etc/npmrc, /etc/npmignore, elmi-to-json, /usr/local/bin/elmi-to-json
 
 [env]
 comment = /usr/bin/env for environment variables
@@ -233,6 +233,16 @@ comment = php version 8.0
 paths = /usr/bin/php8.0, /usr/lib/php/8.0/, /usr/lib/php/20200930/, /usr/share/php/8.0/, /etc/php/8.0/cli/, /etc/php/8.0/mods-available/
 includesections = php_common
 
+[php8_1]
+comment = php version 8.1
+paths = /usr/bin/php8.1, /usr/lib/php/8.1/, /usr/lib/php/20210902/, /usr/share/php/8.1/, /etc/php/8.1/cli/, /etc/php/8.1/mods-available/
+includesections = php_common
+
+[php8_2]
+comment = php version 8.2
+paths = /usr/bin/php8.2, /usr/lib/php/8.2/, /usr/lib/php/20210902/, /usr/share/php/8.2/, /etc/php/8.2/cli/, /etc/php/8.2/mods-available/
+includesections = php_common
+
 [imagemagick]
 comment = ImageMagick needed for php-imagemagick extension
 paths = /usr/share/ImageMagick-*, /etc/ImageMagick-*, /usr/lib/*/ImageMagick-*
diff --git a/install/tpl/master_cf_amavis.master b/install/tpl/master_cf_amavis.master
index 243f28a288dc2e5f27a54f79422a9b5f48571d76..a565f1a1bb50977d8d945e1efcf3b07b641c617d 100644
--- a/install/tpl/master_cf_amavis.master
+++ b/install/tpl/master_cf_amavis.master
@@ -2,5 +2,5 @@
 amavis unix - - - - 2 smtp
         -o smtp_data_done_timeout=1200
         -o smtp_send_xforward_command=yes
-		-o smtp_bind_address=
+        -o smtp_bind_address=
 
diff --git a/install/tpl/master_cf_amavis10025.master b/install/tpl/master_cf_amavis10025.master
index 6dee892264d3d6f5491fecb104a0242f079cda88..68d4561494b0568c7b4bbac4e6d51ad13c1f66f2 100644
--- a/install/tpl/master_cf_amavis10025.master
+++ b/install/tpl/master_cf_amavis10025.master
@@ -14,4 +14,6 @@
         -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
         -o smtp_send_xforward_command=yes
         -o disable_dns_lookups=yes
+        -o address_verify_virtual_transport=$virtual_transport
+        -o address_verify_transport_maps=$transport_maps
 
diff --git a/install/tpl/master_cf_amavis10027.master b/install/tpl/master_cf_amavis10027.master
index 640902d52e109a76d206cb72123b7cf1ea65e9d0..d3a07a8bce45d1e2c415f1a6085323faa9066261 100644
--- a/install/tpl/master_cf_amavis10027.master
+++ b/install/tpl/master_cf_amavis10027.master
@@ -13,7 +13,9 @@
         -o strict_rfc821_envelopes=yes
         -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
         -o smtp_send_xforward_command=yes
-	    -o milter_default_action=accept
-    	-o milter_macro_daemon_name=ORIGINATING
         -o disable_dns_lookups=yes
+        -o address_verify_virtual_transport=$virtual_transport
+        -o address_verify_transport_maps=$transport_maps
+        -o milter_default_action=accept
+        -o milter_macro_daemon_name=ORIGINATING
 
diff --git a/install/tpl/mysql-virtual_relaydomains.cf.master b/install/tpl/mysql-virtual_relaydomains.cf.master
index 5ce2db6954429b96b9b4437f2cd9831cb002bc21..c27596d1e75d56e522ad5c40a67399af406cec29 100644
--- a/install/tpl/mysql-virtual_relaydomains.cf.master
+++ b/install/tpl/mysql-virtual_relaydomains.cf.master
@@ -2,4 +2,4 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = select domain from mail_transport where domain = '%s' and active = 'y' and server_id = {server_id}
+query = select domain from mail_relay_domain where domain = '%s' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/named.conf.options.master b/install/tpl/named.conf.options.master
index 4f001960bf1b23917146bae849f23cf80487fb2b..588488c1815e82587b2113953040e3f1138b8ea6 100644
--- a/install/tpl/named.conf.options.master
+++ b/install/tpl/named.conf.options.master
@@ -18,11 +18,9 @@ options {
 	// If BIND logs error messages about the root key being expired,
 	// you will need to update your keys.  See https://www.isc.org/bind-keys
 	//========================================================================
-	dnssec-enable yes;
-	dnssec-validation yes;
 
 	version "unknown";
-	
+
 	allow-transfer {none;};
 
 	auth-nxdomain no;    # conform to RFC1035
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index a98f4223e13ee1d9221885d4ee6775b08de239ce..03f134bb0804ae2d70f12afef0068736e5b1e506 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -57,3 +57,5 @@ smtp_sender_dependent_authentication = yes
 smtp_sasl_auth_enable = yes
 smtp_sasl_security_options = noanonymous, noplaintext
 smtp_sasl_tls_security_options = noanonymous
+authorized_flush_users =
+authorized_mailq_users = nagios, icinga
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 36d48d913e420b365a021a43559d0129c1b6a8ea..8799e1f34c7efec3ec6e375659ea31b1ef31f833 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -58,6 +58,7 @@ mailbox_size_limit=0
 message_size_limit=0
 mailbox_quota_stats=y
 realtime_blackhole_list=zen.spamhaus.org
+overquota_notify_threshold=90
 overquota_notify_admin=y
 overquota_notify_client=y
 overquota_notify_freq=7
@@ -118,9 +119,11 @@ connect_userid_to_webid_start=10000
 web_folder_protection=y
 php_ini_check_minutes=1
 overtraffic_disable_web=y
+overquota_notify_threshold=90
 overquota_notify_admin=y
 overquota_notify_client=y
 overquota_notify_freq=7
+overquota_db_notify_threshold=90
 overquota_db_notify_admin=y
 overquota_db_notify_client=y
 overquota_notify_onok=n
diff --git a/install/update.php b/install/update.php
index 4639615801635ec03f0ccfa2832999edb9cd1749..56316546ac34ae3bdf568c1c3554e35cbd2f59d3 100644
--- a/install/update.php
+++ b/install/update.php
@@ -216,6 +216,19 @@ if($do_backup == 'yes') {
 	exec("tar pcfz $backup_path/etc.tar.gz /etc 2> /dev/null", $out, $returnvar);
 	if($returnvar != 0) die("Backup failed. We stop here...\n");
 
+  if (is_dir('/root/.acme.sh')) {
+    swriteln('Creating backup of "/root/.acme.sh" directory...');
+    exec("tar pcfz $backup_path/acme.sh.tar.gz /root/.acme.sh 2> /dev/null", $out, $returnvar);
+    if($returnvar != 0) die("Backup failed. We stop here...\n");
+  }
+
+  if (is_dir('/etc/letsencrypt')) {
+    swriteln('Creating backup of "/etc/letsencrypt" directory...');
+    exec("tar pcfz $backup_path/certbot.tar.gz /etc/letsencrypt 2> /dev/null", $out, $returnvar);
+    if($returnvar != 0) die("Backup failed. We stop here...\n");
+  }
+
+
 	exec("chown root:root $backup_path/*.tar.gz");
 	exec("chmod 700 $backup_path/*.tar.gz");
 }
@@ -499,6 +512,12 @@ if($reconfigure_services_answer == 'yes' || $reconfigure_services_answer == 'sel
 	$inst->configure_xmpp('dont-create-certs');
 	}
 
+  // Configure AppArmor
+  if($conf['apparmor']['installed']){
+    swriteln('Configuring AppArmor');
+    $inst->configure_apparmor();
+  }
+
 	if($conf['services']['firewall'] && $inst->reconfigure_app('Firewall', $reconfigure_services_answer)) {
 		if($conf['ufw']['installed'] == true) {
 			//* Configure Ubuntu Firewall
@@ -651,6 +670,11 @@ $md5_filename = '/usr/local/ispconfig/security/data/file_checksums_'.date('Y-m-d
 exec('find /usr/local/ispconfig -type f -print0 | xargs -0 md5sum > '.$md5_filename . ' 2>/dev/null');
 chmod($md5_filename,0700);
 
+// TODO: In a future update, stop the update script when running courier
+if ($conf['courier']['installed'] == true) {
+	swriteln('WARNING: You are running Courier. We are removing support for Courier from ISPConfig. Migrate your system to Dovecot as soon as possible. See https://www.howtoforge.com/community/threads/migrate-from-courier-to-dovecot-on-your-ispconfig-managed-mailserver.88523/ for more information.');
+}
+
 echo "Update finished.\n";
 
 ?>
diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index ee4713cd98981ea80e10146d3c1ddedb822ed5a8..96e8a1ddef0892b1ca35186ea08d263af75b21be 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -28,6 +28,10 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+if(version_compare(phpversion(), '7.0', '<')) {
+	require_once 'compatibility.inc.php';
+}
+
 //* Enable gzip compression for the interface
 ob_start('ob_gzhandler');
 
diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index a69d43da2ec1a079c0d4aefe906684f389d4ffa4..3a4cc1603cca1972f8711c7e09ff19f7c53cc8f9 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -231,7 +231,7 @@ class auth {
 	public function get_random_password($minLength = 8, $special = false) {
 		if($minLength < 8) $minLength = 8;
 		$maxLength = $minLength + 5;
-		$length = mt_rand($minLength, $maxLength);
+		$length = random_int($minLength, $maxLength);
 		
 		$alphachars = "abcdefghijklmnopqrstuvwxyz";
 		$upperchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
@@ -240,28 +240,28 @@ class auth {
 		
 		$num_special = 0;
 		if($special == true) {
-			$num_special = intval(mt_rand(0, round($length / 4))) + 1;
+			$num_special = intval(random_int(0, round($length / 4))) + 1;
 		}
-		$numericlen = mt_rand(1, 2);
+		$numericlen = random_int(1, 2);
 		$alphalen = $length - $num_special - $numericlen;
 		$upperlen = intval($alphalen / 2);
 		$alphalen = $alphalen - $upperlen;
 		$password = '';
 		
 		for($i = 0; $i < $alphalen; $i++) {
-			$password .= substr($alphachars, mt_rand(0, strlen($alphachars) - 1), 1);
+			$password .= substr($alphachars, random_int(0, strlen($alphachars) - 1), 1);
 		}
 		
 		for($i = 0; $i < $upperlen; $i++) {
-			$password .= substr($upperchars, mt_rand(0, strlen($upperchars) - 1), 1);
+			$password .= substr($upperchars, random_int(0, strlen($upperchars) - 1), 1);
 		}
 		
 		for($i = 0; $i < $num_special; $i++) {
-			$password .= substr($specialchars, mt_rand(0, strlen($specialchars) - 1), 1);
+			$password .= substr($specialchars, random_int(0, strlen($specialchars) - 1), 1);
 		}
 		
 		for($i = 0; $i < $numericlen; $i++) {
-			$password .= substr($numchars, mt_rand(0, strlen($numchars) - 1), 1);
+			$password .= substr($numchars, random_int(0, strlen($numchars) - 1), 1);
 		}
 		
 		return str_shuffle($password);
@@ -298,8 +298,8 @@ class auth {
 	public function csrf_token_get($form_name) {
 		/* CSRF PROTECTION */
 		// generate csrf protection id and key
-		$_csrf_id = uniqid($form_name . '_'); // form id
-		$_csrf_key = sha1(uniqid(microtime(true), true)); // the key
+		$_csrf_id = $form_name . '_' . bin2hex(random_bytes(12)); // form id
+		$_csrf_key = sha1(random_bytes(20)); // the key
 		if(!isset($_SESSION['_csrf'])) $_SESSION['_csrf'] = array();
 		if(!isset($_SESSION['_csrf_timeout'])) $_SESSION['_csrf_timeout'] = array();
 		$_SESSION['_csrf'][$_csrf_id] = $_csrf_key;
diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index 02d573a77812258d68dbd3716f24f5b2fb85234f..1b396686740bc026b11204d09697debff3cd1a45 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -28,6 +28,8 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+require_once __DIR__.'/../compatibility.inc.php';
+
 //* The purpose of this library is to provide some general functions.
 //* This class is loaded automatically by the ispconfig framework.
 
@@ -437,10 +439,10 @@ class functions {
 		$iteration = 0;
 		$password = "";
 		$maxLength = $minLength + 5;
-		$length = $this->getRandomInt($minLength, $maxLength);
+		$length = random_int($minLength, $maxLength);
 
 		while($iteration < $length){
-			$randomNumber = (floor(((mt_rand() / mt_getrandmax()) * 100)) % 94) + 33;
+			$randomNumber = random_int(33, 126);
 			if(!$special){
 				if (($randomNumber >=33) && ($randomNumber <=47)) { continue; }
 				if (($randomNumber >=58) && ($randomNumber <=64)) { continue; }
@@ -455,10 +457,6 @@ class functions {
 		return $password;
 	}
 
-	public function getRandomInt($min, $max){
-		return floor((mt_rand() / mt_getrandmax()) * ($max - $min + 1)) + $min;
-	}
-
 	public function generate_customer_no(){
 		global $app;
 		// generate customer no.
@@ -474,14 +472,17 @@ class functions {
 		global $app;
 
 		// generate the SSH key pair for the client
-		$id_rsa_file = '/tmp/'.uniqid('',true);
+		if (! $tmpdir = $app->system->exec_safe('mktemp -dt id_rsa.XXXXXXXX')) {
+			$app->log("mktemp failed, cannot create SSH keypair for ".$username, LOGLEVEL_WARN);
+		}
+		$id_rsa_file = $tmpdir . uniqid('',true);
 		$id_rsa_pub_file = $id_rsa_file.'.pub';
 		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)) {
 			$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);
-			$app->system->exec_safe('rm -f ? ?', $id_rsa_file, $id_rsa_pub_file);
+			$app->system->rmdir($tmpdir, true);
 		} else {
 			$app->log("Failed to create SSH keypair for ".$username, LOGLEVEL_WARN);
 		}
diff --git a/interface/lib/classes/plugin_backuplist.inc.php b/interface/lib/classes/plugin_backuplist.inc.php
index 0b98dc9ec0b2c8a9a42ba11187a4962014243f8c..b2fdd006d291bac48626a2909c2277480716ce63 100644
--- a/interface/lib/classes/plugin_backuplist.inc.php
+++ b/interface/lib/classes/plugin_backuplist.inc.php
@@ -160,7 +160,7 @@ class plugin_backuplist extends plugin_base {
 
 		//* Get the data
 		$server_ids = array();
-		$web = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->form->id);
+		$web = $app->db->queryOneRecord("SELECT server_id, backup_format_web, backup_format_db, backup_password, backup_encrypt FROM web_domain WHERE domain_id = ?", $this->form->id);
 		$databases = $app->db->queryAllRecords("SELECT server_id FROM web_database WHERE parent_domain_id = ?", $this->form->id);
 		if($app->functions->intval($web['server_id']) > 0) $server_ids[] = $app->functions->intval($web['server_id']);
 		if(is_array($databases) && !empty($databases)){
@@ -181,8 +181,33 @@ class plugin_backuplist extends plugin_base {
 				$rec["bgcolor"] = $bgcolor;
 
 				$rec['date'] = date($app->lng('conf_format_datetime'), $rec['tstamp']);
+
 				$backup_format = $rec['backup_format'];
-				if (empty($backup_format)) {
+				$backup_mode = $rec['backup_mode'];
+				if ($backup_mode === 'borg') {
+					// Get backup format from domain config
+					switch ($rec['backup_type']) {
+						case 'mysql':
+							$backup_format = $web['backup_format_db'];
+							if (empty($backup_format) || $backup_format == 'default') {
+								$backup_format = self::getDefaultBackupFormat('rootgz', 'mysql');
+							}
+							$rec['filename'] .= self::getBackupDbExtension($backup_format);
+							break;
+						case 'web':
+							$backup_format = $web['backup_format_web'];
+							if (empty($backup_format) || $backup_format == 'default') {
+								$backup_format = self::getDefaultBackupFormat($backup_mode, 'web');
+							}
+							$rec['filename'] .= self::getBackupWebExtension($backup_format);
+							break;
+						default:
+							$app->log('Unsupported backup type "' . $rec['backup_type'] . '" for backup id ' . $rec['backup_id'], LOGLEVEL_ERROR);
+							break;
+					}
+					$rec['backup_password'] = $web['backup_encrypt'] == 'y' ? trim($web['backup_password']) : '';
+
+				} elseif (empty($backup_format)) {
 					//We have a backup from old version of ISPConfig
 					switch ($rec['backup_type']) {
 						case 'mysql':
@@ -210,7 +235,13 @@ class plugin_backuplist extends plugin_base {
 				if($rec['server_id'] != $web['server_id']) $rec['download_available'] = false;
 
 				if($rec['filesize'] > 0){
-					$rec['filesize'] = $app->functions->currency_format($rec['filesize']/(1024*1024), 'client').' MB';
+					$rec['filesize'] = $app->functions->currency_format($rec['filesize']/(1024*1024), 'client').'&nbsp;MB';
+					if($backup_mode === "borg") {
+						$rec['filesize'] = '<a href="javascript:void(0)" data-toggle="tooltip" title="'
+											. $wb['final_size_txt']
+											. '"><strong>*</strong></a>'
+											. $rec['filesize'];
+					}
 				}
 
 				$records_new[] = $rec;
@@ -235,6 +266,73 @@ class plugin_backuplist extends plugin_base {
 		return $listTpl->grab();
 	}
 
+	/**
+	 * Returns file extension for specified backup format
+	 * @param string $format backup format
+	 * @return string|null
+	 * @author Ramil Valitov <ramilvalitov@gmail.com>
+	 */
+	protected static function getBackupDbExtension($format)
+	{
+		$prefix = '.sql';
+		switch ($format) {
+			case 'gzip':
+				return $prefix . '.gz';
+			case 'bzip2':
+				return $prefix . '.bz2';
+			case 'xz':
+				return $prefix . '.xz';
+			case 'zip':
+			case 'zip_bzip2':
+				return '.zip';
+			case 'rar':
+				return '.rar';
+		}
+		if (strpos($format, "7z_") === 0) {
+			return $prefix . '.7z';
+		}
+		return null;
+	}
+
+	/**
+	 * Returns file extension for specified backup format
+	 * @param string $format backup format
+	 * @return string|null
+	 * @author Ramil Valitov <ramilvalitov@gmail.com>
+	 */
+	protected static function getBackupWebExtension($format)
+	{
+		switch ($format) {
+			case 'tar_gzip':
+				return '.tar.gz';
+			case 'tar_bzip2':
+				return '.tar.bz2';
+			case 'tar_xz':
+				return '.tar.xz';
+			case 'zip':
+			case 'zip_bzip2':
+				return '.zip';
+			case 'rar':
+				return '.rar';
+		}
+		if (strpos($format, "tar_7z_") === 0) {
+			return '.tar.7z';
+		}
+		return null;
+	}
+
+	protected static function getDefaultBackupFormat($backup_mode, $backup_type)
+	{
+		//We have a backup from old version of ISPConfig
+		switch ($backup_type) {
+			case 'mysql':
+				return 'gzip';
+			case 'web':
+				return ($backup_mode == 'userzip') ? 'zip' : 'tar_gzip';
+		}
+		return "";
+	}
+
 }
 
 ?>
diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index b5d4b3820c02db80aa45a79b5ffdef0e21ebfc6a..67b97e722d32c4be4acd9b990275f3614be6a1a2 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -42,7 +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, $ipv6 = '') {
 		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.');
@@ -63,6 +63,7 @@ class remoting_dns extends remoting {
 		$tpl_content = $template_record['template'];
 		if($domain != '') $tpl_content = str_replace('{DOMAIN}', $domain, $tpl_content);
 		if($ip != '') $tpl_content = str_replace('{IP}', $ip, $tpl_content);
+		if($ipv6 != '') $tpl_content = str_replace('{IPV6}', $ipv6, $tpl_content);
 		if($ns1 != '') $tpl_content = str_replace('{NS1}', $ns1, $tpl_content);
 		if($ns2 != '') $tpl_content = str_replace('{NS2}', $ns2, $tpl_content);
 		if($email != '') $tpl_content = str_replace('{EMAIL}', $email, $tpl_content);
@@ -604,6 +605,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_ds_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'DS');
+	}
+
+	//* Add a record
+	public function dns_ds_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'DS');
+	}
+
+	//* Update a record
+	public function dns_ds_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, 'DS');
+	}
+
+	//* Delete a record
+	public function dns_ds_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'DS');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_ptr_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'PTR');
diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php
index 286d6f6c57d6e30d72b4b869b15a0648477e7a3b..cad598043593bdddb82befe954ab665e428b2528 100644
--- a/interface/lib/classes/remote.d/mail.inc.php
+++ b/interface/lib/classes/remote.d/mail.inc.php
@@ -60,7 +60,7 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$primary_id = $this->insertQuery('../mail/form/mail_domain.tform.php', $client_id, $params);
+		$primary_id = $this->insertQuery('../mail/form/mail_domain.tform.php', $client_id, $params, 'mail:mail_domain:on_after_insert');
 		return $primary_id;
 	}
 
@@ -71,7 +71,7 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->updateQuery('../mail/form/mail_domain.tform.php', $client_id, $primary_id, $params);
+		$affected_rows = $this->updateQuery('../mail/form/mail_domain.tform.php', $client_id, $primary_id, $params, 'mail:mail_domain:on_after_update');
 		return $affected_rows;
 	}
 
@@ -82,7 +82,7 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->deleteQuery('../mail/form/mail_domain.tform.php', $primary_id);
+		$affected_rows = $this->deleteQuery('../mail/form/mail_domain.tform.php', $primary_id, 'mail:mail_domain:on_after_delete');
 		return $affected_rows;
 	}
 
@@ -222,7 +222,7 @@ class remoting_mail extends remoting {
 		if (!isset($params['gid'])) $params['gid'] = -1;
 		if (!isset($params['maildir_format'])) $params['maildir_format'] = 'maildir';
 
-		$mailuser_id = $this->insertQuery('../mail/form/mail_user.tform.php', $client_id, $params);
+		$mailuser_id = $this->insertQuery('../mail/form/mail_user.tform.php', $client_id, $params, 'mail:mail_user:on_after_insert');
 		return $mailuser_id;
 	}
 
@@ -245,7 +245,7 @@ class remoting_mail extends remoting {
 			return false;
 		}
 
-		$affected_rows = $this->updateQuery('../mail/form/mail_user.tform.php', $client_id, $primary_id, $params);
+		$affected_rows = $this->updateQuery('../mail/form/mail_user.tform.php', $client_id, $primary_id, $params, 'mail:mail_user:on_after_update');
 		return $affected_rows;
 	}
 
@@ -258,7 +258,7 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->deleteQuery('../mail/form/mail_user.tform.php', $primary_id);
+		$affected_rows = $this->deleteQuery('../mail/form/mail_user.tform.php', $primary_id, 'mail:mail_user:on_after_delete');
 		return $affected_rows;
 	}
 
@@ -413,7 +413,7 @@ class remoting_mail extends remoting {
 		}
 		unset($tmp);
 
-		$affected_rows = $this->insertQuery('../mail/form/mail_alias.tform.php', $client_id, $params);
+		$affected_rows = $this->insertQuery('../mail/form/mail_alias.tform.php', $client_id, $params, 'mail:mail_alias:on_after_insert');
 		return $affected_rows;
 	}
 
@@ -435,7 +435,7 @@ class remoting_mail extends remoting {
 		}
 		unset($tmp);
 
-		$affected_rows = $this->updateQuery('../mail/form/mail_alias.tform.php', $client_id, $primary_id, $params);
+		$affected_rows = $this->updateQuery('../mail/form/mail_alias.tform.php', $client_id, $primary_id, $params, 'mail:mail_alias:on_after_update');
 		return $affected_rows;
 	}
 
@@ -446,7 +446,7 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->deleteQuery('../mail/form/mail_alias.tform.php', $primary_id);
+		$affected_rows = $this->deleteQuery('../mail/form/mail_alias.tform.php', $primary_id, 'mail:mail_alias:on_after_delete');
 		return $affected_rows;
 	}
 
@@ -472,7 +472,7 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->insertQuery('../mail/form/mail_forward.tform.php', $client_id, $params);
+		$affected_rows = $this->insertQuery('../mail/form/mail_forward.tform.php', $client_id, $params, 'mail:mail_forward:on_after_insert');
 		return $affected_rows;
 	}
 
@@ -484,7 +484,7 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->updateQuery('../mail/form/mail_forward.tform.php', $client_id, $primary_id, $params);
+		$affected_rows = $this->updateQuery('../mail/form/mail_forward.tform.php', $client_id, $primary_id, $params, 'mail:mail_forward:on_after_update');
 		return $affected_rows;
 	}
 
@@ -496,7 +496,7 @@ class remoting_mail extends remoting {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
-		$affected_rows = $this->deleteQuery('../mail/form/mail_forward.tform.php', $primary_id);
+		$affected_rows = $this->deleteQuery('../mail/form/mail_forward.tform.php', $primary_id, 'mail:mail_forward:on_after_delete');
 		return $affected_rows;
 	}
 
@@ -1110,4 +1110,4 @@ class remoting_mail extends remoting {
 
 }
 
-?>
+?>
\ No newline at end of file
diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php
index bc75fee36b3a9f16cf476bb6b04e1d8c163ddf17..7bd39645af4ca7ae37bab872a651be07268609ac 100644
--- a/interface/lib/classes/remoting.inc.php
+++ b/interface/lib/classes/remoting.inc.php
@@ -138,8 +138,8 @@ class remoting {
 			}
 
 			//* Create a remote user session
-			//srand ((double)microtime()*1000000);
-			$remote_session = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,1).sha1(mt_rand().uniqid('ispco',true));
+			// session id must begin with a char, not digit, to avoid mysql type confusion abuse
+			$remote_session = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,1).bin2hex(random_bytes(20));
 			$remote_userid = $user['userid'];
 			$remote_functions = '';
 			$tstamp = time() + $this->session_timeout;
@@ -210,8 +210,8 @@ class remoting {
 					return false;
 				}
 				//* Create a remote user session
-				//srand ((double)microtime()*1000000);
-				$remote_session = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,1).sha1(mt_rand().uniqid('ispco',true));
+				// session id must begin with a char, not digit, to avoid mysql type confusion abuse
+				$remote_session = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,1).bin2hex(random_bytes(20));
 				$remote_userid = $remote_user['remote_userid'];
 				$remote_functions = $remote_user['remote_functions'];
 				$tstamp = time() + $this->session_timeout;
diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index d6b0ef149e285dbe3e3c438cff36bbe44daddac8..9cb171cae5d2f230ede4b117bc1b6900625f1d69 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -79,6 +79,32 @@ class system {
 		return false;
 	}
 
+	function rmdir($path, $recursive=false) {
+		// Disallow operating on root directory
+		if(realpath($path) == '/') {
+			$app->log("rmdir: afraid I might delete root: $path", LOGLEVEL_WARN);
+			return false;
+		}
+
+		$path = rtrim($path, '/');
+		if (is_dir($path) && !is_link($path)) {
+			$objects = array_diff(scandir($path), array('.', '..'));
+			foreach ($objects as $object) {
+				if ($recursive) {
+					if (is_dir("$path/$object") && !is_link("$path/$object")) {
+						$this->rmdir("$path/$object", $recursive);
+					} else {
+						unlink ("$path/$object");
+					}
+				} else {
+					$app->log("rmdir: invoked non-recursive, not removing $path (expect rmdir failure)", LOGLEVEL_DEBUG);
+				}
+			}
+			return rmdir($path);
+		}
+		return false;
+	}
+
 	public function last_exec_out() {
 		return $this->_last_exec_out;
 	}
diff --git a/interface/lib/classes/validate_client.inc.php b/interface/lib/classes/validate_client.inc.php
index 4652e2a07b1ddc65f5776a4538ec34d4ab382db4..09e1df9e150e9042cdc32c10587a407f6c226fe4 100644
--- a/interface/lib/classes/validate_client.inc.php
+++ b/interface/lib/classes/validate_client.inc.php
@@ -175,7 +175,8 @@ class validate_client {
 				}
 			}
 			try {
-				$client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");
+				ini_set("default_socket_timeout", 5);
+				$client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl", array('connection_timeout' => 5));
 				$params = array('countryCode' => $cc, 'vatNumber' => $vn);
 				try{
 					$r = $client->checkVat($params);
diff --git a/interface/lib/classes/validate_mail_relay_domain.inc.php b/interface/lib/classes/validate_mail_relay_domain.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..44e13998a4af1ed529c02e62ffd27dae582ccb75
--- /dev/null
+++ b/interface/lib/classes/validate_mail_relay_domain.inc.php
@@ -0,0 +1,61 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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 validate_mail_relay_domain {
+
+	function get_error($errmsg) {
+		global $app;
+
+		if(isset($app->tform->wordbook[$errmsg])) {
+			return $app->tform->wordbook[$errmsg]."<br>\r\n";
+		} else {
+			return $errmsg."<br>\r\n";
+		}
+	}
+
+	/* Validator function for checking the 'domain' of a mail relay domain */
+	function validate_domain($field_name, $field_value, $validator) {
+		global $app, $conf;
+
+		if(isset($app->remoting_lib->primary_id)) {
+			$id = $app->remoting_lib->primary_id;
+		} else {
+			$id = $app->tform->primary_id;
+		}
+
+		// mail_relay_domain.domain must be unique per server
+		$sql = "SELECT relay_domain_id, domain FROM mail_relay_domain WHERE domain = ? AND server_id = ? AND relay_domain_id != ?";
+		$domain_check = $app->db->queryOneRecord($sql, $field_value, $app->tform_actions->dataRecord['server_id'], $id);
+
+		if($domain_check) return $this->get_error('domain_error_unique');
+	}
+
+}
diff --git a/interface/lib/compatibility.inc.php b/interface/lib/compatibility.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..562e07ada42f404cae0708f32105dcf39a84768c
--- /dev/null
+++ b/interface/lib/compatibility.inc.php
@@ -0,0 +1,80 @@
+<?php
+
+/*
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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.
+*/
+
+/* random_bytes can be dropped when php 5.6 support is dropped */
+if (! function_exists('random_bytes')) {
+	function random_bytes($length) {
+		return openssl_random_pseudo_bytes($length);
+	}
+}
+
+/* random_int can be dropped when php 5.6 support is dropped */
+if (! function_exists('random_int')) {
+	function random_int($min=null, $max=null) {
+		if (null === $min) {
+			$min = PHP_INT_MIN;
+		}
+
+		if (null === $max) {
+			$min = PHP_INT_MAX;
+		}
+
+		if (!is_int($min) || !is_int($max)) {
+			trigger_error('random_int: $min and $max must be integer values', E_USER_NOTICE);
+			$min = (int)$min;
+			$max = (int)$max;
+		}
+
+		if ($min > $max) {
+			trigger_error('random_int: $max can\'t be lesser than $min', E_USER_WARNING);
+			return null;
+		}
+
+		$range = $counter = $max - $min;
+		$bits = 1;
+
+		while ($counter >>= 1) {
+			++$bits;
+		}
+
+		$bytes = (int)max(ceil($bits/8), 1);
+		$bitmask = pow(2, $bits) - 1;
+
+		if ($bitmask >= PHP_INT_MAX) {
+			$bitmask = PHP_INT_MAX;
+		}
+
+		do {
+			$result = hexdec(bin2hex(random_bytes($bytes))) & $bitmask;
+		} while ($result > $range);
+
+		return $result + $min;
+	}
+}
diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php
index c5d14d79cdbdb02d98e2a1129d91871101170258..c492680513e0553fe00499adf670725a714d6fc7 100644
--- a/interface/lib/config.inc.php
+++ b/interface/lib/config.inc.php
@@ -159,4 +159,7 @@ define('LOGLEVEL_DEBUG', 0);
 define('LOGLEVEL_WARN', 1);
 define('LOGLEVEL_ERROR', 2);
 
+//** Admin IP whitelist file
+$conf['admin_ip_whitelist_file'] = '/usr/local/ispconfig/security/admin_ip.whitelist';
+
 ?>
diff --git a/interface/lib/lang/ar.lng b/interface/lib/lang/ar.lng
index 45236683faa347285aed68e38abfa4b069cc4626..4aa87ee5aa3b5095ab8f4b233811930e515e6921 100644
--- a/interface/lib/lang/ar.lng
+++ b/interface/lib/lang/ar.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Unlimited';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/bg.lng b/interface/lib/lang/bg.lng
index baf5ce64f9964b85c039ce8b96234ecf4f93d492..67c2b67b6f8cab74042d96a0cab6d4310679c7e3 100644
--- a/interface/lib/lang/bg.lng
+++ b/interface/lib/lang/bg.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Изтрий XMPP потребител';
 $wb['unlimited_txt'] = 'Неограничен';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/br.lng b/interface/lib/lang/br.lng
index 4485ba15f66a537dc8ec258b8906d72b22a4680c..02f4697deeb4a34dc94a71989ba7723a44355ce2 100644
--- a/interface/lib/lang/br.lng
+++ b/interface/lib/lang/br.lng
@@ -172,4 +172,6 @@ $wb['select_master_directive_snippet_txt'] = 'Diretiva mestre de trechos de cód
 $wb['unlimited_txt'] = 'Ilimitado';
 $wb['server_id_0_error_txt'] = 'Por favor, selecione um servidor válido. O ID do servidor deve ser > 0.';
 $wb['datalog_changes_close_txt'] = 'Fechar';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
+?>
diff --git a/interface/lib/lang/ca.lng b/interface/lib/lang/ca.lng
index c53d3566dd67d50ca223b5486e422bfb4d615cdd..0aa69997e543e3fe4f1c576310343bb6fdf5028a 100644
--- a/interface/lib/lang/ca.lng
+++ b/interface/lib/lang/ca.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Illimité';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng
index 3605e716ffb6638bda80aabfdc120aa8175d9f11..1eccd3c8e58331dacddc1d05852f694a911f2a6b 100644
--- a/interface/lib/lang/cz.lng
+++ b/interface/lib/lang/cz.lng
@@ -172,4 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Smazat XMPP uživatele';
 $wb['unlimited_txt'] = 'Neomezený';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
+?>
diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng
index 684135e9d79b64b1f5c83fe51429ad60a63a5c4b..d6cef498d367270e0b33722c9ebd20a401cf9ee2 100644
--- a/interface/lib/lang/de.lng
+++ b/interface/lib/lang/de.lng
@@ -172,5 +172,6 @@ $wb['select_master_directive_snippet_txt'] = 'Master Direktiven Schnipsel';
 $wb['unlimited_txt'] = 'unlimitiert';
 $wb['server_id_0_error_txt'] = 'Bitte Server auswählen. Server ID muss > als 0 sein.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/dk.lng b/interface/lib/lang/dk.lng
index da6fa6e385686c2457dc55a060f7548307e7e87e..85cee5865942261351b84e04021edd9674a25ac2 100644
--- a/interface/lib/lang/dk.lng
+++ b/interface/lib/lang/dk.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Ubegrænset';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng
index 984ed1802eb776d69d334a82ce12c7d2330e7ee2..d5b980722a43d7c111428445a15eabb9ccea7154 100644
--- a/interface/lib/lang/el.lng
+++ b/interface/lib/lang/el.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Απεριόριστα';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/en.lng b/interface/lib/lang/en.lng
index a9c700e887a8ca16f5b20e46293d1a98611577a2..6024cc69a74e74c977e80715f9e1e787c63e057b 100644
--- a/interface/lib/lang/en.lng
+++ b/interface/lib/lang/en.lng
@@ -173,5 +173,6 @@ $wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets';
 $wb['unlimited_txt'] = 'Unlimited';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/es.lng b/interface/lib/lang/es.lng
index c9d0a8359a0c7f94aa18550c15dd2b64d8c4eaf8..e3ba1d41e067e1246daf7105810cc817328a27e9 100644
--- a/interface/lib/lang/es.lng
+++ b/interface/lib/lang/es.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Borrar usuario XMPP';
 $wb['unlimited_txt'] = 'Ilimitado';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Cerrar';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/fi.lng b/interface/lib/lang/fi.lng
index 956bf9719714caeb84d182e08a99133447f14aa4..87f2dc24edd263eb58ecd961aa5ed5b4c2896d02 100644
--- a/interface/lib/lang/fi.lng
+++ b/interface/lib/lang/fi.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Unlimited';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/fr.lng b/interface/lib/lang/fr.lng
index dff165d44bf77adbe535b5d0fd0518f436dc5f78..7f8413d11c1a2b5906deff3033755a3c594dd932 100644
--- a/interface/lib/lang/fr.lng
+++ b/interface/lib/lang/fr.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Illimité';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/hr.lng b/interface/lib/lang/hr.lng
index 8008a206a4a89f15462626e9688ca10c45845056..167073f837b63bf9d3058507ab26d7f22549ff7c 100644
--- a/interface/lib/lang/hr.lng
+++ b/interface/lib/lang/hr.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'neograničeno';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/hu.lng b/interface/lib/lang/hu.lng
index 4119b7d79273dc471673214271ba8bde270ae02e..a07c6810ce77c10add4de441f6008e2eee732b0c 100644
--- a/interface/lib/lang/hu.lng
+++ b/interface/lib/lang/hu.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Korlátlan';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/id.lng b/interface/lib/lang/id.lng
index 69af6577687ea1d0e5e99f791b6f7913ff23ce07..51e1fd6aef00388230029ca8f704d1bb1361fc30 100644
--- a/interface/lib/lang/id.lng
+++ b/interface/lib/lang/id.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Tak terbatas';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/it.lng b/interface/lib/lang/it.lng
index 1f9b2dc475b4b02ced6819b6424ce95ccaabc563..a56224e6d538b545f1758be32789cf37095a348c 100644
--- a/interface/lib/lang/it.lng
+++ b/interface/lib/lang/it.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Elimina utente XMPP';
 $wb['unlimited_txt'] = 'illimitati';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Chiudi';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/ja.lng b/interface/lib/lang/ja.lng
index 6ba56d3720d83a6e8513a963b17029bb12883d56..00db30317075d490d0b6d8e1b502e217f8260990 100644
--- a/interface/lib/lang/ja.lng
+++ b/interface/lib/lang/ja.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Unlimited';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/nl.lng b/interface/lib/lang/nl.lng
index 2fa026b29364260ce5ec847cbf12bbd4e2bd5184..582c5ffe53b222ce8bd434d025bef88826de011f 100644
--- a/interface/lib/lang/nl.lng
+++ b/interface/lib/lang/nl.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Ongelimiteerd';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Sluiten';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Kopieer naar klembord';
 ?>
diff --git a/interface/lib/lang/pl.lng b/interface/lib/lang/pl.lng
index fbbf8fee520054874d15ea641aaaa6cbf3d46960..d22b0d485029a8c681b298d0865b883bd5e2c57a 100644
--- a/interface/lib/lang/pl.lng
+++ b/interface/lib/lang/pl.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'nielimitowane';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/pt.lng b/interface/lib/lang/pt.lng
index 5caa31bde0ec681335e89ede10b4e7aceca1f52e..23b1cd2079584cfbe6798026b6e59c02535b15cb 100644
--- a/interface/lib/lang/pt.lng
+++ b/interface/lib/lang/pt.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Unlimited';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/ro.lng b/interface/lib/lang/ro.lng
index d96e9c67ae16551e79240474bab1fb4a511bfa2b..b4da89bc12e4b077a1e871ac3c1257b3dbd0a87d 100644
--- a/interface/lib/lang/ro.lng
+++ b/interface/lib/lang/ro.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Unlimited';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/ru.lng b/interface/lib/lang/ru.lng
index 199f64420c6d236f13ad8f97fa9999e7b7e36383..cfd805010b094c43689cfdf9f79e42ef72c9c1f3 100644
--- a/interface/lib/lang/ru.lng
+++ b/interface/lib/lang/ru.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Удалить пользователя XMP
 $wb['unlimited_txt'] = 'Безлимитный';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng
index 4d9de1d5359af4841454fc26be03889908045ff6..03d818ec560ddd2eb9c2d95c00740a28466de0cb 100644
--- a/interface/lib/lang/se.lng
+++ b/interface/lib/lang/se.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Obegränsat';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/sk.lng b/interface/lib/lang/sk.lng
index 33d742b2132e2f4f3c0eb5385cba032d672f87f7..dfad74552bff2a6ae80935dccd92be7fcc27624d 100644
--- a/interface/lib/lang/sk.lng
+++ b/interface/lib/lang/sk.lng
@@ -172,5 +172,6 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Unlimited';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng
index 29df3800ce64a6026eb37e32ad904f86da88c62f..5b7afc3afa7b5db68f82763be2f092ed1178afda 100644
--- a/interface/lib/lang/tr.lng
+++ b/interface/lib/lang/tr.lng
@@ -173,5 +173,6 @@ $wb['select_master_directive_snippet_txt'] = 'Ana Komut Parçaları';
 $wb['unlimited_txt'] = 'Sınırsız';
 $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
 $wb['datalog_changes_close_txt'] = 'Close';
+$wb['non_admin_error'] = 'Requires administrator level permissions';
 $wb['copy_to_clipboard_txt'] = 'Copy to clipboard';
 ?>
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index 47a48a3c279e2bf438a3efeb796debed358b1293..185fa892c86a62f9d531a4e7d983ace5ff068185 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -207,7 +207,7 @@ $form["tabs"]['server'] = array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => 'userzip',
-			'value' => array('userzip' => 'backup_mode_userzip', 'rootgz' => 'backup_mode_rootgz'),
+			'value' => array('userzip' => 'backup_mode_userzip', 'rootgz' => 'backup_mode_rootgz', 'borg' => 'backup_mode_borg_txt'),
 			'width' => '40',
 			'maxlength' => '255'
 		),
@@ -740,6 +740,18 @@ $form["tabs"]['mail'] = array(
 			'default' => 'y',
 			'value' => array(0 => 'n', 1 => 'y')
 		),
+		'overquota_notify_threshold' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '90',
+			'validators' => array(
+				0 => array('type' => 'NOTEMPTY', 'errmsg' => 'overquota_notify_threshold_error'),
+				1 => array('type' => 'RANGE',	'range' => '0:100',	'errmsg' => 'overquota_notify_threshold_error'),
+			),
+			'value' => '',
+			'width' => '20',
+			'maxlength' => '3'
+		),
 		'overquota_notify_admin' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
@@ -1082,6 +1094,18 @@ $form["tabs"]['web'] = array(
 			'default' => 'y',
 			'value' => array(0 => 'n', 1 => 'y')
 		),
+		'overquota_notify_threshold' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '90',
+			'validators' => array(
+				0 => array('type' => 'NOTEMPTY', 'errmsg' => 'overquota_notify_threshold_error'),
+				1 => array('type' => 'RANGE',	'range' => '0:100',	'errmsg' => 'overquota_notify_threshold_error'),
+			),
+			'value' => '',
+			'width' => '20',
+			'maxlength' => '3'
+		),
 		'overquota_notify_admin' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
@@ -1094,6 +1118,18 @@ $form["tabs"]['web'] = array(
 			'default' => 'y',
 			'value' => array(0 => 'n', 1 => 'y')
 		),
+		'overquota_db_notify_threshold' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '90',
+			'validators' => array(
+				0 => array('type' => 'NOTEMPTY', 'errmsg' => 'overquota_notify_threshold_error'),
+				1 => array('type' => 'RANGE',	'range' => '0:100',	'errmsg' => 'overquota_notify_threshold_error'),
+			),
+			'value' => '',
+			'width' => '20',
+			'maxlength' => '3'
+		),
 		'overquota_db_notify_admin' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index c7d15ffcf4ddfcb6a7a125a732c539e050f1d68d..bce858b5221a274487ec81b03b0d778b6474c8c5 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -481,6 +481,12 @@ $form["tabs"]['dns'] = array (
 			'value'  => '',
 			'name'  => 'default_slave_dnsserver'
 		),
+		'dns_show_zoneexport' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
 		//#################################
 		// END Datatable fields
 		//#################################
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index ac03605279d769d3b8c8d2be21bcb84b43b8e687..58e7833fd6ef457ecb796e7099df3dc8db778497 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index 5d21ab4c2e93e8bf0fd713516481429a36d9d97c..a10274c670519674f336c0406f855cec6df4eb87 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index b9d6e648cedeb6b0666b8112acb93b5a0b9fe838..0d87a4daa0fbd6d6416e187a5501422d89d54035 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -174,6 +174,8 @@ $wb['connect_userid_to_webid_start_txt'] = 'Start ID for userid/webid connect';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index 1b8d10541d05febec539338ac21a0fc9eda0e6ae..898020365f07503859375268e1d0d7940c72e513 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index ac551c588cd5917247c1bce3b1eb3a4991d0affc..e749dcc0235250e07f77b135dc19302b7cdd8554 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -114,6 +114,8 @@ $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['backup_mode_borg_txt'] = 'BorgBackup: Faça backup de todos os arquivos no diretório vhost e bancos de dados em repositórios incrementais';
+$wb['backup_missing_utils_txt'] = 'O seguinte modo de backup não pode ser usado porque as ferramentas necessárias não estão instaladas:';
 $wb['tmpdir_path_error_empty'] = 'Caminho do diretório temporário está vazio.';
 $wb['tmpdir_path_error_regex'] = 'Caminho do diretório temporário é inválido.';
 $wb['backup_time_txt'] = 'Hora do backup';
@@ -200,6 +202,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Enviar notificação de tráfego excedido
 $wb['overtraffic_notify_client_txt'] = 'Enviar notificação de tráfego excedido para o cliente';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Por favor, insira nomes de host válidos para RBLs.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $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';
@@ -223,6 +227,7 @@ $wb['v6_prefix_length'] = 'O prefixo é muito longo de acordo com as definiçõe
 $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_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index 6cf3bf58bbb6ef0be3f8a84f780270eef09b8957..1fb510ace046206ee404107ca32e9eef74068469 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -106,3 +106,4 @@ $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
 $wb['monitor_key_txt'] = 'Senha do Monitor';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 25ed761836cafb2f1216212c3582bfe3c6abcd29..50125cf334c1024a86b57e38c3c4adc38b5e39dd 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -113,6 +113,8 @@ $wb['fastcgi_config_syntax_txt'] = 'FastCGI config syntax';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['server_type_txt'] = 'Server Type';
 $wb['nginx_vhost_conf_dir_txt'] = 'Nginx Vhost config dir';
 $wb['nginx_vhost_conf_enabled_dir_txt'] = 'Nginx Vhost config enabled dir';
@@ -196,6 +198,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -219,6 +223,7 @@ $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 ';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
 $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_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index 9f9f3622884342a93ed6088ee9c4956ec9eaa782..68ca245f3dd26e85b9d45701d86f5de19d3de13e 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 6da8dfc0bb4989c6a7e179417fdc1afe7693f1f7..36d009dbcee76290d6fdd8ada60e252d2a0b0668 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -162,6 +162,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Režim zálohování';
 $wb['backup_mode_userzip'] = 'Zálohování všech souborů v adresáři web jako uživatel vlastnící web adresář do souboru zip';
 $wb['backup_mode_rootgz'] = 'Zálohování všech souborů v adresáři web jako uživatel root';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Zálohujte všechny soubory v adresáři vhost a databázích do přírůstkových úložišť';
+$wb['backup_missing_utils_txt'] = 'Následující režim zálohování nelze použít, protože nejsou nainstalovány požadované nástroje:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(jednotlivé RBL databáze oddělujte čárkou)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -179,6 +181,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Při překročení limitu přenesených d
 $wb['overtraffic_notify_client_txt'] = 'Při překročení limitu přenesených dat, poslat oznámení klientovi';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Poslat varování o překročení nebo vyčerpání kvót adminovi';
 $wb['overquota_notify_client_txt'] = 'Poslat varování o překročení nebo vyčerpání kvót klientovi';
 $wb['overquota_notify_onok_txt'] = 'Poslat zprávu klientovi, že kvóta je již v pořádku';
@@ -269,6 +273,7 @@ $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'] = 'Odstranit zálohy pokud byla smazána doména/webové stránky';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index 23dbc9c41efa0b41775599e1a73a7d1a8e939957..c6f45e7d46319e764172fd4081017c5b71b9892e 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -106,3 +106,4 @@ $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
 $wb['monitor_key_txt'] = 'Monitor keyword';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index d0b43059c47cf52c0dea5cc5f5363007d7c5edb2..2536731433f5154af62ddcf3b4bb1246fd3f476c 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -190,6 +190,8 @@ $wb['awstats_settings_txt'] = 'AWStats Einstellungen';
 $wb['backup_mode_txt'] = 'Backupmodus';
 $wb['backup_mode_userzip'] = 'Backup Dateien gehören dem Web Benutzer (.zip Datei)';
 $wb['backup_mode_rootgz'] = 'Backup aller Dateien des Webverzeichnisses als Root Benutzer';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Maak een back-up van alle bestanden in de vhost-directory en databases in incrementele repositories';
+$wb['backup_missing_utils_txt'] = 'De volgende back-upmodus kan niet worden gebruikt omdat de vereiste tools niet zijn geïnstalleerd:';
 $wb['backup_time_txt'] = 'Backupzeit';
 $wb['firewall_txt'] = 'Firewall';
 $wb['mailbox_quota_stats_txt'] = 'E-Mailkonto Beschränkung Statistiken';
@@ -199,6 +201,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Ãœberschreiten des Datentransfer Limits a
 $wb['overtraffic_notify_client_txt'] = 'Ãœberschreiten des Datentransfer Limits an den Kunden senden';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Bitte geben Sie gültige RBL-Hostnamen an.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Quota-Warnungen an den Administrator senden';
 $wb['overquota_notify_client_txt'] = 'Quota-Warnungen an den Kunden senden';
 $wb['overquota_notify_onok_txt'] = 'Meldung an den Kunden senden, wenn Belegung wieder ok';
@@ -276,6 +280,7 @@ $wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
 $wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
 $wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 $wb['network_filesystem_txt'] = 'Netzwerk-Dateisystem';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $wb['overquota_db_notify_admin_txt'] = 'Datenbank-Quota-Warnungen an den Administrator senden';
 $wb['overquota_db_notify_client_txt'] = 'Datenbank-Quota-Warnungen an den Kunden senden';
 $wb['php_ini_check_minutes_txt'] = 'Prüfe php.ini alle X Minuten auf Änderungen';
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 7d372a820e9a56e1ce54ca429c6c2ea28d24ca86..328124f6e72e33c0a0cadb6ab3d0a3b9546ef885 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index b1ebcec391b4c26a45b1ee7edc204c1b85242560..e83fa0e09e6811556aa7a3c78093897b28523c1c 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -100,6 +100,8 @@ $wb['fastcgi_config_syntax_txt'] = 'FastCGI config syntax';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup webfiler ejet af web-bruger som zip';
 $wb['backup_mode_rootgz'] = 'Backup alle filer i web mappe som root-bruger';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Sikkerhedskopier alle filer i vhost -bibliotek og databaser til inkrementelle lagre';
+$wb['backup_missing_utils_txt'] = 'Følgende backup -tilstand kan ikke bruges, fordi de nødvendige værktøjer ikke er installeret:';
 $wb['server_type_txt'] = 'Server Type';
 $wb['nginx_vhost_conf_dir_txt'] = 'Nginx Vhost config dir';
 $wb['nginx_vhost_conf_enabled_dir_txt'] = 'Nginx Vhost config enabled dir';
@@ -182,6 +184,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send over-trafik meddelelse til admin';
 $wb['overtraffic_notify_client_txt'] = 'Send over-trafik meddelelse til kunde';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Angiv gyldige RBL værtsnavne.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send kvote advarsler til admin';
 $wb['overquota_notify_client_txt'] = 'Send kvote advarsler til kunde';
 $wb['overquota_notify_onok_txt'] = 'Send kvote ok meddelelse til kunde';
@@ -272,6 +276,7 @@ $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_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index 18160789a9d8bb83152ba44547c8ae35fe521326..71533e77d0469e26624c1fd33b9c09e1028163dd 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index b147f15e5c98954b23c73b43148a5a74362f366a..c87c151f8cdfc05d65b237a0ae44a50e764bf325 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $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_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 7e2df97a492f642c466fc3a0095564329f75f4e3..f64df47bc949ca1bb6ca3e571994878e3f79dd51 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 4125b2648ea4f13786b613c2ab55ac5fd11d1db1..452f698fd7a53fdfc8d1d00d79d042b365f7b07b 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -120,6 +120,8 @@ $wb['fastcgi_config_syntax_txt'] = 'FastCGI config syntax';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['tmpdir_path_error_empty'] = 'tmp-dir Path is empty.';
 $wb['tmpdir_path_error_regex'] = 'Invalid tmp-dir path.';
 $wb['backup_time_txt'] = 'Backup time';
@@ -206,6 +208,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -229,6 +233,7 @@ $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 ';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
 $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_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 7db4270c128013516c6135c817198d9c30257c06..2f32d4feaaf743d705907aeaa3b3cf8b15027820 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -106,4 +106,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 67e77efac87b1dd937896a43e163e5e790bd3232..83b03af94cf53b1462f47cb667d2d4324094e42e 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -36,6 +36,8 @@ $wb['backup_dir_is_mount_txt'] = 'El directorio de copias de seguridad está mon
 $wb['backup_dir_mount_cmd_txt'] = 'Comando de montaje, si el directorio de copias de seguridad no está montado';
 $wb['backup_dir_txt'] = 'Directorio para respaldos';
 $wb['backup_mode_rootgz'] = 'Respaldar todos los archivos en el directorio web siendo root el propietario';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Respaldar todos los archivos en el directorio vhost y las bases de datos en repositorios incrementales';
+$wb['backup_missing_utils_txt'] = 'El siguiente modo de respaldo no se puede utilizar porque las herramientas necesarias no están instaladas:';
 $wb['backup_mode_txt'] = 'Modo de respaldo';
 $wb['backup_mode_userzip'] = 'Respaldar archivos web siendo el usuario el propietario en formato zip';
 $wb['bind_group_error_empty'] = 'El grupo para BIND está vacío.';
@@ -187,8 +189,11 @@ $wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'El directorio de configuraci
 $wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'El directorio de configuración para Vhost habilitados de Nginx es inválido.';
 $wb['nginx_vhost_conf_enabled_dir_txt'] = 'Directorio de configuración de host virtual de Nginx habilitado';
 $wb['no_notifications_txt'] = 'Sin notificaciones';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $wb['overquota_db_notify_admin_txt'] = 'Enviar advertencias de cuota de base de datos al administrador';
 $wb['overquota_db_notify_client_txt'] = 'Enviar advertencias de cuota de base de datos a los clientes';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Enviar advertencias de cuota excedida al administrador';
 $wb['overquota_notify_client_txt'] = 'Enviar advertencias de cuota excedida al cliente';
 $wb['overquota_notify_freq_note_txt'] = '0 = enviar mensaje solo una vez, sin volver a notificar';
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index 92633c160114e1721e48245bcc078cc6bf7bc6c6..471975be4330c60dee4291ae405b35df501e82ac 100644
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index dac02a14b7ee502d9c91a121d7a238ffc96c6c66..6bd628411b1145ef45f0d290a60cdd47b0ed89ed 100644
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index 1a124440574379e02b7ac3a80ed90905f40ed01c..30dd462a2955f13f0dae5234697d1dd71e8950dc 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 0599b8bbed10b9bd886338f09bb65205f2b4887d..3d4bfb14cde4780f11b41292d891f5d23295118a 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -164,6 +164,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL’s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -181,6 +183,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -271,6 +275,7 @@ $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_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index a79bf9dafd7ce3b7ed37118e23cffcdd7f9dc2bf..ac606922a05896fd791d5aa7b85abbde0bfe34ca 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index e0894ceb82916b2a2b95c0889bfca6baaed23ade..1f970f8638b0c7e545f5e93f6c6c5fab4e9e6f14 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['network_filesystem_txt'] = 'Network Filesystem';
 $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index 7a3426eff580f77e0e1cf684913b60f5b084e61f..0f29ae0c0c5ad6c90d8c8fb7355ad51f7ecfe4e2 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 97774f9ecd77c17812d7c3e4612a935b967ca053..25d30c24515a24a0010ec852083a2b82e43299f7 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index 5fb8f7cd6e54e364cbd43b31e3f369e9bbfe8f75..1258e6acfe878a90df09079f58d7f995ea93ab6c 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index 814e963f649938d4cf6a88cb871844a7d0186b98..f6a54151f30aa69629b02bcde54503f6fe93c263 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index b1df781b7646c5b729a4eb6d19d1b64076e3552b..60eff076d378caabe62bd41685391a509a484e51 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_directive_snippets.lng b/interface/web/admin/lib/lang/it_directive_snippets.lng
index 35e17caaffb3b48146595e2fdbcae376692e61df..1e7d3109a1692aa2e60fcf74c713c4273a4c7028 100644
--- a/interface/web/admin/lib/lang/it_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/it_directive_snippets.lng
@@ -7,9 +7,9 @@ $wb['active_txt'] = 'Attivo';
 $wb['directive_snippets_name_empty'] = 'Indicare un nome per lo snippet.';
 $wb['directive_snippets_name_error_unique'] = 'Esiste già una direttiva snippet con questo nome.';
 $wb['variables_txt'] = 'Variabili';
-$wb['customer_viewable_txt'] = 'Customer viewable';
-$wb['required_php_snippets_txt'] = 'Required PHP Snippet';
-$wb['update_sites_txt'] = 'Update sites using this snippet';
-$wb['error_hide_snippet_active_sites'] = 'You cannot hide this snippet from customers as it is currently used by existing websites.';
-$wb['error_disable_snippet_active_sites'] = 'You cannot disable this snippet as it is currently used by existing websites.';
-$wb['error_delete_snippet_active_sites'] = 'You cannot delete this snippet as it is currently used by existing websites.';
\ No newline at end of file
+$wb['customer_viewable_txt'] = 'Cliente visibile';
+$wb['required_php_snippets_txt'] = 'Richiedi Snippet PHP';
+$wb['update_sites_txt'] = 'Aggiorna i siti usando questo snippet';
+$wb['error_hide_snippet_active_sites'] = 'Non puoi nascondere questo snippet poichè e già usato dai siti web esistenti.';
+$wb['error_disable_snippet_active_sites'] = 'Non puoi disabilitare questo snippet poichè e già usato dai siti web esistenti.';
+$wb['error_delete_snippet_active_sites'] = 'Non puoi cancellare questo snippet poichè e già usato dai siti web esistenti.';
diff --git a/interface/web/admin/lib/lang/it_directive_snippets_list.lng b/interface/web/admin/lib/lang/it_directive_snippets_list.lng
index 7bb90ce94338a83bd3c95ab3a7a34178fb283a8e..b1d82a1caa687916304f7796dc2dc141cdbf6bf8 100644
--- a/interface/web/admin/lib/lang/it_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/it_directive_snippets_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Directtive Snippets';
+$wb['list_head_txt'] = 'Direttive Snippets';
 $wb['active_txt'] = 'Attivo';
 $wb['name_txt'] = 'Nome del Snippet';
 $wb['type_txt'] = 'Tipo';
-$wb['add_new_record_txt'] = 'Aggiungi  Direttive Snippet';
-$wb['customer_viewable_txt'] = 'Customer viewable';
+$wb['add_new_record_txt'] = 'Aggiungi Direttive Snippet';
+$wb['customer_viewable_txt'] = 'Cliente visibile';
 ?>
diff --git a/interface/web/admin/lib/lang/it_groups_list.lng b/interface/web/admin/lib/lang/it_groups_list.lng
index 52cdce78e70b3677d1e16a1d685be2fc5dbe44e7..f816bcca86bcad302ab858b586f43fc6aad3aca8 100644
--- a/interface/web/admin/lib/lang/it_groups_list.lng
+++ b/interface/web/admin/lib/lang/it_groups_list.lng
@@ -3,5 +3,5 @@ $wb['list_head_txt'] = 'Gruppi utenti sistema';
 $wb['description_txt'] = 'Descrizione';
 $wb['name_txt'] = 'Gruppo';
 $wb['add_new_record_txt'] = 'Aggiungi nuovo gruppo';
-$wb['warning_txt'] = '<b>ATTENZIONE:</b> Non editare o modificare alcuna impostazione utente da qui. Utilizzare invece le impostazioni del modulo nella sezione Clienti- e Rivenditori. Modificare o cambiare Utenti o Gruppi in questa sezione può causare perdita di dati!';
+$wb['warning_txt'] = '<b>ATTENZIONE:</b> Non editare o modificare alcuna impostazione utente da qui. Utilizzare invece le impostazioni del modulo nella sezione Clienti e Rivenditori. Modificare o cambiare Utenti o Gruppi in questa sezione può causare perdita di dati!';
 ?>
diff --git a/interface/web/admin/lib/lang/it_iptables.lng b/interface/web/admin/lib/lang/it_iptables.lng
index 8fb963ebec01f174b1eca9ae370a53f90c97e917..24016ff7c815d95177e587f613148e9387ba38cc 100644
--- a/interface/web/admin/lib/lang/it_iptables.lng
+++ b/interface/web/admin/lib/lang/it_iptables.lng
@@ -1,13 +1,13 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['multiport_txt'] = 'Multi Port';
-$wb['singleport_txt'] = 'Single Port';
-$wb['protocol_txt'] = 'Protocol';
-$wb['table_txt'] = 'Table';
-$wb['target_txt'] = 'Target';
-$wb['state_txt'] = 'State';
-$wb['destination_ip_txt'] = 'Destination Address';
-$wb['source_ip_txt'] = 'Source Address';
+$wb['multiport_txt'] = 'Multi Porta';
+$wb['singleport_txt'] = 'Singola Porta';
+$wb['protocol_txt'] = 'Protocollo';
+$wb['table_txt'] = 'Tavola';
+$wb['target_txt'] = 'Obiettivo';
+$wb['state_txt'] = 'Stato';
+$wb['destination_ip_txt'] = 'Indirizzo Destinazione';
+$wb['source_ip_txt'] = 'Indirizzo Sorgente';
 $wb['active_txt'] = 'Attivo';
-$wb['iptables_error_unique'] = 'There is already a firewall record for this server.';
+$wb['iptables_error_unique'] = 'Esiste già una regola del firewall per questo server.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_iptables_list.lng b/interface/web/admin/lib/lang/it_iptables_list.lng
index 76fbcaff8583b484dc6f89ac481d1c15e574d3bd..f8248869d824b9d7f2b8386c2ed04bc6940294bb 100644
--- a/interface/web/admin/lib/lang/it_iptables_list.lng
+++ b/interface/web/admin/lib/lang/it_iptables_list.lng
@@ -2,14 +2,14 @@
 $wb['list_head_txt'] = 'IPTables';
 $wb['add_new_rule_txt'] = 'Aggiungi Regola IPTables';
 $wb['server_id_txt'] = 'Server';
-$wb['multiport_txt'] = 'Multi Port';
-$wb['singleport_txt'] = 'Single Port';
-$wb['protocol_txt'] = 'Protocol';
-$wb['table_txt'] = 'Table';
-$wb['target_txt'] = 'Target';
-$wb['state_txt'] = 'State';
-$wb['destination_ip_txt'] = 'Destination Address';
-$wb['source_ip_txt'] = 'Source Address';
+$wb['multiport_txt'] = 'Multi Porta';
+$wb['singleport_txt'] = 'Singola Porta';
+$wb['protocol_txt'] = 'Protocollo';
+$wb['table_txt'] = 'Tavola';
+$wb['target_txt'] = 'Obiettivo';
+$wb['state_txt'] = 'Stato';
+$wb['destination_ip_txt'] = 'Indirizzo Destinazione';
+$wb['source_ip_txt'] = 'Indirizzo Sorgente';
 $wb['active_txt'] = 'Attivo';
 $wb['iptables_error_unique'] = 'Esiste già una regola firewall per questo server.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_language_complete.lng b/interface/web/admin/lib/lang/it_language_complete.lng
index 84e629e100b9045109a31dbcce899f0377fb44df..a637e532f49d8d6177041c5e448b84fb01b631e3 100644
--- a/interface/web/admin/lib/lang/it_language_complete.lng
+++ b/interface/web/admin/lib/lang/it_language_complete.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Merge the selected language file with the english master language file. <br />This adds missing strings from the english master language files to the selected language.';
-$wb['language_select_txt'] = 'Select language';
-$wb['btn_save_txt'] = 'Merge files now';
+$wb['list_head_txt'] = 'Unisci il file di traduzione selezionato con il file master in lingua inglese. <br />Questo aggiungerà le stringhe mancanti (in inglese) al file di traduzione selezionato.';
+$wb['language_select_txt'] = 'Seleziona lingua';
+$wb['btn_save_txt'] = 'Unisci i file adesso';
 $wb['btn_cancel_txt'] = 'Annulla';
-$wb['list_desc_txt'] = 'Merge the selected language file with the english master language file. <br />This adds missing strings from the english master language files to the selected language.';
+$wb['list_desc_txt'] = 'Unendo il file di traduzione selezionato con il file master in lingua inglese. <br />Questo aggiungerà le stringhe mancanti (in inglese) al file di traduzione selezionato..';
 ?>
diff --git a/interface/web/admin/lib/lang/it_language_edit.lng b/interface/web/admin/lib/lang/it_language_edit.lng
index 5a710c90ea24aa9a02ccb83475a37a45603ea898..101d41072adecec9fd6256b0146c724714bd730a 100644
--- a/interface/web/admin/lib/lang/it_language_edit.lng
+++ b/interface/web/admin/lib/lang/it_language_edit.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Language file editor';
-$wb['language_select_txt'] = 'Seleziona language';
-$wb['module_txt'] = 'Module';
-$wb['lang_file_txt'] = 'Language file';
+$wb['list_head_txt'] = 'Editor del file della traduzione';
+$wb['language_select_txt'] = 'Seleziona lingua';
+$wb['module_txt'] = 'Modulo';
+$wb['lang_file_txt'] = 'File traduzione';
 $wb['btn_save_txt'] = 'Salva';
 $wb['btn_cancel_txt'] = 'Annulla';
 ?>
diff --git a/interface/web/admin/lib/lang/it_language_import.lng b/interface/web/admin/lib/lang/it_language_import.lng
index a6ce43814c9e088b5493c64601ce02b7d236a152..0705efd126f1ee0abfc8f5513ba542b9da321f3a 100644
--- a/interface/web/admin/lib/lang/it_language_import.lng
+++ b/interface/web/admin/lib/lang/it_language_import.lng
@@ -5,5 +5,5 @@ $wb['btn_save_txt'] = 'Importa il file di lingua selezionato';
 $wb['language_overwrite_txt'] = 'Sovrascrivi file, se esiste';
 $wb['btn_cancel_txt'] = 'Annulla';
 $wb['ignore_version_txt'] = 'Tralascia controllo versione ISPconfig';
-$wb['list_desc_txt'] = 'WARNING: Do not import language files from untrustworthy sources.';
+$wb['list_desc_txt'] = 'ATTENZIONE: non importare file di traduzione da sorgenti non affidabili.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_remote_action.lng b/interface/web/admin/lib/lang/it_remote_action.lng
index bb14a01f7575b8b34eeb7b77272dc97965441693..9f43cb45fc90f10dc6b606aaacf24df45f84429c 100644
--- a/interface/web/admin/lib/lang/it_remote_action.lng
+++ b/interface/web/admin/lib/lang/it_remote_action.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['select_server_txt'] = 'Seleziona Server';
 $wb['btn_do_txt'] = 'Esegui Azione';
-$wb['do_osupdate_caption'] = 'Do OS-Update at remote server';
-$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.<br><br><strong>USE THIS AT YOUR OWN RISK!</strong>';
-$wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server';
-$wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.<br><br><strong>USE THIS AT YOUR OWN RISK!</strong>';
-$wb['action_scheduled'] = 'The action is scheduled for execution';
-$wb['select_all_server'] = 'All server';
-$wb['ispconfig_update_title'] = 'ISPConfig update instructions';
-$wb['ispconfig_update_text'] = 'Login as root user on the shell of your server and execute the command<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />to start the ISPConfig update.<br /><br /><a href=https://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/ target=_blank>Click here for detailed update instructins</a>';
+$wb['do_osupdate_caption'] = 'Esegui un aggiornamento del S.O. sul server remoto';
+$wb['do_osupdate_desc'] = 'Questa azione esegue apt -y upgrade sul server selezionato.<br><br><strong>USI QUESTA FUNZIONE A TUO RISCHIO E PERICOLO!</strong>';
+$wb['do_ispcupdate_caption'] = 'Esegui aggiornamento di ISPConfig 3 sul server remoto';
+$wb['do_ispcupdate_desc'] = 'Questa operazione esegue un aggiornamento a ISPConfig 3 sul server selezionato.<br><br><strong>USI QUESTA FUNZIONE A TUO RISCHIO E PERICOLO!</strong>';
+$wb['action_scheduled'] = 'L\'azione è programmata per la sua esecuzione';
+$wb['select_all_server'] = 'Tutti i server';
+$wb['ispconfig_update_title'] = 'Istruzioni per l\'aggiornamento di ISPConfig';
+$wb['ispconfig_update_text'] = 'Collegati alla shell del server come root ed esegui il comando <br /><br /> <strong>ispconfig_update.sh</strong><br /><br />per iniziare il processo di aggiornamento.<br /><br /><a href=https://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/ target=_blank>Clicca qui per le istruzioni dettagliate di aggiornamento (in inglese)</a>';
 ?>
diff --git a/interface/web/admin/lib/lang/it_remote_user.lng b/interface/web/admin/lib/lang/it_remote_user.lng
index f5fc847d68a317c7c8395c0adfc0b8692efb1094..f3bdba77371ae983c8ac94e2fa9abda79d056c3f 100644
--- a/interface/web/admin/lib/lang/it_remote_user.lng
+++ b/interface/web/admin/lib/lang/it_remote_user.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['remote_user_txt'] = 'Remote User';
+$wb['remote_user_txt'] = 'Utente Remoto';
 $wb['username_txt'] = 'Nome Utente';
 $wb['password_txt'] = 'Password';
 $wb['function_txt'] = 'Funzioni';
 $wb['username_error_unique'] = 'Il nome utente deve essere unico';
 $wb['username_error_empty'] = 'Il nome utente  non può essere vuoto ';
 $wb['password_error_empty'] = 'La Password  non può essere vuoto ';
-$wb['password_strength_txt'] = 'Livello Sicurezza Password';
+$wb['password_strength_txt'] = 'Robustezza Password';
 $wb['Mail domain functions'] = 'Funzioni Dominio di Posta';
 $wb['Mail user functions'] = 'Funzioni Utente di posta';
 $wb['Mail alias functions'] = 'Funzioni Alias di posta';
@@ -16,37 +16,37 @@ $wb['Mail transport functions'] = 'Funzioni Mail transport';
 $wb['Mail whitelist functions'] = 'Funzioni whitelist di posta';
 $wb['Mail blacklist functions'] = 'Funzioni blacklist di posta';
 $wb['Mail spamfilter user functions'] = 'Funzioni utente filtri spam di posta';
-$wb['Mail spamfilter policy functions'] = 'Mail spamfilter policy functions';
-$wb['Mail fetchmail functions'] = 'Mail fetchmail functions';
-$wb['Mail user filter functions'] = 'Mail user filter functions';
-$wb['Mail filter functions'] = 'Mail filter functions';
-$wb['Client functions'] = 'Client functions';
-$wb['Sites cron functions'] = 'Sites cron functions';
-$wb['Sites database functions'] = 'Sites database functions';
-$wb['Sites FTP-User functions'] = 'Sites FTP-User functions';
-$wb['Sites Shell-User functions'] = 'Sites Shell-User functions';
-$wb['Sites Domain functions'] = 'Sites Domain functions';
-$wb['Sites Aliasdomain functions'] = 'Sites Aliasdomain functions';
-$wb['Sites Subdomain functions'] = 'Sites Subdomain functions';
-$wb['DNS zone functions'] = 'DNS zone functions';
-$wb['DNS a functions'] = 'DNS a functions';
-$wb['DNS aaaa functions'] = 'DNS aaaa functions';
-$wb['DNS alias functions'] = 'DNS alias functions';
-$wb['DNS cname functions'] = 'DNS cname functions';
-$wb['DNS hinfo functions'] = 'DNS hinfo functions';
-$wb['DNS mx functions'] = 'DNS mx functions';
-$wb['DNS naptr functions'] = 'DNS naptr functions';
-$wb['DNS ns functions'] = 'DNS ns functions';
-$wb['DNS ptr functions'] = 'DNS ptr functions';
-$wb['DNS rp functions'] = 'DNS rp functions';
-$wb['DNS srv functions'] = 'DNS srv functions';
-$wb['DNS txt functions'] = 'DNS txt functions';
-$wb['Mail mailing list functions'] = 'Mail mailinglist functions';
+$wb['Mail spamfilter policy functions'] = 'Funzioni di polotica di filtro spam per le mail';
+$wb['Mail fetchmail functions'] = 'Funzioni Mail fetchmail';
+$wb['Mail user filter functions'] = 'Funzioni di filtro utente per le mail';
+$wb['Mail filter functions'] = 'Funzioni di filtro Mail';
+$wb['Client functions'] = 'Funzioni Cliente';
+$wb['Sites cron functions'] = 'Funzioni cron per i siti';
+$wb['Sites database functions'] = 'Funzioni per database siti';
+$wb['Sites FTP-User functions'] = 'Funzioni per utenti FTP';
+$wb['Sites Shell-User functions'] = 'Funzioni per utenti Shell';
+$wb['Sites Domain functions'] = 'Funzioni per i Domini';
+$wb['Sites Aliasdomain functions'] = 'Funzioni per domini Alias';
+$wb['Sites Subdomain functions'] = 'Funzioni per sottodomini';
+$wb['DNS zone functions'] = 'Funzioni per zone DNS';
+$wb['DNS a functions'] = 'Funzioni per record A DNS';
+$wb['DNS aaaa functions'] = 'Funzioni per record AAAA DNS';
+$wb['DNS alias functions'] = 'Funzioni per alias DNS';
+$wb['DNS cname functions'] = 'Funzioni per cname DNS';
+$wb['DNS hinfo functions'] = 'Funzioni per hinfo DNS';
+$wb['DNS mx functions'] = 'Funzioni per MX DNS';
+$wb['DNS naptr functions'] = 'Funzioni NAPTR DNS';
+$wb['DNS ns functions'] = 'Funzioni NS DNS';
+$wb['DNS ptr functions'] = 'Funzioni PTR DNS';
+$wb['DNS rp functions'] = 'Funzioni RP DNS';
+$wb['DNS srv functions'] = 'Funzioni SRV DNS';
+$wb['DNS txt functions'] = 'Funzioni TXT DNS';
+$wb['Mail mailing list functions'] = 'Funzioni Mail mailinglist';
 $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['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'] = 'Accesso remoto Access';
+$wb['remote_ips_txt'] = 'Accesso remoto IPs / Hostnames (separati da , lasciare vuote per <i>qualunque</i>)';
+$wb['remote_user_error_ips'] = 'Almeno un indirizzo IP o hostname inserito non è valido.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index f9e30f39374728b73ef67c587d8c84c625117e68..7d67123662c722bfd20962d11914acf4cc48a581 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -1,27 +1,27 @@
 <?php
-$wb['server_config'] = 'Server Config';
-$wb['config_for_txt'] = 'Configuration for';
-$wb['server_config_error_not_updated'] = 'Error in Server Config: not updated';
-$wb['server_config_error_section_not_updated'] = 'Error in Server Config: %s section not updated';
-$wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
-$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
-$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
+$wb['server_config'] = 'Configurazione Server';
+$wb['config_for_txt'] = 'Configurazione per';
+$wb['server_config_error_not_updated'] = 'Errore nella configurazione del Server: non aggiornato';
+$wb['server_config_error_section_not_updated'] = 'Errore nella configurazione del Server: %s sezione non aggiornata';
+$wb['jailkit_chroot_home_txt'] = 'Cartella home di chroot Jailkit';
+$wb['jailkit_chroot_app_sections_txt'] = 'Sezione applicazioni chroot Jailkit';
+$wb['jailkit_chroot_app_programs_txt'] = 'Applicazioni Jailkit chrooted';
 $wb['website_path_txt'] = 'Percorso Sito Web';
 $wb['website_symlinks_txt'] = 'Sito Web symlinks';
-$wb['vhost_conf_dir_txt'] = 'Vhost config dir';
-$wb['vhost_conf_enabled_dir_txt'] = 'Vhost config dir abilitata';
-$wb['apache_init_script_txt'] = 'Apache init script';
-$wb['apache_init_script_note_txt'] = 'Lasciare questo vuoto rileverà automaticamente lo script init di Apache';
-$wb['apache_init_script_error_regex'] = 'Script init Apache non valido.';
-$wb['getmail_config_dir_txt'] = 'Getmail config dir';
+$wb['vhost_conf_dir_txt'] = 'Cartella configurazione Vhost';
+$wb['vhost_conf_enabled_dir_txt'] = 'Cartella configurazione Vhost abilitata';
+$wb['apache_init_script_txt'] = 'script Apache di avvio';
+$wb['apache_init_script_note_txt'] = 'Lasciare questo vuoto rileverà automaticamente lo script di avvio di Apache';
+$wb['apache_init_script_error_regex'] = 'Script di avvio di Apache non valido.';
+$wb['getmail_config_dir_txt'] = 'Cartella di configurazione Getmail';
 $wb['fastcgi_starter_path_txt'] = 'Percorso FastCGI starter';
-$wb['fastcgi_starter_script_txt'] = 'FastCGI starter script';
-$wb['fastcgi_alias_txt'] = 'FastCGI Alias';
+$wb['fastcgi_starter_script_txt'] = 'script di avvio FastCGI';
+$wb['fastcgi_alias_txt'] = 'Alias FastCGI';
 $wb['fastcgi_phpini_path_txt'] = 'Percorso FastCGI php.ini';
 $wb['fastcgi_children_txt'] = 'FastCGI Children';
 $wb['fastcgi_max_requests_txt'] = 'FastCGI max. Requests';
 $wb['fastcgi_bin_txt'] = 'FastCGI Bin';
-$wb['module_txt'] = 'Module';
+$wb['module_txt'] = 'Modulo';
 $wb['maildir_path_txt'] = 'Percorso Maildir';
 $wb['homedir_path_txt'] = 'Percorso Homedir';
 $wb['mailuser_uid_txt'] = 'Mailuser UID';
@@ -43,8 +43,8 @@ $wb['website_basedir_txt'] = 'basedir per Sito Web';
 $wb['ip_address_error_wrong'] = 'Formato indirizzo IP non valido.';
 $wb['netmask_error_wrong'] = 'Formato Maschera di rete non valido.';
 $wb['gateway_error_wrong'] = 'Formato Gateway non valido.';
-$wb['hostname_error_empty'] = 'Hostname  vuoto.';
-$wb['nameservers_error_empty'] = 'Nameserver  vuoto.';
+$wb['hostname_error_empty'] = 'Hostname vuoto.';
+$wb['nameservers_error_empty'] = 'Nameserver vuoto.';
 $wb['jailkit_chroot_cron_programs_txt'] = 'Applicazioni Jailkit cron chrooted';
 $wb['config_dir_txt'] = 'Direttrice configurazione';
 $wb['init_script_txt'] = 'Nome script di Cron init';
@@ -71,7 +71,7 @@ $wb['pop3_imap_daemon_txt'] = 'Demone POP3/IMAP';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
 $wb['php_open_basedir_error_empty'] = 'PHP open_basedir  vuoto.';
 $wb['htaccess_allow_override_txt'] = '.htaccess AllowOverride';
-$wb['htaccess_allow_override_error_empty'] = '.htaccess AllowOverride  vuoto.';
+$wb['htaccess_allow_override_error_empty'] = '.htaccess AllowOverride vuoto.';
 $wb['awstats_conf_dir_txt'] = 'awstats cartella di configurazione';
 $wb['awstats_data_dir_txt'] = 'awstats cartella dati';
 $wb['awstats_pl_txt'] = 'awstats.pl script';
@@ -90,7 +90,7 @@ $wb['ufw_default_forward_policy_txt'] = 'Default Forward Policy';
 $wb['ufw_default_application_policy_txt'] = 'Default Application Policy';
 $wb['ufw_log_level_txt'] = 'Livello di Log';
 $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
-$wb['network_config_warning_txt'] = 'L opzione di configurazione di rete è disponibile solo per Debian and Ubuntu Servers. Non abilitare se la tua interfaccia di rete non è eth0.';
+$wb['network_config_warning_txt'] = 'L\'opzione di configurazione di rete è disponibile solo per Debian and Ubuntu Servers. Non abilitare se la tua interfaccia di rete non è eth0.';
 $wb['CA_path_txt'] = 'Percorso CA';
 $wb['CA_pass_txt'] = 'CA passphrase';
 $wb['fastcgi_config_syntax_txt'] = 'Sintassi configurazione FastCGI';
@@ -100,8 +100,8 @@ $wb['nginx_vhost_conf_enabled_dir_txt'] = 'Nginx Vhost config enabled dir';
 $wb['nginx_user_txt'] = 'Utente Nginx';
 $wb['nginx_group_txt'] = 'Gruppo Nginx';
 $wb['nginx_cgi_socket_txt'] = 'Nginx CGI Socket';
-$wb['backup_dir_error_empty'] = 'Backup directory  vuoto.';
-$wb['maildir_path_error_empty'] = 'Maildir Percorso  vuoto.';
+$wb['backup_dir_error_empty'] = 'Backup directory vuoto.';
+$wb['maildir_path_error_empty'] = 'Maildir Percorso vuoto.';
 $wb['homedir_path_error_empty'] = 'Homedir Percorso  vuoto.';
 $wb['mailuser_uid_error_empty'] = 'Mailuser UID  vuoto.';
 $wb['mailuser_gid_error_empty'] = 'Mailuser GID  vuoto.';
@@ -113,8 +113,8 @@ $wb['website_path_error_empty'] = 'Percorso Sito Web  vuoto.';
 $wb['website_symlinks_error_empty'] = 'Website symlinks  vuoto.';
 $wb['vhost_conf_dir_error_empty'] = 'Vhost config dir  vuoto.';
 $wb['vhost_conf_enabled_dir_error_empty'] = 'Vhost config enabled dir  vuoto.';
-$wb['nginx_vhost_conf_dir_error_empty'] = 'Nginx Vhost config dir  vuoto.';
-$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Nginx Vhost config enabled dir  vuoto.';
+$wb['nginx_vhost_conf_dir_error_empty'] = 'Cartella di configurazione Vhost Nginx vuoto.';
+$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Cartella di configurazione Vhost Nginx vuoto.';
 $wb['apache_user_error_empty'] = 'Utente Apache  vuoto.';
 $wb['apache_group_error_empty'] = 'Gruppo Apache vuoto.';
 $wb['nginx_user_error_empty'] = 'Utente Nginx vuoto.';
@@ -132,23 +132,23 @@ $wb['fastcgi_children_error_empty'] = 'FastCGI Children  vuoto.';
 $wb['fastcgi_max_requests_error_empty'] = 'FastCGI max. Requests  vuoto.';
 $wb['fastcgi_bin_error_empty'] = 'FastCGI Bin  vuoto.';
 $wb['jailkit_chroot_home_error_empty'] = 'Jailkit chroot home  vuoto.';
-$wb['jailkit_chroot_app_sections_error_empty'] = 'Jailkit chroot app sections  vuoto.';
-$wb['jailkit_chroot_app_programs_error_empty'] = 'Jailkit chrooted applications  vuoto.';
+$wb['jailkit_chroot_app_sections_error_empty'] = 'Sezione app chroot Jailkit vuoto.';
+$wb['jailkit_chroot_app_programs_error_empty'] = 'Applicazioni chrooted Jailkit vuoto.';
 $wb['jailkit_chroot_cron_programs_error_empty'] = 'Jailkit cron chrooted applications  vuoto.';
-$wb['vlogger_config_dir_error_empty'] = 'Config directory  vuoto.';
-$wb['cron_init_script_error_empty'] = 'Cron init script name  vuoto.';
+$wb['vlogger_config_dir_error_empty'] = 'Cartella di configurazione vuoto.';
+$wb['cron_init_script_error_empty'] = 'nome script di avvio Cron vuoto.';
 $wb['crontab_dir_error_empty'] = 'Percorso per crontabs individuali  vuoto.';
-$wb['cron_wget_error_empty'] = 'Percorso al programma wget  vuoto.';
-$wb['php_fpm_init_script_txt'] = 'PHP-FPM init script';
-$wb['php_fpm_init_script_error_empty'] = 'PHP-FPM init script  vuoto.';
-$wb['php_fpm_ini_path_txt'] = 'PHP-FPM php.ini path';
-$wb['php_fpm_ini_path_error_empty'] = 'PHP-FPM php.ini path  vuoto.';
+$wb['cron_wget_error_empty'] = 'Percorso al programma wget vuoto.';
+$wb['php_fpm_init_script_txt'] = 'script di avvio PHP-FPM';
+$wb['php_fpm_init_script_error_empty'] = 'script di avvio PHP-FPM vuoto.';
+$wb['php_fpm_ini_path_txt'] = 'Percorso PHP-FPM php.ini';
+$wb['php_fpm_ini_path_error_empty'] = 'Percorso PHP-FPM php.ini vuoto.';
 $wb['php_fpm_pool_dir_txt'] = 'PHP-FPM pool directory';
-$wb['php_fpm_pool_dir_error_empty'] = 'PHP-FPM pool directory  vuoto.';
+$wb['php_fpm_pool_dir_error_empty'] = 'PHP-FPM pool directory vuoto.';
 $wb['php_fpm_start_port_txt'] = 'PHP-FPM start port';
-$wb['php_fpm_start_port_error_empty'] = 'PHP-FPM start port  vuoto.';
+$wb['php_fpm_start_port_error_empty'] = 'PHP-FPM start port vuoto.';
 $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory';
-$wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM socket directory  vuoto.';
+$wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM socket directory vuoto.';
 $wb['try_rescue_txt'] = 'Abilita servizio di monitoraggio in caso di failure';
 $wb['do_not_try_rescue_httpd_txt'] = 'Disabilita monitoraggio HTTPD';
 $wb['do_not_try_rescue_mysql_txt'] = 'Disabilita monitoraggio MySQL';
@@ -156,18 +156,20 @@ $wb['do_not_try_rescue_mail_txt'] = 'Disabilita monitoraggio Email';
 $wb['rescue_description_txt'] = '<b>Informazione:</b> Se desideri fermare MySQL devi selezionare la spunta per Disabilitare monitor MySQL ed attendere 2-3 minuti.<br>Se non attendi 2-3 minuti, il sistema tenterà di riavviare MySQL!';
 $wb['enable_sni_txt'] = 'Abilita SNI';
 $wb['set_folder_permissions_on_update_txt'] = 'Imposta permessi cartella ad aggiornamento';
-$wb['add_web_users_to_sshusers_group_txt'] = 'Aggiungi utente sito web a  gruppo utenti -ssh-';
-$wb['connect_userid_to_webid_txt'] = 'Conllega userid Linux a webid';
+$wb['add_web_users_to_sshusers_group_txt'] = 'Aggiungi utente sito web a gruppo utenti -ssh-';
+$wb['connect_userid_to_webid_txt'] = 'Collega userid Linux a webid';
 $wb['connect_userid_to_webid_start_txt'] = 'Avvia ID per collegamento userid/webid';
 $wb['website_autoalias_txt'] = 'Sito Web auto alias';
-$wb['website_autoalias_note_txt'] = 'Placeholders:';
+$wb['website_autoalias_note_txt'] = 'Marcaposto:';
 $wb['backup_mode_txt'] = 'Modalità di Backup';
 $wb['backup_mode_userzip'] = 'Backup files siti web come utente web in formato zip';
 $wb['backup_mode_rootgz'] = 'Backup di tutti i files nella cartella sito come utente root';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Lista Real-Time Blackhole';
 $wb['realtime_blackhole_list_note_txt'] = '(Separare RBL con le virgole)';
-$wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
-$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
+$wb['stress_adaptive_txt'] = 'Adatta a momentanee punte di carico di lavoro';
+$wb['tooltip_stress_adaptive_txt'] = 'Abilita il comportamente adattivo allo stress di Postfix.';
 $wb['ssl_settings_txt'] = 'Impostazioni SSL';
 $wb['permissions_txt'] = 'Permessi';
 $wb['php_settings_txt'] = 'Impostazioni PHP';
@@ -179,8 +181,10 @@ $wb['enable_ip_wildcard_txt'] = 'Abilita  IP wildcard (*)';
 $wb['web_folder_protection_txt'] = 'Imposta cartelle sito in moaniera non modificabile (attributi estesi)';
 $wb['overtraffic_notify_admin_txt'] = 'Trasmetti notifiche superamento traffico ad admin';
 $wb['overtraffic_notify_client_txt'] = 'Trasmetti notifiche superamento traffico al cliente';
-$wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
+$wb['overtraffic_disable_web_txt'] = 'Disabilita i siti web che eccedono il limiti di traffico';
 $wb['rbl_error_regex'] = 'Per cortesia specificare nomi host RBL validi.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Trasmetti allarmi quota ad admin';
 $wb['overquota_notify_client_txt'] = 'Trasmetti allarmi quota al cliente';
 $wb['overquota_notify_onok_txt'] = 'Trasmetti messaggio quota ok al cliente';
@@ -192,12 +196,12 @@ $wb['monit_url_txt'] = 'Monit URL';
 $wb['monit_user_txt'] = 'Monit utente';
 $wb['monit_password_txt'] = 'Monit Password';
 $wb['monit_url_error_regex'] = 'Monit URL non valida';
-$wb['monit_url_note_txt'] = 'Placeholder:';
+$wb['monit_url_note_txt'] = 'Marcaposto:';
 $wb['munin_url_txt'] = 'Munin URL';
 $wb['munin_user_txt'] = 'Munin Utente';
 $wb['munin_password_txt'] = 'Munin Password';
 $wb['munin_url_error_regex'] = 'Munin URL non valida';
-$wb['munin_url_note_txt'] = 'Placeholder:';
+$wb['munin_url_note_txt'] = 'Marcaposto:';
 $wb['backup_dir_is_mount_txt'] = 'La direttirice di Backup è un mount?';
 $wb['monitor_system_updates_txt'] = 'Verifica aggiornamenti Linux';
 $wb['hostname_error_regex'] = 'Nome Host non valido.';
@@ -216,121 +220,121 @@ $wb['website_symlinks_error_regex'] = 'website symlinks non valido.';
 $wb['vhost_conf_dir_error_regex'] = 'Direttrice configurazione vhost non valida.';
 $wb['vhost_conf_enabled_dir_error_regex'] = 'Direttirce abilitata per vhost conf non valida.';
 $wb['nginx_vhost_conf_dir_error_regex'] = 'nginx config directory non valida.';
-$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
-$wb['ca_path_error_regex'] = 'Invalid CA path.';
-$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
-$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
-$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
-$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
-$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
-$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
-$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
-$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
-$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
-$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
-$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
-$wb['awstats_pl_empty'] = 'awstats.pl setting  vuoto.';
-$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
-$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
-$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
-$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
-$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
-$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
-$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
-$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
-$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
-$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
-$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
-$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
-$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
-$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
-$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
-$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
-$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
-$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
-$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
-$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
-$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
-$wb['network_filesystem_txt'] = 'Network Filesystem';
-$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['reject_unknown_txt'] = 'Reject unknown hostnames';
-$wb['tooltip_reject_unknown_txt'] = 'Requires hostnames to pass DNS checks.  Not checked for authenticated users.';
-$wb['reject_unknown_helo_txt'] = 'Reject unknown helo hostnames';
-$wb['reject_unknown_client_txt'] = 'Reject unknown client hostnames';
-$wb['reject_unknown_client_helo_txt'] = 'Reject unknown helo and client hostnames';
-$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['nginx_vhost_conf_enabled_dir_error_regex'] = 'Cartella conf enabled di nginx non valida.';
+$wb['ca_path_error_regex'] = 'Invalido percorso a CA.';
+$wb['invalid_nginx_user_txt'] = 'Invalido utente nginx.';
+$wb['invalid_nginx_group_txt'] = 'Invalido gruppo nginx.';
+$wb['php_ini_path_apache_error_regex'] = 'Percorso apache php.ini non valido.';
+$wb['php_ini_path_cgi_error_regex'] = 'Percorso cgi php.ini non valido.';
+$wb['php_fpm_init_script_error_regex'] = 'Script php-fpm init non valido.';
+$wb['php_fpm_ini_path_error_regex'] = 'Percorso php-fpm ini non valido.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Cartella php-fpm pool non valida.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Cartella php-fpm socket non valida.';
+$wb['php_open_basedir_error_regex'] = 'php open_basedir non valido.';
+$wb['awstats_data_dir_empty'] = 'awstats: la cartella dati è vuota';
+$wb['awstats_data_dir_error_regex'] = 'Cartella dati awstats non valida.';
+$wb['awstats_pl_empty'] = 'awstats.pl impostazioni vuoto.';
+$wb['awstats_pl_error_regex'] = 'Percorso awstats.pl non valido.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl è vuoto';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Percorso awstats_buildstaticpages.pl non valido.';
+$wb['invalid_bind_user_txt'] = 'Utente BIND non valido.';
+$wb['invalid_bind_group_txt'] = 'Gruppo BIND non valido.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Cartella zone BIND non valida.';
+$wb['named_conf_path_error_regex'] = 'Percorso named.conf non valido.';
+$wb['named_conf_local_path_error_regex'] = 'Percorso named.conf.local non valido.';
+$wb['fastcgi_starter_path_error_regex'] = 'Percorso starter fastcgi non valido.';
+$wb['fastcgi_starter_script_error_regex'] = 'Percorso script di avvioo fastcgi non valido.';
+$wb['fastcgi_alias_error_regex'] = 'Alias fastcgi non valido.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Percorso fastcgi non valido.';
+$wb['fastcgi_bin_error_regex'] = 'Binario fastcgi non valido.';
+$wb['jailkit_chroot_home_error_regex'] = 'Cartella home jailkit chroot non valida.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Sezione jailkit chroot non valida.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Programma jailkit chroot app non valido.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Programma jailkit chroot cron non valido.';
+$wb['vlogger_config_dir_error_regex'] = 'Cartella di configurazione vlogger non valida.';
+$wb['cron_init_script_error_regex'] = 'Script di avvio cron non valido.';
+$wb['crontab_dir_error_regex'] = 'Cartella crontab non valida.';
+$wb['cron_wget_error_regex'] = 'Percorso cron wget non valido.';
+$wb['network_filesystem_txt'] = 'Filesystem di rete';
+$wb['maildir_format_txt'] = 'Formato Maildir';
+$wb['dkim_path_txt'] = 'Percorso DKIM';
+$wb['mailbox_virtual_uidgid_maps_txt'] = 'Usare uid dei siti Web per mailbox';
+$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'Solo per setup di unico sito web e server mail';
+$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid non può essere usato per mappare multi-server-setup.';
+$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'La mappatura Uidpuò essere usata solo con dovecot.';
+$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'La mappatura Uid non può essere cambiata se esistono già utenti mail.';
+$wb['reject_sender_login_mismatch_txt'] = 'RIfiuta se il mittente non soddisfa login';
+$wb['reject_unknown_txt'] = 'Rifiuta hostnames sconosciuti';
+$wb['tooltip_reject_unknown_txt'] = 'Richiedi che gli hostnames tsuperino il check del DNS. Check non eseguito per utenti autenticati.';
+$wb['reject_unknown_helo_txt'] = 'Rifiuta helo hostnames sconosciuti';
+$wb['reject_unknown_client_txt'] = 'Rifiuta client hostnames sconosciuti';
+$wb['reject_unknown_client_helo_txt'] = 'Rifiuta helo e client hostnames sconosciuti';
+$wb['do_not_try_rescue_mongodb_txt'] = 'Disabilita monitoring MongoDB';
+$wb['v6_prefix_txt'] = 'Prefisso IPv6';
+$wb['vhost_rewrite_v6_txt'] = 'Riscrivi IPv6 su Mirror';
+$wb['v6_prefix_length'] = 'Prefisso troppo lungo secondo le regole IPv6';
+$wb['backup_dir_mount_cmd_txt'] = 'Comanda mount se la directory di backup non è montata';
+$wb['backup_delete_txt'] = 'Cancellare i backup alla cancellazione dei domini/siti web';
+$wb['overquota_db_notify_admin_txt'] = 'Invia avviso di quota DB all\'amministratore';
+$wb['overquota_db_notify_client_txt'] = 'Invia avviso di quota DB al cliente';
 $wb['php_handler_txt'] = 'Default PHP Handler';
 $wb['php_fpm_default_chroot_txt'] = 'Default chrooted PHP-FPM';
-$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';
-$wb['php_ini_check_minutes_error_empty'] = 'Please specify a value how often php.ini should be checked for changes.';
+$wb['php_fpm_incron_reload_txt'] = 'Installare trigger incron trigger per riavviare PHP-FPM';
+$wb['disabled_txt'] = 'Disabilitato';
+$wb['dkim_strength_txt'] = 'Affidabilità DKIM';
+$wb['php_ini_check_minutes_txt'] = 'Verifica php.ini ogni X minuti per canbiamenti';
+$wb['php_ini_check_minutes_error_empty'] = 'Indica quanto spesso deve essere verificato php.ini per cambiamenti.';
 $wb['php_ini_check_minutes_info_txt'] = '0 = no check';
 $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['xmpp_bosh_max_inactivity_txt'] = 'Max. BOSH tempo di inattività time';
+$wb['xmpp_bosh_timeout_range_wrong'] = 'Inserire un tempo di bosh compreso tra 15 - 360';
 $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'] = 'Amministratori del Server (JIDs)';
+$wb['xmpp_modules_enabled_txt'] = 'plugins abilitati su tutti i server (uno per linea)';
+$wb['xmpp_ports_txt'] = 'Porte del componente';
 $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['backup_time_txt'] = 'Backup time';
-$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_hide_txt'] = 'Hide Default PHP-Version in selectbox';
-$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['disable_bind_log_txt'] = 'Disabilita messaggi bind9 di tipologia WARN';
+$wb['apps_vhost_enabled_txt'] = 'Apps-vhost abilitato';
+$wb['backup_time_txt'] = 'Ora del backuo';
+$wb['skip_le_check_txt'] = 'Salta la verifica Let\'s Encrypt';
+$wb['migration_mode_txt'] = 'Modo migrazione delServer';
+$wb['nginx_enable_pagespeed_txt'] = 'Rendi Pagespeed disponibile';
+$wb['backup_tmp_txt'] = 'Cartella temporanea di backup per zip';
+$wb['tmpdir_path_error_empty'] = 'Percorso tmp-dir è vuoto.';
+$wb['tmpdir_path_error_regex'] = 'Percorso tmp-dir non valido.';
+$wb['logging_txt'] = 'Memorizza log di accessi ed errori dei sisti web';
+$wb['logging_desc_txt'] = 'Usare Strumenti > Risincronizza per applicare le modifiche ai siti web esistenti. Con Apache, i log di accesso ed errori possono essere resi anonimi. Con nginx, solo i log di accesso sono resi anonimi, i log di errore conterranno gli indirizzi IP.';
+$wb['log_retention_txt'] = 'Tempo di conservazione dei Log (giorni)';
+$wb['log_retention_error_ispositive'] = 'Il tempo di conservazione dei Log deve essere un numero > 0';
+$wb['php_default_hide_txt'] = 'Nasconi la versione default di PHP nel box di selezione';
+$wb['php_default_name_txt'] = 'Descrizione versione Default di PHP';
+$wb['php_default_name_error_empty'] = 'Descrizione versione Default di PHP non può essere vuota';
+$wb['error_mailbox_message_size_txt'] = 'La dimensione della casella di posta deve essere più grande della dimensione del messaggio';
+$wb['php_fpm_reload_mode_txt'] = 'Metodo di riavvio PHP-FPM';
+$wb['content_filter_txt'] = 'Filtro contenuti';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $wb['rspamd_password_txt'] = 'Rspamd Password';
 $wb['rspamd_redis_servers_txt'] = 'Redis Servers';
-$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use.  Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.';
+$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) che sarà usato da Rspamd.  Esempio: \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.';
 $wb['rspamd_redis_password_txt'] = 'Redis Password';
-$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).';
-$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes';
-$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank).  Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.';
-$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes';
-$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).';
-$wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol';
-$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port';
-$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port';
-$wb['jailkit_chroot_authorized_keys_template_txt'] = 'Jailkit authorized_keys template';
-$wb['jailkit_chroot_authorized_keys_template_error_regex'] = 'Invalid jaikit chroot authorized_keys template file.';
-$wb['jailkit_hardlinks_txt'] = 'Hardlinks within Jailkit chroot';
-$wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves disk space.';
-$wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail';
-$wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files';
-$wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible';
+$wb['tooltip_rspamd_redis_password_txt'] = 'Password per Redis Servers (lasciare vuoto se non usato).';
+$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers per Bayes';
+$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) che Rspamd userà per Bayes se differente (altrimenti lasciare vuoto).  Esempio: \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.';
+$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password per Bayes';
+$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password per Bayes Redis Server (lasciare vuoto se non usato).';
+$wb['vhost_proxy_protocol_enabled_txt'] = 'Abilita protocollo PROXY';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'Porta HHTP per il protocollo PROXY';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'Porta HHTPS per il protocollo PROXY';
+$wb['jailkit_chroot_authorized_keys_template_txt'] = 'modello Jailkit authorized_keys';
+$wb['jailkit_chroot_authorized_keys_template_error_regex'] = 'modello file per jailkit chroot authorized_keys non valido.';
+$wb['jailkit_hardlinks_txt'] = 'Hardlinks per Jailkit chroot';
+$wb['tooltip_jailkit_hardlinks_txt'] = 'L\'uso di hardlinks è meno sicuro però riduce lo spazio disco.';
+$wb['jailkit_hardlinks_allow_txt'] = 'Consenti hardlinks all\'interno di jail';
+$wb['jailkit_hardlinks_no_txt'] = 'No, rimuovi i file con hardlink';
+$wb['jailkit_hardlinks_yes_txt'] = 'Si, usa hardlinks se possibile';
diff --git a/interface/web/admin/lib/lang/it_server_ip.lng b/interface/web/admin/lib/lang/it_server_ip.lng
index 9850f2e38bd01dad3672029d27bcb5d0179388d3..42cecce91ad41bc51f2d77d7869409eab946d4c1 100644
--- a/interface/web/admin/lib/lang/it_server_ip.lng
+++ b/interface/web/admin/lib/lang/it_server_ip.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['server_ip_edit_title'] = 'IP Adresses';
-$wb['server_ip_edit_desc'] = 'Form to edit system IP adresses';
+$wb['server_ip_edit_title'] = 'Indirizzi IP';
+$wb['server_ip_edit_desc'] = 'Modulo per editare gli indirizzi IP';
 $wb['server_id_txt'] = 'Server';
 $wb['ip_address_txt'] = 'Indirizzo IP';
 $wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
 $wb['ip_error_wrong'] = 'Indirizzo IP non valido';
 $wb['ip_error_unique'] = 'Indirizzo IP deve essere unico';
 $wb['client_id_txt'] = 'Cliente';
-$wb['ip_type_txt'] = 'Type';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
+$wb['ip_type_txt'] = 'tipo';
+$wb['virtualhost_port_txt'] = 'Porte HTTP';
 $wb['error_port_syntax'] = 'Caratteri non validi nel campo porta, per favore inserire solo valori separati da virgola. Esempio: 80,443';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_ip_list.lng b/interface/web/admin/lib/lang/it_server_ip_list.lng
index b831408dc042c78735dc5719ff580ef246588ab6..97e19468bf165307cf46d1a0bc0801e910ab7a1e 100644
--- a/interface/web/admin/lib/lang/it_server_ip_list.lng
+++ b/interface/web/admin/lib/lang/it_server_ip_list.lng
@@ -5,6 +5,6 @@ $wb['ip_address_txt'] = 'Indirizzo IP';
 $wb['add_new_record_txt'] = 'Aggiungi nuovo indirizzo IP';
 $wb['client_id_txt'] = 'Cliente';
 $wb['virtualhost_txt'] = 'HTTP Vhost';
-$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['ip_type_txt'] = 'Type';
+$wb['virtualhost_port_txt'] = 'Porte HTTP';
+$wb['ip_type_txt'] = 'Tipo';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_ip_map.lng b/interface/web/admin/lib/lang/it_server_ip_map.lng
index f02bdafd848b900e9960346c10c6e927221b10f7..fff88acc12ba426fc5450204a69edbb8df0d77a6 100644
--- a/interface/web/admin/lib/lang/it_server_ip_map.lng
+++ b/interface/web/admin/lib/lang/it_server_ip_map.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['server_ip_map_title'] = 'IPv4 Address mapping';
-$wb['server_ip_map_desc'] = 'Form to map IPv4-addresses for Web-Server';
+$wb['server_ip_map_title'] = 'Mappatura indirizzi IPv4';
+$wb['server_ip_map_desc'] = 'Modulo per mappare indirizzi IPv4 per i server Web';
 $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['source_txt'] = 'IP Sorgennte';
+$wb['destination_txt'] = 'IP Destinazione';
+$wb['active_txt'] = 'Attivo';
+$wb['ip_error_wrong'] = 'L\'indirizzo IP destinazione non è valido';
+$wb['destination_ip_empty'] = 'L\'indirizzo IP destinazione è vuoto.';
+$wb['source_ip_empty'] = 'L\'indirizzo IP sorgente èvuoto .';
+$wb['server_empty_error'] = 'Il Server è vuoto.';
+$wb['duplicate_mapping_error'] = 'La mappatura esiste già.';
+$wb['ip_mapping_error'] = 'l\'IP sorgente non può essere un Server rewrite.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_ip_map_list.lng b/interface/web/admin/lib/lang/it_server_ip_map_list.lng
index 1fedc10b2e2590cb4c252d9c0ff90eeaf565d68b..790975c33aa3423e72356c424e88ac5564dc08cd 100644
--- a/interface/web/admin/lib/lang/it_server_ip_map_list.lng
+++ b/interface/web/admin/lib/lang/it_server_ip_map_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'IP Mappings';
+$wb['list_head_txt'] = 'Mappatura IP';
 $wb['server_id_txt'] = 'Server';
-$wb['source_ip_txt'] = 'Source IP';
-$wb['destination_ip_txt'] = 'Destination IP';
-$wb['active_txt'] = 'Active';
+$wb['source_ip_txt'] = 'Sorgente IP';
+$wb['destination_ip_txt'] = 'Destinazione IP';
+$wb['active_txt'] = 'Attivo';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_php.lng b/interface/web/admin/lib/lang/it_server_php.lng
index d85b5cd7da2a6adb369442e1b08734a4e3880d3f..7569ba9b5215c7bbdb3ecfd5eab10c5a2b8e544f 100644
--- a/interface/web/admin/lib/lang/it_server_php.lng
+++ b/interface/web/admin/lib/lang/it_server_php.lng
@@ -1,20 +1,20 @@
 <?php
 $wb['server_id_txt'] = 'Server';
 $wb['client_id_txt'] = 'Cliente';
-$wb['name_txt'] = 'PHP Name';
+$wb['name_txt'] = 'PHP Nome';
 $wb['Name'] = 'Nome';
-$wb['FastCGI Settings'] = 'FastCGI Settings';
-$wb['PHP-FPM Settings'] = 'PHP-FPM Settings';
-$wb['Additional PHP Versions'] = 'Additional PHP Versions';
-$wb['Form to edit additional PHP versions'] = 'Form to edit additional PHP versions';
-$wb['server_php_name_error_empty'] = 'The Name field must not be vuoto.';
-$wb['php_fastcgi_binary_txt'] = 'Percorso per  PHP FastCGI binary';
-$wb['php_fastcgi_ini_dir_txt'] = 'Percorso per  php.ini directory';
-$wb['php_fpm_init_script_txt'] = 'Percorso per  PHP-FPM init script';
-$wb['php_fpm_ini_dir_txt'] = 'Percorso per  php.ini directory';
-$wb['php_fpm_pool_dir_txt'] = 'Percorso per  PHP-FPM pool directory';
+$wb['FastCGI Settings'] = 'Impostazioni FastCGI';
+$wb['PHP-FPM Settings'] = 'Impostazioni PHP-FPM';
+$wb['Additional PHP Versions'] = 'Versioni PHP aggiuntive';
+$wb['Form to edit additional PHP versions'] = 'Modulo per editare versioni aggiuntive PHP';
+$wb['server_php_name_error_empty'] = 'Il campo nome non può essere vuoto.';
+$wb['php_fastcgi_binary_txt'] = 'Percorso per PHP FastCGI binary';
+$wb['php_fastcgi_ini_dir_txt'] = 'Percorso per php.ini directory';
+$wb['php_fpm_init_script_txt'] = 'Percorso per PHP-FPM init script';
+$wb['php_fpm_ini_dir_txt'] = 'Percorso per php.ini directory';
+$wb['php_fpm_pool_dir_txt'] = 'Percorso per PHP-FPM pool directory';
 $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory';
-$wb['active_txt'] = 'Active';
-$wb['php_in_use_error'] = 'This PHP-Version is in use.';
-$wb['php_name_in_use_error'] = 'The name can not be changed.';
+$wb['active_txt'] = 'Attivo';
+$wb['php_in_use_error'] = 'Questa versione PHP è in uso.';
+$wb['php_name_in_use_error'] = 'Il nome non può essere cambiato.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_software_package.lng b/interface/web/admin/lib/lang/it_software_package.lng
new file mode 100644
index 0000000000000000000000000000000000000000..4125430c567a8b712d6356182400efa4bfede986
--- /dev/null
+++ b/interface/web/admin/lib/lang/it_software_package.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['package_title_txt'] = 'Titolo pacchetto';
+$wb['package_key_txt'] = 'Chiave del Pacchetto';
+$wb['Software Package'] = 'Pacchetto Software';
+$wb['Modify software package details'] = 'Modifica dettagli pacchetto software';
+?>
diff --git a/interface/web/admin/lib/lang/it_software_package_install.lng b/interface/web/admin/lib/lang/it_software_package_install.lng
new file mode 100644
index 0000000000000000000000000000000000000000..1e210d58940cd0a352afaf9ff1d0f81697b8540e
--- /dev/null
+++ b/interface/web/admin/lib/lang/it_software_package_install.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['head_txt'] = 'Installa pacchetto software';
+$wb['install_key_txt'] = 'Inserisci chiave pacchetto';
+$wb['btn_save_txt'] = 'Avvia installazione';
+$wb['btn_cancel_txt'] = 'Annulla';
+?>
diff --git a/interface/web/admin/lib/lang/it_software_package_list.lng b/interface/web/admin/lib/lang/it_software_package_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..5ab82417de404318600984e7ac4d732fcb130840
--- /dev/null
+++ b/interface/web/admin/lib/lang/it_software_package_list.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['list_head_txt'] = 'Pacchetti Software';
+$wb['installed_txt'] = 'Stato';
+$wb['package_title_txt'] = 'Pacchetto';
+$wb['package_description_txt'] = 'Descrizione';
+$wb['action_txt'] = 'Action';
+$wb['toolsarea_head_txt'] = 'Pacchetti';
+$wb['repoupdate_txt'] = 'Aggiorna elenco pacchetti';
+$wb['package_id_txt'] = 'local App-ID';
+$wb['no_packages_txt'] = 'Nessun pacchetto disponibile';
+$wb['edit_txt'] = 'Modifica';
+$wb['delete_txt'] = 'Elimina';
+?>
diff --git a/interface/web/admin/lib/lang/it_software_repo.lng b/interface/web/admin/lib/lang/it_software_repo.lng
new file mode 100644
index 0000000000000000000000000000000000000000..76b01826971d75f28c53c52dbbed40f3587a7fdd
--- /dev/null
+++ b/interface/web/admin/lib/lang/it_software_repo.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['repo_name_txt'] = 'Repository';
+$wb['repo_url_txt'] = 'URL';
+$wb['repo_username_txt'] = 'Utente (facoltativo)';
+$wb['repo_password_txt'] = 'Password (facoltativa)';
+$wb['active_txt'] = 'Attivo';
+$wb['Software Repository which may contain addons or updates'] = 'Software Repository che può contenere aggiunte o aggiornamenti';
+?>
diff --git a/interface/web/admin/lib/lang/it_software_repo_list.lng b/interface/web/admin/lib/lang/it_software_repo_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..be378f3ca8e32d75cf538e74d04631a7eb4e1bd7
--- /dev/null
+++ b/interface/web/admin/lib/lang/it_software_repo_list.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['list_head_txt'] = 'Repository';
+$wb['active_txt'] = 'Attivo';
+$wb['repo_name_txt'] = 'Repository';
+$wb['repo_url_txt'] = 'URL del Repository';
+?>
diff --git a/interface/web/admin/lib/lang/it_software_update_list.lng b/interface/web/admin/lib/lang/it_software_update_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..cc264b84eccbc926ccc68ca4b553548ad9eaf764
--- /dev/null
+++ b/interface/web/admin/lib/lang/it_software_update_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = 'Aggiornamento programmi';
+$wb['installed_txt'] = 'Azione';
+$wb['update_title_txt'] = 'Aggiornamento';
+$wb['version_txt'] = 'Versione';
+$wb['action_txt'] = 'Azione';
+$wb['server_select_txt'] = 'Selezionare server';
+$wb['no_updates_txt'] = 'Nessun aggiornamento disponibile';
+?>
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index ddfc072ff2653d987596d44d76ba9949ec0621a6..d58e1d1d22f481647a73175938358d02486c193b 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -6,103 +6,105 @@ $wb['dbname_prefix_txt'] = 'Prefisso nome database';
 $wb['dbuser_prefix_txt'] = 'Prefisso utente database';
 $wb['shelluser_prefix_txt'] = 'Prefisso utente Shell';
 $wb['ftpuser_prefix_txt'] = 'Prefisso utente FTP';
-$wb['dbname_prefix_error_regex'] = 'Char not allowed in database name prefix.';
-$wb['dbuser_prefix_error_regex'] = 'Char not allowed in database user prefix.';
-$wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.';
-$wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.';
-$wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list';
-$wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list';
+$wb['dbname_prefix_error_regex'] = 'Carattere non consentito nel prefisso del nome database.';
+$wb['dbuser_prefix_error_regex'] = 'Carattere non consentito nel prefisso del nome utente database.';
+$wb['ftpuser_prefix_error_regex'] = 'Carattere non consentito nel prefisso del nome utente FTP.';
+$wb['shelluser_prefix_error_regex'] = 'Carattere non consentito nel prefisso del nome utente shell..';
+$wb['dblist_phpmyadmin_link_txt'] = 'Collegamento a phpmyadmin nella lista dei DB';
+$wb['mailboxlist_webmail_link_txt'] = 'Collegamento a webmail nella lista di Mailbox';
 $wb['webmail_url_txt'] = 'Webmail URL';
 $wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
-$wb['use_domain_module_txt'] = 'Use the domain-module to add new domains';
-$wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They can not free edit the domain-field.You have to re-login after changing this value, to make the changes visible.';
-$wb['new_domain_txt'] = 'HTML to create a new domain';
-$wb['webdavuser_prefix_txt'] = 'Webdav user prefix';
-$wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.';
+$wb['use_domain_module_txt'] = 'Usare il modulo Siti per aggiungere un Dominio';
+$wb['use_domain_module_hint'] = 'Se usi questo modulo, i tuoi clienti potranno solamente selezionare uno dei domini creati per loro. Non potranno cambiare a loro piacimento i campi del dominio. Devi disconnetterti e rifare il login dopo aver cambiato i dati affinchè questi siano visibili.';
+$wb['new_domain_txt'] = 'HTML per creare un nuovo dominio';
+$wb['webdavuser_prefix_txt'] = 'Prefisso utente webdav';
+$wb['webdavuser_prefix_error_regex'] = 'Carattere non consentito nel prefisso del nome utente webdav..';
 $wb['webftp_url_txt'] = 'WebFTP URL';
 $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)';
 $wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)';
 $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)';
-$wb['enable_welcome_mail_txt'] = 'Enable welcome email';
-$wb['enable_custom_login_txt'] = 'Allow custom login name';
-$wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list';
+$wb['enable_welcome_mail_txt'] = 'Abilita email di  benvenuto';
+$wb['enable_custom_login_txt'] = 'Consenti login name personalizzati';
+$wb['mailmailinglist_link_txt'] = 'Collegamento alla mailing list in Mailing list list';
 $wb['mailmailinglist_url_txt'] = 'Mailing list URL';
-$wb['admin_mail_txt'] = 'Administrators e-mail';
-$wb['admin_name_txt'] = 'Administrators name';
-$wb['maintenance_mode_txt'] = 'Maintenance Mode';
-$wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance';
-$wb['maintenance_mode_exclude_ips_error_isip'] = 'One or more invalid IP addresses in maintenance mode exclude list. Must be a list of comma-separated IPv4 and/or IPv6 addresses.';
-$wb['smtp_enabled_txt'] = 'Use SMTP to send system mails';
+$wb['admin_mail_txt'] = 'Email dell\'Amministratore';
+$wb['admin_name_txt'] = 'Nome dell\'Amministratore name';
+$wb['maintenance_mode_txt'] = 'Modo manutenzione';
+$wb['maintenance_mode_exclude_ips_txt'] = 'Escludere IP\'s per manutenzione';
+$wb['maintenance_mode_exclude_ips_error_isip'] = 'Uno o più indirizzi IP errati nella lista di esclusione per manutenzione. Deve essere una lista, separata da virgole, di indirizzi IPv4 e/o IPv6.';
+$wb['smtp_enabled_txt'] = 'Usare SMTP per inviare mail di sistema';
 $wb['smtp_host_txt'] = 'SMTP host';
-$wb['smtp_port_txt'] = 'SMTP port';
-$wb['smtp_user_txt'] = 'SMTP user';
+$wb['smtp_port_txt'] = 'SMTP porta';
+$wb['smtp_user_txt'] = 'SMTP utente';
 $wb['smtp_pass_txt'] = 'SMTP password';
-$wb['smtp_crypt_txt'] = 'Use SSL/TLS encrypted connection for SMTP';
-$wb['smtp_missing_admin_mail_txt'] = 'Please enter the admin name and admin mail address if you want to use smtp mail sending.';
-$wb['tab_change_discard_txt'] = 'Discard changes on tab change';
-$wb['tab_change_warning_txt'] = 'Tab change warning';
-$wb['tab_change_warning_note_txt'] = 'Show a warning on tab change in edit forms if any data has been altered by the user.';
-$wb['vhost_subdomains_txt'] = 'Crea  Subdomains as web site';
-$wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!';
-$wb['phpmyadmin_url_error_regex'] = 'Invalid phpmyadmin URL';
-$wb['use_combobox_txt'] = 'Use jQuery UI Combobox';
-$wb['use_loadindicator_txt'] = 'Use Load Indicator';
-$wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.';
-$wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.';
-$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options';
-$wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details';
-$wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details';
-$wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details';
-$wb['webmail_url_error_regex'] = 'Invalid webmail URL';
-$wb['phpmyadmin_url_note_txt'] = 'Placeholder:';
-$wb['webmail_url_note_txt'] = 'Placeholder:';
-$wb['available_dashlets_note_txt'] = 'Available Dashlets:';
-$wb['admin_dashlets_left_txt'] = 'Left Admin Dashlets';
-$wb['admin_dashlets_right_txt'] = 'Right Admin Dashlets';
-$wb['reseller_dashlets_left_txt'] = 'Left Reseller Dashlets';
-$wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
-$wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
-$wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
+$wb['smtp_crypt_txt'] = 'Usare connessione cifrata SSL/TLS per SMTP';
+$wb['smtp_missing_admin_mail_txt'] = 'Inserire nome amministratore e mail amministratore se vuoi usaresmtp per inviare mail.';
+$wb['tab_change_discard_txt'] = 'Trascura le modifiche al cambio di scheda';
+$wb['tab_change_warning_txt'] = 'Avviso di cambio scheda';
+$wb['tab_change_warning_note_txt'] = 'Mostra un avviso al cambio di scheda se qualche dato è stato cambiato nel modulo in uso.';
+$wb['vhost_subdomains_txt'] = 'Crea  Sottodomini come siti web';
+$wb['vhost_subdomains_note_txt'] = 'Non puoi disabilitare questo fintanto che un sottodominio vhost esiste nel sistema!';
+$wb['phpmyadmin_url_error_regex'] = 'URL a phpmyadmin non valido';
+$wb['use_combobox_txt'] = 'Usare jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = 'Usare Indicatore di carico';
+$wb['f5_to_reload_js_txt'] = 'Se cambi questo, dovrai premere F5 per costringere il browser a ricaricare le librerie JavaScript oppure devi svuotare la cache del browser.';
+$wb['client_username_web_check_disabled_txt'] = 'Disabilita la verifica del nome utente per la parola \'web\'.';
+$wb['show_per_domain_relay_options_txt'] = 'Mostra le opzioni di relay per il dominio';
+$wb['mailbox_show_autoresponder_tab_txt'] = 'Mostra la scheda autorisponditore nel profilo mail';
+$wb['mailbox_show_mail_filter_tab_txt'] = 'Mostra la scheda dei filtri mail nel profilo mail';
+$wb['mailbox_show_custom_rules_tab_txt'] = 'Mostra la scheda di filtri mail personalizzati nel profilo mail';
+$wb['webmail_url_error_regex'] = 'URL webmail non valido';
+$wb['phpmyadmin_url_note_txt'] = 'Segnaposto:';
+$wb['webmail_url_note_txt'] = 'Segnaposto:';
+$wb['available_dashlets_note_txt'] = 'Dashlets disponibili:';
+$wb['admin_dashlets_left_txt'] = 'Dashlets di sinistra per amministratore';
+$wb['admin_dashlets_right_txt'] = 'Dashlets di destra per amministratore';
+$wb['reseller_dashlets_left_txt'] = 'Dashlets di sinistra per rivenditore';
+$wb['reseller_dashlets_right_txt'] = 'Dashlets di destra per rivenditore';
+$wb['client_dashlets_left_txt'] = 'Dashlets di sinistra per Clienti';
+$wb['client_dashlets_right_txt'] = 'Dashlets di destra per Clienti';
+$wb['customer_no_template_txt'] = 'Modello per n° cliente';
+$wb['customer_no_template_error_regex_txt'] = 'Il templeate per il n° cliente contiene caratteri non validi';
+$wb['customer_no_start_txt'] = 'Valore iniziale del n° Cliente';
+$wb['customer_no_counter_txt'] = 'Contatore n° Clienti';
+$wb['session_timeout_txt'] = 'Timeout di sessione (minuti)';
+$wb['session_allow_endless_txt'] = 'Abilita  \\"rimani collegato\\"';
 $wb['No'] = 'No';
-$wb['min_password_length_txt'] = 'Minimum password length';
-$wb['min_password_strength_txt'] = 'Minimum password strength';
-$wb['ssh_authentication_txt'] = 'Allowed SSH authentication';
-$wb['ssh_authentication_password_key'] = 'Password & Key';
+$wb['min_password_length_txt'] = 'Lunghezza minima della password';
+$wb['min_password_strength_txt'] = 'Robustezza minima della password';
+$wb['ssh_authentication_txt'] = 'Autenticazione SSH consentita';
+$wb['ssh_authentication_password_key'] = 'Password & Chiave';
 $wb['ssh_authentication_password'] = 'Password';
-$wb['ssh_authentication_key'] = 'Key';
-$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['ssh_authentication_key'] = 'Chiave';
+$wb['vhost_aliasdomains_txt'] = 'Crea dominio alias come sito web';
+$wb['vhost_aliasdomains_note_txt'] = 'Non puoi disabilitare questo fintanto che un dominio alias vhost è presente nel sistema!';
+$wb['backups_include_into_web_quota_txt'] = 'Includere i file di backup nella quota web.';
 $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['company_name_txt'] = 'Nome azienda per il titolo della pagina';
+$wb['reseller_can_use_options_txt'] = 'Il Rivenditore può usare la scheda opzioni per i siti web';
+$wb['custom_login_text_txt'] = 'Text personalizzato nella pagina di login';
+$wb['custom_login_link_txt'] = 'Collegamento personalizzato nella pagina di login';
+$wb['login_link_error_regex'] = 'Collegamento per login personalizzato non valido';
 $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_name_txt'] = 'Nome';
+$wb['ca_issue_txt'] = 'Testo';
+$wb['ca_wildcard_txt'] = 'Usare Wildcard';
+$wb['ca_critical_txt'] = 'Verifica approfondita';
 $wb['ca_iodef_txt'] = 'iodef';
-$wb['active_txt'] = 'Aktive';
-$wb['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
+$wb['active_txt'] = 'Attivo';
+$wb['btn_save_txt'] = 'Salva';
+$wb['btn_cancel_txt'] = 'Annulla';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
-$wb['client_protection_txt'] = 'Client protection';
-$wb['show_support_messages_txt'] = 'Show message function in help module';
-$wb['show_aps_menu_txt'] = 'Show APS menu';
-$wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
+$wb['client_protection_txt'] = 'Protezione Cliente';
+$wb['show_support_messages_txt'] = 'Mostra la funzione messaggio nel modulo Help';
+$wb['show_aps_menu_txt'] = 'Mostra menu APS';
+$wb['show_aps_menu_note_txt'] = 'APS saranno rimosse dal pannello in un prossimo futuro.';
+$wb['show_aps_menu_note_url_txt'] = 'Clicca qui per maggiori informazioni.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_tpl_default_admin.lng b/interface/web/admin/lib/lang/it_tpl_default_admin.lng
index 04d2bd959ac8d2e2f376f1bbd86d5b910e0ff5fe..ba9e1b41bb29b8cb70557021baadbf86b64867da 100644
--- a/interface/web/admin/lib/lang/it_tpl_default_admin.lng
+++ b/interface/web/admin/lib/lang/it_tpl_default_admin.lng
@@ -1,18 +1,18 @@
 <?php
-$wb['tpl_default_admin_head_txt'] = 'Global Default-Theme Settings';
+$wb['tpl_default_admin_head_txt'] = 'Impostazioni globali del tema default';
 $wb['tpl_default_admin_desc_txt'] = '';
 $wb['server_id_txt'] = 'Server';
 $wb['client_id_txt'] = 'Cliente';
-$wb['name_txt'] = 'PHP Name';
+$wb['name_txt'] = 'Nome PHP';
 $wb['Name'] = 'Nome';
-$wb['FastCGI Settings'] = 'FastCGI Settings';
-$wb['PHP-FPM Settings'] = 'PHP-FPM Settings';
-$wb['Additional PHP Versions'] = 'Additional PHP Versions';
-$wb['Form to edit additional PHP versions'] = 'Form to edit additional PHP versions';
-$wb['server_php_name_error_empty'] = 'The Name field must not be vuoto.';
-$wb['php_fastcgi_binary_txt'] = 'Percorso per  PHP FastCGI binary';
-$wb['php_fastcgi_ini_dir_txt'] = 'Percorso per  php.ini directory';
-$wb['php_fpm_init_script_txt'] = 'Percorso per  PHP-FPM init script';
-$wb['php_fpm_ini_dir_txt'] = 'Percorso per  php.ini directory';
-$wb['php_fpm_pool_dir_txt'] = 'Percorso per  PHP-FPM pool directory';
+$wb['FastCGI Settings'] = 'Impostazioni FastCGI';
+$wb['PHP-FPM Settings'] = 'Impostazioni PHP-FPM';
+$wb['Additional PHP Versions'] = 'Versioni PHP aggiuntive';
+$wb['Form to edit additional PHP versions'] = 'Modulo per gestire le versioni addizionali di PHP';
+$wb['server_php_name_error_empty'] = 'Il campo nome non può essere vuoto.';
+$wb['php_fastcgi_binary_txt'] = 'Percorso per PHP FastCGI binary';
+$wb['php_fastcgi_ini_dir_txt'] = 'Percorso per php.ini directory';
+$wb['php_fpm_init_script_txt'] = 'Percorso per PHP-FPM init script';
+$wb['php_fpm_ini_dir_txt'] = 'Percorso per php.ini directory';
+$wb['php_fpm_pool_dir_txt'] = 'Percorso per PHP-FPM pool directory';
 ?>
diff --git a/interface/web/admin/lib/lang/it_users.lng b/interface/web/admin/lib/lang/it_users.lng
index e657d2ae967e851954ed7778c1a89a4108d8d40a..2c5dbeda480b1c84f05caf7237c37e95edfda014 100644
--- a/interface/web/admin/lib/lang/it_users.lng
+++ b/interface/web/admin/lib/lang/it_users.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['users_txt'] = 'Users';
+$wb['users_txt'] = 'Utenti';
 $wb['username_txt'] = 'Nome utente';
 $wb['username_err'] = 'Nome utente troppo lungo o avente caratteri non validi.';
 $wb['username_empty'] = 'Nome utente mancante.';
 $wb['username_unique'] = 'Nome utente già utilizzato.';
 $wb['password_txt'] = 'Password';
-$wb['password_strength_txt'] = 'Solidità password';
+$wb['password_strength_txt'] = 'Robustezza password';
 $wb['modules_txt'] = 'Modulo';
-$wb['startmodule_txt'] = 'Startmodule';
+$wb['startmodule_txt'] = 'Modulo di avvio';
 $wb['app_theme_txt'] = 'Aspetto';
 $wb['typ_txt'] = 'Tipo';
 $wb['active_txt'] = 'Attiva';
@@ -25,13 +25,13 @@ $wb['telefon_txt'] = 'Telefono';
 $wb['fax_txt'] = 'Fax';
 $wb['groups_txt'] = 'Gruppi';
 $wb['default_group_txt'] = 'Gruppo predefinito';
-$wb['startmodule_err'] = 'Start module is not within modules.';
+$wb['startmodule_err'] = 'Il modulo di avvio non è presente.';
 $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['username_error_collision'] = 'The username may not be web or web plus a number.\\"';
-$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['username_error_collision'] = 'Il nome utente non può essere web o web+un numero.\\"';
+$wb['client_not_admin_err'] = 'Un utente che appartiene ad un cliente non può essere del tipo: admin';
+$wb['lost_password_function_txt'] = 'La funzione password dimenticata è disponibile';
+$wb['no_user_insert'] = 'CP-Utente di tipo -utente- viene aggiunto automaticamente quando aggiungi un cliente o un rivenditore.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_users_list.lng b/interface/web/admin/lib/lang/it_users_list.lng
index decfe623aa4acd63a091c53e5d1e8392c98d8061..6d2acae1ec10793d7925d50574d1949a88c98c49 100644
--- a/interface/web/admin/lib/lang/it_users_list.lng
+++ b/interface/web/admin/lib/lang/it_users_list.lng
@@ -5,5 +5,5 @@ $wb['client_id_txt'] = 'Client ID';
 $wb['active_txt'] = 'Attivo';
 $wb['add_new_record_txt'] = 'Aggiungi un nuovo  user';
 $wb['warning_txt'] = '<b>ATTENZIONE:</b> non editare o modificare alcuna impostazione utente in questa schermata. Usare piuttosto le impostazioni Cliente/Rivenditore del modulo Clienti. Modificare Utenti o gruppi in questa schermata può provocare la perdita di dati.';
-$wb['groups_txt'] = 'Groups';
+$wb['groups_txt'] = 'Gruppi';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 52ac44a351d9a35a9d25376c288d5225892ae266..a78f0900d81481bd6a55a9e5db99becaae380af1 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index 8ff20d13cade7b51fdf9d77603fe15f7e4a9c635..b5601ea8009d3c3032dfb493b0de4c9b95466f1b 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index e9e412b609e1fd6acb6c4374268a3346e1898cd4..fc39a2a25683542b2a2b7504996775bacbb05ae4 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index 0caa9228e08fda0e5dbb84ce29a66704ba2a9e1d..107c42395ecf2420d7f2f3f0a00a9e30cc96b033 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index f9d43d3bfd8e09a3f0e86c1dda8d219f6bbceb51..4b838bd3ea3efbd9c9d247f0f2845cb3b83eff3a 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Tryb tworzenia kopii';
 $wb['backup_mode_userzip'] = 'Pliki kopii z prawami użytkownika jako zip';
 $wb['backup_mode_rootgz'] = 'Twórz kopie wszystkich plików w katalogu web jako root';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Twórz kopię wszystkich plików z katalogu vhost i baz danych w repozytoriach przyrostowych';
+$wb['backup_missing_utils_txt'] = 'Nie można użyć następującego trybu kopii zapasowej, ponieważ wymagane narzędzia nie są zainstalowane:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(oddziel RBL-e przecinkami)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Prześlij informacje o przekroczeniu tran
 $wb['overtraffic_notify_client_txt'] = 'Prześlij informacje o przekroczeniu transferu do klienta';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index 92b167c60d8c60ba4f19082d4c49a21da2b3a085..1bb20987655cb6a7e836797904aa0258b4285c35 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index 468413a1deab53236c67c84e6e51018e5709fd03..d42a415958513eeb320e5cc77a8fcd4871e06f58 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index 491aa6272c75a24b0710fb9e04ead319a9288c25..41becdf5cbb95f563a2816bb7e5c4aa7d7c222c2 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index e20fb9ee9f5ecc75ea9ad8da2a475878bc0c9f1d..81488177c015041ca0bca2488f99e4c98973c5ad 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index fc268d22410452399e5fc8e62a5e36243deaf951..2fc1a00b5699762a99e3a2d165c45644fd62042e 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 1799b075f49fd9155b07b7cc667f8fd9cc161f9e..bce96e9339a72100c11e5c6c13fcd04a18c4fd2e 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Заменители:';
 $wb['backup_mode_txt'] = 'Режим резервного копирования';
 $wb['backup_mode_userzip'] = 'Делать резервные копии web файлов принадлежащих ползователю web как архив ZIP';
 $wb['backup_mode_rootgz'] = 'Делать резервные копии всех файлов в веб-каталог как корневой пользователь';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Делать резервные копии всех файлов в каталоге vhost и базах данных в инкрементные репозитории';
+$wb['backup_missing_utils_txt'] = 'Следующий режим резервного копирования нельзя использовать, поскольку не установлены необходимые инструменты:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Разделяйте RBL запятыми)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Присылать уведомление
 $wb['overtraffic_notify_client_txt'] = 'Присылать уведомление трафика клиенту';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Пожалуйста, укажите действительные имена хостов RBL.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Присылать предупреждения квоты администратору';
 $wb['overquota_notify_client_txt'] = 'Присылать предупреждения квоты клиенту';
 $wb['overquota_notify_onok_txt'] = 'Присылать сообщение квоты ОК клиенту';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Отключить сообщения bind9 дл
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost включен';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Отключить мониторинг MongoDB';
 $wb['backup_dir_mount_cmd_txt'] = 'Выполните команду монтирования, если каталог резервного копирования не установлен';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $wb['overquota_db_notify_admin_txt'] = 'Присылать предупреждения квоты DB администратору';
 $wb['overquota_db_notify_client_txt'] = 'Присылать предупреждения квоты DB клиенту';
 $wb['php_handler_txt'] = 'Обработчик PHP по умолчанию';
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index ae12c4b4c1682d4b63b38159635896325dafce5d..d829d1ca97d642054958057b433a1b45132a0ac7 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index fe3c2e923401b8d1a9ce1e76ef870513e5c3f30d..4f8d24411785d3b608c600a4e8e6995eba60cd6a 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index fa302c344aa1531d3e2fc0e7863ec5823088b601..fa67bc2bc9265801ba2deb04cafd3bac98cb6137 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index bc7f9f514bdb25db6f112c4bef47c44a7817530d..b13462584ea441f8bc34d002070a4ed00b749346 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -176,6 +176,8 @@ $wb['website_autoalias_note_txt'] = 'Placeholders:';
 $wb['backup_mode_txt'] = 'Backup mode';
 $wb['backup_mode_userzip'] = 'Backup web files owned by web user as zip';
 $wb['backup_mode_rootgz'] = 'Backup all files in web directory as root user';
+$wb['backup_mode_borg_txt'] = 'BorgBackup: Backup all files in vhost directory and databases into incremental repositories';
+$wb['backup_missing_utils_txt'] = 'The following backup mode can not be used because the required tools are not installed:';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Separate RBL\'s with commas)';
 $wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
@@ -193,6 +195,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin';
 $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin';
 $wb['overquota_notify_client_txt'] = 'Send quota warnings to client';
 $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client';
@@ -273,6 +277,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN';
 $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
+$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index 6735e91c53f82691edd308d6d07b8723f1f0296c..317b435eae569d8a3ba79e707d3ba33276d80b4f 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 0d0c84f2c73f873cb7dffb245c8deeb9e1ce2b22..e15677aa3d5ac8d274f1a4fbd4202deddc4dca64 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -114,6 +114,8 @@ $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['backup_mode_borg_txt'] = 'BorgBackup: Vhost dizinindeki ve veritabanlarındaki tüm dosyaları artımlı depolara yedekleyin';
+$wb['backup_missing_utils_txt'] = 'Gerekli araçlar kurulu olmadığı için aşağıdaki yedekleme modu kullanılamaz:';
 $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ı';
@@ -200,6 +202,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Trafik Aşımı Bildirimi Yöneticiye Gö
 $wb['overtraffic_notify_client_txt'] = 'Trafik Aşımı Bildirimi Müşteriye Gönderilsin';
 $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit';
 $wb['rbl_error_regex'] = 'Lütfen geçerli RBL sunucu adları yazın.';
+$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level';
+$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%';
 $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';
@@ -223,6 +227,7 @@ $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_threshold_txt'] = 'DB quota warning usage level';
 $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';
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index b767101e22a67448d6d91d193b70c69f02da1450..a6e6299375f1820031bb7181429ab0d52358b992 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module';
 $wb['show_aps_menu_txt'] = 'Show APS menu';
 $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.';
 $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.';
+$wb['dns_show_zoneexport_txt'] = 'Show zone export.';
 ?>
diff --git a/interface/web/admin/lib/remote.conf.php b/interface/web/admin/lib/remote.conf.php
index 9c2db8144e3da2b20a872f0fef78718f60ba45f7..fd94b6275ec4ec3f360d4c3dba7e6e1a842cc5f4 100644
--- a/interface/web/admin/lib/remote.conf.php
+++ b/interface/web/admin/lib/remote.conf.php
@@ -3,9 +3,11 @@
 $function_list['server_get,server_config_set,get_function_list,client_templates_get_all,server_get_serverid_by_ip,server_ip_get,server_ip_add,server_ip_update,server_ip_delete,system_config_set,system_config_get,config_value_get,config_value_add,config_value_update,config_value_replace,config_value_delete'] = 'Server functions';
 $function_list['admin_record_permissions'] = 'Record permission changes';
 
-# Roundcube: generate list of actual soap methods used with:
-# grep soap-\> /usr/share/roundcube/plugins/ispconfig3_*/ispconfig3_*.php | sed -e 's/^.*soap->//g' -e 's/(.*$//g' | sort -u | xargs | sed -e 's/ /,/g'
-#
+// Roundcube: generate list of actual soap methods used with:
+// grep soap-\> /usr/share/roundcube/plugins/ispconfig3_*/ispconfig3_*.php | sed -e 's/^.*soap->//g' -e 's/(.*$//g' | sort -u | xargs | sed -e 's/ /,/g'
+//
 $function_list['client_get_id,login,logout,mail_alias_get,mail_fetchmail_add,mail_fetchmail_delete,mail_fetchmail_get,mail_fetchmail_update,mail_policy_get,mail_spamfilter_blacklist_add,mail_spamfilter_blacklist_delete,mail_spamfilter_blacklist_get,mail_spamfilter_blacklist_update,mail_spamfilter_user_add,mail_spamfilter_user_get,mail_spamfilter_user_update,mail_spamfilter_whitelist_add,mail_spamfilter_whitelist_delete,mail_spamfilter_whitelist_get,mail_spamfilter_whitelist_update,mail_user_filter_add,mail_user_filter_delete,mail_user_filter_get,mail_user_filter_update,mail_user_get,mail_user_update,server_get,server_get_app_version'] = 'Roundcube plugins functions';
 
-?>
+// functions used by ispc_acmeproxy:  https://git.ispconfig.org/ispconfig/Modules/-/tree/master/ispc_acmeproxy
+//
+$function_list['client_get_by_username,client_get_id,dns_zone_get,dns_zone_get_by_user,dns_zone_update,dns_txt_add,dns_txt_get,dns_txt_delete'] = 'ISPConfig module: acme proxy functions';
diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index 1fd1921b84e38562f1b756426c63bddf801430a3..32aa270893f467ea3448a0d3940a6cc7832fec81 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -63,7 +63,23 @@ class page_action extends tform_actions {
 			unset($app->tform->formDef["tabs"]["fastcgi"]);
 			unset($app->tform->formDef["tabs"]["vlogger"]);
 		}
-		
+		//Check if borg is installed
+		$is_borg_installed = false;
+		if($this->id != $conf['server_id']) {
+			$mon = $app->db->queryOneRecord('SELECT `data` FROM `monitor_data` WHERE `server_id` = ? AND `type` = ? ORDER BY `created` DESC', $this->id, 'backup_utils');
+			if($mon) {
+				$missing_utils = unserialize($mon['data']);
+				if($missing_utils) {
+					$missing_utils = $missing_utils['missing_utils'];
+					$is_borg_installed = ! in_array('borg', $missing_utils);
+				}
+			}
+		} else {
+			$is_borg_installed = $app->system->is_installed('borg');
+		}
+		if ( ! $is_borg_installed) {
+			$app->tpl->setVar('missing_utils', 'BorgBackup');
+		}
 		parent::onShow();
 	}
 
diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm
index 0eac9889610954e97e4a5575eb7dc4a543e5e0f6..d23a23a59cd998984660055106df4d92327bdb56 100644
--- a/interface/web/admin/templates/server_config_mail_edit.htm
+++ b/interface/web/admin/templates/server_config_mail_edit.htm
@@ -146,6 +146,11 @@
                     {tmpl_var name='mailbox_quota_stats'}
                 </div>
             </div>
+            <div class="form-group">
+                <label for="overquota_notify_threshold" class="col-sm-3 control-label">{tmpl_var name='overquota_notify_threshold_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="overquota_notify_threshold" id="overquota_notify_threshold" value="{tmpl_var name='overquota_notify_threshold'}" class="form-control" /></div>
+                <div class="col-sm-3 input-sm">%</div>
+            </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='overquota_notify_admin_txt'}</label>
                 <div class="col-sm-9">
diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm
index 394bf55278833f23df18c477a3fe781242213331..1898f2bc556ef4d516abf11dd30fb22cfdc13c81 100644
--- a/interface/web/admin/templates/server_config_server_edit.htm
+++ b/interface/web/admin/templates/server_config_server_edit.htm
@@ -1,4 +1,9 @@
 <div class="alert alert-info"><h4 style="text-align:center"><tmpl_var name="config_for_txt"> {tmpl_var name='server_name'}</h4></div>
+            <tmpl_if name="missing_utils">
+                <div class="tab-content alert alert-warning">
+                    {tmpl_var name='backup_missing_utils_txt'} {tmpl_var name='missing_utils'}
+                </div>
+            </tmpl_if>
 
 
 
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index ca1d54344cbf9e50baaf6dd21c37afbbcd69928f..5cf5c43a75826bce63f1c089366bf87bb3383fec 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -144,6 +144,11 @@
                 <div class="col-sm-9">
                     {tmpl_var name='overtraffic_disable_web'}
                 </div>
+            </div>
+            <div class="form-group">
+                <label for="overquota_notify_threshold" class="col-sm-3 control-label">{tmpl_var name='overquota_notify_threshold_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="overquota_notify_threshold" id="overquota_notify_threshold" value="{tmpl_var name='overquota_notify_threshold'}" class="form-control" /></div>
+                <div class="col-sm-3 input-sm">%</div>
             </div>
 			<div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='overquota_notify_admin_txt'}</label>
@@ -156,6 +161,11 @@
                 <div class="col-sm-9">
                     {tmpl_var name='overquota_notify_client'}
                 </div>
+            </div>
+            <div class="form-group">
+                <label for="overquota_db_notify_threshold" class="col-sm-3 control-label">{tmpl_var name='overquota_db_notify_threshold_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="overquota_db_notify_threshold" id="overquota_db_notify_threshold" value="{tmpl_var name='overquota_db_notify_threshold'}" class="form-control" /></div>
+                <div class="col-sm-3 input-sm">%</div>
             </div>
 			<div class="form-group">
 				<label class="col-sm-3 control-label">{tmpl_var name='overquota_db_notify_admin_txt'}</label>
diff --git a/interface/web/admin/templates/system_config_dns_edit.htm b/interface/web/admin/templates/system_config_dns_edit.htm
index f3d0b20dda12fb2d620bdac076b83babde8a22cf..9636b4a26114d517adcf7c50a127401961b54fa8 100644
--- a/interface/web/admin/templates/system_config_dns_edit.htm
+++ b/interface/web/admin/templates/system_config_dns_edit.htm
@@ -11,10 +11,18 @@
 		{tmpl_var name='default_dnsserver'}
 	</select></div>
 </div>
+
+<div class="form-group">
+  <label class="col-sm-3 control-label">{tmpl_var name=dns_show_zoneexport_txt'}</label>
+  <div class="col-sm-9">
+    {tmpl_var name='dns_show_zoneexport'}
+  </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="admin/system_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/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-</div></div>
\ No newline at end of file
+</div></div>
diff --git a/interface/web/capp.php b/interface/web/capp.php
index 5d49fe80d7b8d33807c50214daf0719bffe70026..71d3d9ba35c79e0da5b2a84097276f9a644476d0 100644
--- a/interface/web/capp.php
+++ b/interface/web/capp.php
@@ -31,45 +31,37 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 require_once '../lib/config.inc.php';
 require_once '../lib/app.inc.php';
 
+include_once 'common.php';
+
 //* Import module variable
 $mod = $_REQUEST["mod"];
 //* If we click on a search result, load that one instead of the module's start page
 $redirect = (isset($_REQUEST["redirect"]) ? $_REQUEST["redirect"] : '');
 
 //* Check if user is logged in
-if($_SESSION["s"]["user"]['active'] != 1) {
+if ($_SESSION["s"]["user"]['active'] != 1) {
 	die("URL_REDIRECT: /index.php");
 	//die();
 }
 
-if(!preg_match("/^[a-z]{2,20}$/i", $mod)) die('module name contains unallowed chars.');
-if($redirect != '' && !preg_match("/^[a-z0-9]+\/[a-z0-9_\.\-]+\?id=[0-9]{1,9}(\&type=[a-z0-9_\.\-]+)?$/i", $redirect)) die('redirect contains unallowed chars.');
+if (!preg_match("/^[a-z]{2,20}$/i", $mod)) die('module name contains unallowed chars.');
+if ($redirect != '' && !preg_match("/^[a-z0-9]+\/[a-z0-9_\.\-]+\?id=[0-9]{1,9}(\&type=[a-z0-9_\.\-]+)?$/i", $redirect)) die('redirect contains unallowed chars.');
 
 //* Check if user may use the module.
 $user_modules = explode(",", $_SESSION["s"]["user"]["modules"]);
 
-if(!in_array($mod, $user_modules)) $app->error($app->lng(301));
+if (!in_array($mod, $user_modules)) $app->error($app->lng(301));
 
 //* Load module configuration into the session.
-if(is_file($mod."/lib/module.conf.php")) {
+if (is_file($mod."/lib/module.conf.php")) {
 	include_once $mod."/lib/module.conf.php";
 
-	$menu_dir = ISPC_WEB_PATH.'/' . $mod . '/lib/menu.d';
-
-	if (is_dir($menu_dir)) {
-		if ($dh = opendir($menu_dir)) {
-			//** Go through all files in the menu dir
-			while (($file = readdir($dh)) !== false) {
-				if ($file != '.' && $file != '..' && substr($file, -9, 9) == '.menu.php' && $file != 'dns_resync.menu.php') {
-					include_once $menu_dir . '/' . $file;
-				}
-			}
-		}
-	}
+	$menu_dir = ISPC_WEB_PATH.'/'.$mod.'/lib/menu.d';
+	include_menu_dir_files($menu_dir);
 
 	$_SESSION["s"]["module"] = $module;
 	session_write_close();
-	if($redirect == ''){
+	if ($redirect == '') {
 		echo "HEADER_REDIRECT:".$_SESSION["s"]["module"]["startpage"];
 	} else {
 		//* If we click on a search result, load that one instead of the module's start page
diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng
index 883bb424871254d74866fe486141122264874e75..9b2e6492cf55b41963b6d7718f251839651b00d1 100644
--- a/interface/web/client/lib/lang/it_client.lng
+++ b/interface/web/client/lib/lang/it_client.lng
@@ -3,11 +3,11 @@ $wb['limit_maildomain_txt'] = 'Numero massimo di domini di posta';
 $wb['limit_mailbox_txt'] = 'Numero massimo di caselle di posta';
 $wb['limit_mailalias_txt'] = 'Numero massimo di aliases di posta';
 $wb['limit_mailforward_txt'] = 'Numero massimo di forwarders di posta';
-$wb['limit_mailcatchall_txt'] = 'Numero massimo di catchall accounts';
+$wb['limit_mailcatchall_txt'] = 'Numero massimo di profili catchall';
 $wb['limit_mailrouting_txt'] = 'Numero massimo di email routes';
 $wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries';
 $wb['limit_mailfilter_txt'] = 'Numero massimo di email filters';
-$wb['limit_fetchmail_txt'] = 'Numero massimo di fetchmail accounts';
+$wb['limit_fetchmail_txt'] = 'Numero massimo di profili fetchmail';
 $wb['limit_mailquota_txt'] = 'Limite quota mailbox';
 $wb['limit_spamfilter_wblist_txt'] = 'Numero massimo di filtri spamfilter white / blacklist';
 $wb['limit_spamfilter_user_txt'] = 'Numero massimo di utenti spamfilter';
@@ -43,7 +43,7 @@ $wb['limit_subdomain_txt'] = 'limit_subdomain';
 $wb['limit_webquota_txt'] = 'limit_webquota';
 $wb['limit_database_txt'] = 'Numero massimo database';
 $wb['ip_address_txt'] = 'Indirizzi ip';
-$wb['limit_client_error_notint'] = 'The sub client limit must be a number.';
+$wb['limit_client_error_notint'] = 'Il numero di sub-cliente deve essere un numero.';
 $wb['firstname_error_empty'] = 'Nome è vuoto.';
 $wb['contact_error_empty'] = 'Nome azienda è vuoto.';
 $wb['default_webserver_txt'] = 'Webserver predefinito';
@@ -61,95 +61,95 @@ $wb['username_error_unique'] = 'Il nome utente deve essere unico.';
 $wb['limit_maildomain_error_notint'] = 'Il limite dei domini email devessere un numero.';
 $wb['limit_mailbox_error_notint'] = 'Il limite delle caselle di posta devessere un numero.';
 $wb['limit_mailalias_error_notint'] = 'Il limite di email alias deve essere un numero.';
-$wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.';
-$wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.';
-$wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.';
-$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.';
-$wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.';
-$wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.';
-$wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'The spamfilter white / blacklist limit must be a number.';
-$wb['limit_spamfilter_user_error_notint'] = 'The spamfilter user limit must be a number.';
-$wb['limit_spamfilter_policy_error_notint'] = 'The spamfilter policy limit must be a number.';
-$wb['limit_web_domain_error_notint'] = 'The website limit must be a number.';
-$wb['limit_web_aliasdomain_error_notint'] = 'The website alias domain limit must be a number.';
-$wb['limit_web_subdomain_error_notint'] = 'The website subdomain limit must be a number.';
+$wb['limit_mailforward_error_notint'] = 'Il limite delle forward email deve essere un numero.';
+$wb['limit_mailcatchall_error_notint'] = 'Il limite delle mail catchall deve essere un numero.';
+$wb['limit_mailrouting_error_notint'] = 'Il limite di di routing email dve essere un numero.';
+$wb['limit_mail_wblist_error_notint'] = 'Il limite delle liste bianche / nere deve essere un numero.';
+$wb['limit_mailfilter_error_notint'] = 'Il limite di filtri email deve essere un numero.';
+$wb['limit_mailfetchmail_error_notint'] = 'Il limite di fetchmail deve essere un numero.';
+$wb['limit_mailquota_error_notint'] = 'La quota email deve essere un numero.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'Il limite di liste bianche / nere di filtri SPAM deve essere un numero.';
+$wb['limit_spamfilter_user_error_notint'] = 'Il limite di utenti di filtri SPAM deve essere un numero.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Il limite delle politiche di spamfilter deve essere un numero.';
+$wb['limit_web_domain_error_notint'] = 'Il limite di siti web deve essere un numero.';
+$wb['limit_web_aliasdomain_error_notint'] = 'Il limite dei domini web Alias deve essere un numero.';
+$wb['limit_web_subdomain_error_notint'] = 'Il limite dei siti web sottodomini deve essere un numero.';
 $wb['limit_ftp_user_error_notint'] = 'Il limite degli utenti ftp deve essere un numero.';
 $wb['limit_shell_user_error_notint'] = 'Il limite degli utenti shell deve essere un numero.';
 $wb['limit_dns_zone_error_notint'] = 'Il limite dei record dns deve essere un numero.';
-$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
+$wb['limit_dns_slave_zone_error_notint'] = 'Il limite delle zone DNS slave deve essere un numero.';
 $wb['default_dbserver_txt'] = 'Server Database predefinito';
 $wb['limit_database_error_notint'] = 'Il limite dei database deve essere un numero.';
 $wb['username_error_regex'] = 'Il nome utente contiene caratteri non validi.';
-$wb['password_strength_txt'] = 'Sicurezza della Password';
+$wb['password_strength_txt'] = 'Robustezza della Password';
 $wb['template_master_txt'] = 'Principale';
 $wb['template_additional_txt'] = 'Aggiuntivo';
-$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
-$wb['web_php_options_txt'] = 'PHP Options';
-$wb['limit_cron_txt'] = 'Max. number of cron jobs';
-$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
-$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
-$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
-$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
-$wb['limit_client_error'] = 'The max. number of clients is reached.';
-$wb['limit_mailaliasdomain_txt'] = 'Max. number of domain aliases';
-$wb['limit_mailaliasdomain_error_notint'] = 'The email domain alias limit must be a number.';
+$wb['ssh_chroot_txt'] = 'Opzioni chroot SSH';
+$wb['web_php_options_txt'] = 'Opzioni PHP';
+$wb['limit_cron_txt'] = 'Numero massimo di cron jobs';
+$wb['limit_cron_type_txt'] = 'Massimo tipo di cron jobs (chrooted e completi implica url)';
+$wb['limit_cron_frequency_txt'] = 'Ritardo minimo tra le esecuzioni';
+$wb['limit_cron_error_notint'] = 'Il limite di cron deve essere un numero.';
+$wb['limit_cron_error_frequency'] = 'Il limite di frequenza cron deve essere un numero.';
+$wb['limit_client_error'] = 'Hai raggiunto il numero massimo di clienti.';
+$wb['limit_mailaliasdomain_txt'] = 'Massimo numero di domini Alias';
+$wb['limit_mailaliasdomain_error_notint'] = 'Il numero massimo di domini email alias devve essere un numero.';
 $wb['limit_web_quota_txt'] = 'Quota Web';
 $wb['limit_traffic_quota_txt'] = 'Quota Traffico';
-$wb['limit_trafficquota_error_notint'] = 'Traffic Quota must be a number.';
-$wb['limit_webdav_user_txt'] = 'Max. number of Webdav users';
-$wb['limit_webdav_user_error_notint'] = 'The webdav user limit must be a number.';
-$wb['customer_no_txt'] = 'Customer No.';
+$wb['limit_trafficquota_error_notint'] = 'La quota traffico deve essere un numero.';
+$wb['limit_webdav_user_txt'] = 'Massimo numero di utenti Webdav';
+$wb['limit_webdav_user_error_notint'] = 'Il numero massimo di utenti Webdav deve essere un numero.';
+$wb['customer_no_txt'] = 'n° Cliente';
 $wb['vat_id_txt'] = 'P. IVA';
 $wb['required_fields_txt'] = '* Campi obbligatori';
-$wb['limit_mailmailinglist_txt'] = 'Max. number of mailing lists';
-$wb['limit_mailmailinglist_error_notint'] = 'The mailing list record limit must be a number.';
+$wb['limit_mailmailinglist_txt'] = 'Massimo numero di mailing lists';
+$wb['limit_mailmailinglist_error_notint'] = 'Il numero di mailing list deve essere un numero.';
 $wb['company_id_txt'] = 'Azienda/Titolare ID';
 $wb['limit_openvz_vm_txt'] = 'Numero massimo server virtuali';
-$wb['limit_openvz_vm_template_id_txt'] = 'Force virtual server template';
-$wb['limit_openvz_vm_error_notint'] = 'The virtual server limit must be a number.';
-$wb['web_php_options_notempty'] = 'No PHP option(s) selected. Select at least one PHP option.';
-$wb['ssh_chroot_notempty'] = 'No SSH chroot option selected. Select at least one option.';
-$wb['username_error_collision'] = 'The username may not start with the word -web- or -web- followed by a number.';
-$wb['add_additional_template_txt'] = 'Add additional template';
-$wb['delete_additional_template_txt'] = 'Elimina additional template';
-$wb['limit_cgi_txt'] = 'CGI available';
-$wb['limit_ssi_txt'] = 'SSI available';
-$wb['limit_perl_txt'] = 'Perl available';
-$wb['limit_ruby_txt'] = 'Ruby available';
-$wb['limit_python_txt'] = 'Python available';
-$wb['force_suexec_txt'] = 'SuEXEC forced';
-$wb['limit_hterror_txt'] = 'Custom error docs available';
-$wb['limit_wildcard_txt'] = 'Wildcard subdomain available';
-$wb['limit_ssl_txt'] = 'SSL available';
-$wb['bank_account_number_txt'] = 'Bank account no.';
-$wb['bank_code_txt'] = 'Bank code';
-$wb['bank_name_txt'] = 'Bank name';
+$wb['limit_openvz_vm_template_id_txt'] = 'Forzare il modello dei server virtuali';
+$wb['limit_openvz_vm_error_notint'] = 'Il limite dei server virtuali deve essere un numero.';
+$wb['web_php_options_notempty'] = 'Nessuna opzione PHP selezionata. Seleziona almeno una opzione PHP.';
+$wb['ssh_chroot_notempty'] = 'Nessuna opzione chroot SSH selezionata. Seleziona almeno una opzione.';
+$wb['username_error_collision'] = 'Il nome utente non può iniziare con la parola -web- o con -web- seguito da un numero.';
+$wb['add_additional_template_txt'] = 'Aggiungi un modello';
+$wb['delete_additional_template_txt'] = 'Elimina un modello';
+$wb['limit_cgi_txt'] = 'CGI disponibile';
+$wb['limit_ssi_txt'] = 'SSI disponibile';
+$wb['limit_perl_txt'] = 'Perl disponibile';
+$wb['limit_ruby_txt'] = 'Ruby disponibile';
+$wb['limit_python_txt'] = 'Python disponibile';
+$wb['force_suexec_txt'] = 'SuEXEC imposto';
+$wb['limit_hterror_txt'] = 'Messaggi di errore personalizzati disponibili';
+$wb['limit_wildcard_txt'] = 'Sottodomini * disponibile';
+$wb['limit_ssl_txt'] = 'SSL disponibile';
+$wb['bank_account_number_txt'] = 'n° Conto corrente bancario';
+$wb['bank_code_txt'] = 'Codice Banca';
+$wb['bank_name_txt'] = 'Nome Banca';
 $wb['bank_account_iban_txt'] = 'IBAN';
 $wb['bank_account_swift_txt'] = 'BIC / Swift';
-$wb['web_limits_txt'] = 'Web Limits';
-$wb['email_limits_txt'] = 'Email Limits';
-$wb['database_limits_txt'] = 'Database Limits';
-$wb['cron_job_limits_txt'] = 'Cron Job Limits';
-$wb['dns_limits_txt'] = 'DNS Limits';
-$wb['virtualization_limits_txt'] = 'Virtualization Limits';
+$wb['web_limits_txt'] = 'Limiti Web';
+$wb['email_limits_txt'] = 'Limiti Email';
+$wb['database_limits_txt'] = 'Limiti Database';
+$wb['cron_job_limits_txt'] = 'Limiti Cron Job';
+$wb['dns_limits_txt'] = 'Limiti DNS';
+$wb['virtualization_limits_txt'] = 'Limiti Virtualizzazione';
 $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['active_template_additional_txt'] = 'AttivoAddons';
-$wb['bank_account_owner_txt'] = 'Bank account owner';
-$wb['email_error_isemail'] = 'Please enter a valid email address.';
-$wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
-$wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
-$wb['paypal_email_txt'] = 'PayPal Email';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
-$wb['aps_limits_txt'] = 'APS Installer Limits';
-$wb['limit_aps_txt'] = 'Max. number of APS instances';
-$wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked (disables everything except DNS)';
-$wb['canceled_txt'] = 'Cancellato(disables client login)';
+$wb['active_template_additional_txt'] = 'Attivo Addons';
+$wb['bank_account_owner_txt'] = 'Titolare conto bancario';
+$wb['email_error_isemail'] = 'Inserire un email valido.';
+$wb['customer_no_error_unique'] = 'Il n° di cliente deve essere univoco (o vuoto).';
+$wb['paypal_email_error_isemail'] = 'Inserire una email valida per PayPal.';
+$wb['paypal_email_txt'] = 'email PayPal';
+$wb['err_msg_master_tpl_set'] = 'Tutti i limiti personalizzati impostati sono ignorati se viene selezionato un modello master diverso da \\"custom\\".';
+$wb['aps_limits_txt'] = 'Limite installazione APS';
+$wb['limit_aps_txt'] = 'Numero massimo di istanze APS';
+$wb['limit_aps_error_notint'] = 'Il limite di istanze APS deve essere un numero.';
+$wb['default_slave_dnsserver_txt'] = 'Server DNS secondario default';
+$wb['locked_txt'] = 'Bloccato (Disabilita tutto eccetto DNS)';
+$wb['canceled_txt'] = 'Cancellato (disabilita il login del cliente)';
 $wb['gender_txt'] = 'Titolo';
 $wb['gender_m_txt'] = 'Sig.';
 $wb['gender_f_txt'] = 'Sig.ra';
@@ -157,52 +157,52 @@ $wb['added_by_txt'] = 'Aggiunto da';
 $wb['added_date_txt'] = 'Data inserimento';
 $wb['parent_client_id_txt'] = 'Cliente di rivenditore';
 $wb['none_txt'] = 'Nessuno';
-$wb['contact_firstname_txt'] = 'Contact firstname';
-$wb['limit_backup_txt'] = 'Backupfunction available';
-$wb['xmpp_limits_txt'] = 'XMPP Limits';
+$wb['contact_firstname_txt'] = 'Nome contatto';
+$wb['limit_backup_txt'] = 'Funzione backup disponibile';
+$wb['xmpp_limits_txt'] = 'Limiti XMPPs';
 $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['web_servers_placeholder'] = 'Seleziona webservers';
+$wb['no_web_server_error'] = 'Almeno un webserver deve essere selezionato.';
+$wb['web_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come sito Web. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
+$wb['dns_servers_txt'] = 'Server DNS';
+$wb['dns_servers_placeholder'] = 'Seleziona i server DNS';
+$wb['no_dns_server_error'] = 'Almeno un server DNS deve essere selezionato.';
+$wb['dns_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come server DNS. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
+$wb['db_servers_txt'] = 'Server Database';
+$wb['db_servers_placeholder'] = 'Seleziona server database';
+$wb['no_db_server_error'] = 'Almeno un server Database server deve essere selezionato.';
+$wb['db_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come server Database. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
 $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['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_database_user_txt'] = 'Max. Database users';
-$wb['limit_database_user_error_notint'] = 'The database user limit must be a number.';
-$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['password_click_to_set_txt'] = 'Click to set';
-$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
-$wb['Address'] = 'Address';
-$wb['Limits'] = 'Limits';
+$wb['mail_servers_placeholder'] = 'Seleziona mailservers';
+$wb['no_mail_server_error'] = 'Almeno un server mail deve essere selezionato.';
+$wb['mail_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come serve Mail. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
+$wb['xmpp_servers_txt'] = 'Server XMPP';
+$wb['xmpp_servers_placeholder'] = 'Seleziona server XMPP';
+$wb['no_xmpp_server_error'] = 'Almeno un server XMPP deve essere selezionato.';
+$wb['xmpp_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come server XMPP. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
+$wb['limit_xmpp_domain_error_notint'] = 'Il limite dei domini XMPP deve essere un numero.';
+$wb['limit_xmpp_user_error_notint'] = 'Il limite degli utenti XMPP deve essere un numero.';
+$wb['limit_xmpp_domain_txt'] = 'Numero massimo di domini XMPP';
+$wb['limit_xmpp_user_txt'] = 'Massimo numero di profili XMPP';
+$wb['limit_xmpp_muc_txt'] = 'Multiuser chat disponibile';
+$wb['limit_xmpp_pastebin_txt'] = 'Pastebin per MUC disponibile';
+$wb['limit_xmpp_httparchive_txt'] = 'Archivio HTTP per MUC disponibile';
+$wb['limit_xmpp_anon_txt'] = 'host anonimo disponibile';
+$wb['limit_xmpp_vjud_txt'] = 'Rubrica utenti VJUD disponibile';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy disponibile';
+$wb['limit_xmpp_status_txt'] = 'Status host disponibile';
+$wb['limit_database_quota_txt'] = 'quota Database';
+$wb['limit_database_quota_error_notint'] = 'La quota database deve essere un numero.';
+$wb['reseller_txt'] = 'Rivenditori';
+$wb['btn_save_txt'] = 'Salva';
+$wb['btn_cancel_txt'] = 'Annulla';
+$wb['invalid_vat_id'] = 'Il n° di IVA non + valido.';
+$wb['email_error_empty'] = 'Email è vuoto';
+$wb['limit_database_user_txt'] = 'Massimo numero utenti Database';
+$wb['limit_database_user_error_notint'] = 'Il numero di utenti database deve essere un numero.';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponibile';
+$wb['limit_directive_snippets_txt'] = 'Mostra selezione di configurazione del server web';
+$wb['password_click_to_set_txt'] = 'Clicca per impostare';
+$wb['limit_dns_record_error_notint'] = 'Il limite di record DNS deve essere un numero.';
+$wb['Address'] = 'Indirizzo';
+$wb['Limits'] = 'Limiti';
diff --git a/interface/web/client/lib/lang/it_client_circle.lng b/interface/web/client/lib/lang/it_client_circle.lng
index b7703b4f99cef5917d03232176fd46ff78c6751e..70ff1fd6e082c2d6b98c31842e2c72a98761f8d7 100644
--- a/interface/web/client/lib/lang/it_client_circle.lng
+++ b/interface/web/client/lib/lang/it_client_circle.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['Client Circle'] = 'Client Circle';
-$wb['Circle'] = 'Circle';
-$wb['circle_txt'] = 'Circle';
-$wb['circle_name_txt'] = 'Circle Name';
-$wb['client_ids_txt'] = 'Clients/Resellers';
+$wb['Client Circle'] = 'Circolo Cliente';
+$wb['Circle'] = 'Circolo';
+$wb['circle_txt'] = 'Circolo';
+$wb['circle_name_txt'] = 'Nome Circolo';
+$wb['client_ids_txt'] = 'Clienti/Rivenditori';
 $wb['description_txt'] = 'Descrizione';
 $wb['active_txt'] = 'Attivo';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_circle_list.lng b/interface/web/client/lib/lang/it_client_circle_list.lng
index faa225f0587d44813520c1628c2ea49b85681d95..a7e74f32e3fcd36f55f375ec469418bfa0b8a430 100644
--- a/interface/web/client/lib/lang/it_client_circle_list.lng
+++ b/interface/web/client/lib/lang/it_client_circle_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Client Circles';
-$wb['circle_id_txt'] = 'Circle ID';
-$wb['circle_name_txt'] = 'Circle Name';
+$wb['list_head_txt'] = 'Circolo Clienti';
+$wb['circle_id_txt'] = 'ID Circolo';
+$wb['circle_name_txt'] = 'Nome Circolo';
 $wb['description_txt'] = 'Descrizione';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  circle';
-$wb['filter_txt'] = 'Filter';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Circolo';
+$wb['filter_txt'] = 'Filtro';
 $wb['delete_txt'] = 'Elimina';
 $wb['active_txt'] = 'Attivo';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_del.lng b/interface/web/client/lib/lang/it_client_del.lng
index a17dc6a7ff3d54de5af7bc4def05114558b15c9a..ec0e31aa3c801de2c700d9fca6a137ac7dc4a121 100644
--- a/interface/web/client/lib/lang/it_client_del.lng
+++ b/interface/web/client/lib/lang/it_client_del.lng
@@ -3,8 +3,8 @@ $wb['confirm_action_txt'] = 'Conferma operazione';
 $wb['delete_explanation'] = 'Questa operazione cancellerà i seguenti record associati a questo cliente';
 $wb['btn_save_txt'] = 'Cancella cliente';
 $wb['btn_cancel_txt'] = 'Annulla senza cancellare il cliente';
-$wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
-$wb['list_head_txt'] = 'Delete Client';
-$wb['table_txt'] = 'Table';
-$wb['data_txt'] = 'Data';
+$wb['confirm_client_delete_txt'] = 'Sei sicuro di voler cancellare questo Cliente?';
+$wb['list_head_txt'] = 'Cancella Cliente';
+$wb['table_txt'] = 'Tavola';
+$wb['data_txt'] = 'Dati';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_message.lng b/interface/web/client/lib/lang/it_client_message.lng
index 6e8f0fe1b8b19e491cd5c541d243690e058a864e..fcb5c20e57227200f93e6d238a19f88930055a2b 100644
--- a/interface/web/client/lib/lang/it_client_message.lng
+++ b/interface/web/client/lib/lang/it_client_message.lng
@@ -1,20 +1,20 @@
 <?php
-$wb['btn_send_txt'] = 'Send email';
+$wb['btn_send_txt'] = 'Invia email';
 $wb['btn_cancel_txt'] = 'Annulla';
-$wb['sender_txt'] = 'Sender email address';
-$wb['subject_txt'] = 'Subject';
-$wb['message_txt'] = 'Message';
-$wb['form_legend_client_txt'] = 'Send email message to all clients.';
-$wb['form_legend_admin_txt'] = 'Send email message to all clients and resellers.';
-$wb['sender_invalid_error'] = 'Sender email invalid.';
-$wb['subject_invalid_error'] = 'Subject  vuoto.';
-$wb['message_invalid_error'] = 'Message  vuoto.';
-$wb['email_sent_to_txt'] = 'Email sent to:';
-$wb['page_head_txt'] = 'Send email message to clients and resellers';
-$wb['recipient_txt'] = 'Recipient';
-$wb['all_clients_resellers_txt'] = 'All clients and resellers';
-$wb['all_clients_txt'] = 'All clients';
-$wb['variables_txt'] = 'Variables:';
-$wb['gender_m_txt'] = 'Mr.';
-$wb['gender_f_txt'] = 'Ms.';
+$wb['sender_txt'] = 'Indirizzo email del mittente';
+$wb['subject_txt'] = 'Oggetto';
+$wb['message_txt'] = 'Messaggio';
+$wb['form_legend_client_txt'] = 'Invia messaggio email a tutti i clienti.';
+$wb['form_legend_admin_txt'] = 'Invia messaggio email a tutti i clienti e rivenditori.';
+$wb['sender_invalid_error'] = 'Mittente email invalido.';
+$wb['subject_invalid_error'] = 'Oggetto vuoto.';
+$wb['message_invalid_error'] = 'Messaggio  vuoto.';
+$wb['email_sent_to_txt'] = 'Email inviato a:';
+$wb['page_head_txt'] = 'Invia messaggio email a clienti e rivenditori';
+$wb['recipient_txt'] = 'Destinatario';
+$wb['all_clients_resellers_txt'] = 'Tutti i clienti e rivenditori';
+$wb['all_clients_txt'] = 'Tutti i clienti';
+$wb['variables_txt'] = 'Variabili:';
+$wb['gender_m_txt'] = 'Sig.';
+$wb['gender_f_txt'] = 'Sig.ra';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_message_template.lng b/interface/web/client/lib/lang/it_client_message_template.lng
index f9c7d11c4d6a65c38b5e2016589d48d613e3fb5e..d464077026d174ae38e76d904b8a476c1ab75549 100644
--- a/interface/web/client/lib/lang/it_client_message_template.lng
+++ b/interface/web/client/lib/lang/it_client_message_template.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['template_type_txt'] = 'Email type';
-$wb['subject_txt'] = 'Subject';
-$wb['message_txt'] = 'Message';
-$wb['Email template'] = 'Email template';
-$wb['Settings'] = 'Setting';
-$wb['variables_txt'] = 'Variables';
-$wb['variables_description_txt'] = '(The username and password variables are only available in welcome emails.)';
-$wb['duplicate_welcome_error'] = 'There can be only one default welcome email template. Please edit the existing template instead of adding a new one.';
-$wb['template_name_txt'] = 'Template name';
-$wb['subject_error_empty'] = 'Subject is empty';
-$wb['message_error_empty'] = 'Message is empty';
+$wb['template_type_txt'] = 'Email tipo';
+$wb['subject_txt'] = 'Oggetto';
+$wb['message_txt'] = 'Messaggio';
+$wb['Email template'] = 'Email modello';
+$wb['Settings'] = 'Impostazioni';
+$wb['variables_txt'] = 'Variabili';
+$wb['variables_description_txt'] = '(I valori della username e della password sono disponibili solo nella mail di benvenuto.)';
+$wb['duplicate_welcome_error'] = 'Ci può essere un solo modello di mail di benvenuto. Edita il modello esistente piuttosto che aggiungerne un altro.';
+$wb['template_name_txt'] = 'Nome Modello';
+$wb['subject_error_empty'] = 'Oggetto è vuoto';
+$wb['message_error_empty'] = 'Messaggio è vuoto';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_message_template_list.lng b/interface/web/client/lib/lang/it_client_message_template_list.lng
index d9c307ed5220b04a7657896edae66cf689411c0b..a79bad2a1d6cec3173d898c60ca326fc2a73f8c3 100644
--- a/interface/web/client/lib/lang/it_client_message_template_list.lng
+++ b/interface/web/client/lib/lang/it_client_message_template_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'Email templates';
-$wb['template_type_txt'] = 'Message for';
-$wb['template_name_txt'] = 'Template name';
+$wb['list_head_txt'] = 'Modello Email';
+$wb['template_type_txt'] = 'Messaggio per';
+$wb['template_name_txt'] = 'Nome Modello';
 ?>
diff --git a/interface/web/client/lib/lang/it_client_template.lng b/interface/web/client/lib/lang/it_client_template.lng
index 119d5d28e50ecf4b47205051a20479eb24b6cf9b..418bb033c7784802089f3915e7109c5a38ac382b 100644
--- a/interface/web/client/lib/lang/it_client_template.lng
+++ b/interface/web/client/lib/lang/it_client_template.lng
@@ -1,24 +1,24 @@
 <?php
-$wb['ssh_chroot_notempty'] = 'No SSH chroot option selected. Select at least one option.';
+$wb['ssh_chroot_notempty'] = 'Nessuna opzione chroot SSH selezionata. Seleziona almeno una opzione.';
 $wb['limit_client_error_notint'] = 'Il limite dei sub-clienti devessere un numero.';
 $wb['limit_maildomain_txt'] = 'Num. massimo domini email';
 $wb['limit_mailbox_txt'] = 'Num. massimo caselle di posta';
 $wb['limit_mailalias_txt'] = 'Num. massimo alias email';
 $wb['limit_mailforward_txt'] = 'Num. massimo inoltri email';
-$wb['limit_mailcatchall_txt'] = 'Num. massimo account email catchall';
+$wb['limit_mailcatchall_txt'] = 'Num. massimo profilo email catchall';
 $wb['limit_mailrouting_txt'] = 'Num. massimo routes email';
 $wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries';
 $wb['limit_mailfilter_txt'] = 'Num. massimo filtri email';
-$wb['limit_fetchmail_txt'] = 'Num. massimo account fetchmail';
+$wb['limit_fetchmail_txt'] = 'Num. massimo profilo fetchmail';
 $wb['limit_mailquota_txt'] = 'Quota caselle di posta';
 $wb['limit_spamfilter_wblist_txt'] = 'Num. massimo filtri spam white / blacklist';
 $wb['limit_spamfilter_user_txt'] = 'Num. massimo utenti spamfilter';
-$wb['limit_spamfilter_policy_txt'] = 'Num. massimo policys spamfilter';
+$wb['limit_spamfilter_policy_txt'] = 'Num. massimo politiche spamfilter';
 $wb['limit_client_txt'] = 'Num. massimo clienti';
-$wb['limit_relayhost_txt'] = 'Show SMTP relay host options';
-$wb['limit_domain_txt'] = 'limit_domain';
-$wb['limit_subdomain_txt'] = 'limit_subdomain';
-$wb['limit_webquota_txt'] = 'limit_webquota';
+$wb['limit_relayhost_txt'] = 'Mostra le opzioni dell\'host SMTP relay';
+$wb['limit_domain_txt'] = 'Limite di domini';
+$wb['limit_subdomain_txt'] = 'Limite sottodomini';
+$wb['limit_webquota_txt'] = 'Limiti quota Web';
 $wb['limit_database_txt'] = 'Num. massimo database';
 $wb['limit_web_domain_txt'] = 'Num. massimo domini web';
 $wb['limit_web_aliasdomain_txt'] = 'Num. massimo alias domini web';
@@ -34,13 +34,13 @@ $wb['limit_mailalias_error_notint'] = 'Il limite alias email devessere un numero
 $wb['limit_mailforward_error_notint'] = 'Il limite inoltro email devessere un numero.';
 $wb['limit_mailcatchall_error_notint'] = 'Il limite catchall email devessere un numero.';
 $wb['limit_mailrouting_error_notint'] = 'Il limite routing email devessere un numero .';
-$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.';
+$wb['limit_mail_wblist_error_notint'] = 'Il limite di delle liste liste binche / nere deve essere un numero.';
 $wb['limit_mailfilter_error_notint'] = 'Il limite filtri email devessere un numero.';
 $wb['limit_mailfetchmail_error_notint'] = 'Il limite fetchmail devessere un numero.';
 $wb['limit_mailquota_error_notint'] = 'Il limite quota email devessere un numero.';
 $wb['limit_spamfilter_wblist_error_notint'] = 'Il limite filtri spamfilter devessere un numero.';
 $wb['limit_spamfilter_user_error_notint'] = 'Il limite utenti spamfilter devessere un numero.';
-$wb['limit_spamfilter_policy_error_notint'] = 'Il limite policy spamfilter devessere un numero.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Il limite politiche spamfilter devessere un numero.';
 $wb['limit_web_domain_error_notint'] = 'Il limite siti web devessere un numero.';
 $wb['limit_web_aliasdomain_error_notint'] = 'Il limite alias siti web devessere un numero.';
 $wb['limit_web_subdomain_error_notint'] = 'Il limite sottodomini web devessere un numero.';
@@ -61,68 +61,68 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Il limite alias domini devessere un
 $wb['limit_web_quota_txt'] = 'Quota web';
 $wb['limit_traffic_quota_txt'] = 'Quota traffico';
 $wb['limit_trafficquota_error_notint'] = 'Quota traffico devessere un numero.';
-$wb['template_del_aborted_txt'] = 'Eliminazione annullata. Esiste almeno un cliente che ha questo template attivo.';
+$wb['template_del_aborted_txt'] = 'Eliminazione annullata. Esiste almeno un cliente che ha questo modello attivo.';
 $wb['limit_webdav_user_txt'] = 'Num. massimo utenti webdav';
 $wb['limit_webdav_user_error_notint'] = 'Il limite utenti webdav devessere un numero.';
-$wb['template_type_txt'] = 'Template type';
-$wb['limit_mailmailinglist_txt'] = 'Max. number of mailing lists';
-$wb['limit_mailmailinglist_error_notint'] = 'The mailing list record limit must be a number.';
-$wb['limit_openvz_vm_txt'] = 'Max. number of virtual servers';
-$wb['limit_openvz_vm_template_id_txt'] = 'Force virtual server template';
-$wb['limit_openvz_vm_error_notint'] = 'The virtual server limit must be a number.';
-$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
-$wb['web_php_options_txt'] = 'PHP Options';
-$wb['limit_cgi_txt'] = 'CGI available';
-$wb['limit_ssi_txt'] = 'SSI available';
-$wb['limit_perl_txt'] = 'Perl available';
-$wb['limit_ruby_txt'] = 'Ruby available';
-$wb['limit_python_txt'] = 'Python available';
-$wb['force_suexec_txt'] = 'SuEXEC forced';
-$wb['limit_hterror_txt'] = 'Custom error docs available';
-$wb['limit_wildcard_txt'] = 'Wildcard subdomain available';
-$wb['limit_ssl_txt'] = 'SSL available';
-$wb['web_limits_txt'] = 'Web Limits';
-$wb['email_limits_txt'] = 'Email Limits';
-$wb['database_limits_txt'] = 'Database Limits';
-$wb['cron_job_limits_txt'] = 'Cron Job Limits';
-$wb['dns_limits_txt'] = 'DNS Limits';
-$wb['virtualization_limits_txt'] = 'Virtualization Limits';
-$wb['aps_limits_txt'] = 'APS Installer Limits';
-$wb['limit_aps_txt'] = 'Max. number of APS instances';
-$wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
-$wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
-$wb['client_limits_txt'] = 'Client Limits';
-$wb['template_name_txt'] = 'Template name';
-$wb['limit_mail_backup_txt'] = 'E-mail backup function available';
-$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['template_type_txt'] = 'T>ipo di Modello';
+$wb['limit_mailmailinglist_txt'] = 'Numero massimo delle mailing lists';
+$wb['limit_mailmailinglist_error_notint'] = 'Il limite dell mailing list deve essere un numero.';
+$wb['limit_openvz_vm_txt'] = 'Numero massimo di Virtual Server';
+$wb['limit_openvz_vm_template_id_txt'] = 'Forza modello per virtual server';
+$wb['limit_openvz_vm_error_notint'] = 'Il limite di server virtuali deve essere un numero.';
+$wb['ssh_chroot_txt'] = 'Opzioni chroot SSH';
+$wb['web_php_options_txt'] = 'Opzioni PHP';
+$wb['limit_cgi_txt'] = 'CGI disponibile';
+$wb['limit_ssi_txt'] = 'SSI disponibile';
+$wb['limit_perl_txt'] = 'Perl disponibile';
+$wb['limit_ruby_txt'] = 'Ruby disponibile';
+$wb['limit_python_txt'] = 'Python disponibile';
+$wb['force_suexec_txt'] = 'SuEXEC imposto';
+$wb['limit_hterror_txt'] = 'Messaggi di errore personalizzati disponibile';
+$wb['limit_wildcard_txt'] = 'Sottodomini * disponibile';
+$wb['limit_ssl_txt'] = 'SSL disponibile';
+$wb['web_limits_txt'] = 'Limite Web';
+$wb['email_limits_txt'] = 'Limite Email';
+$wb['database_limits_txt'] = 'Database';
+$wb['cron_job_limits_txt'] = 'Limite Cron Job';
+$wb['dns_limits_txt'] = 'Limite DNS';
+$wb['virtualization_limits_txt'] = 'Limite Virtualizzazioni';
+$wb['aps_limits_txt'] = 'Limite installazione APS';
+$wb['limit_aps_txt'] = 'Numero massimo di istanze APS';
+$wb['limit_aps_error_notint'] = 'Il limite delle istanze APS deve essere un numero.';
+$wb['limit_domainmodule_txt'] = 'Limiti del modulo Domini';
+$wb['client_limits_txt'] = 'Limite Clienti';
+$wb['template_name_txt'] = 'Nome Modello';
+$wb['limit_mail_backup_txt'] = 'Funzione backup email disponibile';
+$wb['default_mailserver_txt'] = 'Mailserver Default';
+$wb['default_webserver_txt'] = 'Webserver Default';
+$wb['default_dnsserver_txt'] = 'Default Server DNS';
+$wb['default_slave_dnsserver_txt'] = 'Default Server DNS Secondario';
+$wb['limit_backup_txt'] = 'Funzione backup disponibile';
 $wb['default_dbserver_txt'] = 'Default Database Server';
-$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_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['limit_database_user_txt'] = 'Max. Database users';
+$wb['limit_database_quota_txt'] = 'Quota Database';
+$wb['limit_database_quota_error_notint'] = 'Il limite di quota database deve essere un numero.';
+$wb['xmpp_limits_txt'] = 'Limiti XMPP';
+$wb['xmpp_servers_txt'] = 'Servers XMPP';
+$wb['xmpp_servers_placeholder'] = 'Seleziona i Server XMPP';
+$wb['no_xmpp_server_error'] = 'Almeno un Server XMPP deve essere selezionato.';
+$wb['xmpp_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è usato come server XMPP. Assicurati che questo server non sia in uso da questo cliente prima di rimuoverlo.';
+$wb['limit_xmpp_domain_error_notint'] = 'Il limite dei domini XMPP deve essere un numero.';
+$wb['limit_xmpp_user_error_notint'] = 'Il limite degli utenti XMPP deve essere un numero.';
+$wb['limit_xmpp_domain_txt'] = 'Numero massimo di domini XMPP';
+$wb['limit_xmpp_user_txt'] = 'Numero massimo di profili XMPP';
+$wb['limit_xmpp_muc_txt'] = 'chat multiutente disponibile';
+$wb['limit_xmpp_pastebin_txt'] = 'Pastebin per MUC disponibile';
+$wb['limit_xmpp_httparchive_txt'] = 'Archivio su HTTP per MUC disponibile';
+$wb['limit_xmpp_anon_txt'] = 'host anonimo disponibile';
+$wb['limit_xmpp_vjud_txt'] = 'Rubrica utenti VJUD disponibile';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy disponibile';
+$wb['limit_xmpp_status_txt'] = 'Status host disponibile';
+$wb['dns_servers_txt'] = 'servers DNS';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponibile';
+$wb['limit_directive_snippets_txt'] = 'Mostra selezione configurazione web server';
+$wb['limit_database_user_txt'] = 'Numero massimo utenti database';
 $wb['web_servers_txt'] = 'Webservers';
 $wb['db_servers_txt'] = 'Database servers';
 $wb['mail_servers_txt'] = 'Mailservers';
-$wb['Limits'] = 'Limits';
+$wb['Limits'] = 'Limiti';
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 43b1a5ca49c7fa88a022a7c43370effa0a5ccde3..0d22389e35d30ca44337fb46fd4eef626f2bd2dd 100644
--- a/interface/web/client/lib/lang/it_client_template_list.lng
+++ b/interface/web/client/lib/lang/it_client_template_list.lng
@@ -2,6 +2,6 @@
 $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';
+$wb['template_id_txt'] = 'Modello ID';
+$wb['sys_groupid_txt'] = 'Rivenditore';
 ?>
diff --git a/interface/web/client/lib/lang/it_clients_list.lng b/interface/web/client/lib/lang/it_clients_list.lng
index 6b502eea884907a27dad577cc7bd744e1c1bb1ff..674f65f284a6a0674f65ed5c7479bf03b3136351 100644
--- a/interface/web/client/lib/lang/it_clients_list.lng
+++ b/interface/web/client/lib/lang/it_clients_list.lng
@@ -7,8 +7,8 @@ $wb['city_txt'] = 'Città';
 $wb['country_txt'] = 'Stato';
 $wb['add_new_record_txt'] = 'Aggiungi nuovo cliente';
 $wb['username_txt'] = 'Nome Utente';
-$wb['customer_no_txt'] = 'Customer No.';
-$wb['locked_txt'] = 'Locked';
-$wb['yes_txt'] = 'Yes';
+$wb['customer_no_txt'] = 'n° Cliente';
+$wb['locked_txt'] = 'Bloccato';
+$wb['yes_txt'] = 'si';
 $wb['no_txt'] = 'No';
 ?>
diff --git a/interface/web/client/lib/lang/it_domain.lng b/interface/web/client/lib/lang/it_domain.lng
index 7c26779aae29a390cf82ee427c8f7205b544cc77..dba372981a34d4bfca5294e1b58a21248e18eb6c 100644
--- a/interface/web/client/lib/lang/it_domain.lng
+++ b/interface/web/client/lib/lang/it_domain.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['domain_error_empty'] = 'Nome dominio è vuoto';
 $wb['domain_error_unique'] = 'Dominio già esistente';
-$wb['domain_error_regex'] = 'Questo nome a dominio non è permesso';
+$wb['domain_error_regex'] = 'Questo nome di dominio non è permesso';
 $wb['Domain'] = 'Dominio';
 ?>
diff --git a/interface/web/client/lib/lang/it_reseller.lng b/interface/web/client/lib/lang/it_reseller.lng
index ca1f01467d2ee4513fb2425ac87c767eaae50659..2acac2cb609c9aa20161f460ab8970a28d32a8c8 100644
--- a/interface/web/client/lib/lang/it_reseller.lng
+++ b/interface/web/client/lib/lang/it_reseller.lng
@@ -1,25 +1,25 @@
 <?php
-$wb['limit_maildomain_txt'] = 'Max. number of email domains';
-$wb['limit_mailbox_txt'] = 'Max. number of mailboxes';
-$wb['limit_mailalias_txt'] = 'Max. number of email aliases';
-$wb['limit_mailforward_txt'] = 'Max. number of email forwarders';
-$wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts';
-$wb['limit_mailrouting_txt'] = 'Max. number of email routes';
-$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries';
-$wb['limit_mailfilter_txt'] = 'Max. number of email filters';
-$wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts';
-$wb['limit_mailquota_txt'] = 'Mailbox quota';
-$wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters';
-$wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users';
-$wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies';
-$wb['limit_mail_backup_txt'] = 'E-mail backup function available';
-$wb['default_mailserver_txt'] = 'Default Mailserver';
-$wb['company_name_txt'] = 'Company name';
-$wb['contact_name_txt'] = 'Contact name';
+$wb['limit_maildomain_txt'] = 'Massimo numero di domini email';
+$wb['limit_mailbox_txt'] = 'Massimo numero di caselle mail';
+$wb['limit_mailalias_txt'] = 'Massimo numero di alias email';
+$wb['limit_mailforward_txt'] = 'Massimo numero di forwarder email';
+$wb['limit_mailcatchall_txt'] = 'Massimo numero di profili mail catchall';
+$wb['limit_mailrouting_txt'] = 'Massimo numero di route mail';
+$wb['limit_mail_wblist_txt'] = 'Massimo numero di liste mail bianche e nere';
+$wb['limit_mailfilter_txt'] = 'Massimo numero di filtri mail';
+$wb['limit_fetchmail_txt'] = 'Massimo numero di profili fetchmail';
+$wb['limit_mailquota_txt'] = 'Quota Mailbox';
+$wb['limit_spamfilter_wblist_txt'] = 'Massimo numero di liste SPAMfilter bianche e nere';
+$wb['limit_spamfilter_user_txt'] = 'Massimo numero di utenti spamfilter';
+$wb['limit_spamfilter_policy_txt'] = 'Massimo numero di politiche spamfilter';
+$wb['limit_mail_backup_txt'] = 'Funzione E-mail backup disponibile';
+$wb['default_mailserver_txt'] = 'Mailserver Default';
+$wb['company_name_txt'] = 'Nome Azienda';
+$wb['contact_name_txt'] = 'nome Contatto';
 $wb['username_txt'] = 'Nome Utente';
 $wb['password_txt'] = 'Password';
-$wb['password_strength_txt'] = 'Livello sicurezza Password';
-$wb['language_txt'] = 'Language';
+$wb['password_strength_txt'] = 'Robustezza Password';
+$wb['language_txt'] = 'Lingua';
 $wb['usertheme_txt'] = 'Tema';
 $wb['street_txt'] = 'Via';
 $wb['zip_txt'] = 'CAP';
@@ -37,176 +37,176 @@ $wb['company_txt'] = 'Azienda';
 $wb['title_txt'] = 'Titolo';
 $wb['firstname_txt'] = 'Nome';
 $wb['surname_txt'] = 'Cognome';
-$wb['limit_relayhost_txt'] = 'Show SMTP relay host options';
+$wb['limit_relayhost_txt'] = 'Mostra le opzioni dell\'host SMTP relay';
 $wb['limit_domain_txt'] = 'limit_domain';
 $wb['limit_subdomain_txt'] = 'limit_subdomain';
 $wb['limit_webquota_txt'] = 'limit_webquota';
-$wb['limit_database_txt'] = 'Max. number of Databases';
-$wb['limit_cron_txt'] = 'Max. number of cron jobs';
-$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
-$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
-$wb['ip_address_txt'] = 'ip_address';
-$wb['limit_client_error_notint'] = 'The sub client limit must be a number.';
-$wb['firstname_error_empty'] = 'Firstname  vuoto.';
-$wb['contact_error_empty'] = 'Contact name  vuoto.';
+$wb['limit_database_txt'] = 'Massimo numero di Databases';
+$wb['limit_cron_txt'] = 'Massimo numero di cron jobs';
+$wb['limit_cron_type_txt'] = 'Massimo tipo di cron jobs (chrooted e completi implica url)';
+$wb['limit_cron_frequency_txt'] = 'Mininìmo ritardo tra le esecuzioni';
+$wb['ip_address_txt'] = 'Indirizzo IP';
+$wb['limit_client_error_notint'] = 'Il limite dei sotto clienti deve essere un numero.';
+$wb['firstname_error_empty'] = 'Nome  vuoto.';
+$wb['contact_error_empty'] = 'Nome contatto vuoto.';
 $wb['default_webserver_txt'] = 'Default Webserver';
-$wb['limit_web_domain_txt'] = 'Max. number of web domains';
-$wb['limit_web_aliasdomain_txt'] = 'Max. number of web aliasdomains';
-$wb['limit_web_subdomain_txt'] = 'Max. number of web subdomains';
-$wb['limit_ftp_user_txt'] = 'Max. number of FTP users';
-$wb['default_dnsserver_txt'] = 'Default DNS Server';
-$wb['limit_dns_zone_txt'] = 'Max. number of DNS zones';
-$wb['limit_dns_slave_zone_txt'] = 'Max. number of secondary DNS zones';
-$wb['limit_dns_record_txt'] = 'Max. number DNS records';
-$wb['limit_shell_user_txt'] = 'Max. number of Shell users';
-$wb['limit_client_txt'] = 'Max. number of Clients';
-$wb['username_error_empty'] = 'Username  vuoto.';
-$wb['username_error_unique'] = 'The username must be unique.';
-$wb['limit_maildomain_error_notint'] = 'The email domain limit must be a number.';
-$wb['limit_mailbox_error_notint'] = 'The mailbox limit must be a number.';
-$wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.';
-$wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.';
-$wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.';
-$wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.';
-$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.';
-$wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.';
-$wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.';
-$wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.';
-$wb['limit_spamfilter_wblist_error_notint'] = 'The spamfilter white / blacklist limit must be a number.';
-$wb['limit_spamfilter_user_error_notint'] = 'The spamfilter user limit must be a number.';
-$wb['limit_spamfilter_policy_error_notint'] = 'The spamfilter policy limit must be a number.';
-$wb['limit_web_domain_error_notint'] = 'The website limit must be a number.';
-$wb['limit_web_aliasdomain_error_notint'] = 'The website alias domain limit must be a number.';
-$wb['limit_web_subdomain_error_notint'] = 'The website subdomain limit must be a number.';
-$wb['limit_ftp_user_error_notint'] = 'The ftp user limit must be a number.';
-$wb['limit_shell_user_error_notint'] = 'The shell user limit must be a number.';
-$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
-$wb['limit_dns_slave_zone_error_notint'] = 'The dns slave zone limit must be a number.';
-$wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.';
+$wb['limit_web_domain_txt'] = 'Massimo numero di domini web';
+$wb['limit_web_aliasdomain_txt'] = 'Massimo numero di domini web alias';
+$wb['limit_web_subdomain_txt'] = 'Massimo numero di sottodomini web';
+$wb['limit_ftp_user_txt'] = 'Massimo numero di utenti FTP';
+$wb['default_dnsserver_txt'] = 'Server DNS Default';
+$wb['limit_dns_zone_txt'] = 'Massimo numero di zone DNS';
+$wb['limit_dns_slave_zone_txt'] = 'Massimo numero di zone DNS secondarie';
+$wb['limit_dns_record_txt'] = 'Massimo numero di record DNS';
+$wb['limit_shell_user_txt'] = 'Massimo numero di utenti della Shell';
+$wb['limit_client_txt'] = 'Massimo numero di Clienti';
+$wb['username_error_empty'] = 'Username vuoto.';
+$wb['username_error_unique'] = 'La username deve essere univoca.';
+$wb['limit_maildomain_error_notint'] = 'Il limite dei domini email deve essere un numero.';
+$wb['limit_mailbox_error_notint'] = 'Il limite delle caselle mail deve essere un numero.';
+$wb['limit_mailalias_error_notint'] = 'Il limite degli alias email deve essere un numero.';
+$wb['limit_mailforward_error_notint'] = 'Il limite delle email forward deve essere un numero.';
+$wb['limit_mailcatchall_error_notint'] = 'Il limite delle catchall deve essere un numero.';
+$wb['limit_mailrouting_error_notint'] = 'Il limite delle routing email deve essere un numero.';
+$wb['limit_mail_wblist_error_notint'] = 'Il limite delle liste email bianche / nere deve essere un numero.';
+$wb['limit_mailfilter_error_notint'] = 'Il limite dei filtri email deve essere un numero.';
+$wb['limit_mailfetchmail_error_notint'] = 'Il limite di fetchmail deve essere un numero.';
+$wb['limit_mailquota_error_notint'] = 'Il limite della quota mail deve essere un numero.';
+$wb['limit_spamfilter_wblist_error_notint'] = 'I limiti delle liste mail spamfilter bianhce / nere deve essere un numero.';
+$wb['limit_spamfilter_user_error_notint'] = 'Il limite di utenti liste spamfilter deve essere un numero.';
+$wb['limit_spamfilter_policy_error_notint'] = 'Il limite delle politiche spamfilter deve essere un numero.';
+$wb['limit_web_domain_error_notint'] = 'Il limite di siti web deve essere un numero.';
+$wb['limit_web_aliasdomain_error_notint'] = 'Il limite dei domini web alias deve essere un numero.';
+$wb['limit_web_subdomain_error_notint'] = 'Il limite di sottodomini web deve essere un numero.';
+$wb['limit_ftp_user_error_notint'] = 'Il limite degli utenti FTP deve essere un numero.';
+$wb['limit_shell_user_error_notint'] = 'Il limite degli utenti shell deve essere un numero.';
+$wb['limit_dns_zone_error_notint'] = 'Il limite dei record DNF deve essere un numero.';
+$wb['limit_dns_slave_zone_error_notint'] = 'Il numero di zone DNS slave deve essere un numero.';
+$wb['limit_dns_record_error_notint'] = 'Il limite dei record DNF deve essere un numero.';
 $wb['default_dbserver_txt'] = 'Default Database Server';
-$wb['limit_database_error_notint'] = 'The database limit must be a number.';
-$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
-$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
-$wb['username_error_regex'] = 'The Username contains invalid chracaters.';
-$wb['template_master_txt'] = 'Master template';
-$wb['template_additional_txt'] = 'Addon template';
-$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
-$wb['web_php_options_txt'] = 'PHP Options';
-$wb['limit_client_error'] = 'The max. number of clients is reached.';
-$wb['limit_web_quota_txt'] = 'Web Quota';
-$wb['limit_traffic_quota_txt'] = 'Traffic Quota';
-$wb['limit_trafficquota_error_notint'] = 'Traffic Quota must be a number.';
-$wb['customer_no_txt'] = 'Customer No.';
+$wb['limit_database_error_notint'] = 'Il limite dei database deve essere un numero.';
+$wb['limit_cron_error_notint'] = 'Il limite di cron deve essere un numero.';
+$wb['limit_cron_error_frequency'] = 'La frequenza di cron deve essere un numero.';
+$wb['username_error_regex'] = 'Il nome utente contiene caratteri non ammessi.';
+$wb['template_master_txt'] = 'Modello Master';
+$wb['template_additional_txt'] = 'Modello Addon';
+$wb['ssh_chroot_txt'] = 'Opzioni SSH-Chroot';
+$wb['web_php_options_txt'] = 'Opzioni PHP';
+$wb['limit_client_error'] = 'Hai raggiunto il massimo numero di utenti di un cliente.';
+$wb['limit_web_quota_txt'] = 'Quota Web';
+$wb['limit_traffic_quota_txt'] = 'Quota Traffico';
+$wb['limit_trafficquota_error_notint'] = 'Quota Traffico deve essere un numero.';
+$wb['customer_no_txt'] = 'N° Cliente';
 $wb['vat_id_txt'] = 'VAT ID';
-$wb['required_fields_txt'] = '* Required fields';
-$wb['limit_webdav_user_txt'] = 'Max. number of Webdav users';
-$wb['limit_webdav_user_error_notint'] = 'The webdav user limit must be a number.';
-$wb['limit_mailmailinglist_txt'] = 'Max. number of mailing lists';
-$wb['limit_mailaliasdomain_txt'] = 'Max. number of domain aliases';
-$wb['limit_mailmailinglist_error_notint'] = 'The mailing list record limit must be a number.';
-$wb['limit_openvz_vm_txt'] = 'Max. number of virtual servers';
-$wb['limit_openvz_vm_template_id_txt'] = 'Force virtual server template';
-$wb['limit_openvz_vm_error_notint'] = 'The virtual server limit must be a number.';
-$wb['web_php_options_notempty'] = 'No PHP option(s) selected. Select at least one PHP option.';
-$wb['ssh_chroot_notempty'] = 'No SSH chroot option selected. Select at least one option.';
-$wb['username_error_collision'] = 'The username may not start with the word -web- or -web- followed by a number.';
-$wb['add_additional_template_txt'] = 'Add additional template';
-$wb['delete_additional_template_txt'] = 'Elimina additional template';
-$wb['limit_cgi_txt'] = 'CGI available';
-$wb['limit_ssi_txt'] = 'SSI available';
-$wb['limit_perl_txt'] = 'Perl available';
-$wb['limit_ruby_txt'] = 'Ruby available';
-$wb['limit_python_txt'] = 'Python available';
-$wb['force_suexec_txt'] = 'SuEXEC forced';
-$wb['limit_hterror_txt'] = 'Custom error docs available';
-$wb['limit_wildcard_txt'] = 'Wildcard subdomain available';
-$wb['limit_ssl_txt'] = 'SSL available';
-$wb['web_limits_txt'] = 'Web Limits';
-$wb['email_limits_txt'] = 'Email Limits';
-$wb['database_limits_txt'] = 'Database Limits';
-$wb['cron_job_limits_txt'] = 'Cron Job Limits';
-$wb['dns_limits_txt'] = 'DNS Limits';
-$wb['virtualization_limits_txt'] = 'Virtualization Limits';
+$wb['required_fields_txt'] = '* Campi obbligatori';
+$wb['limit_webdav_user_txt'] = 'Massimo numero di utenti Webdav';
+$wb['limit_webdav_user_error_notint'] = 'Il limite di utenti Webdav deve essere un numero.';
+$wb['limit_mailmailinglist_txt'] = 'Massimo numero di mailing lists';
+$wb['limit_mailaliasdomain_txt'] = 'Massimo numero si domini alias';
+$wb['limit_mailmailinglist_error_notint'] = 'Il limite di mailing list deve essere un numero.';
+$wb['limit_openvz_vm_txt'] = 'Masimo numero di server virtuali';
+$wb['limit_openvz_vm_template_id_txt'] = 'Imponi modello virtual server';
+$wb['limit_openvz_vm_error_notint'] = 'Il limite di server virtuali deve essere un numero.';
+$wb['web_php_options_notempty'] = 'Nessuna opzione PHP selezionata. Selezionare almeno una opzione PHP.';
+$wb['ssh_chroot_notempty'] = 'Nessuna opzione chroot SSH selezionata. Seleziona almeno una opzione.';
+$wb['username_error_collision'] = 'La username non può iniziare con la parola -web- o -web- seguito da un numero.';
+$wb['add_additional_template_txt'] = 'Aggiungi modello';
+$wb['delete_additional_template_txt'] = 'Elimina modello';
+$wb['limit_cgi_txt'] = 'CGI disponibile';
+$wb['limit_ssi_txt'] = 'SSI disponibile';
+$wb['limit_perl_txt'] = 'Perl disponibile';
+$wb['limit_ruby_txt'] = 'Ruby disponibile';
+$wb['limit_python_txt'] = 'Python disponibile';
+$wb['force_suexec_txt'] = 'SuEXEC imposto';
+$wb['limit_hterror_txt'] = 'Messaggi di errore personalizzati disponibili';
+$wb['limit_wildcard_txt'] = 'sottodomini * disponibile';
+$wb['limit_ssl_txt'] = 'SSL disponibile';
+$wb['web_limits_txt'] = 'Limiti Web';
+$wb['email_limits_txt'] = 'Limiti Email';
+$wb['database_limits_txt'] = 'Limiti Database';
+$wb['cron_job_limits_txt'] = 'Limiti Cron Job';
+$wb['dns_limits_txt'] = 'Limiti DNS';
+$wb['virtualization_limits_txt'] = 'Limiti Virtualizzazione';
 $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['email_error_isemail'] = 'Please enter a valid email address.';
-$wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
-$wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
-$wb['paypal_email_txt'] = 'PayPal Email';
-$wb['company_id_txt'] = 'Company/Entrepreneur ID';
-$wb['bank_account_number_txt'] = 'Bank account no.';
-$wb['bank_account_owner_txt'] = 'Bank account owner';
-$wb['bank_code_txt'] = 'Bank code';
-$wb['bank_name_txt'] = 'Bank name';
+$wb['email_error_isemail'] = 'Inserisci un indirizzo mail corretto.';
+$wb['customer_no_error_unique'] = 'Il numero di cliente deve essere univoco (o vuoto).';
+$wb['paypal_email_error_isemail'] = 'Inserire una mail valida per PayPal.';
+$wb['paypal_email_txt'] = 'Email PayPal';
+$wb['company_id_txt'] = 'ID Azienda/Impresa';
+$wb['bank_account_number_txt'] = 'n° conto corrente bancario.';
+$wb['bank_account_owner_txt'] = 'Titolare conto corrente bancario';
+$wb['bank_code_txt'] = 'Codice Banca';
+$wb['bank_name_txt'] = 'Nome banca';
 $wb['bank_account_iban_txt'] = 'IBAN';
 $wb['bank_account_swift_txt'] = 'BIC / Swift';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
-$wb['limit_aps_txt'] = 'Max. number of APS instances';
-$wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
-$wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server';
-$wb['locked_txt'] = 'Locked';
-$wb['canceled_txt'] = 'Canceled';
-$wb['gender_m_txt'] = 'Mr.';
-$wb['gender_f_txt'] = 'Ms.';
-$wb['gender_txt'] = 'Title';
-$wb['customer_no_template_txt'] = 'Customer No. template';
-$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
-$wb['customer_no_start_txt'] = 'Customer No. start value';
-$wb['customer_no_counter_txt'] = 'Customer No. counter';
-$wb['added_by_txt'] = 'Added by';
-$wb['added_date_txt'] = 'Added date';
-$wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
-$wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
-$wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
-$wb['contact_firstname_txt'] = 'Contact firstname';
-$wb['limit_backup_txt'] = 'Backupfunction available';
-$wb['limit_client_error_positive_or_unlimited'] = 'The number of clients must be > 0 or -1 (unlimited)';
+$wb['limit_aps_txt'] = 'Massimo numero di istanze APS';
+$wb['limit_aps_error_notint'] = 'Il limite di istanze APS edve essere un numero.';
+$wb['default_slave_dnsserver_txt'] = 'Server DNS Secondario Default';
+$wb['locked_txt'] = 'Bloccato';
+$wb['canceled_txt'] = 'Eliminato';
+$wb['gender_m_txt'] = 'Sig.';
+$wb['gender_f_txt'] = 'Sig.ra';
+$wb['gender_txt'] = 'Titolo';
+$wb['customer_no_template_txt'] = 'Modello n° Cliente';
+$wb['customer_no_template_error_regex_txt'] = 'Il modello del n° cliente contiene caratteri non ammessi';
+$wb['customer_no_start_txt'] = 'Valore iniziale del n° cliente';
+$wb['customer_no_counter_txt'] = 'Contatore n° Cliente';
+$wb['added_by_txt'] = 'Aggiunto da';
+$wb['added_date_txt'] = 'Aggiunto in data';
+$wb['limit_domainmodule_error_notint'] = 'Il limite del modulo di Domini deve essere un numero.';
+$wb['limit_domainmodule_txt'] = 'Limite modulo Domini';
+$wb['client_limits_txt'] = 'Limiti Cliente';
+$wb['err_msg_master_tpl_set'] = 'Tutti i limiti personalizzati sono ignorati se viene selezionato un mìtemplate master diverso da \\"custom\\".';
+$wb['contact_firstname_txt'] = 'Nome contatto';
+$wb['limit_backup_txt'] = 'Funzione Backup disponibile';
+$wb['limit_client_error_positive_or_unlimited'] = 'Il numero di clienti deve essere > 0 or -1 (illimitato)';
 $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['web_servers_placeholder'] = 'Seleziona Webservers';
+$wb['no_web_server_error'] = 'Almeno un webserver deve essere selezionato.';
+$wb['web_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come web server. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
 $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['dns_servers_placeholder'] = 'Seleziona DNS Servers';
+$wb['no_dns_server_error'] = 'Almeno un DNS server deve essere selezionato.';
+$wb['dns_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come DNS server. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
 $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['db_servers_placeholder'] = 'Seleziona Database Servers';
+$wb['no_db_server_error'] = 'Almeno un Database server deve essere selezionato.';
+$wb['db_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come Database server. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
 $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['mail_servers_placeholder'] = 'Seleziona Mailservers';
+$wb['no_mail_server_error'] = 'Almeno un Mailserver deve essere selezionate.';
+$wb['mail_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come server Mail. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
+$wb['xmpp_limits_txt'] = 'Limiti XMPP';
 $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_database_user_txt'] = 'Max. Database users';
-$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['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt available';
-$wb['limit_directive_snippets_txt'] = 'Show web server config selection';
-$wb['password_click_to_set_txt'] = 'Click to set';
-$wb['Reseller'] = 'Reseller';
-$wb['Address'] = 'Address';
-$wb['Limits'] = 'Limits';
+$wb['xmpp_servers_placeholder'] = 'Seleziona XMPP Servers';
+$wb['no_xmpp_server_error'] = 'Almeno un XMPP Server deve essere selezionata.';
+$wb['xmpp_servers_used'] = 'Il server che stai cercando di rimuovere da questo cliente è in uso come server XMPP. Assicurati che non sia usato dal cliente prima di tentare di rimuoverlo.';
+$wb['limit_xmpp_domain_error_notint'] = 'Il limite di domini XMPP deve essere un numero.';
+$wb['limit_xmpp_user_error_notint'] = 'Il limite di utenti XMPP deve essere un numero.';
+$wb['limit_xmpp_domain_txt'] = 'Massimo numero di domini XMPP';
+$wb['limit_xmpp_user_txt'] = 'Massimo numero di profili XMPP';
+$wb['limit_xmpp_muc_txt'] = 'Multiuser chat disponibile';
+$wb['limit_xmpp_pastebin_txt'] = 'Pastebin per MUC disponibile';
+$wb['limit_xmpp_httparchive_txt'] = 'Archivio HTTP per MUC disponibile';
+$wb['limit_xmpp_anon_txt'] = 'host anonimo disponibile';
+$wb['limit_xmpp_vjud_txt'] = 'Rubrica utenti VJUD disponibile';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream proxy disponibile';
+$wb['limit_xmpp_status_txt'] = 'Status host disponibile';
+$wb['invalid_vat_id'] = 'Il numero IVA non è corretto.';
+$wb['btn_save_txt'] = 'Salva';
+$wb['btn_cancel_txt'] = 'Annulla';
+$wb['email_error_empty'] = 'Email è vuoto';
+$wb['limit_database_user_txt'] = 'Massimo numero di utenti Database';
+$wb['limit_database_user_error_notint'] = 'Il limite di utente database deve essere un numero.';
+$wb['limit_database_quota_txt'] = 'Quota Database';
+$wb['limit_database_quota_error_notint'] = 'La quota database deve essere un numore.';
+$wb['limit_ssl_letsencrypt_txt'] = 'Let\'s Encrypt disponibile';
+$wb['limit_directive_snippets_txt'] = 'Mostra selezione configurazione server web';
+$wb['password_click_to_set_txt'] = 'Clicca per impostare';
+$wb['Reseller'] = 'Rivenditore';
+$wb['Address'] = 'Indirizzo';
+$wb['Limits'] = 'Limiti';
diff --git a/interface/web/client/lib/lang/it_resellers_list.lng b/interface/web/client/lib/lang/it_resellers_list.lng
index 079ce84f4d0d1d4e431256430932cde427cdb354..dbf6b8f6ecc68e33735678094f7acfff39e6c91c 100644
--- a/interface/web/client/lib/lang/it_resellers_list.lng
+++ b/interface/web/client/lib/lang/it_resellers_list.lng
@@ -6,6 +6,6 @@ $wb['contact_name_txt'] = 'Contatto';
 $wb['city_txt'] = 'Città';
 $wb['country_txt'] = 'Nazione';
 $wb['add_new_record_txt'] = 'Aggiungi nuovo rivenditore';
-$wb['customer_no_txt'] = 'Customer No.';
+$wb['customer_no_txt'] = 'n° cliente';
 $wb['username_txt'] = 'Nome Utente';
 ?>
diff --git a/interface/web/common.php b/interface/web/common.php
new file mode 100644
index 0000000000000000000000000000000000000000..ac37a1aa765df658abb0664ccd07833a1fbe33fa
--- /dev/null
+++ b/interface/web/common.php
@@ -0,0 +1,55 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+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.
+*/
+
+/*
+  Some common helper functions which can be reused throughout the project.
+*/
+
+/**
+ * Includes all the menu files from the menu dir.
+ * @param string $menu_dir Path to the menu dir
+ * @return void
+ */
+function include_menu_dir_files($menu_dir)
+{
+	global $app, $module;
+
+	if (is_dir($menu_dir)) {
+		if ($dh = opendir($menu_dir)) {
+			//** Go through all files in the menu dir
+			while (($file = readdir($dh)) !== false) {
+				if ($file != '.' && $file != '..' && substr($file, -9, 9) == '.menu.php' && $file != 'dns_resync.menu.php') {
+					include_once $menu_dir.'/'.$file;
+				}
+			}
+		}
+	}
+}
+
diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php
index e5a8cc459fa2f141eceb471ea829b5b1e048e7b0..a649fef0f7fdfe9a28a1244e257b0ec780732976 100644
--- a/interface/web/dashboard/dashlets/limits.php
+++ b/interface/web/dashboard/dashlets/limits.php
@@ -141,6 +141,10 @@ class dashlet_limits
         if (is_file($lng_file)) {
             include $lng_file;
         }
+        $lng_file = ISPC_ROOT_PATH . '/lib/lang/'.$_SESSION['s']['language'].'.lng';
+        if (is_file($lng_file)) {
+            include $lng_file;
+        }
         $tpl->setVar($wb);
 
         if ($app->auth->is_admin()) {
diff --git a/interface/web/dashboard/lib/lang/ar_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ar_dashlet_limits.lng
index b15261dfc421c88c018bc81c790b14815ad08322..7f87485dfe46dcf18c2b41f75eafc9266e2eedc2 100644
--- a/interface/web/dashboard/lib/lang/ar_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ar_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/bg_dashlet_limits.lng b/interface/web/dashboard/lib/lang/bg_dashlet_limits.lng
index 961e6825df2fdb495e131a1258d4086148e72828..78f68a031250d111c57d261c8331beb1a54001f6 100644
--- a/interface/web/dashboard/lib/lang/bg_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/bg_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/br_dashlet_limits.lng b/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
index 057a1c780ce3883f0a0d7edd8ded8c743589f984..1b336fe02b3cdd3d87d61953897b8ac177e899e3 100644
--- a/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/br_dashlet_limits.lng
@@ -30,3 +30,4 @@ $wb['limit_domain_txt'] = 'Número de domínios';
 $wb['limit_mailquota_txt'] = 'Cotas atribuídas para contas de email';
 $wb['limit_web_quota_txt'] = 'Cotas atribuídas para sites';
 $wb['limit_database_quota_txt'] = 'Cotas atribuídas para Banco de Dados';
+$wb['limit_mail_wblist_txt'] = 'Number of email white / blacklist entries';
diff --git a/interface/web/dashboard/lib/lang/ca_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ca_dashlet_limits.lng
index ae78112c858cf3cd53484e95400e0398b3f30b2f..6a443950a423ca320e7fb2dbb1d7118df3975a79 100644
--- a/interface/web/dashboard/lib/lang/ca_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ca_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng b/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
index 7386ff3c4ded0b428d4eacec23c591fad26a7922..7ad586e7c62cf446d51ff035e57659c27c51aba6 100644
--- a/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/cz_dashlet_limits.lng
@@ -30,3 +30,4 @@ $wb['limit_domain_txt'] = 'Počet domén';
 $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';
+$wb['limit_mail_wblist_txt'] = 'Number of email white / blacklist entries';
diff --git a/interface/web/dashboard/lib/lang/de_dashlet_limits.lng b/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
index 22e87237d5d6b1716a253f285bf9b530b590dcba..68f5e262c2e44fbe53011e264a8b3c5b88cb2c74 100644
--- a/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/de_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Anzahl der Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/dk_dashlet_limits.lng b/interface/web/dashboard/lib/lang/dk_dashlet_limits.lng
index 402aa722f514f5486d454419bfe91768fdda74f8..02c7125c23eb70b40b431982c00156a29d01f18b 100644
--- a/interface/web/dashboard/lib/lang/dk_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/dk_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Antal af Domæner';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/el_dashlet_limits.lng b/interface/web/dashboard/lib/lang/el_dashlet_limits.lng
index f51c1da1b5cc87cf0f97c731acf8d3e85e304c41..fe9d66391d2a5ef357b8816b73f2430e67699b57 100644
--- a/interface/web/dashboard/lib/lang/el_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/el_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
index 2e3bb8c086e5291a0652839c66e09381e2f710e5..0306e6ead3eca62b86d5fb8f48909917f07eec1b 100644
--- a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng
@@ -30,5 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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'] = 'Unlimited';
+$wb['limit_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
index d56d17c6615dbc071ca039ff7190e569d520370a..5e04a1ba61d9879d1992a703d63d105060db35df 100644
--- a/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/es_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['of_txt'] = 'de';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/fi_dashlet_limits.lng b/interface/web/dashboard/lib/lang/fi_dashlet_limits.lng
index b15261dfc421c88c018bc81c790b14815ad08322..7f87485dfe46dcf18c2b41f75eafc9266e2eedc2 100644
--- a/interface/web/dashboard/lib/lang/fi_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/fi_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/fr_dashlet_limits.lng b/interface/web/dashboard/lib/lang/fr_dashlet_limits.lng
index fa5043ab85ac7fa31637f53e2c24eda50c83aace..7d46a22e6f83d356d88267730dbddd07bdfcba6d 100644
--- a/interface/web/dashboard/lib/lang/fr_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/fr_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/hr_dashlet_limits.lng b/interface/web/dashboard/lib/lang/hr_dashlet_limits.lng
index 2aa1792f91559950cb35a9ab0ffe6cd24074ecde..6eada3538ef2c702c7d11f0ee00aaf670ad4d62a 100644
--- a/interface/web/dashboard/lib/lang/hr_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/hr_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/hu_dashlet_limits.lng b/interface/web/dashboard/lib/lang/hu_dashlet_limits.lng
index 76498eed86f896ebb972effc317e771f422c27b3..67049d5137577216c4e98bf660c97666bb6e162e 100644
--- a/interface/web/dashboard/lib/lang/hu_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/hu_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/id_dashlet_limits.lng b/interface/web/dashboard/lib/lang/id_dashlet_limits.lng
index 94a64e226f6090ac1e0beddab50ee4c2d7dc4ea6..0e34d0e13d6d81702710e66ac4795771a077deea 100644
--- a/interface/web/dashboard/lib/lang/id_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/id_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_donate.lng b/interface/web/dashboard/lib/lang/it_dashlet_donate.lng
index e41c374cde792db1d7b906f986f7ba7e0a215ef8..803301e0467e9305006a1f8f885e3f8a18f122b0 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_donate.lng
+++ b/interface/web/dashboard/lib/lang/it_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'] = 'Il software ISPConfig Hosting Control Panel è un software libero. Può darsi che tu lo sappia già, che richiede molto tempo e impegno per sviluppare un progetto software di questa complessità. Se vuoi supportare ulteriori sviluppi di ISPConfig, per favore considera di fare una donazione. Otterrai anche, come bonus, una copia del manuale di ISPConfig.';
+$wb['donate2_txt'] = 'L\'importo della donazione può essere di 5 Euro o pù, l\'importo viene scelto durante il checkout. Il metodo di pagamento è PayPal. Riceverai anche la ricevuta in PDF da ISPConfig UG.';
+$wb['hide_btn_txt'] = 'Nascondi';
+$wb['donate_btn_txt'] = 'Supporta il manuale di ISPConfig';
+$wb['more_btn_txt'] = 'Ancora';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_invoice_client_settings.lng b/interface/web/dashboard/lib/lang/it_dashlet_invoice_client_settings.lng
index 8cae3dfb4f0563e28f98f3cc43f4e0983946e9d6..bde1eb9f97d8c78a618465a6e4be7b826e6204a7 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_invoice_client_settings.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_invoice_client_settings.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['invoice_client_settings_txt'] = 'Invoice Client Settings';
+$wb['invoice_client_settings_txt'] = 'Impostazioni di fatturazione Cliente';
 $wb['edit_txt'] = 'Edit';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/it_dashlet_invoices.lng
index a680daa8f623ad5af726dffd8eb1e1c0b1ce9b4e..8c5eec03a18a30415ad0eb4f8cd13f68be2a8543 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_invoices.lng
+++ b/interface/web/dashboard/lib/lang/it_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['invoices_txt'] = 'Fattura';
+$wb['invoice_no_txt'] = 'Fattura n°.';
+$wb['amount_txt'] = 'Importo';
+$wb['date_txt'] = 'Data';
+$wb['invoice_status_txt'] = 'Stato';
+$wb['no_invoices_txt'] = 'Fattura non disponibile.';
+$wb['paid_txt'] = 'Pagato';
+$wb['unpaid_txt'] = 'Non pagato';
+$wb['paynow_txt'] = 'paga adesso';
 $wb['proforma_txt'] = 'Proforma';
-$wb['refunded_txt'] = 'Refunded';
-$wb['not_refunded_txt'] = 'Not refunded';
-$wb['invoice_type_invoice_txt'] = 'Invoice';
+$wb['refunded_txt'] = 'Rimborsato';
+$wb['not_refunded_txt'] = 'Non rimborsato';
+$wb['invoice_type_invoice_txt'] = 'Fattura';
 $wb['invoice_type_proforma_txt'] = 'Proforma';
-$wb['invoice_type_refund_txt'] = 'Refund';
-$wb['invoice_type_reminder_txt'] = 'Reminder';
+$wb['invoice_type_refund_txt'] = 'Rimborso';
+$wb['invoice_type_reminder_txt'] = 'Promemoria';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_limits.lng b/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
index 895f619864720b0f8c3e695f9707be243343c66b..b09fbaabc81c6050765dd5876fb2136f84cb2143 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_limits.lng
@@ -1,15 +1,15 @@
 <?php
-$wb['limits_txt'] = 'Sintesi account';
+$wb['limits_txt'] = 'Sintesi profili';
 $wb['of_txt'] = 'su';
 $wb['limit_maildomain_txt'] = 'Domini e-mail';
 $wb['limit_mailbox_txt'] = 'Caselle e-mail';
 $wb['limit_mailalias_txt'] = 'Alias di e-mail';
 $wb['limit_mailaliasdomain_txt'] = 'Alias di domini';
 $wb['limit_mailforward_txt'] = 'Inoltro e-mail';
-$wb['limit_mailcatchall_txt'] = 'Account catchall e-mail';
+$wb['limit_mailcatchall_txt'] = 'Profilo catchall e-mail';
 $wb['limit_mailrouting_txt'] = 'Instradamento e-mail';
 $wb['limit_mailfilter_txt'] = 'Filtri e-mail';
-$wb['limit_fetchmail_txt'] = 'Account fetchmail';
+$wb['limit_fetchmail_txt'] = 'Profilo fetchmail';
 $wb['limit_spamfilter_wblist_txt'] = 'Filtri spamfilter white / blacklist';
 $wb['limit_spamfilter_user_txt'] = 'Utenti spamfilter';
 $wb['limit_spamfilter_policy_txt'] = 'Policy spamfilter';
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Numero domini';
 $wb['limit_mailquota_txt'] = 'Quota mailbox assegnata';
 $wb['limit_web_quota_txt'] = 'Quota web assegnata';
 $wb['limit_database_quota_txt'] = 'Quota database assegnata';
+$wb['limit_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/it_dashlet_mailquota.lng
index daaaa67f49c948861df6a5a049c2758212d6964e..6b7fc62c1e669363d2212bb1ff7e0be1ed3d77c0 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_mailquota.lng
+++ b/interface/web/dashboard/lib/lang/it_dashlet_mailquota.lng
@@ -4,5 +4,5 @@ $wb['email_txt'] = 'Indirizzo e-mail';
 $wb['name_txt'] = 'Nome';
 $wb['used_txt'] = 'Spazio Usato';
 $wb['quota_txt'] = 'Quota';
-$wb['no_email_accounts_txt'] = 'Nessun account e-mail trovato.';
+$wb['no_email_accounts_txt'] = 'Nessun profilo e-mail trovato.';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_products.lng b/interface/web/dashboard/lib/lang/it_dashlet_products.lng
index a69b61d2fbf06f20ab1cbed5f33d4804256ba40a..9e5895d71177b6b48764c757aae6b127d828abb8 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_products.lng
+++ b/interface/web/dashboard/lib/lang/it_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['products_txt'] = 'I miei prodotti';
+$wb['name_txt'] = 'Nome';
+$wb['price_txt'] = 'Prezzo';
+$wb['next_payment_date_txt'] = 'Prossima fattura';
+$wb['no_products_txt'] = 'Nessun prodotto trovato.';
 $wb['edit_txt'] = 'Edit';
-$wb['cancellation_date_txt'] = 'Cancelled by';
+$wb['cancellation_date_txt'] = 'Cancellato da';
 ?>
diff --git a/interface/web/dashboard/lib/lang/it_dashlet_shop.lng b/interface/web/dashboard/lib/lang/it_dashlet_shop.lng
index 1e0b5361d7baaca8a3501c3b3506d424a0c29581..0befa94c0a592319a37085282f6e6733f362a362 100644
--- a/interface/web/dashboard/lib/lang/it_dashlet_shop.lng
+++ b/interface/web/dashboard/lib/lang/it_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'] = 'Ordine';
+$wb['name_txt'] = 'Nome';
+$wb['price_txt'] = 'Prezzo';
+$wb['setup_fee_txt'] = 'Imposta contributo';
+$wb['no_products_txt'] = 'Nessun prodotto trovato.';
+$wb['order_txt'] = 'Ordine';
 ?>
diff --git a/interface/web/dashboard/lib/lang/ja_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ja_dashlet_limits.lng
index b15261dfc421c88c018bc81c790b14815ad08322..7f87485dfe46dcf18c2b41f75eafc9266e2eedc2 100644
--- a/interface/web/dashboard/lib/lang/ja_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ja_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng b/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng
index 10bb89a3ea51ce0de80c21f8a40056b40f57b984..9f00b2eeeb3a3fbf676e4c2ec41cc854bb4b8332 100644
--- a/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng
@@ -30,5 +30,5 @@ $wb['limit_domain_txt'] = 'Aantal domeinen';
 $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'] = 'Ongelimiteerd';
+$wb['limit_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/pl_dashlet_limits.lng b/interface/web/dashboard/lib/lang/pl_dashlet_limits.lng
index 5513b32551afdce00566c74f02c63f85fce8ea1b..b4cdeb1d7ae1501f56127d822284435f22633965 100644
--- a/interface/web/dashboard/lib/lang/pl_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/pl_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/pt_dashlet_limits.lng b/interface/web/dashboard/lib/lang/pt_dashlet_limits.lng
index b15261dfc421c88c018bc81c790b14815ad08322..7f87485dfe46dcf18c2b41f75eafc9266e2eedc2 100644
--- a/interface/web/dashboard/lib/lang/pt_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/pt_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/ro_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ro_dashlet_limits.lng
index b15261dfc421c88c018bc81c790b14815ad08322..7f87485dfe46dcf18c2b41f75eafc9266e2eedc2 100644
--- a/interface/web/dashboard/lib/lang/ro_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ro_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/ru_dashlet_limits.lng b/interface/web/dashboard/lib/lang/ru_dashlet_limits.lng
index 9e77f43d8d115a4b792ce723d1f5f474d186eb57..c97f090052652905f920be2c2960caf469757dbe 100644
--- a/interface/web/dashboard/lib/lang/ru_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/ru_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Количество доменов';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_limits.lng b/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
index f02f83bffd4133794f554b99eb2c8def0e210205..7cbd24f2fbe41b09d1ab7b4a242f0e2a91e5841f 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/sk_dashlet_limits.lng b/interface/web/dashboard/lib/lang/sk_dashlet_limits.lng
index b15261dfc421c88c018bc81c790b14815ad08322..7f87485dfe46dcf18c2b41f75eafc9266e2eedc2 100644
--- a/interface/web/dashboard/lib/lang/sk_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/sk_dashlet_limits.lng
@@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains';
 $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_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng b/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
index 6a4a6a0d242ce70939e727db129d476e66bd5e96..b48a81377a912ab4d2d4f7736362e6584f3a18ed 100644
--- a/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/tr_dashlet_limits.lng
@@ -30,4 +30,5 @@ $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ı';
+$wb['limit_mail_wblist_txt'] = 'Number of email white / blacklist entries';
 ?>
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index b9e402f4412e94ca36d863c4aed79c8ca1b0b055..6259cceddb12fe8b511eba64533cf4ccb75f0c6e 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -323,6 +323,21 @@ $form["tabs"]['dns_soa'] = array (
 	)
 );
 
+$sys_config = $app->getconf->get_global_config('dns');
+if($sys_config['dns_show_zoneexport'] == 'y') {
+	$form["tabs"]['dns_rendered_zone'] = array (
+		'title'  => "Zone rendering",
+		'width'  => 100,
+		'template'  => "templates/dns_soa_rendered.htm",
+		'fields'  => array (
+			'rendered_zone' => array (
+				'datatype' => 'TEXT',
+				'formtype' => 'TEXTAREA',
+			),
+		)
+	);
+}
+
 // show update acl to admins only.
 if(!$app->auth->is_admin()) unset($form["tabs"]['dns_soa']['fields']['update_acl']);
 
diff --git a/interface/web/dns/lib/lang/ar_dns_soa.lng b/interface/web/dns/lib/lang/ar_dns_soa.lng
index 0d90b7091b8554e3e20237442748a30bc2a35adf..4333c3793aa1c144ce4f9da6a0d823700b6e1fa2 100644
--- a/interface/web/dns/lib/lang/ar_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_soa.lng b/interface/web/dns/lib/lang/bg_dns_soa.lng
index 4cd3c705ac3e185889c2611ce48b86ce8c797545..c1e57edf8b9ffa60b9e6f7ae306a1ebeae2184d7 100644
--- a/interface/web/dns/lib/lang/bg_dns_soa.lng
+++ b/interface/web/dns/lib/lang/bg_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa.lng b/interface/web/dns/lib/lang/br_dns_soa.lng
index 81b2bb24c75482c3d97bdb8868f20e7abd9ebde9..e6c8982de0259df07f2d979f0b62bf6abf9fa241 100644
--- a/interface/web/dns/lib/lang/br_dns_soa.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa.lng
@@ -42,3 +42,5 @@ $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido p
 $wb['soa_cannot_be_changed_txt'] = 'A zona (SOA) não pode ser modificada. Por favor, contate o administrador se deseja modificar esta zona.';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
 $wb['dnssec_algo_txt'] = 'Algoritmo DNSSEC';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
diff --git a/interface/web/dns/lib/lang/ca_dns_soa.lng b/interface/web/dns/lib/lang/ca_dns_soa.lng
index ee2fdb07b64c3a188cca64d12fe20b6129c21f69..2ac84a17df977e720a5b2fe752d30f6a7396ba16 100644
--- a/interface/web/dns/lib/lang/ca_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_soa.lng b/interface/web/dns/lib/lang/cz_dns_soa.lng
index ef6fdf82d82578aa871a058e9f0c421c85c74f47..73c2582117a039a345323bb3b50d63b2b06b9937 100644
--- a/interface/web/dns/lib/lang/cz_dns_soa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_soa.lng
@@ -42,3 +42,5 @@ $wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet pov
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algoritmus';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
diff --git a/interface/web/dns/lib/lang/de_dns_soa.lng b/interface/web/dns/lib/lang/de_dns_soa.lng
index 14897b24e45fd86dbca1e4ddfc95d3317c6aae4b..7338e154338c1a8bd2978c4c3fc5cbbb40a83913 100644
--- a/interface/web/dns/lib/lang/de_dns_soa.lng
+++ b/interface/web/dns/lib/lang/de_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden.
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
 $wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithmus';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_soa.lng b/interface/web/dns/lib/lang/dk_dns_soa.lng
index a4ff50f14fa3f705e59b6ba19472bf8bd5f7ad5d..6759024041b91aa1c83db92fcd9503cb7b029639 100644
--- a/interface/web/dns/lib/lang/dk_dns_soa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_soa.lng b/interface/web/dns/lib/lang/el_dns_soa.lng
index a22c9de41306f88350baf780d72e9deb38f2eedc..4ceed78dc9ebc0e515b048a91fb768c6d92ab0d6 100644
--- a/interface/web/dns/lib/lang/el_dns_soa.lng
+++ b/interface/web/dns/lib/lang/el_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng
index 7f42b9f27a2bce96cf42fdf50ee21781d16d60d2..a5f1adfae5cc688659c98937fcb3c7c6947fa51d 100644
--- a/interface/web/dns/lib/lang/en_dns_soa.lng
+++ b/interface/web/dns/lib/lang/en_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/es_dns_soa.lng b/interface/web/dns/lib/lang/es_dns_soa.lng
index b1484e749a0258b43ed279ca159226a451badb81..b1061373f509e8a120d4d4b5232a7f842f39dcae 100644
--- a/interface/web/dns/lib/lang/es_dns_soa.lng
+++ b/interface/web/dns/lib/lang/es_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['xfer_error_regex'] = 'Notificar también a: Por favor, usa una dirección I
 $wb['xfer_txt'] = 'Permitir transferencia de zonas a<br />estas IP (lista separada por comas)';
 $wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_soa.lng b/interface/web/dns/lib/lang/fi_dns_soa.lng
index d90de950b023047916574a12286dc17570db3798..36f95abab06a827df30a77fc7cd2b60e850defae 100644
--- a/interface/web/dns/lib/lang/fi_dns_soa.lng
+++ b/interface/web/dns/lib/lang/fi_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_soa.lng b/interface/web/dns/lib/lang/fr_dns_soa.lng
index d2449c323e9a95cb966fd7f9497699a7044f51db..dd66dc19865e0b8e60eb97f05e65ca360e2e1be4 100644
--- a/interface/web/dns/lib/lang/fr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_soa.lng b/interface/web/dns/lib/lang/hr_dns_soa.lng
index d738ff1e184cb52628d8aa105c16cc92503a60bb..5d88b4708746e0673fcd66bb4f40cd4e863a7a91 100644
--- a/interface/web/dns/lib/lang/hr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/hr_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_soa.lng b/interface/web/dns/lib/lang/hu_dns_soa.lng
index 38d3272f0448e154954de2ef7d0c8e24864ddc60..fdabdd99c295582fdd02d1400400ab3fbd872dd9 100644
--- a/interface/web/dns/lib/lang/hu_dns_soa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_soa.lng b/interface/web/dns/lib/lang/id_dns_soa.lng
index 2c1842e6f2e92647311df5fb13a6733739c817de..d6cb9d78dae561d91607469c4a31f27138d6888f 100644
--- a/interface/web/dns/lib/lang/id_dns_soa.lng
+++ b/interface/web/dns/lib/lang/id_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_a.lng b/interface/web/dns/lib/lang/it_dns_a.lng
index f45709437ec28c31334a14f652552523cc1b6dc7..b6d94f76a54cd1faf72c412d52d77bbe30ecfc8b 100644
--- a/interface/web/dns/lib/lang/it_dns_a.lng
+++ b/interface/web/dns/lib/lang/it_dns_a.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'IP-Address';
+$wb['type_txt'] = 'Tipo';
+$wb['data_txt'] = 'Indirizzo IP';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records raggiunto per il tuo account.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname  vuoto.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate A, ALIAS or CNAME record';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-$wb['ip_error_wrong'] = 'IP-Address format invalid';
+$wb['limit_dns_record_txt'] = 'Numero massimo di record DNS raggiunto per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere un record DNS a questa zona.';
+$wb['name_error_empty'] = 'The hostname vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato.';
+$wb['data_error_empty'] = 'Indirizzo IP vuoto';
+$wb['data_error_duplicate'] = 'Record A, ALIAS or CNAME Duplicato';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
+$wb['ip_error_wrong'] = 'Formato Indirizzo IP non valido';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_a_list.lng b/interface/web/dns/lib/lang/it_dns_a_list.lng
index 4c9a3de2dd32d5fd982f27df2d33eb258bf2a739..cd3682a217ab1f520a71da34f65c668a89dd84fe 100644
--- a/interface/web/dns/lib/lang/it_dns_a_list.lng
+++ b/interface/web/dns/lib/lang/it_dns_a_list.lng
@@ -2,14 +2,14 @@
 $wb['list_head_txt'] = 'A-Record';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Nome';
-$wb['data_txt'] = 'Data';
-$wb['aux_txt'] = 'Priorita';
+$wb['data_txt'] = 'Dati';
+$wb['aux_txt'] = 'Priorità';
 $wb['ttl_txt'] = 'TTL';
-$wb['type_txt'] = 'Type';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  DNS A-Record';
-$wb['page_txt'] = 'Page';
-$wb['page_of_txt'] = 'of';
+$wb['type_txt'] = 'Tipo';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo DNS A-Record';
+$wb['page_txt'] = 'Pagina';
+$wb['page_of_txt'] = 'di';
 $wb['delete_confirmation'] = 'Vuoi davvero eliminare questo record?';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_aaaa.lng b/interface/web/dns/lib/lang/it_dns_aaaa.lng
index a54f87a5fa5f711c79f28d489def989a2de4e070..8de4a2c5e2fd2d4283629c4ef4e9f5c5193ebe98 100644
--- a/interface/web/dns/lib/lang/it_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/it_dns_aaaa.lng
@@ -6,7 +6,7 @@ $wb['type_txt'] = 'tipo';
 $wb['data_txt'] = 'Indirizzo IPv6';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'Numero massimo records DNS raggiunto per il tuo account.';
+$wb['limit_dns_record_txt'] = 'Numero massimo records DNS raggiunto per il tuo profilo.';
 $wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
 $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
diff --git a/interface/web/dns/lib/lang/it_dns_alias.lng b/interface/web/dns/lib/lang/it_dns_alias.lng
index e2eade0f8a2d93c9ccf844ab013aab6672a5e372..c95d9b01e2058a11c7f021b6b024027ea8ae61db 100644
--- a/interface/web/dns/lib/lang/it_dns_alias.lng
+++ b/interface/web/dns/lib/lang/it_dns_alias.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
 $wb['type_txt'] = 'type';
 $wb['data_txt'] = 'Target Hostname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records raggiunto per il tuo account.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname  vuoto.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Target hostname empty';
-$wb['data_error_regex'] = 'Target hostname format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, ALIAS, CNAME, or DNAME record';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['limit_dns_record_txt'] = 'Massimo numero di record DNS raggiunto per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non sei abilitato ad aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'L\'hostname vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato.';
+$wb['data_error_empty'] = 'Target hostname è vuoto';
+$wb['data_error_regex'] = 'formato Target hostname non valido';
+$wb['data_error_duplicate'] = 'record A, AAAA, ALIAS, CNAME, or DNAME Duplicate';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_caa.lng b/interface/web/dns/lib/lang/it_dns_caa.lng
index 8040cb4d549f3bc060a5b9ace62f711715446b0f..3cd8efd365fb39c8d554000168d60ed8df2759e6 100644
--- a/interface/web/dns/lib/lang/it_dns_caa.lng
+++ b/interface/web/dns/lib/lang/it_dns_caa.lng
@@ -1,19 +1,19 @@
 <?php
 $wb['ca_list_txt'] = 'Certification 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['ca_domain_txt'] = 'Dominio';
+$wb['ca_hostname_txt'] = 'Hostnames aggiuntivi';
+$wb['ca_hostname_note_txt'] = '(liste separate da virgole - vuoto per tutti gli hostname)';
+$wb['ca_options_txt'] = 'Optioni Aggiuntive';
+$wb['ca_options_note_txt'] = 'richieste dalla CA (liste separate da virgole)';
+$wb['ca_wildcard_txt'] = 'Usare * SSL';
+$wb['ca_critical_txt'] = 'Verifica approfondita';
 $wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['select_txt'] = 'Select Certification 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 Certification 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.';
+$wb['active_txt'] = 'Attivo';
+$wb['select_txt'] = 'Seleziona Certification Authority';
+$wb['no_zone_perm'] = 'Non sei abilitato ad aggiungere record a questa zona DNS.';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il massimo numero di record DNS per il tuo profilo.';
+$wb['ca_error_txt'] = 'Nessuna Certification Authority selezionata';
+$wb['caa_exists_error'] = 'CAA Record esiste già';
+$wb['ca_option_error'] = 'Formato scorretto per opzioni aggiuntive; OPTION=VALUE';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_cname.lng b/interface/web/dns/lib/lang/it_dns_cname.lng
index ced97b351ae511ecfa512c77eb593f816d8ec801..0e05f1ea8f114ca694ee873bd5e079ab2ca1f50e 100644
--- a/interface/web/dns/lib/lang/it_dns_cname.lng
+++ b/interface/web/dns/lib/lang/it_dns_cname.lng
@@ -6,12 +6,12 @@ $wb['type_txt'] = 'tipo';
 $wb['data_txt'] = 'Target Nome Host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'Numero massimo di record DNS raggiunto per il tuo account.';
+$wb['limit_dns_record_txt'] = 'Numero massimo di record DNS raggiunto per il tuo profilo.';
 $wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
 $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
 $wb['data_error_empty'] = 'Target nome host vuoto';
 $wb['data_error_regex'] = 'Target nome host formato errato';
-$wb['data_error_duplicate'] = 'Duplicate A, AAAA, ALIAS, CNAME, or DNAME record';
+$wb['data_error_duplicate'] = 'record A, AAAA, ALIAS, CNAME, or DNAME Duplicato';
 $wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_dkim.lng b/interface/web/dns/lib/lang/it_dns_dkim.lng
index 4d45fb4fe95d87134331a593c81c6994bafab57c..dd05a1fa1e976db7db2ad9f676aeae174d9dd3ec 100644
--- a/interface/web/dns/lib/lang/it_dns_dkim.lng
+++ b/interface/web/dns/lib/lang/it_dns_dkim.lng
@@ -1,13 +1,13 @@
 <?php
-$wb['public_key_txt'] = 'Public-Key';
+$wb['public_key_txt'] = 'Chiave pubblica';
 $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['active_txt'] = 'Attivo';
+$wb['record_exists_txt'] = 'Il record DNS esiste già';
+$wb['dkim_disabled_txt'] = 'DKIM disabilitato per questo dominio mail';
+$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your profilo is reached.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record DNZ a questa zona.';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
+$wb['selector_txt'] = 'DKIM-Selettore';
+$wb['data_error_empty'] = 'Manca la chiave pubblica';
+$wb['dkim_selector_empty_txt'] = 'DKIM-Selettore è vuoto';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_dmarc.lng b/interface/web/dns/lib/lang/it_dns_dmarc.lng
index cf78bb8eed902817caf1e80e9e6e77d9d64b9ab3..64e66f4a93cb07b3b83b1f21c8ab33dea4c02fbf 100644
--- a/interface/web/dns/lib/lang/it_dns_dmarc.lng
+++ b/interface/web/dns/lib/lang/it_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['data_txt'] = 'Record DMARC';
+$wb['domain_txt'] = 'Dominio';
+$wb['dmarc_policy_txt'] = 'Politica di ricezione mail';
+$wb['dmarc_policy_note_txt'] = 'Come devono essere gestiti i messaggi che non hanno superato SPF or DKIM (DMARC).';
+$wb['dmarc_policy_none_txt'] = 'nessuno';
+$wb['dmarc_policy_quarantine_txt'] = 'quarantena';
+$wb['dmarc_policy_reject_txt'] = 'rifiuta';
+$wb['dmarc_rua_txt'] = 'Indirizzi di invio dei report di dati aggregati';
+$wb['dmarc_rua_note_txt'] = 'Indirizzi Email cui notificare i report dagli ISP riguardo i messaggi che non hanno superato la verifica DMARC per il dominio (separare gli indirizzi da spazi).';
+$wb['dmarc_ruf_txt'] = 'Indirizzi per i report di dati Forensi';
+$wb['dmarc_ruf_note_txt'] = 'Indirizzi Email cui notificare i report dagli ISP riguardo i messaggi che non hanno superato la verifica DMARC per il dominio (separare gli indirizzi da spazi).';
+$wb['dmarc_fo_txt'] = 'Opzioni di report Forense';
+$wb['dmarc_fo0_txt'] = 'Generare report se tutti i meccanismi di autenticazione non producono un risultato di \'pass\' alla verifica DMARC';
+$wb['dmarc_fo1_txt'] = 'Generare report se qualunque meccanismo fallisce.';
+$wb['dmarc_fod_txt'] = 'Generare report se non supera la verifica di firma DKIM.';
+$wb['dmarc_fos_txt'] = 'Generare report se fallisce SPF.';
 $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_adkim_note_txt'] = '\'esetta\' richiede l\'esatta uguaglianza tra il dominio DKIM e il campo \'da\' della email';
+$wb['dmarc_adkim_r_txt'] = 'rilassata';
+$wb['dmarc_adkim_s_txt'] = 'esatta';
 $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['dmarc_aspf_note_txt'] = '\'esatta\' richiede l\'esatta uguaglianza tra il domini SPF e il campo \'da\' della email';
+$wb['dmarc_aspf_r_txt'] = 'rilassata';
+$wb['dmarc_aspf_s_txt'] = 'esatta';
+$wb['dmarc_rf_txt'] = 'Formato Report';
+$wb['dmarc_rf_afrf_txt'] = 'Formato del reporto di mancata autenticazione';
+$wb['dmarc_rf_iodef_txt'] = 'Formato di scambio della descrizione del problema accaduto';
+$wb['dmarc_pct_txt'] = 'Applica la politica con questa percentuale';
+$wb['dmarc_pct_note_txt'] = '% (100 default). Numero di Messaggi in percentuale dal dominio per il quale vuoi che gli ISP eseguano la verifica.';
+$wb['dmarc_ri_txt'] = 'Intervallo di Report';
+$wb['dmarc_ri_note_txt'] = 'Secondi (default=86400). Tempo in secondi per aggregare i dati del report da generare (86400 rappresenta 1 giorno).';
+$wb['dmarc_sp_txt'] = 'Politica per i sottodomini (Default la stessa dei Domini).';
+$wb['dmarc_sp_same_txt'] = 'Stessa dei domini';
+$wb['dmarc_sp_none_txt'] = 'nessuna';
+$wb['dmarc_sp_quarantine_txt'] = 'quarantena';
+$wb['dmarc_sp_reject_txt'] = 'rifiuta';
 $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['active_txt'] = 'Attivo';
+$wb['dmarc_policy_error_txt'] = 'Solo la politica \'nessuna\' è consentita senza mail firmate DKIM.';
+$wb['dmarc_no_dkim_txt'] = 'Nessun record DKIM attivo.';
+$wb['dmarc_no_spf_txt'] = 'Nessun record SPF attivo.';
+$wb['dmarc_more_spf_txt'] = 'Più di un record SPF attivo';
+$wb['dmarc_invalid_email_txt'] = 'Email non valida';
+$wb['dmarc_empty_txt'] = 'Record DMARC vuoto - specificare almeno un\'opzione';
+$wb['record_exists_txt'] = 'Record DNS esistono già';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il massimo numero di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere un record a questa zona DNS.';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_dname.lng b/interface/web/dns/lib/lang/it_dns_dname.lng
index e9d1a057cc51829d678f4c5ca676d1007859a54e..1e1e548b6bb53c14e7bf6713b98104858f75b833 100644
--- a/interface/web/dns/lib/lang/it_dns_dname.lng
+++ b/interface/web/dns/lib/lang/it_dns_dname.lng
@@ -6,7 +6,7 @@ $wb['type_txt'] = 'tipo';
 $wb['data_txt'] = 'Target Nome Host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'Numero massimo di record DNS raggiunto per il tuo account.';
+$wb['limit_dns_record_txt'] = 'Numero massimo di record DNS raggiunto per il tuo profilo.';
 $wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
 $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
diff --git a/interface/web/dns/lib/lang/it_dns_ds.lng b/interface/web/dns/lib/lang/it_dns_ds.lng
index c3622dc5b5eaa71ee71e573b6bb83da16aba3892..52fd45af0e591dd544c1440caad3b562e43278ea 100644
--- a/interface/web/dns/lib/lang/it_dns_ds.lng
+++ b/interface/web/dns/lib/lang/it_dns_ds.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Data';
+$wb['type_txt'] = 'tipo';
+$wb['data_txt'] = 'Dati';
 $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['active_txt'] = 'Attivo';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il numero massimo di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere un record a questa zona DNS.';
+$wb['name_error_empty'] = 'Il campo hostname è vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato.';
+$wb['data_error_empty'] = 'Testo vuoto';
+$wb['data_error_regex'] = 'Formato testo non corretto';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
+$wb['invalid_type_ds'] = 'Il Record DNS ha un formato non corretto.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_hinfo.lng b/interface/web/dns/lib/lang/it_dns_hinfo.lng
index 905b1e62e25c30ff94f6f011a8c69b7c93baba53..7ffae6a63cb9bf004c86b97d70983a45ddf7b3ce 100644
--- a/interface/web/dns/lib/lang/it_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/it_dns_hinfo.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Host Information';
+$wb['type_txt'] = 'Tipo';
+$wb['data_txt'] = 'Informazioni Host';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records raggiunto per il tuo account.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname  vuoto.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Host information empty';
-$wb['data_error_regex'] = 'Host Information format invalid';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto Il numero massimo di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'hostname è vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato.';
+$wb['data_error_empty'] = 'Informazioni Host è vuoto';
+$wb['data_error_regex'] = 'Informazioni Host ha un formato non valido';
+$wb['ttl_range_error'] = 'Min. TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_import.lng b/interface/web/dns/lib/lang/it_dns_import.lng
index 1d734ab4b04f92286fdef0c96e3a62e0efe49c39..3f49ddc427a079b49ea65950f0c34a4926d5479b 100644
--- a/interface/web/dns/lib/lang/it_dns_import.lng
+++ b/interface/web/dns/lib/lang/it_dns_import.lng
@@ -5,21 +5,21 @@ $wb['btn_save_txt'] = 'Importa file di zona';
 $wb['btn_cancel_txt'] = 'Annulla';
 $wb['domain_txt'] = 'Dominio';
 $wb['zone_file_successfully_imported_txt'] = 'File di zona importato con successo!';
-$wb['error_no_valid_zone_file_txt'] = 'Fil di zona non corretto!';
+$wb['error_no_valid_zone_file_txt'] = 'File di zona non corretto!';
 $wb['zonefile_to_import_txt'] = 'File di Zona';
 $wb['domain_field_desc_txt'] = 'Può essere tralasciato se il dominio è nel nome del file di zona o nel contenuto del file.';
 $wb['title'] = 'Importa file di zona';
 $wb['no_file_uploaded_error'] = 'Nessun file di zona selezionato';
 $wb['zone_file_import_txt'] = 'Importa file di zona';
-$wb['error_no_server_id'] = 'No server provided.';
-$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
-$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
-$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
-$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
-$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
-$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
-$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
-$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
-$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
-$wb['zone_file_import_fail'] = 'The zone file did not import.';
+$wb['error_no_server_id'] = 'Nessun server indicato.';
+$wb['error_not_allowed_server_id'] = 'Il server selezionato non è consentito per il tuo profilo.';
+$wb['zone_already_exists'] = 'Questa zona esiste già devi prima cancellarla o rinominarla.';
+$wb['zone_not_allowed'] = 'Questa zona non è consentita per il tuo profilo.';
+$wb['zone_file_missing_soa'] = 'Il file di zoma deve contenere un record SOA.';
+$wb['zone_file_multiple_soa'] = 'Il file di zona non può avere più di un record SOA.';
+$wb['zone_file_soa_parser'] = 'Il record SOA di questa zona non può essere processato.  Verifica che SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM siano ognuno in una linea diversa da altri dati.';
+$wb['ignore_record_not_class_in'] = 'Ignoro record DNS non di tipo IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoro record DNS record di tipo sconosciuto.';
+$wb['ignore_record_invalid_owner'] = 'Ignoro record DNS non essendo possibile di validare il nome del titolare.';
+$wb['zone_file_import_fail'] = 'Il file di zona non è stato importato.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_loc.lng b/interface/web/dns/lib/lang/it_dns_loc.lng
index dc9ad9a00634513f03aec6da53682d2842bae7b6..3aed26d4ff9f451b2482cad5efc0f109a7a4ac21 100644
--- a/interface/web/dns/lib/lang/it_dns_loc.lng
+++ b/interface/web/dns/lib/lang/it_dns_loc.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Data';
+$wb['type_txt'] = 'tipo';
+$wb['data_txt'] = 'Dati';
 $wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Attivo';
 $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['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'Il campo hostname è vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato.';
+$wb['data_error_empty'] = 'Testo vuoto';
+$wb['data_error_regex'] = 'Formato testo non valido';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_mx.lng b/interface/web/dns/lib/lang/it_dns_mx.lng
index d01ec250e15c1b78a2f4ea145f3b112f29c16787..221670a87d3dfa10501f9070fbbe6087dbcb5570 100644
--- a/interface/web/dns/lib/lang/it_dns_mx.lng
+++ b/interface/web/dns/lib/lang/it_dns_mx.lng
@@ -7,12 +7,12 @@ $wb['data_txt'] = 'Mailserver hostname';
 $wb['aux_txt'] = 'Priorita';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records raggiunto per il tuo account.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname  vuoto.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Mailserver hostname empty';
-$wb['data_error_regex'] = 'Mailserver hostname format invalid';
-$wb['duplicate_mx_record_txt'] = 'Duplicate MX record.';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il massimo numero di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'Campo hostname è vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato.';
+$wb['data_error_empty'] = 'hostname del Mailserver vuoto';
+$wb['data_error_regex'] = 'L\'hostname del Mailserver ha un formato non valido';
+$wb['duplicate_mx_record_txt'] = 'record MX Duplicato.';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_naptr.lng b/interface/web/dns/lib/lang/it_dns_naptr.lng
index b39373c13de1d5b288b85d4ebeef8696a09d3af6..124897d5967a3b413c75fbd28c1a0bd6294a661b 100644
--- a/interface/web/dns/lib/lang/it_dns_naptr.lng
+++ b/interface/web/dns/lib/lang/it_dns_naptr.lng
@@ -1,21 +1,21 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
-$wb['order_txt'] = 'Order';
+$wb['order_txt'] = 'Ordine';
 $wb['pref_txt'] = 'Pref';
-$wb['flags_txt'] = 'Flags';
-$wb['service_txt'] = 'Service';
+$wb['flags_txt'] = 'Bandierine';
+$wb['service_txt'] = 'Servizio';
 $wb['regexp_txt'] = 'RegExp';
-$wb['replacement_txt'] = 'Replacement';
+$wb['replacement_txt'] = 'Rimpiazzo';
 $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'] = 'NAPTR record is empty.';
-$wb['naptr_error_regex'] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-$wb['record_parse_error'] = 'Could not parse the record found in database.';
+$wb['active_txt'] = 'Attivo';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il numero massimo di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non sei abilitato ad aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'il campo hostnome è vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha formato errato.';
+$wb['data_error_empty'] = 'Il record NAPTR è vuoto.';
+$wb['naptr_error_regex'] = 'record NAPTR non valido.  Il record NAPTR deve includere Ordine, Pref e o Regex oppure Rimpiazzo.';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
+$wb['record_parse_error'] = 'Non ho posso gestire il record trovato nel database.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_ns.lng b/interface/web/dns/lib/lang/it_dns_ns.lng
index 4ee8be59c81a2007e78d2467fa59e29c7a53de29..03f22816959e9e1908a9834fece4b19588a8b51c 100644
--- a/interface/web/dns/lib/lang/it_dns_ns.lng
+++ b/interface/web/dns/lib/lang/it_dns_ns.lng
@@ -6,11 +6,11 @@ $wb['type_txt'] = 'type';
 $wb['data_txt'] = 'Hostname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'Numero massimo record DNS raggiunto per il tuo account.';
+$wb['limit_dns_record_txt'] = 'Numero massimo record DNS raggiunto per il tuo profilo.';
 $wb['no_zone_perm'] = 'Non hai i permessi per aggiungere record a questa zona DNS.';
 $wb['name_error_empty'] = 'Zona vuota.';
 $wb['name_error_regex'] = 'La zona ha un formato errato.';
 $wb['data_error_empty'] = 'Nameserver vuoto';
 $wb['data_error_regex'] = 'Formato nameserver non valido';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_ptr.lng b/interface/web/dns/lib/lang/it_dns_ptr.lng
index 0da6da4366032a69dab54da46cf416511b93890c..ea301501165be7e89b40d4b403584e8852096d2e 100644
--- a/interface/web/dns/lib/lang/it_dns_ptr.lng
+++ b/interface/web/dns/lib/lang/it_dns_ptr.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zonae';
 $wb['name_txt'] = 'Nome';
 $wb['type_txt'] = 'tipo';
-$wb['data_txt'] = 'Canonical Hostname';
+$wb['data_txt'] = 'Hostname Canonico';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records raggiunto per il tuo account.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The name  vuoto.';
-$wb['name_error_regex'] = 'The name has the wrong format.';
-$wb['data_error_empty'] = 'Canonical hostname empty';
-$wb['data_error_regex'] = 'Canonical hostname format invalid';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['limit_dns_record_txt'] = 'il massimo numero of DNS records raggiunto per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non sei abilitato ad aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'Il nome è vuoto.';
+$wb['name_error_regex'] = 'Il nome non è corretto.';
+$wb['data_error_empty'] = 'hostname Canonico è vuoto';
+$wb['data_error_regex'] = 'hostname Canonico non valido';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_rp.lng b/interface/web/dns/lib/lang/it_dns_rp.lng
index 691177bfe5783f3a74ff4823295fd6fe90f50964..fdeb758d54dd1a2fb90956790edc981dad6132b5 100644
--- a/interface/web/dns/lib/lang/it_dns_rp.lng
+++ b/interface/web/dns/lib/lang/it_dns_rp.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
 $wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Responsible Person';
+$wb['data_txt'] = 'Responsabile';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records raggiunto per il tuo account.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname  vuoto.';
-$wb['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['data_error_empty'] = 'Responsible person field empty';
-$wb['data_error_regex'] = 'Responsible person field format invalid';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il numero massimo di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'L\'hostname è vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato.';
+$wb['data_error_empty'] = 'Campo Responsabile vuoto';
+$wb['data_error_regex'] = 'Campo Responsabile con formato errato';
+$wb['ttl_range_error'] = 'Min. TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_slave.lng b/interface/web/dns/lib/lang/it_dns_slave.lng
index beae2824e47a1e280ae4a1dbe23cfb20607d547f..dd6ef101d9a2cd0bca7cdea6f6aec2e38c0eb3df 100644
--- a/interface/web/dns/lib/lang/it_dns_slave.lng
+++ b/interface/web/dns/lib/lang/it_dns_slave.lng
@@ -1,17 +1,17 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['origin_txt'] = 'DNS Zone';
+$wb['origin_txt'] = 'Zona DNS';
 $wb['ns_txt'] = 'NS';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_slave_zone_txt'] = 'The max. number of Secondary DNS zones raggiunto per il tuo account.';
+$wb['limit_dns_slave_zone_txt'] = 'Hai raggiunto il numero massimo di zone DNS secondarie per il tuo profilo.';
 $wb['client_txt'] = 'Cliente';
-$wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list)';
-$wb['server_id_error_empty'] = 'No server selected';
-$wb['origin_error_empty'] = 'Zone vuoto.';
-$wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
-$wb['ns_error_regex'] = 'NS has a invalid format.';
-$wb['eg_domain_tld'] = 'e.g. domain.tld.';
-$wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
-$wb['secondary_zone_txt'] = 'Secondary DNS Zone';
+$wb['xfer_txt'] = 'Consenti il trasferimento di zona a <br />questi IP (lista indirizzi separati da virgola)';
+$wb['server_id_error_empty'] = 'Nessun server selezionato';
+$wb['origin_error_empty'] = 'Zona vuoto.';
+$wb['origin_error_unique'] = 'Esiste già un record per questa zona.';
+$wb['origin_error_regex'] = 'Zona ha un formato non valido.';
+$wb['ns_error_regex'] = 'NS ha un formato non valido.';
+$wb['eg_domain_tld'] = 'esempio: domain.tld.';
+$wb['ipv4_form_txt'] = 'Separare più indirizzi IP con virgola';
+$wb['secondary_zone_txt'] = 'Zona DNS Secondaria';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng
index 726f14ffd3644fd628f8ead8529cbdd1919930b8..83658334025b2481f8c97769c89be09f0b20e682 100644
--- a/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng
+++ b/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Secondary DNS-Zones';
+$wb['list_head_txt'] = 'DNS-Zona Secondaria';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
 $wb['origin_txt'] = 'Zone';
 $wb['ns_txt'] = 'NS';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Secondary DNS-Zone';
-$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb['add_new_record_txt'] = 'Aggiungi una nuova DNS-Zona secondaria';
+$wb['eg_domain_tld'] = 'esempio: domain.tld.';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_slave_list.lng b/interface/web/dns/lib/lang/it_dns_slave_list.lng
index 3ab1a1de9d48170eebcb01f86333d5faedc0ed52..2edbc37e2e0ce824596033ca5c005491775dfe20 100644
--- a/interface/web/dns/lib/lang/it_dns_slave_list.lng
+++ b/interface/web/dns/lib/lang/it_dns_slave_list.lng
@@ -5,5 +5,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
 $wb['add_new_record_txt'] = 'Aggiungi una nuova zona DNS Secondaria';
-$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb['eg_domain_tld'] = 'esempio: domain.tld.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_soa.lng b/interface/web/dns/lib/lang/it_dns_soa.lng
index 714c6c70566c3af03ee5395ccc5790a8b86273c9..41c900e3988f7fed3755cb6273f0547fe7188faf 100644
--- a/interface/web/dns/lib/lang/it_dns_soa.lng
+++ b/interface/web/dns/lib/lang/it_dns_soa.lng
@@ -4,16 +4,16 @@ $wb['origin_txt'] = 'Zona (SOA)';
 $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
 $wb['serial_txt'] = 'Seriale';
-$wb['refresh_txt'] = 'Refresh';
-$wb['retry_txt'] = 'Retry';
-$wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
+$wb['refresh_txt'] = 'Aggiornamento';
+$wb['retry_txt'] = 'Ritenta';
+$wb['expire_txt'] = 'Scade';
+$wb['minimum_txt'] = 'Minimo (cache ttl negativa)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Consenti trasferimento zone a <br />questi IP (elenco separato da virgola)';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_zone_txt'] = 'Numero massimo zone DNS raggiunto per il tuo account.';
+$wb['limit_dns_zone_txt'] = 'Numero massimo zone DNS raggiunto per il tuo profilo.';
 $wb['client_txt'] = 'Cliente';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record DNZ a questa zona.';
 $wb['server_id_error_empty'] = 'Nessun server selezionato!';
 $wb['origin_error_empty'] = 'Zona vuoto.';
 $wb['origin_error_unique'] = 'Esiste già un record per questa zona.';
@@ -21,25 +21,27 @@ $wb['origin_error_regex'] = 'La zona ha un formato errato.';
 $wb['ns_error_regex'] = 'NS ha un formato errato.';
 $wb['mbox_error_empty'] = 'Email  vuoto.';
 $wb['mbox_error_regex'] = 'Email formato errato.';
-$wb['also_notify_txt'] = 'Also Notify';
-$wb['update_acl_txt'] = 'Aggiorna   ACL';
+$wb['also_notify_txt'] = 'Notifica anche';
+$wb['update_acl_txt'] = 'Aggiorna ACL';
 $wb['also_notify_error_regex'] = 'Per favore utilizza un indirizzo IP.';
 $wb['seconds_txt'] = 'Secondi';
-$wb['eg_domain_tld'] = 'e.g. domain.tld';
-$wb['eg_ns1_domain_tld'] = 'e.g. ns1.domain.tld';
-$wb['eg_webmaster_domain_tld'] = 'e.g. webmaster@domain.tld';
-$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'Il dominio non può essere modificato. Per cortesia contatta l';
-$wb['refresh_range_error'] = 'Min. Refresh time di 60 secondi.';
-$wb['retry_range_error'] = 'Min. Retry time di 60 secondi.';
-$wb['expire_range_error'] = 'Min. Expire time di 60 secondi.';
-$wb['minimum_range_error'] = 'Min. Minimum time di 60 secondi.';
-$wb['ttl_range_error'] = 'Min. TTL time di 60 secondi.';
-$wb['xfer_error_regex'] = 'Also notify: Per cortesia utilizzare un indirizzo IP.';
+$wb['eg_domain_tld'] = 'esempio: domain.tld';
+$wb['eg_ns1_domain_tld'] = 'esempio: ns1.domain.tld';
+$wb['eg_webmaster_domain_tld'] = 'esempio: webmaster@domain.tld';
+$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'Il dominio non può essere modificato. Per cortesia contatta l\'amministratore se vuoi cambiare il nome di dominio.';
+$wb['refresh_range_error'] = 'Minimo intevallo di aggiornamento di 60 secondi.';
+$wb['retry_range_error'] = 'Minimo intervallo di riprova di 60 secondi.';
+$wb['expire_range_error'] = 'Minimo tempo di scadenza di 60 secondi.';
+$wb['minimum_range_error'] = 'Minimo tempo di 60 secondi.';
+$wb['ttl_range_error'] = 'Min. TTL  di 60 secondi.';
+$wb['xfer_error_regex'] = 'Notifica anche: Per cortesia utilizzare un indirizzo IP.';
 $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'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.';
-$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
-$wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['dnssec_wanted_txt'] = 'Firma la zona (DNSSEC)';
+$wb['dnssec_wanted_info'] = 'Quando viene disabilitata la DNSSEC le chiavi non vengono cancellate se erano già state generate ma la zona sarà distribuita in formato non firmato. Se si usa PowerDNS le chiavi verranno cancellate!';
+$wb['error_not_allowed_server_id'] = 'Il server selezionato non è abilitato per il tuo profilo.';
+$wb['soa_cannot_be_changed_txt'] = 'La zona SOA non può essere modificata. Contatta l\'Amministratore se hai necessità di fare la modifica.';
+$wb['configuration_error_txt'] = 'ERRORE DI CONFIGURATIONE';
+$wb['dnssec_algo_txt'] = 'Algoritmo DNSSEC';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
index a7cce01001635072dd68f5d074fd4b22d1f1381d..22ecde574e06efe80d97a639b7ac8a234d938122 100644
--- a/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
+++ b/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
@@ -1,12 +1,12 @@
 <?php
-$wb['list_head_txt'] = 'DNS-Zones';
+$wb['list_head_txt'] = 'Zone DNS';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
-$wb['origin_txt'] = 'Zone';
+$wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
-$wb['add_new_record_wizard_txt'] = 'Aggiungi un nuovo  DNS Zone with Wizard';
+$wb['add_new_record_wizard_txt'] = 'Aggiungi una nuova Zona DNS con la procedura guidata';
 $wb['add_new_record_txt'] = 'Aggiungi un nuovo  DNS Zone manually';
-$wb['import_zone_file_txt'] = 'Import Zone File';
+$wb['import_zone_file_txt'] = 'Importa file di Zona';
 $wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_soa_list.lng b/interface/web/dns/lib/lang/it_dns_soa_list.lng
index 0e5ea645697fbf5ec9f996cc98884a82e6d1cc01..713e0149f6879789bcd83bf6044eb6551dca9393 100644
--- a/interface/web/dns/lib/lang/it_dns_soa_list.lng
+++ b/interface/web/dns/lib/lang/it_dns_soa_list.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['list_head_txt'] = 'DNS Zones';
+$wb['list_head_txt'] = 'Zona DNS';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
-$wb['origin_txt'] = 'Zone';
+$wb['origin_txt'] = 'Zona';
 $wb['ns_txt'] = 'NS';
 $wb['mbox_txt'] = 'Email';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  DNS Zone (SOA)';
-$wb['add_new_record_wizard_txt'] = 'Aggiungi un nuova nuova Zona DNS con il configuratore automatico';
-$wb['import_zone_file_txt'] = 'Import Zone File';
+$wb['add_new_record_txt'] = 'Aggiungi una nuova Zona DNS (SOA)';
+$wb['add_new_record_wizard_txt'] = 'Aggiungi un nuova nuova Zona DNS con la procedura guidata';
+$wb['import_zone_file_txt'] = 'Importa file di Zona';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_spf.lng b/interface/web/dns/lib/lang/it_dns_spf.lng
index 0cbf77862f6619ad477913cefb5c4b5e248ddae6..3c707f0013aa007632cf69547a179280fbd077d7 100644
--- a/interface/web/dns/lib/lang/it_dns_spf.lng
+++ b/interface/web/dns/lib/lang/it_dns_spf.lng
@@ -1,30 +1,30 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
 $wb['name_txt'] = 'Hostname';
-$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['spf_mechanism_txt'] = 'Meccanismo SPF';
+$wb['spf_mechanism_pass_txt'] = 'Superato - consente mail dai mittenti';
+$wb['spf_mechanism_fail_txt'] = 'Fallito - rifiuta mail dai mittenti';
+$wb['spf_mechanism_softfail_txt'] = 'Intermedio - consente mail da altri mittenti ma contrassegna la mail';
+$wb['spf_mechanism_neutral_txt'] = 'Neutrale - nessuna azione';
+$wb['spf_mx_txt'] = 'Consenti ai server elencati come MX di inviare email per questo dominio';
+$wb['spf_a_txt'] = 'Consenti all\'indirizzo IP del dominio di inviare email per questo dominio';
+$wb['spf_ip_txt'] = 'Indirizzi IP aggiuntivi in formato CIDR che consegnano o rilanciano mail per questo dominio';
+$wb['spf_ip_note_txt'] = '(Sepearare gli indirizzi IP con spazi)';
+$wb['spf_invalid_ip_txt'] = 'Indirizzo IP non corretto';
+$wb['spf_hostname_txt'] = 'Qualunque nome server che può consegnare posta o rilanciare posta per questo dominio.';
+$wb['spf_hostname_note_txt'] = '(Sepearare i nomi con spazi)';
+$wb['spf_invalid_hostname_txt'] = 'nome host non valido';
+$wb['spf_domain_txt'] = 'Qualunque dominio che può consegnare o rilanciare posta per questo dominio';
+$wb['spf_domain_note_txt'] = '(Sepearare i domini con spazi)';
+$wb['spf_invalid_domain_txt'] = 'Nome dominio non valido';
 $wb['ttl_txt'] = 'TTL';
-$wb['active_txt'] = 'Active';
-$wb['record_exists_txt'] = 'DNS-Record already exists';
-$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
-$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
-$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['name_error_regex'] = 'The hostname has the wrong format.';
-$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
+$wb['active_txt'] = 'Attivo';
+$wb['record_exists_txt'] = 'DNS-Record esite già';
+$wb['spf_record_exists_txt'] = 'SPF-Record esiste già per il nome host "{hostname}". Vuoi <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">modificare il record esistente</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Sono presenti più record SPF per il nome host "{hostname}". Questo causerà il rifiuto delle mail da parte dei destinatari. Cancella o unisci i doppioni esistenti e prova di nuovo.';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il massimo numero di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondsi';
+$wb['name_error_regex'] = 'Il nome host ha un formato errato.';
+$wb['btn_edit_as_txt_record_txt'] = 'Modifica come record TXT';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_srv.lng b/interface/web/dns/lib/lang/it_dns_srv.lng
index 6d77d66e7f9e00341e40b65c2fd5f1278af28be8..33790bbad12386689a3c2e9f26c8c21596266e11 100644
--- a/interface/web/dns/lib/lang/it_dns_srv.lng
+++ b/interface/web/dns/lib/lang/it_dns_srv.lng
@@ -3,18 +3,18 @@ $wb['server_id_txt'] = 'Server';
 $wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Nome Host';
 $wb['type_txt'] = 'tipo';
-$wb['target_txt'] = 'Target';
-$wb['weight_txt'] = 'Weight';
-$wb['port_txt'] = 'Port';
+$wb['target_txt'] = 'Obiettivo';
+$wb['weight_txt'] = 'Peso';
+$wb['port_txt'] = 'Porta';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'Limite massimo record DNS raggiunto per il tuo account.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'Nome Host  vuoto.';
+$wb['limit_dns_record_txt'] = 'Limite massimo record DNS raggiunto per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere un record a questa zona DNS.';
+$wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Nome Host formato errato.';
-$wb['data_error_empty'] = 'Server record empty';
-$wb['data_error_regex'] = 'Server record format invalid';
-$wb['srv_error_regex'] = 'Invalid server record format. The server record must contain 3 text strings separated by spaces.';
+$wb['data_error_empty'] = 'Server record vuoto';
+$wb['data_error_regex'] = 'Server record formato non valido';
+$wb['srv_error_regex'] = 'Formato Record del server non valido. Il record del server deve contenre 3 stringhe di testo separate da spazio.';
 $wb['aux_txt'] = 'Priorita';
-$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_sshfp.lng b/interface/web/dns/lib/lang/it_dns_sshfp.lng
index dc9ad9a00634513f03aec6da53682d2842bae7b6..e592105311f7c1e92cf061c5647d38648a088e94 100644
--- a/interface/web/dns/lib/lang/it_dns_sshfp.lng
+++ b/interface/web/dns/lib/lang/it_dns_sshfp.lng
@@ -1,16 +1,16 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Data';
+$wb['type_txt'] = 'tipo';
+$wb['data_txt'] = 'Dati';
 $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['active_txt'] = 'Attiva';
+$wb['limit_dns_record_txt'] = 'Numero massimo record DNS raggiunto per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai i permessi per aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'L\'hostname è vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato.';
+$wb['data_error_empty'] = 'Testo vuoto';
+$wb['data_error_regex'] = 'Formato testo non valido';
+$wb['ttl_range_error'] = 'Minimo TTL 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_template.lng b/interface/web/dns/lib/lang/it_dns_template.lng
index ee07983b288f7c321f2db10efeb68428e294715d..6abf3801dc28da21f16cc411ff67baeaa99405f7 100644
--- a/interface/web/dns/lib/lang/it_dns_template.lng
+++ b/interface/web/dns/lib/lang/it_dns_template.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['name_txt'] = 'Nome';
-$wb['fields_txt'] = 'Fields';
-$wb['template_txt'] = 'Template';
-$wb['visible_txt'] = 'Visible';
-$wb['placeholder_txt'] = 'Placeholder';
+$wb['fields_txt'] = 'Campi';
+$wb['template_txt'] = 'Modello';
+$wb['visible_txt'] = 'Visibile';
+$wb['placeholder_txt'] = 'Segnaposto';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_template_list.lng b/interface/web/dns/lib/lang/it_dns_template_list.lng
index 0d316c562946e0263310ac35f5fba92051e1fd2d..f68205327a75df8a778ead692913fe1cfbdf9cdc 100644
--- a/interface/web/dns/lib/lang/it_dns_template_list.lng
+++ b/interface/web/dns/lib/lang/it_dns_template_list.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['list_head_txt'] = 'DNS Wizard Modello';
+$wb['list_head_txt'] = 'Procedura guidata Modello DNS';
 $wb['visible_txt'] = 'Visibile';
 $wb['name_txt'] = 'Nome';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  record';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo record';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_tlsa.lng b/interface/web/dns/lib/lang/it_dns_tlsa.lng
index 3b87e2ad5987236e2159ce12b7494c89d15a6250..762235dc394ed8aac20bb9a77cad894982eba2b3 100644
--- a/interface/web/dns/lib/lang/it_dns_tlsa.lng
+++ b/interface/web/dns/lib/lang/it_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['zone_txt'] = 'Zona';
+$wb['name_txt'] = 'Descrizione-Servizio';
+$wb['type_txt'] = 'Tipo';
+$wb['data_txt'] = 'Dati TLSA';
 $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['active_txt'] = 'Attivo';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il massimo numero di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'Il campo hostname è vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato errato. Corretto: _&lt;port&gt;._(tcp|udp).&lt;hostname&gt;';
+$wb['data_error_empty'] = 'Dati TLSA vuoto';
+$wb['data_error_regex'] = 'Formato dati TLSA scorretto. Corretto: n n n HASH';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_txt.lng b/interface/web/dns/lib/lang/it_dns_txt.lng
index de49712afdfd550ee9bab76c785ff29453c8c6c2..5b184ed262488698c342d5756b367d4e6e5af129 100644
--- a/interface/web/dns/lib/lang/it_dns_txt.lng
+++ b/interface/web/dns/lib/lang/it_dns_txt.lng
@@ -1,19 +1,19 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['zone_txt'] = 'Zone';
+$wb['zone_txt'] = 'Zona';
 $wb['name_txt'] = 'Hostname';
-$wb['type_txt'] = 'type';
-$wb['data_txt'] = 'Text';
+$wb['type_txt'] = 'tipo';
+$wb['data_txt'] = 'Testo';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_dns_record_txt'] = 'The max. number of DNS records raggiunto per il tuo account.';
-$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
-$wb['name_error_empty'] = 'The hostname  vuoto.';
-$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_dkim'] = 'DKIM is not allowed. Use the DKIM button';
+$wb['limit_dns_record_txt'] = 'Hai raggiunto il massimo numero di record DNS per il tuo profilo.';
+$wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DNS.';
+$wb['name_error_empty'] = 'Campo hostname vuoto.';
+$wb['name_error_regex'] = 'L\'hostname ha un formato non valido.';
+$wb['data_error_empty'] = 'Testo vuoto';
+$wb['data_error_regex'] = 'Formato testo non valido';
+$wb['ttl_range_error'] = 'Minimo TTL è 60 secondi.';
+$wb['invalid_type_dkim'] = 'DKIM non consentito. Usare il tasto DKIM';
 $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_spf'] = 'SPF non è consentito. Usare il tasto SPF.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_wizard.lng b/interface/web/dns/lib/lang/it_dns_wizard.lng
index 4174b0c5c47727008687ac11da564285c091c2b0..4ea81375ec05725805c9e64239160a0eab0e8a92 100644
--- a/interface/web/dns/lib/lang/it_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/it_dns_wizard.lng
@@ -12,10 +12,10 @@ $wb['ip_txt'] = 'Indirizzo IP';
 $wb['error_origin_empty'] = 'Origine vuoto.';
 $wb['error_ns_empty'] = 'NS vuoto.';
 $wb['error_mbox_empty'] = 'Casella Mail vuoto.';
-$wb['error_refresh_empty'] = 'Refresh vuoto.';
-$wb['error_retry_empty'] = 'Retry vuoto.';
-$wb['error_expire_empty'] = 'Expire vuoto.';
-$wb['error_minimum_empty'] = 'Minimum vuoto.';
+$wb['error_refresh_empty'] = 'Aggiorna vuoto.';
+$wb['error_retry_empty'] = 'Riprova vuoto.';
+$wb['error_expire_empty'] = 'Scade vuoto.';
+$wb['error_minimum_empty'] = 'Minimo vuoto.';
 $wb['error_ttl_empty'] = 'TTL vuoto.';
 $wb['error_domain_empty'] = 'Dominio vuoto';
 $wb['error_ip_empty'] = 'IP vuoto.';
@@ -25,21 +25,21 @@ $wb['error_email_empty'] = 'EMail vuoto.';
 $wb['error_domain_regex'] = 'Dominio contiene caratteri non validi.';
 $wb['error_ns1_regex'] = 'NS1 contiene caratteri non validi.';
 $wb['error_ns2_regex'] = 'NS2 contiene caratteri non validi.';
-$wb['error_email_regex'] = 'Email does not contain a valid email address.';
-$wb['dns_zone_txt'] = 'DNS Zone';
+$wb['error_email_regex'] = 'Email non contiene un indirizzo mail valido.';
+$wb['dns_zone_txt'] = 'Zona DNS';
 $wb['globalsearch_resultslimit_of_txt'] = 'di';
 $wb['globalsearch_resultslimit_results_txt'] = 'risultati';
 $wb['globalsearch_noresults_text_txt'] = 'Nessun risultato.';
 $wb['globalsearch_noresults_limit_txt'] = '0 risultati';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Cerca';
 $wb['globalsearch_suggestions_text_txt'] = 'Suggerimenti';
-$wb['list_head_txt'] = 'Wizard Zone DNS';
+$wb['list_head_txt'] = 'Procedura guidata Zona DNS';
 $wb['list_desc_txt'] = 'Crea una zona DNS con un configuratore automatico';
-$wb['dkim_txt'] = 'DKIM enabled';
-$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['dnssec_txt'] = 'Sign zone (DNSSEC)';
-$wb['limit_dns_zone_txt'] = 'The max. number of DNS zones for your account is reached.';
+$wb['dkim_txt'] = 'DKIM Abilitato';
+$wb['ipv6_txt'] = 'Indirizzo IPv6';
+$wb['error_ipv6_empty'] = 'IPv6 vuoto.';
+$wb['error_no_server_id'] = 'Nessun server indicato.';
+$wb['error_not_allowed_server_id'] = 'Il server selezionato non è abilitato per il tuo profilo.';
+$wb['dnssec_txt'] = 'Firma zona (DNSSEC)';
+$wb['limit_dns_zone_txt'] = 'Hai raggiunto il massimo numero di zone DNS per il tuo profilo.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_soa.lng b/interface/web/dns/lib/lang/ja_dns_soa.lng
index a2e5e20c7158043476967e5cbda49544a7abf3fa..70d9414d26630f1e1ec4bd5ad1ca55c99b549fce 100644
--- a/interface/web/dns/lib/lang/ja_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_soa.lng b/interface/web/dns/lib/lang/nl_dns_soa.lng
index 2b2b734e3ba778d49b6ebf661741e34d89565596..fda742cf148adb12a11d72467e04746023e14ed4 100644
--- a/interface/web/dns/lib/lang/nl_dns_soa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format ter referentie en export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, er is nog geen data beschikbaar.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_soa.lng b/interface/web/dns/lib/lang/pl_dns_soa.lng
index 7502a592372707764358fde63333b8ef0938ee9d..d83e0aeeb0e18a392e71238fa021436365166b0e 100644
--- a/interface/web/dns/lib/lang/pl_dns_soa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_soa.lng b/interface/web/dns/lib/lang/pt_dns_soa.lng
index 7d4c692855ed4a70dcc01e7d1026ce7e48bd2fa5..e1e8490b7d04fde56e5dbd625410c6bb753bfdcd 100644
--- a/interface/web/dns/lib/lang/pt_dns_soa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_soa.lng b/interface/web/dns/lib/lang/ro_dns_soa.lng
index f1125b698158d055447ecff1240a4c6cac481d0c..87382ffa6fb46947058476641213235176e4ded6 100644
--- a/interface/web/dns/lib/lang/ro_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_soa.lng b/interface/web/dns/lib/lang/ru_dns_soa.lng
index f6043010d4e021d4d677e6fca002456e924cb3f3..36a4c89cdf10d503eb5b1ca05b8d3b2626167dfe 100644
--- a/interface/web/dns/lib/lang/ru_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'Выбранный сервер не до
 $wb['soa_cannot_be_changed_txt'] = 'Зона (SOA) не может быть изменена. Пожалуйста, обратитесь к администратору, чтобы изменить зону.';
 $wb['configuration_error_txt'] = 'ОШИБКА КОНФИГУРАЦИИ';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_soa.lng b/interface/web/dns/lib/lang/se_dns_soa.lng
index a27181699d12d5055b734d6478207d47f4655571..0e9732b43e2c25c4745f44b5a81aa75eedc736b7 100644
--- a/interface/web/dns/lib/lang/se_dns_soa.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_soa.lng b/interface/web/dns/lib/lang/sk_dns_soa.lng
index a03b15d47773e0897b30e3b430a77e5a4a4defa5..115df5672527784714a3b563744077d0d9ff42ac 100644
--- a/interface/web/dns/lib/lang/sk_dns_soa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_soa.lng
@@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi
 $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa.lng b/interface/web/dns/lib/lang/tr_dns_soa.lng
index e5d55678cbd42f76353d2923d1c5d252c9c6d81a..fc1bc60a82aa95bbd9451f246b3ccf7e9c918529 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa.lng
@@ -42,4 +42,6 @@ $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';
 $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
+$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.';
+$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.';
 ?>
diff --git a/interface/web/dns/templates/dns_soa_rendered.htm b/interface/web/dns/templates/dns_soa_rendered.htm
new file mode 100644
index 0000000000000000000000000000000000000000..31f1d925a5627a305f8a1f4319e490fb499db1a8
--- /dev/null
+++ b/interface/web/dns/templates/dns_soa_rendered.htm
@@ -0,0 +1,12 @@
+
+{tmpl_if name='rendered_zone'}
+    {tmpl_var name='rendered_zone_txt'}
+    <pre>{tmpl_var name='rendered_zone'}</pre>
+{tmpl_else}
+    {tmpl_var name='rendered_zone_unavailable_txt'}
+{/tmpl_if}
+
+<div class="pnl_formsarea">
+    <input type="hidden" name="id" value="{tmpl_var name='id'}">
+</div>
+
diff --git a/interface/web/help/lib/lang/it_faq_manage_questions_list.lng b/interface/web/help/lib/lang/it_faq_manage_questions_list.lng
index 857a9d20a4859c07a7c1c68cbe76116c5cf1831e..d5a66daac3c17766d8fd53d41a5910cf3f8c3a0f 100644
--- a/interface/web/help/lib/lang/it_faq_manage_questions_list.lng
+++ b/interface/web/help/lib/lang/it_faq_manage_questions_list.lng
@@ -5,5 +5,5 @@ $wb['faq_delete_txt'] = 'Elimina';
 $wb['faq_edit_txt'] = 'Modifica';
 $wb['faq_sections_txt'] = 'Sezione';
 $wb['faq_faq_questions_txt'] = 'Domande frequenti';
-$wb['faq_new_question_txt'] = 'Aggiungi nuova domanda & rispondi';
+$wb['faq_new_question_txt'] = 'Aggiungi nuova domanda & risposta';
 ?>
diff --git a/interface/web/help/lib/lang/it_support_message.lng b/interface/web/help/lib/lang/it_support_message.lng
index 60999758fb361a8db894993166acd900301640ac..1525512490f1519fc4149a489b0eca20c52dabed 100644
--- a/interface/web/help/lib/lang/it_support_message.lng
+++ b/interface/web/help/lib/lang/it_support_message.lng
@@ -3,7 +3,7 @@ $wb['recipient_id_txt'] = 'ID del Destinatario';
 $wb['sender_id_txt'] = 'ID del Mittente';
 $wb['subject_txt'] = 'Oggetto';
 $wb['message_txt'] = 'Messaggio';
-$wb['tstamp_txt'] = 'Timestamp';
+$wb['tstamp_txt'] = 'Data';
 $wb['reply_txt'] = 'Rispondi';
 $wb['date_txt'] = 'Data';
 $wb['support_request_subject_txt'] = 'Richiesta supporto';
diff --git a/interface/web/help/lib/lang/it_support_message_list.lng b/interface/web/help/lib/lang/it_support_message_list.lng
index 1416474627e3c26880d85510c7da9f4fd77f84b5..814618e819cc0fadc5bf8b3234802871dc7b1884 100644
--- a/interface/web/help/lib/lang/it_support_message_list.lng
+++ b/interface/web/help/lib/lang/it_support_message_list.lng
@@ -3,5 +3,5 @@ $wb['list_head_txt'] = 'Messaggi di supporto';
 $wb['sender_id_txt'] = 'Mittente';
 $wb['subject_txt'] = 'Oggetto';
 $wb['add_new_record_txt'] = 'Crea nuovo messaggio di supporto';
-$wb['date_txt'] = 'Date';
+$wb['date_txt'] = 'Data';
 ?>
diff --git a/interface/web/help/templates/faq_manage_questions_list.htm b/interface/web/help/templates/faq_manage_questions_list.htm
index 9b54e7d4ff712dc1033b75b075c6faa974898bda..f810ad6ce33ba5149d3a24725ea598de5a4de7c7 100644
--- a/interface/web/help/templates/faq_manage_questions_list.htm
+++ b/interface/web/help/templates/faq_manage_questions_list.htm
@@ -12,7 +12,7 @@
 <table class="table">
                 <thead class="dark form-group-sm">
                     <tr>
-                        <th class="tiny-col">{tmpl_var name="faq_question_txt"}</th>
+                        <th>{tmpl_var name="faq_question_txt"}</th>
                         <th>{tmpl_var name="faq_section_name_txt"}</th>
                         <th class="text-right">{tmpl_var name="faq_delete_txt"}</th>
                         <th class="text-right">{tmpl_var name="faq_edit_txt"}</th>
@@ -45,4 +45,4 @@
             </table>
 </div>
         
-    
\ No newline at end of file
+    
diff --git a/interface/web/login/index.php b/interface/web/login/index.php
index 70c3dbe055c3d56299a09682ab757492190a3ced..d59d24efc8273dc6ab5781f117a5f640a667daa8 100644
--- a/interface/web/login/index.php
+++ b/interface/web/login/index.php
@@ -28,297 +28,428 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
-require_once '../../lib/config.inc.php';
-require_once '../../lib/app.inc.php';
+/**
+ * @param app $app
+ * @param $error
+ * @param $conf
+ * @param $module
+ * @return void
+ */
+function process_login_request(app $app, &$error, $conf, $module)
+{
+	//** Check variables
+	if (!preg_match("/^[\w\.\-\_\@]{1,128}$/", $app->functions->idn_encode($_POST['username']))) $error = $app->lng('user_regex_error');
+	if (!preg_match("/^.{1,256}$/i", $_POST['password'])) $error = $app->lng('pw_error_length');
 
-// Check if we have an active users ession and no login_as.
-if($_SESSION['s']['user']['active'] == 1 && @$_POST['login_as'] != 1) {
-	header('Location: /index.php');
-	die();
-}
+	//** importing variables
+	$ip = md5($_SERVER['REMOTE_ADDR']);
+	$username = $_POST['username'];
+	$password = $_POST['password'];
+	$loginAs = false;
+	$time = time();
 
-$app->uses('tpl');
-$app->tpl->newTemplate('main_login.tpl.htm');
-$app->tpl->setInclude('content_tpl', 'templates/index.htm');
+	if ($username == '' || $password == '' || $error != '') {
+		//* Username or password empty
+		if ($error == '') $error = $app->lng('error_user_password_empty');
+		$app->plugin->raiseEvent('login_empty', $username);
+		return;
+	}
 
-$error = '';
+	$loginAs = is_login_as($app, $username, $password);
 
-$app->load_language_file('web/login/lib/lang/'.$conf["language"].'.lng');
+	//* Check if there are already wrong logins
+	$sql = "SELECT * FROM `attempts_login` WHERE `ip`= ? AND  `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1";
+	$alreadyfailed = $app->db->queryOneRecord($sql, $ip);
 
-// Maintenance mode
-$maintenance_mode = false;
-$maintenance_mode_error = '';
-$server_config_array = $app->getconf->get_global_config('misc');
-if($app->is_under_maintenance()) {
-	$maintenance_mode = true;
-	$maintenance_mode_error = $app->lng('error_maintenance_mode');
-}
+	//* too many failed logins
+	if ($alreadyfailed['times'] > 5) {
+		$error = $app->lng('error_user_too_many_logins');
+		return;
+	}
 
-//* Login Form was sent
-if(count($_POST) > 0) {
+	$user = validate_and_fetch_user($app, $username, $password, $loginAs, $conf);
 
-	//** Check variables
-	if(!preg_match("/^[\w\.\-\_\@]{1,128}$/", $app->functions->idn_encode($_POST['username']))) $error = $app->lng('user_regex_error');
-	if(!preg_match("/^.{1,256}$/i", $_POST['password'])) $error = $app->lng('pw_error_length');
+	if ($user) {
+		if ($user['active'] != 1) {
+			$error = $app->lng('error_user_blocked');
+			return;
+		}
 
-	//** importing variables
-	$ip = md5($_SERVER['REMOTE_ADDR']);
-	$username = $_POST['username'];
-	$password = $_POST['password'];
-	$loginAs  = false;
-	$time = time();
+		// Maintenance mode - allow logins only when maintenance mode is off or if the user is admin
+		if ($app->is_under_maintenance() && $user['typ'] != 'admin') return;
 
-	if($username != '' && $password != '' && $error == '') {
-		/*
-		 *  Check, if there is a "login as" instead of a "normal" login
-		 */
-		if (isset($_SESSION['s']['user']) && $_SESSION['s']['user']['active'] == 1){
-			/*
-			 * only the admin or reseller can "login as" so if the user is NOT an admin or reseller, we
-			 * open the startpage (after killing the old session), so the user
-			 * is logout and has to start again!
-			 */
-			if ($_SESSION['s']['user']['typ'] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-				/*
-				 * The actual user is NOT a admin or reseller, but maybe he
-				 * has logged in as "normal" user before...
-				 */
+		if ($user['typ'] == 'admin' && !is_admin_ip_whitelisted($_SERVER['REMOTE_ADDR'], $conf)) {
+			// TODO: if it's not a security risk (information disclosure) to
+			// let the user know they are not whitelisted, then change this
+			// error message to a more appropriate one
+			$error = $app->lng('error_user_password_incorrect');
+			return;
+		}
 
-				if (isset($_SESSION['s_old'])&& ($_SESSION['s_old']['user']['typ'] == 'admin' || $app->auth->has_clients($_SESSION['s_old']['user']['userid']))){
-					/* The "old" user is admin or reseller, so everything is ok
-					 * if he is reseller, we need to check if he logs in to one of his clients
-					 */
-					if($_SESSION['s_old']['user']['typ'] != 'admin') {
-
-						/* this is the one currently logged in (normal user) */
-						$old_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-						$old_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $old_client_group_id);
-
-						/* this is the reseller, that shall be re-logged in */
-						$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
-						$tmp = $app->db->queryOneRecord($sql, (string)$username, (string)$password);
-						$client_group_id = $app->functions->intval($tmp['default_group']);
-						$tmp_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
-
-						if(!$tmp_client || $old_client["parent_client_id"] != $tmp_client["client_id"] || $tmp["default_group"] != $_SESSION["s_old"]["user"]["default_group"] ) {
-							die("You don't have the right to 'login as' this user!");
-						}
-						unset($old_client);
-						unset($tmp_client);
-						unset($tmp);
-					}
-				}
-				else {
-					die("You don't have the right to 'login as'!");
-				}
-			} elseif($_SESSION['s']['user']['typ'] != 'admin' && (!isset($_SESSION['s_old']['user']) || $_SESSION['s_old']['user']['typ'] != 'admin')) {
-				/* a reseller wants to 'login as', we need to check if he is allowed to */
-				$res_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
-				$res_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $res_client_group_id);
-
-				/* this is the user the reseller wants to 'login as' */
-				$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
-				$tmp = $app->db->queryOneRecord($sql, (string)$username, (string)$password);
-				$tmp_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $tmp["default_group"]);
-
-				if(!$tmp || $tmp_client["parent_client_id"] != $res_client["client_id"]) {
-					die("You don't have the right to login as this user!");
-				}
-				unset($res_client);
-				unset($tmp);
-				unset($tmp_client);
+		// User login right, so attempts can be deleted
+		$sql = "DELETE FROM `attempts_login` WHERE `ip`=?";
+		$app->db->query($sql, $ip);
+		$user = $app->db->toLower($user);
+
+		if ($loginAs) $oldSession = $_SESSION['s'];
+
+		// Session regenerate causes login problems on some systems, see Issue #3827
+		// Set session_regenerate_id to no in security settings, it you encounter
+		// this problem.
+		$app->uses('getconf');
+		$security_config = $app->getconf->get_security_config('permissions');
+		if (isset($security_config['session_regenerate_id']) && $security_config['session_regenerate_id'] == 'yes') {
+			if (!$loginAs) session_regenerate_id(true);
+		}
+		$_SESSION = array();
+		if ($loginAs) $_SESSION['s_old'] = $oldSession; // keep the way back!
+		$_SESSION['s']['user'] = $user;
+		$_SESSION['s']['user']['theme'] = isset($user['app_theme']) ? $user['app_theme'] : 'default';
+		$_SESSION['s']['language'] = $app->functions->check_language($user['language']);
+		$_SESSION["s"]['theme'] = $_SESSION['s']['user']['theme'];
+		if ($loginAs) $_SESSION['s']['plugin_cache'] = $_SESSION['s_old']['plugin_cache'];
+
+		if (is_file(ISPC_WEB_PATH.'/'.$_SESSION['s']['user']['startmodule'].'/lib/module.conf.php')) {
+			include_once $app->functions->check_include_path(ISPC_WEB_PATH.'/'.$_SESSION['s']['user']['startmodule'].'/lib/module.conf.php');
+			$menu_dir = ISPC_WEB_PATH.'/'.$_SESSION['s']['user']['startmodule'].'/lib/menu.d';
+			include_menu_dir_files($menu_dir);
+			$_SESSION['s']['module'] = $module;
+		}
+		// check if the user theme is valid
+		if ($_SESSION['s']['user']['theme'] != 'default') {
+			$tmp_path = ISPC_THEMES_PATH."/".$_SESSION['s']['user']['theme'];
+			if (!@is_dir($tmp_path) || !@file_exists($tmp_path."/ispconfig_version") || trim(file_get_contents($tmp_path."/ispconfig_version")) != ISPC_APP_VERSION) {
+				// fall back to default theme if this one is not compatible with current ispc version
+				$_SESSION['s']['user']['theme'] = 'default';
+				$_SESSION['s']['theme'] = 'default';
+				$_SESSION['show_error_msg'] = $app->lng('theme_not_compatible');
 			}
-			$loginAs = true;
+		}
+
+		$app->plugin->raiseEvent('login', $username);
+
+		//* Save successful login message to var
+		$authlog = 'Successful login for user \''.$username.'\' from '.$_SERVER['REMOTE_ADDR'].' at '.date('Y-m-d H:i:s').' with session ID '.session_id();
+		$authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a');
+		fwrite($authlog_handle, $authlog."\n");
+		fclose($authlog_handle);
 
+		/*
+		* We need LOGIN_REDIRECT instead of HEADER_REDIRECT to load the
+		* new theme, if the logged-in user has another
+		*/
+
+		if ($loginAs) {
+			echo 'LOGIN_REDIRECT:'.$_SESSION['s']['module']['startpage'];
+			exit;
 		} else {
-			/* normal login */
-			$loginAs = false;
+			header('Location: ../index.php');
+			die();
 		}
+	} else {
+		if (!$alreadyfailed['times']) {
+			//* user login the first time wrong
+			$sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())";
+			$app->db->query($sql, $ip);
+		} elseif ($alreadyfailed['times'] >= 1) {
+			//* update times wrong
+			$sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? AND `login_time` < NOW() ORDER BY `login_time` DESC LIMIT 1";
+			$app->db->query($sql, $ip);
+		}
+		//* Incorrect login - Username and password incorrect
+		$error = $app->lng('error_user_password_incorrect');
+		if ($app->db->errorMessage != '') $error .= '<br />'.$app->db->errorMessage != '';
+
+		$app->plugin->raiseEvent('login_failed', $username);
+		//* Save failed login message to var
+		$authlog = 'Failed login for user \''.$username.'\' from '.$_SERVER['REMOTE_ADDR'].' at '.date('Y-m-d H:i:s');
+		$authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a');
+		fwrite($authlog_handle, $authlog."\n");
+		fclose($authlog_handle);
+	}
+}
+
+/**
+ * Checks if the given admin's IP address is whitelisted.
+ * @param string $ip
+ * @return bool
+ */
+function is_admin_ip_whitelisted($ip, $conf)
+{
+	// if there is no config value, we assume that webmaster doesn't use this feature
+	if (!isset($conf['admin_ip_whitelist_file'])) return true;
+
+	// if the file doesn't exist, we assume that webmaster doesn't use this feature
+	if (!file_exists($conf['admin_ip_whitelist_file'])) return true;
+
+	$file_lines = file($conf['admin_ip_whitelist_file']);
+
+	$matches = array_filter($file_lines, function($v) use ($ip) {
+		$line = trim($v);
+
+		// exclude empty lines and comments
+		if ($line === '' || $line[0] === '#') return false;
+
+		return ipv6_matches_cidr($ip, $line) || ipv4_matches_cidr($ip, $line);
+	});
+
+	return count($matches) > 0;
+}
+
+// based on https://www.php.net/manual/en/ref.network.php (comments)
+/**
+ * Checks if the given IPv4 address matches the given CIDR.
+ * @param string $ip The IPv4 address.
+ * @param string $cidr The CIDR in the IPv4 format.
+ * @return bool
+ */
+function ipv4_matches_cidr ($ip, $cidr)
+{
+	if (strpos($ip, '.') === false) return false;
+
+	list ($net, $mask) = explode ('/', $cidr);
+	if (!$mask) $mask = 32;
+
+	$ip_net = ip2long ($net);
+	$ip_ip = ip2long ($ip);
+	$ip_mask = ~((1 << (32 - $mask)) - 1);
+
+	return (($ip_ip & $ip_mask) == ($ip_net & $ip_mask));
+}
+
+// based on https://stackoverflow.com/a/7951507/2428861
+/**
+ * Checks if the given IPv6 address matches the given CIDR.
+ * @param string $ip The IPv6 address.
+ * @param string $cidr The CIDR in the IPv6 format.
+ * @return bool
+ */
+function ipv6_matches_cidr($ip, $cidr)
+{
+	if (strpos($ip, ':') === false) return false;
 
-		//* Check if there are already wrong logins
-		$sql = "SELECT * FROM `attempts_login` WHERE `ip`= ? AND  `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1";
-		$alreadyfailed = $app->db->queryOneRecord($sql, $ip);
+	list ($net, $mask) = explode('/', $cidr);
+	if (!$mask) $mask = 128;
 
-		//* too many failedlogins
-		if($alreadyfailed['times'] > 5) {
-			$error = $app->lng('error_user_too_many_logins');
+	$ip_net = in_addr_to_bitstring(inet_pton($net));
+	$ip_ip = in_addr_to_bitstring(inet_pton($ip));
+
+	return substr($ip_ip, 0, $mask) === substr($ip_net, 0, $mask);
+}
+
+/**
+ * Converts the output of {@see inet_pton()} to string of bits.
+ * @param string $in_addr The in_addr representation of the IP address.
+ * @return string String of bits representing given in_addr representation of the IP address.
+ */
+function in_addr_to_bitstring($in_addr)
+{
+	$result = '';
+	foreach (str_split($in_addr) as $c) {
+		$result .= str_pad(decbin(ord($c)), 8, '0', STR_PAD_LEFT);
+	}
+	return $result;
+}
+
+/**
+ * Validates user credentials and fetches the user if validation succeeded
+ * @param app $app
+ * @param $username
+ * @param $password
+ * @param $loginAs
+ * @param $conf
+ * @return array | bool
+ */
+function validate_and_fetch_user(app $app, $username, $password, $loginAs, $conf)
+{
+	if ($loginAs) {
+		$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
+		return $app->db->queryOneRecord($sql, (string)$username, (string)$password);
+	}
+
+	if (stristr($username, '@')) {
+		//* mailuser login
+		$sql = "SELECT * FROM mail_user WHERE login = ? or email = ?";
+		$mailuser = $app->db->queryOneRecord($sql, (string)$username, $app->functions->idn_encode($username));
+
+		return $mailuser
+			? build_fake_user($app, $username, $password, $mailuser, $conf)
+			: false;
+	}
+
+	//* normal cp user login
+	$sql = "SELECT * FROM sys_user WHERE USERNAME = ?";
+	$user = $app->db->queryOneRecord($sql, (string)$username);
+	if (!$user) return false;
+
+	$saved_password = stripslashes($user['passwort']);
+	if (substr($saved_password, 0, 1) == '$') {
+		//* The password is encrypted with crypt
+		return crypt(stripslashes($password), $saved_password) == $saved_password
+			? $user
+			: false;
+	}
+
+	//* The password is md5 encrypted
+	if (md5($password) != $saved_password) return false;
+
+	// update password with secure algo
+	$sql = 'UPDATE `sys_user` SET `passwort` = ? WHERE `username` = ?';
+	$app->db->query($sql, $app->auth->crypt_password($password), (string)$username);
+
+	return $user;
+}
+
+/**
+ * @param app $app
+ * @param $username
+ * @param $password
+ * @param array $mailuser
+ * @param array $user
+ * @param $conf
+ * @return array
+ */
+function build_fake_user(app $app, $username, $password, array $mailuser, $conf)
+{
+	$saved_password = stripslashes($mailuser['password']);
+	//* Check if mailuser password is correct
+	if (crypt(stripslashes($password), $saved_password) == $saved_password) {
+		//* Get the sys_user language of the client of the mailuser
+		$sys_user_lang = $app->db->queryOneRecord("SELECT language FROM sys_user WHERE default_group = ?", $mailuser['sys_groupid']);
+
+		//* we build a fake user here which has access to the mailuser module only and userid 0
+		$user = array();
+		$user['userid'] = 0;
+		$user['active'] = 1;
+		$user['startmodule'] = 'mailuser';
+		$user['modules'] = 'mailuser';
+		$user['typ'] = 'user';
+		$user['email'] = $mailuser['email'];
+		$user['username'] = $username;
+		if (is_array($sys_user_lang) && $sys_user_lang['language'] != '') {
+			$user['language'] = $sys_user_lang['language'];
 		} else {
+			$user['language'] = $conf['language'];
+		}
+		$user['theme'] = $conf['theme'];
+		$user['app_theme'] = $conf['theme'];
+		$user['mailuser_id'] = $mailuser['mailuser_id'];
+		$user['default_group'] = $mailuser['sys_groupid'];
+	}
 
-			if ($loginAs){
-				$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
-				$user = $app->db->queryOneRecord($sql, (string)$username, (string)$password);
-			} else {
+	return $user;
+}
 
-				if(stristr($username, '@')) {
-					//* mailuser login
-					$sql = "SELECT * FROM mail_user WHERE login = ? or email = ?";
-					$mailuser = $app->db->queryOneRecord($sql, (string)$username, $app->functions->idn_encode($username));
-					$user = false;
-					if($mailuser) {
-						$saved_password = stripslashes($mailuser['password']);
-						//* Check if mailuser password is correct
-						if(crypt(stripslashes($password), $saved_password) == $saved_password) {
-							//* Get the sys_user language of the client of the mailuser
-							$sys_user_lang = $app->db->queryOneRecord("SELECT language FROM sys_user WHERE default_group = ?", $mailuser['sys_groupid'] );
-
-							//* we build a fake user here which has access to the mailuser module only and userid 0
-							$user = array();
-							$user['userid'] = 0;
-							$user['active'] = 1;
-							$user['startmodule'] = 'mailuser';
-							$user['modules'] = 'mailuser';
-							$user['typ'] = 'user';
-							$user['email'] = $mailuser['email'];
-							$user['username'] = $username;
-							if(is_array($sys_user_lang) && $sys_user_lang['language'] != '') {
-								$user['language'] = $sys_user_lang['language'];
-							} else {
-								$user['language'] = $conf['language'];
-							}
-							$user['theme'] = $conf['theme'];
-							$user['app_theme'] = $conf['theme'];
-							$user['mailuser_id'] = $mailuser['mailuser_id'];
-							$user['default_group'] = $mailuser['sys_groupid'];
-						}
-					}
-				} else {
-					//* normal cp user login
-					$sql = "SELECT * FROM sys_user WHERE USERNAME = ?";
-					$user = $app->db->queryOneRecord($sql, (string)$username);
-					if($user) {
-						$saved_password = stripslashes($user['passwort']);
-						if(substr($saved_password, 0, 1) == '$') {
-							//* The password is encrypted with crypt
-							if(crypt(stripslashes($password), $saved_password) != $saved_password) {
-								$user = false;
-							}
-						} else {
-							//* The password is md5 encrypted
-							if(md5($password) != $saved_password) {
-								$user = false;
-							} else {
-								// update password with secure algo
-								$sql = 'UPDATE `sys_user` SET `passwort` = ? WHERE `username` = ?';
-								$app->db->query($sql, $app->auth->crypt_password($password), (string)$username);
-							}
-						}
-					} else {
-						$user = false;
-					}
-				}
-			}
+/**
+ * Checks if there is a "login as" instead of a "normal" login
+ * @param app $app
+ * @param $username
+ * @param $password
+ * @return bool
+ */
+function is_login_as(app $app, $username, $password)
+{
+	if (isset($_SESSION['s']['user']) && $_SESSION['s']['user']['active'] == 1) {
+		/*
+		 * only the admin or reseller can "login as" so if the user is NOT an admin or reseller, we
+		 * open the startpage (after killing the old session), so the user
+		 * is logout and has to start again!
+		 */
+		if ($_SESSION['s']['user']['typ'] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+			/*
+			 * The actual user is NOT a admin or reseller, but maybe he
+			 * has logged in as "normal" user before...
+			 */
+
+			if (isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin' || $app->auth->has_clients($_SESSION['s_old']['user']['userid']))) {
+				/* The "old" user is admin or reseller, so everything is ok
+				 * if he is reseller, we need to check if he logs in to one of his clients
+				 */
+				if ($_SESSION['s_old']['user']['typ'] != 'admin') {
+
+					/* this is the one currently logged in (normal user) */
+					$old_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+					$old_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $old_client_group_id);
+
+					/* this is the reseller, that shall be re-logged in */
+					$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
+					$tmp = $app->db->queryOneRecord($sql, (string)$username, (string)$password);
+					$client_group_id = $app->functions->intval($tmp['default_group']);
+					$tmp_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 
-			if($user) {
-				if($user['active'] == 1) {
-					// Maintenance mode - allow logins only when maintenance mode is off or if the user is admin
-					if(!$app->is_under_maintenance() || $user['typ'] == 'admin'){
-
-						// User login right, so attempts can be deleted
-						$sql = "DELETE FROM `attempts_login` WHERE `ip`=?";
-						$app->db->query($sql, $ip);
-						$user = $app->db->toLower($user);
-
-						if ($loginAs) $oldSession = $_SESSION['s'];
-
-						// Session regenerate causes login problems on some systems, see Issue #3827
-						// Set session_regenerate_id to no in security settings, it you encounter
-						// this problem.
-						$app->uses('getconf');
-						$security_config = $app->getconf->get_security_config('permissions');
-						if(isset($security_config['session_regenerate_id']) && $security_config['session_regenerate_id'] == 'yes') {
-							if (!$loginAs) session_regenerate_id(true);
-						}
-						$_SESSION = array();
-						if ($loginAs) $_SESSION['s_old'] = $oldSession; // keep the way back!
-						$_SESSION['s']['user'] = $user;
-						$_SESSION['s']['user']['theme'] = isset($user['app_theme']) ? $user['app_theme'] : 'default';
-						$_SESSION['s']['language'] = $app->functions->check_language($user['language']);
-						$_SESSION["s"]['theme'] = $_SESSION['s']['user']['theme'];
-						if ($loginAs) $_SESSION['s']['plugin_cache'] = $_SESSION['s_old']['plugin_cache'];
-
-						if(is_file(ISPC_WEB_PATH . '/' . $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php')) {
-							include_once $app->functions->check_include_path(ISPC_WEB_PATH . '/' . $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php');
-							$menu_dir = ISPC_WEB_PATH.'/' . $_SESSION['s']['user']['startmodule'] . '/lib/menu.d';
-								if (is_dir($menu_dir)) {
-								if ($dh = opendir($menu_dir)) {
-									//** Go through all files in the menu dir
-									while (($file = readdir($dh)) !== false) {
-										if ($file != '.' && $file != '..' && substr($file, -9, 9) == '.menu.php' && $file != 'dns_resync.menu.php') {
-											include_once $menu_dir . '/' . $file;
-										}
-									}
-								}
-							}
-							$_SESSION['s']['module'] = $module;
-						}
-							// check if the user theme is valid
-						if($_SESSION['s']['user']['theme'] != 'default') {
-							$tmp_path = ISPC_THEMES_PATH."/".$_SESSION['s']['user']['theme'];
-							if(!@is_dir($tmp_path) || !@file_exists($tmp_path."/ispconfig_version") || trim(file_get_contents($tmp_path."/ispconfig_version")) != ISPC_APP_VERSION) {
-								// fall back to default theme if this one is not compatible with current ispc version
-								$_SESSION['s']['user']['theme'] = 'default';
-								$_SESSION['s']['theme'] = 'default';
-								$_SESSION['show_error_msg'] = $app->lng('theme_not_compatible');
-							}
-						}
-
-						$app->plugin->raiseEvent('login', $username);
-
-						//* Save successfull login message to var
-						$authlog = 'Successful login for user \''. $username .'\' from '. $_SERVER['REMOTE_ADDR'] .' at '. date('Y-m-d H:i:s') . ' with session ID ' .session_id();
-						$authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a');
-						fwrite($authlog_handle, $authlog ."\n");
-						fclose($authlog_handle);
-
-						/*
-						* We need LOGIN_REDIRECT instead of HEADER_REDIRECT to load the
-						* new theme, if the logged-in user has another
-						*/
-
-						if ($loginAs){
-							echo 'LOGIN_REDIRECT:'.$_SESSION['s']['module']['startpage'];
-							exit;
-						} else {
-							header('Location: ../index.php');
-							die();
-						}
+					if (!$tmp_client || $old_client["parent_client_id"] != $tmp_client["client_id"] || $tmp["default_group"] != $_SESSION["s_old"]["user"]["default_group"]) {
+						die("You don't have the right to 'login as' this user!");
 					}
-				} else {
-					$error = $app->lng('error_user_blocked');
+					unset($old_client);
+					unset($tmp_client);
+					unset($tmp);
 				}
 			} else {
-				if(!$alreadyfailed['times'] )
-				{
-					//* user login the first time wrong
-					$sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())";
-					$app->db->query($sql, $ip);
-				} elseif($alreadyfailed['times'] >= 1) {
-					//* update times wrong
-					$sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? AND `login_time` < NOW() ORDER BY `login_time` DESC LIMIT 1";
-					$app->db->query($sql, $ip);
-				}
-				//* Incorrect login - Username and password incorrect
-				$error = $app->lng('error_user_password_incorrect');
-				if($app->db->errorMessage != '') $error .= '<br />'.$app->db->errorMessage != '';
-
-				$app->plugin->raiseEvent('login_failed', $username);
-				//* Save failed login message to var
-				$authlog = 'Failed login for user \''. $username .'\' from '. $_SERVER['REMOTE_ADDR'] .' at '. date('Y-m-d H:i:s');
-				$authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a');
-				fwrite($authlog_handle, $authlog ."\n");
-				fclose($authlog_handle);
+				die("You don't have the right to 'login as'!");
+			}
+		} elseif ($_SESSION['s']['user']['typ'] != 'admin' && (!isset($_SESSION['s_old']['user']) || $_SESSION['s_old']['user']['typ'] != 'admin')) {
+			/* a reseller wants to 'login as', we need to check if he is allowed to */
+			$res_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+			$res_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $res_client_group_id);
+
+			/* this is the user the reseller wants to 'login as' */
+			$sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?";
+			$tmp = $app->db->queryOneRecord($sql, (string)$username, (string)$password);
+			$tmp_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $tmp["default_group"]);
+
+			if (!$tmp || $tmp_client["parent_client_id"] != $res_client["client_id"]) {
+				die("You don't have the right to login as this user!");
 			}
+			unset($res_client);
+			unset($tmp);
+			unset($tmp_client);
 		}
-		} else {
-		//* Username or password empty
-		if($error == '') $error = $app->lng('error_user_password_empty');
-			$app->plugin->raiseEvent('login_empty', $username);
+		$loginAs = true;
+
+	} else {
+		/* normal login */
+		$loginAs = false;
 	}
+
+	return $loginAs;
+}
+
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+
+include_once '../common.php';
+
+// Check if we have an active users session and no login_as.
+if ($_SESSION['s']['user']['active'] == 1 && @$_POST['login_as'] != 1) {
+	header('Location: /index.php');
+	die();
+}
+
+$app->uses('tpl');
+$app->tpl->newTemplate('main_login.tpl.htm');
+$app->tpl->setInclude('content_tpl', 'templates/index.htm');
+
+$error = '';
+
+$app->load_language_file('web/login/lib/lang/'.$conf["language"].'.lng');
+
+// Maintenance mode
+$maintenance_mode = false;
+$maintenance_mode_error = '';
+$server_config_array = $app->getconf->get_global_config('misc');
+if ($app->is_under_maintenance()) {
+	$maintenance_mode = true;
+	$maintenance_mode_error = $app->lng('error_maintenance_mode');
+}
+
+//* Login Form was sent
+if (count($_POST) > 0) {
+	process_login_request($app, $error, $conf, $module);
 }
 
-// Maintenance mode - show message when people try to log in and also when people are forcedly logged off
-if($maintenance_mode_error != '') $error = '<strong>'.$maintenance_mode_error.'</strong><br><br>'.$error;
-if($error != ''){
+// Maintenance mode - show message when people try to log in and also when people are forcibly logged off
+if ($maintenance_mode_error != '') $error = '<strong>'.$maintenance_mode_error.'</strong><br><br>'.$error;
+if ($error != '') {
 	$error = '<div class="box box_error">'.$error.'</div>';
 }
 
@@ -326,7 +457,7 @@ $app->load('getconf');
 $sys_config = $app->getconf->get_global_config('misc');
 
 $security_config = $app->getconf->get_security_config('permissions');
-if($security_config['password_reset_allowed'] == 'yes') {
+if ($security_config['password_reset_allowed'] == 'yes') {
 	$app->tpl->setVar('pw_lost_show', 1);
 } else {
 	$app->tpl->setVar('pw_lost_show', 0);
@@ -348,7 +479,7 @@ $app->tpl->setVar('current_theme', isset($_SESSION['s']['theme']) ? $_SESSION['s
 
 // Logo
 $logo = $app->db->queryOneRecord("SELECT * FROM sys_ini WHERE sysini_id = 1");
-if($logo['custom_logo'] != ''){
+if ($logo['custom_logo'] != '') {
 	$base64_logo_txt = $logo['custom_logo'];
 } else {
 	$base64_logo_txt = $logo['default_logo'];
@@ -361,12 +492,12 @@ $app->tpl->setVar('base64_logo_txt', $base64_logo_txt);
 
 // Title
 if (!empty($sys_config['company_name'])) {
-	$app->tpl->setVar('company_name', $sys_config['company_name']. ' :: ');
+	$app->tpl->setVar('company_name', $sys_config['company_name'].' :: ');
 }
 
 // Custom Login
 if ($sys_config['custom_login_text'] != '') {
-	 $custom_login = @($sys_config['custom_login_link'] != '')?'<a href="'.$sys_config['custom_login_link'].'" target="_blank">'.$sys_config['custom_login_text'].'</a>':$sys_config['custom_login_text'];
+	$custom_login = @($sys_config['custom_login_link'] != '') ? '<a href="'.$sys_config['custom_login_link'].'" target="_blank">'.$sys_config['custom_login_text'].'</a>' : $sys_config['custom_login_text'];
 }
 $app->tpl->setVar('custom_login', $custom_login);
 
diff --git a/interface/web/login/password_reset.php b/interface/web/login/password_reset.php
index db4ad71c22d2614566b0c2658cb4254ee8e7afdb..659075483c918c4813a28e74bf1a67eb8faa7ea9 100644
--- a/interface/web/login/password_reset.php
+++ b/interface/web/login/password_reset.php
@@ -71,7 +71,7 @@ if(isset($_POST['username']) && is_string($_POST['username']) && $_POST['usernam
 	} elseif ($continue) {
 		if($client['client_id'] > 0) {
 			$username = $client['username'];
-			$password_hash = sha1(uniqid('ispc_pw'));
+			$password_hash = sha1(random_bytes(20));
 			$app->db->query("UPDATE sys_user SET lost_password_reqtime = NOW(), lost_password_hash = ? WHERE username = ?", $password_hash, $username);
 
 			$server_domain = (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']);
diff --git a/interface/web/mail/form/mail_relay_domain.tform.php b/interface/web/mail/form/mail_relay_domain.tform.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e2523309deb99e75bece53334e23464748cd905
--- /dev/null
+++ b/interface/web/mail/form/mail_relay_domain.tform.php
@@ -0,0 +1,151 @@
+<?php
+
+/*
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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.
+*/
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+
+$form["title"]    = "mail_relay_domain_title";
+$form["description"]  = "";
+$form["name"]    = "mail_relay_domain";
+$form["action"]   = "mail_relay_domain_edit.php";
+$form["db_table"]  = "mail_relay_domain";
+$form["db_table_idx"] = "relay_domain_id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "relay_domain";
+$form["list_default"] = "mail_relay_domain_list.php";
+$form["auth"]   = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['relay_domain'] = array (
+	'title'  => "tab_relay_domain_title",
+	'width'  => 100,
+	'template'  => "templates/mail_relay_domain_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'datasource' => array (  'type' => 'SQL',
+				'querystring' => 'SELECT server_id,server_name FROM server WHERE mail_server = 1 AND mirror_server_id = 0 AND {AUTHSQL} ORDER BY server_name',
+				'keyfield'=> 'server_id',
+				'valuefield'=> 'server_name'
+			),
+			'value'  => ''
+		),
+		'domain' => 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'),
+				3 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL'),
+			),
+			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
+					'errmsg' => 'domain_error_empty'),
+				1 => array ( 'type' => 'ISDOMAIN',
+					'errmsg' => 'domain_error_regex'),
+				2 => array ( 'type' => 'CUSTOM',
+					'class' => 'validate_mail_relay_domain',
+					'function' => 'validate_domain',
+					'errmsg' => 'domain_error_unique'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255',
+		),
+		'access' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
+			'default' => 'OK',
+			'value'  => 'OK',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index 1e5980af2d57419bc90b997c55512bd7e9bab2bb..f0ae4b6611af70d79648710b9dd88669379da496 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -121,7 +121,7 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\p{Latin}0-9\.\-\_\ \&\/]{0,100}$/u',
+					'regex' => '/^[\p{Latin}0-9\.\'\-\_\ \&\/]{0,100}$/u',
 					'errmsg'=> 'target_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/mail/lib/lang/ar_mail_relay_domain.lng b/interface/web/mail/lib/lang/ar_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e5296a9a9bba1dea5a068c7cef8187e5d4e51a4f
--- /dev/null
+++ b/interface/web/mail/lib/lang/ar_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Active';
+$wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ar_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/ar_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e33b3bde4b1d93aca533bc9d806d4fe34e08dded
--- /dev/null
+++ b/interface/web/mail/lib/lang/ar_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Active';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domain';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'access';
diff --git a/interface/web/mail/lib/lang/bg_mail_relay_domain.lng b/interface/web/mail/lib/lang/bg_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0da8a0a2460de3082333bc0ba84fd1d2da82b416
--- /dev/null
+++ b/interface/web/mail/lib/lang/bg_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Сървър';
+$wb['active_txt'] = 'Активен';
+$wb['domain_txt'] = 'Домейн';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Полето с домейн е празно.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/bg_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/bg_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..be92be35babeb5e5c43977c820e2eec2813d5de7
--- /dev/null
+++ b/interface/web/mail/lib/lang/bg_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Активен';
+$wb['server_id_txt'] = 'Сървър';
+$wb['domain_txt'] = 'Домейн';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'access';
diff --git a/interface/web/mail/lib/lang/br_mail_relay_domain.lng b/interface/web/mail/lib/lang/br_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..b992e63aa23c2efd58b3d8e1fc787f46170a43d1
--- /dev/null
+++ b/interface/web/mail/lib/lang/br_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Servidor';
+$wb['active_txt'] = 'Ativo';
+$wb['domain_txt'] = 'Domínio';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['domain_error_empty'] = 'O domínio está vazio.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/br_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/br_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..95cda7fde6bdaefa600c46fbd23cd9b8e4294a62
--- /dev/null
+++ b/interface/web/mail/lib/lang/br_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Ativo';
+$wb['server_id_txt'] = 'Servidor';
+$wb['domain_txt'] = 'Domínio';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'acesso';
diff --git a/interface/web/mail/lib/lang/ca_mail_relay_domain.lng b/interface/web/mail/lib/lang/ca_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..b6e9d8f2fbc31cb5774d3bfc99e8b949c7f26de3
--- /dev/null
+++ b/interface/web/mail/lib/lang/ca_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Serveur';
+$wb['active_txt'] = 'Actif';
+$wb['domain_txt'] = 'Domaine';
+$wb['domain_error_regex'] = 'Nom de domaine invalide.';
+$wb['domain_error_empty'] = 'Le domain est vide.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ca_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/ca_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..771b9619745c862e78ca540c91b546a5ab76df36
--- /dev/null
+++ b/interface/web/mail/lib/lang/ca_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Actif';
+$wb['server_id_txt'] = 'Serveur';
+$wb['domain_txt'] = 'Domaine';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'accès';
diff --git a/interface/web/mail/lib/lang/cz_mail_relay_domain.lng b/interface/web/mail/lib/lang/cz_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e5563fd535103835a8617052885fddf4c527985c
--- /dev/null
+++ b/interface/web/mail/lib/lang/cz_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Aktivní';
+$wb['domain_txt'] = 'Doména';
+$wb['domain_error_regex'] = 'Neplatný název domény.';
+$wb['domain_error_empty'] = 'Doména je prázdná.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/cz_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/cz_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..1932abfa9f7b3e0dbc11763784256de8d243ec5e
--- /dev/null
+++ b/interface/web/mail/lib/lang/cz_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Aktivní';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Doména';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'Přístup';
diff --git a/interface/web/mail/lib/lang/de_mail_relay_domain.lng b/interface/web/mail/lib/lang/de_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..6c0456a2c242ba694164f33ba5f1b35b11b2e6dd
--- /dev/null
+++ b/interface/web/mail/lib/lang/de_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Aktiv';
+$wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Domain Name ist nicht gültig.';
+$wb['domain_error_empty'] = 'Domain ist leer.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/de_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/de_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..833a055963ee2389b0b93216ce1554142eef59ce
--- /dev/null
+++ b/interface/web/mail/lib/lang/de_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Aktiv';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domain';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'Zugriff';
diff --git a/interface/web/mail/lib/lang/dk_mail_relay_domain.lng b/interface/web/mail/lib/lang/dk_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..d993bcd4b1533a94bc33bdfdc0bca3d8d0ee4c00
--- /dev/null
+++ b/interface/web/mail/lib/lang/dk_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Aktiv';
+$wb['domain_txt'] = 'Domæne';
+$wb['domain_error_regex'] = 'Ugyldigt domæne name.';
+$wb['domain_error_empty'] = 'Domæne er tom.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/dk_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/dk_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..10479084bebd4e00c9c0220b645d09f9943e9cfa
--- /dev/null
+++ b/interface/web/mail/lib/lang/dk_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Aktiv';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domæne';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'adgang';
diff --git a/interface/web/mail/lib/lang/el_mail_relay_domain.lng b/interface/web/mail/lib/lang/el_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..6f6d698afacc6ea1070411cfc3a309f7012b42fc
--- /dev/null
+++ b/interface/web/mail/lib/lang/el_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Ενεργό';
+$wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Το όνομα domain δεν είναι έγκυρο/';
+$wb['domain_error_empty'] = 'Το Domain είναι άδειο.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/el_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/el_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..49e51052d156d81a93688a388194fd4257e99dcc
--- /dev/null
+++ b/interface/web/mail/lib/lang/el_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Ενεργός';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domain';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'πρόσβαση';
diff --git a/interface/web/mail/lib/lang/en_mail_relay_domain.lng b/interface/web/mail/lib/lang/en_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e5296a9a9bba1dea5a068c7cef8187e5d4e51a4f
--- /dev/null
+++ b/interface/web/mail/lib/lang/en_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Active';
+$wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/en_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/en_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e33b3bde4b1d93aca533bc9d806d4fe34e08dded
--- /dev/null
+++ b/interface/web/mail/lib/lang/en_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Active';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domain';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'access';
diff --git a/interface/web/mail/lib/lang/es_mail_relay_domain.lng b/interface/web/mail/lib/lang/es_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..848775dd2a892087f89beabd1c796ed344fcf0d2
--- /dev/null
+++ b/interface/web/mail/lib/lang/es_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Servidor';
+$wb['active_txt'] = 'Habilitado';
+$wb['domain_txt'] = 'Dominio';
+$wb['domain_error_regex'] = 'Nombre de dominio inválido.';
+$wb['domain_error_empty'] = 'El dominio está vacío.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/es_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/es_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..bb4c57042e80e5222c993ab39abef27f4ce01440
--- /dev/null
+++ b/interface/web/mail/lib/lang/es_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Habilitado';
+$wb['server_id_txt'] = 'Servidor';
+$wb['domain_txt'] = 'Dominio';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'acceso';
diff --git a/interface/web/mail/lib/lang/fi_mail_relay_domain.lng b/interface/web/mail/lib/lang/fi_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..37afab76cec7d2aef0b4fc91740bb130f303aa7d
--- /dev/null
+++ b/interface/web/mail/lib/lang/fi_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Palvelin';
+$wb['active_txt'] = 'Toiminnassa';
+$wb['domain_txt'] = 'Postiverkkotunnus';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/fi_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/fi_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..d43c485da6b8b0308a8fd59cfdfb4983513d64c9
--- /dev/null
+++ b/interface/web/mail/lib/lang/fi_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Toiminnassa';
+$wb['server_id_txt'] = 'Palvelin';
+$wb['domain_txt'] = 'Postiverkkotunnus';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'yhteys';
diff --git a/interface/web/mail/lib/lang/fr_mail_relay_domain.lng b/interface/web/mail/lib/lang/fr_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..b6e9d8f2fbc31cb5774d3bfc99e8b949c7f26de3
--- /dev/null
+++ b/interface/web/mail/lib/lang/fr_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Serveur';
+$wb['active_txt'] = 'Actif';
+$wb['domain_txt'] = 'Domaine';
+$wb['domain_error_regex'] = 'Nom de domaine invalide.';
+$wb['domain_error_empty'] = 'Le domain est vide.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/fr_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/fr_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..771b9619745c862e78ca540c91b546a5ab76df36
--- /dev/null
+++ b/interface/web/mail/lib/lang/fr_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Actif';
+$wb['server_id_txt'] = 'Serveur';
+$wb['domain_txt'] = 'Domaine';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'accès';
diff --git a/interface/web/mail/lib/lang/hr_mail_relay_domain.lng b/interface/web/mail/lib/lang/hr_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c0d40b147cdd4b24fc9ffe87a6ab3cd0adc25954
--- /dev/null
+++ b/interface/web/mail/lib/lang/hr_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Aktivno';
+$wb['domain_txt'] = 'Domena';
+$wb['domain_error_regex'] = 'Neispravan naziv domene.';
+$wb['domain_error_empty'] = 'Domena je prazna.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/hr_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/hr_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..43f29ed453845c81bb91afb739524b8352c24cde
--- /dev/null
+++ b/interface/web/mail/lib/lang/hr_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Aktivno';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domena';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'pristup';
diff --git a/interface/web/mail/lib/lang/hu_mail_relay_domain.lng b/interface/web/mail/lib/lang/hu_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0ad225ad5551d04f1e4facde8e0d07ab5157b246
--- /dev/null
+++ b/interface/web/mail/lib/lang/hu_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Szerver';
+$wb['active_txt'] = 'Aktív';
+$wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/hu_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/hu_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..286b7e5e9c24cb177d3ddc3a5881ac48e7cb6573
--- /dev/null
+++ b/interface/web/mail/lib/lang/hu_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Aktív';
+$wb['server_id_txt'] = 'Szerver';
+$wb['domain_txt'] = 'Domain';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'access';
diff --git a/interface/web/mail/lib/lang/id_mail_relay_domain.lng b/interface/web/mail/lib/lang/id_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..042ebf0f628cad64f0b587506da7cd6ecabc548c
--- /dev/null
+++ b/interface/web/mail/lib/lang/id_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Aktif';
+$wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/id_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/id_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..3d632507c4d279517619759441c0e7ed4a72a92c
--- /dev/null
+++ b/interface/web/mail/lib/lang/id_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Aktif';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domain';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'Akses';
diff --git a/interface/web/mail/lib/lang/it_backup_stats_list.lng b/interface/web/mail/lib/lang/it_backup_stats_list.lng
index 79cd6c9a63589ba43dd7772821c3d63f7b7a8394..027ef0d0b53566255556ae5b62708f99da9a0a98 100644
--- a/interface/web/mail/lib/lang/it_backup_stats_list.lng
+++ b/interface/web/mail/lib/lang/it_backup_stats_list.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['list_head_txt'] = 'Backup Stats';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Attivo';
 $wb['domain_txt'] = 'Email';
-$wb['backup_count_txt'] = 'Backup count';
+$wb['backup_count_txt'] = 'Numero di Backup';
 $wb['backup_server_txt'] = 'Server';
-$wb['backup_interval_txt'] = 'Interval / cnt.';
-$wb['backup_size_txt'] = 'Backupsize';
+$wb['backup_interval_txt'] = 'Intervallo / conteggio';
+$wb['backup_size_txt'] = 'Dimensione Backup';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_alias.lng b/interface/web/mail/lib/lang/it_mail_alias.lng
index eab82caf51cb4afb8759015fb6cd2d2636d54bb6..6f6cbe17f94f2a04bd3773740ff0c37416532023 100644
--- a/interface/web/mail/lib/lang/it_mail_alias.lng
+++ b/interface/web/mail/lib/lang/it_mail_alias.lng
@@ -6,11 +6,11 @@ $wb['email_error_isemail'] = 'Indirizzo email non valido.';
 $wb['email_error_unique'] = 'Indirizzo email duplicato.';
 $wb['no_domain_perm'] = 'Permessi non sufficienti per questo dominio.';
 $wb['destination_error_isemail'] = 'Email destinatario non valida.';
-$wb['limit_mailalias_txt'] = 'Raggiunto numero massimo di alias email per questo account.';
+$wb['limit_mailalias_txt'] = 'Raggiunto numero massimo di alias email per questo profilo.';
 $wb['duplicate_mailbox_txt'] = 'Cé già una casella di posta con questo indirizzo email.';
 $wb['domain_txt'] = 'Dominio';
-$wb['duplicate_email_alias_txt'] = 'This email alias does already exist.';
+$wb['duplicate_email_alias_txt'] = 'Questo alias email esiste già.';
 $wb['source_txt'] = 'Alias';
-$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'] = 'Invia come';
+$wb['send_as_exp'] = 'Consenti di inviare mail come alias';
+$wb['greylisting_txt'] = 'Abilita le liste grigie';
diff --git a/interface/web/mail/lib/lang/it_mail_alias_list.lng b/interface/web/mail/lib/lang/it_mail_alias_list.lng
index 0f77839b94b545843172817dbb9e510a6d99e4a0..5ccede91e59d8e6ddeeabf7e94cbb82f878cf85f 100644
--- a/interface/web/mail/lib/lang/it_mail_alias_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_alias_list.lng
@@ -1,8 +1,8 @@
 <?php
 $wb['list_head_txt'] = 'Email Alias';
 $wb['active_txt'] = 'Attivo';
-$wb['source_txt'] = 'source';
-$wb['destination_txt'] = 'Destinazione';
+$wb['source_txt'] = 'Mittente';
+$wb['destination_txt'] = 'Destinatario';
 $wb['email_txt'] = 'Email';
 $wb['add_new_record_txt'] = 'Aggiungi un nuovo  Email alias';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_aliasdomain.lng b/interface/web/mail/lib/lang/it_mail_aliasdomain.lng
index 698582eddb699dbd40a4df95edec2b919280cc52..cad85dcfec925428f999b0fc3a2aa5084115298e 100644
--- a/interface/web/mail/lib/lang/it_mail_aliasdomain.lng
+++ b/interface/web/mail/lib/lang/it_mail_aliasdomain.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['source_txt'] = 'Source';
-$wb['destination_txt'] = 'Destinazione';
+$wb['source_txt'] = 'Mittente';
+$wb['destination_txt'] = 'Destinatario';
 $wb['active_txt'] = 'Attivo';
 $wb['no_domain_perm'] = 'Non hai i diritti per  this domain.';
-$wb['limit_mailaliasdomain_txt'] = 'The max. number of email alias domains raggiunto per il tuo account.';
-$wb['source_destination_identical_txt'] = 'Source and target Domain are the same.';
-$wb['source_error_empty'] = 'Source Domain  vuoto.';
-$wb['source_error_unique'] = 'Duplicate source Domain.';
-$wb['source_error_regex'] = 'Invalid source domain name.';
+$wb['limit_mailaliasdomain_txt'] = 'Hai raggiunto il massimo numero si domini email alias per il tuo profilo.';
+$wb['source_destination_identical_txt'] = 'Il dominio mittente e il dominio destinatario sono il medesimo.';
+$wb['source_error_empty'] = 'Dominio Mittente vuoto.';
+$wb['source_error_unique'] = 'Dominio Mittente duplicato.';
+$wb['source_error_regex'] = 'Dominio Mittente non valido.';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/it_mail_aliasdomain_list.lng
index 176964e54acf2ac88d7f7b4fc758e8e15787d62a..cc79dc89c745d6f052597d442e7a70198c320b74 100644
--- a/interface/web/mail/lib/lang/it_mail_aliasdomain_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_aliasdomain_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Domain alias';
+$wb['list_head_txt'] = 'Dominio alias';
 $wb['active_txt'] = 'Attivo';
-$wb['source_txt'] = 'Source';
-$wb['destination_txt'] = 'Destinazione';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Domain alias';
+$wb['source_txt'] = 'Mittente';
+$wb['destination_txt'] = 'Destinatario';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Dominio alias';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_backup_list.lng b/interface/web/mail/lib/lang/it_mail_backup_list.lng
index 73286a0737103be7877ad8d6c3f4aaa669042224..f92d6671ecfae22ed1ef07473946a405825ee77c 100644
--- a/interface/web/mail/lib/lang/it_mail_backup_list.lng
+++ b/interface/web/mail/lib/lang/it_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['list_head_txt'] = 'Backups esistenti';
+$wb['date_txt'] = 'Data';
+$wb['backup_type_txt'] = 'Tipo';
 $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['restore_backup_txt'] = 'Ripristina';
+$wb['restore_info_txt'] = 'Il ripristino del backup è iniziato. Questa operazione richiede diversi minuti per essere completata.';
+$wb['restore_confirm_txt'] = 'Il ripristino può sovrascrivere file esistenti nella tua cartella di posta. Vuoi veramente ripristinare questo backup?';
+$wb['download_pending_txt'] = 'Esiste già una operazione di scaricamento backup in corso.';
+$wb['restore_pending_txt'] = 'Esiste già una operazione di ripristino da backup in corso.';
+$wb['delete_backup_txt'] = 'Cancellare Backup';
+$wb['delete_info_txt'] = 'La cancellazione del backup è iniziata. Questa operazione richiede diversi minuti per essere completata.';
+$wb['delete_confirm_txt'] = 'Vuoi veramente cancellare questo backup?';
+$wb['delete_pending_txt'] = 'Esiste già una operazione di cancellazione backup in corso..';
+$wb['filesize_txt'] = 'Dimensione file';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_blacklist.lng b/interface/web/mail/lib/lang/it_mail_blacklist.lng
index 0b4f16a7c4bd447fe87cb7e891d5c2b11b3d541c..ce87313dab6af66880106dbb6695cc87aaa421e6 100644
--- a/interface/web/mail/lib/lang/it_mail_blacklist.lng
+++ b/interface/web/mail/lib/lang/it_mail_blacklist.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['server_id_txt'] = 'Server';
 $wb['source_txt'] = 'Blacklist Address';
-$wb['recipient_txt'] = 'Recipient';
+$wb['recipient_txt'] = 'Destinatario';
 $wb['active_txt'] = 'Attivo';
-$wb['source_error_notempty'] = 'Address  vuoto.';
-$wb['type_txt'] = 'Type';
-$wb['limit_mailfilter_txt'] = 'The max. number of email filters raggiunto per il tuo account.';
-$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.';
-$wb['mail_access_unique'] = 'Blacklist Address already in use.';
-$wb['client_txt'] = 'Client';
-$wb['sender_txt'] = 'Sender';
+$wb['source_error_notempty'] = 'Indirizzo vuoto.';
+$wb['type_txt'] = 'Tipo';
+$wb['limit_mailfilter_txt'] = 'Hai raggiunto il massimo numero di filtri mail per il tuo profilo.';
+$wb['limit_mail_wblist_txt'] = 'È stato raggiunto il numero massimo di record per White- o Blacklist del tuo profilo.';
+$wb['mail_access_unique'] = 'Indirizzo di lista nera già in uso.';
+$wb['client_txt'] = 'Cliente';
+$wb['sender_txt'] = 'Mittente';
diff --git a/interface/web/mail/lib/lang/it_mail_blacklist_list.lng b/interface/web/mail/lib/lang/it_mail_blacklist_list.lng
index 8840a270e42a4dd7d7f8d38588696873bd1180eb..567414c5b452a13ba645870e66b977a109cb2929 100644
--- a/interface/web/mail/lib/lang/it_mail_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_blacklist_list.lng
@@ -3,8 +3,8 @@ $wb['list_head_txt'] = 'Email Blacklist';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
 $wb['source_txt'] = 'Blacklisted address';
-$wb['type_txt'] = 'Type';
-$wb['recipient_txt'] = 'Recipient';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Blacklist record';
-$wb['access_txt'] = 'access';
+$wb['type_txt'] = 'Tipo';
+$wb['recipient_txt'] = 'Destinatario';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Blacklist record';
+$wb['access_txt'] = 'Accsso';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_content_filter.lng b/interface/web/mail/lib/lang/it_mail_content_filter.lng
index 5169e7fd632a24f0d6bc962053a0815289dded10..d2d9da5a31bbc468363dbfabeadd5dcb1e9b3cb5 100644
--- a/interface/web/mail/lib/lang/it_mail_content_filter.lng
+++ b/interface/web/mail/lib/lang/it_mail_content_filter.lng
@@ -3,7 +3,7 @@ $wb['server_id_txt'] = 'Server';
 $wb['type_txt'] = 'Filter';
 $wb['pattern_txt'] = 'Regexp. Pattern';
 $wb['data_txt'] = 'Data';
-$wb['action_txt'] = 'Action';
+$wb['action_txt'] = 'Azione';
 $wb['active_txt'] = 'Attivo';
 $wb['pattern_error_empty'] = 'Pattern  vuoto.';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_content_filter_list.lng b/interface/web/mail/lib/lang/it_mail_content_filter_list.lng
index bfda794abfc5a42c11e2c2ffbd2826dd88e089d1..fa9de14b13d365d55892859fc766526b856e7ad8 100644
--- a/interface/web/mail/lib/lang/it_mail_content_filter_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_content_filter_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Postfix Header and Body Checks';
+$wb['list_head_txt'] = 'Verifica Intestazione e contenuto Postfix';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
 $wb['pattern_txt'] = 'Pattern';
 $wb['action_txt'] = 'Action';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Content Filter';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Content Filter';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_domain.lng b/interface/web/mail/lib/lang/it_mail_domain.lng
index 88e2c146df0a0c5e15cd28432635c65edc9b20b7..13af4beb97034dcd5c97a0da15e23613109b11ec 100644
--- a/interface/web/mail/lib/lang/it_mail_domain.lng
+++ b/interface/web/mail/lib/lang/it_mail_domain.lng
@@ -6,20 +6,21 @@ $wb['active_txt'] = 'Attivo';
 $wb['domain_error_empty'] = 'Dominio vuoto.';
 $wb['domain_error_unique'] = 'Dominio duplicato.';
 $wb['domain_error_regex'] = 'Nome dominio non valido.';
-$wb['client_txt'] = 'Cleient';
-$wb['limit_maildomain_txt'] = 'Raggiunto numero massimo di domini email per questo account.';
+$wb['client_txt'] = 'Cliente';
+$wb['limit_maildomain_txt'] = 'Raggiunto numero massimo di domini email per questo profilo.';
 $wb['policy_txt'] = 'Filtro Spam';
 $wb['no_policy'] = '- non abilitato -';
-$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_txt'] = 'abilita DKIM';
+$wb['dkim_private_txt'] = 'Chiave privata DKIM';
+$wb['dkim_public_txt'] = 'Chiave pubblica DKIM solo per informazione';
+$wb['dkim_generate_txt'] = 'Genera chiave DKIM Privata';
 $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_private_key_error'] = 'Chave DKIM-Privata invalida';
+$wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM) - Chiave di identificazione dominio mail';
+$wb['error_not_allowed_server_id'] = 'Non sei abilitato a operare su questo server';
+$wb['dkim_selector_txt'] = 'Selettore di chiave DKIM';
+$wb['dkim_selector_error'] = 'Selettore di chiave DKIM invalido. Usare solo caratteri minuscoli e cifre (a-z or 0-9) fino a max 63 caratteri.';
 $wb['relayhost_txt'] = 'Relayhost';
-$wb['relayhost_user_txt'] = 'Relayhost User';
+$wb['relayhost_user_txt'] = 'Utente Relayhost';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
+?>
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 7403fcd663c0a042eb30938606a128e3de9ad238..841a4391251d559344fe95802bba12bb041c1bc4 100644
--- a/interface/web/mail/lib/lang/it_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/it_mail_domain_catchall.lng
@@ -2,12 +2,12 @@
 $wb['domain_txt'] = 'Dominio';
 $wb['destination_txt'] = 'Destinazione';
 $wb['active_txt'] = 'Attivo';
-$wb['domain_error_unique'] = 'There is already a Catchall record for this domain.';
-$wb['no_domain_perm'] = 'Non hai i diritti per  this domain.';
-$wb['domain_error_regex'] = 'Invalid domain name od domain contiene caratteri non validi.';
-$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';
-$wb['send_as_txt'] = 'Send as';
-$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain';
+$wb['domain_error_unique'] = 'Esiste già un record catchall per questo dominio.';
+$wb['no_domain_perm'] = 'Non hai i diritti per questo dominio.';
+$wb['domain_error_regex'] = 'Il dominio contiene caratteri non validi.';
+$wb['limit_mailcatchall_txt'] = 'Hai raggiunto il massimo numero di mail catchall per il tuo profilo.';
+$wb['source_txt'] = 'Mittente';
+$wb['destination_error_isemail'] = 'Il Destinatario non è un indirizzo mail valido.';
+$wb['greylisting_txt'] = 'Abilita greylisting';
+$wb['send_as_txt'] = 'Invia comes';
+$wb['send_as_exp'] = 'Abilita ad inviare da indirizzi mail di questo dominio';
diff --git a/interface/web/mail/lib/lang/it_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/it_mail_domain_catchall_list.lng
index 78515acd8a52d7af9ff112e0a4abf7b4d07c0940..b2b069e3fef5bce25d763a012c6e6a18141df04d 100644
--- a/interface/web/mail/lib/lang/it_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_domain_catchall_list.lng
@@ -2,8 +2,8 @@
 $wb['list_head_txt'] = 'Email Catchall';
 $wb['active_txt'] = 'Attivo';
 $wb['source_txt'] = 'source';
-$wb['destination_txt'] = 'Destination email address';
+$wb['destination_txt'] = 'Indirizzo email destinatario';
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Catchall';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Catchall';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_domain_list.lng b/interface/web/mail/lib/lang/it_mail_domain_list.lng
index fcdf0d2b550966c762c5bc820ac5c289810a6ba3..e18a0590723d6cc85f223842614343247db9f842 100644
--- a/interface/web/mail/lib/lang/it_mail_domain_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_domain_list.lng
@@ -2,6 +2,6 @@
 $wb['list_head_txt'] = 'Dominio di Posta';
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Domain';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Dominio';
 $wb['active_txt'] = 'Attivo';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_forward.lng b/interface/web/mail/lib/lang/it_mail_forward.lng
index 6c4690c750bb4bbf0864ca3a7e89b2d529a7afdb..8cba8613775f0790c39e7d5d1cc12209d58001b6 100644
--- a/interface/web/mail/lib/lang/it_mail_forward.lng
+++ b/interface/web/mail/lib/lang/it_mail_forward.lng
@@ -2,14 +2,14 @@
 $wb['email_txt'] = 'Email';
 $wb['destination_txt'] = 'Destinazione Email';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_mailforward_txt'] = 'Raggiunto il numero massimo di forwarders per il tuo account.';
+$wb['limit_mailforward_txt'] = 'Raggiunto il numero massimo di forwarders per il tuo profilo.';
 $wb['duplicate_mailbox_txt'] = 'Esiste già una casella email per questo indirizzo';
 $wb['domain_txt'] = 'Dominio';
 $wb['source_txt'] = 'Source Email';
-$wb['destination_error_empty'] = 'The destination must not be empty.';
-$wb['destination_error_isemail'] = 'The destination contains at least one invalid email address.';
-$wb['email_error_isemail'] = 'Please enter a valid email address.';
+$wb['destination_error_empty'] = 'Il destinatario non può essere vuoto.';
+$wb['destination_error_isemail'] = 'Almeno un indirizzo email non valido tra i destinatari.';
+$wb['email_error_isemail'] = 'Inserire un indirizzo mail corretto.';
 $wb['email_error_unique'] = 'Indirizzo email duplicato.';
-$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['send_as_txt'] = 'Invia come';
+$wb['send_as_exp'] = 'Consenti al soggetto di inviare mail usando questo indirizzo come mittente (se il soggetto è interno)';
+$wb['greylisting_txt'] = 'Abilita liste grigie';
diff --git a/interface/web/mail/lib/lang/it_mail_forward_list.lng b/interface/web/mail/lib/lang/it_mail_forward_list.lng
index 46215c510c30d4f433f063f28b1836310db33b87..14687f01a703eb5a131cc8fe14302dc5181cbd2b 100644
--- a/interface/web/mail/lib/lang/it_mail_forward_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_forward_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Mail Forward';
+$wb['list_head_txt'] = 'Inoltro Mail';
 $wb['active_txt'] = 'Attivo';
-$wb['source_txt'] = 'source';
+$wb['source_txt'] = 'Sorgente';
 $wb['destination_txt'] = 'Destinazione';
 $wb['email_txt'] = 'Email';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Email forward';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Email forward';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_get.lng b/interface/web/mail/lib/lang/it_mail_get.lng
index 70770c22d423dd4e2d741748f65b5f15f8cc104d..9451959b1b14d3ed212df73cf68108e12835b677 100644
--- a/interface/web/mail/lib/lang/it_mail_get.lng
+++ b/interface/web/mail/lib/lang/it_mail_get.lng
@@ -1,19 +1,19 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['type_txt'] = 'Type';
+$wb['type_txt'] = 'Tipo';
 $wb['source_server_txt'] = 'Pop3/Imap Server';
 $wb['source_username_txt'] = 'Nome Utente';
 $wb['source_password_txt'] = 'Password';
 $wb['source_delete_txt'] = 'Elimina emails dopo averle scaricate';
-$wb['destination_txt'] = 'Destinazione';
+$wb['destination_txt'] = 'Destinatario';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_fetchmail_txt'] = 'Numero massimo di indirizzi Fetchmail per il tuo account raggiunti.';
-$wb['source_server_error_isempty'] = 'Valore Server  vuoto.';
-$wb['source_username_error_isempty'] = 'Valore Nome Utente  vuoto.';
-$wb['source_password_error_isempty'] = 'Valore Password  vuoto.';
+$wb['limit_fetchmail_txt'] = 'Numero massimo di indirizzi Fetchmail per il tuo profilo raggiunti.';
+$wb['source_server_error_isempty'] = 'Valore Server vuoto.';
+$wb['source_username_error_isempty'] = 'Valore Nome Utente vuoto.';
+$wb['source_password_error_isempty'] = 'Valore Password vuoto.';
 $wb['destination_error_isemail'] = 'Nessuna destinazione selezionata.';
 $wb['source_server_error_regex'] = 'Pop3/Imap Server non è un nome dominio valido.';
 $wb['source_read_all_txt'] = 'Recupera tutte le email (incluso mail lette)';
 $wb['error_delete_read_all_combination'] = 'Combinazione di opzioni non conforme. Non puoi utilizzare \\"Elimina mail dopo averle scaricate \\" = NO assieme a  \\"Recupera tutte le email\\" = SI';
-$wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
+$wb['source_delete_note_txt'] = 'Verifica se riesci a scaricare le mail prima di attivare questa opzione.';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_get_list.lng b/interface/web/mail/lib/lang/it_mail_get_list.lng
index 839a076d6733db79ae80f8ac812f96cdfa261f35..086f187afeb42a86230ead46d1c8cf2d6f6f29d4 100644
--- a/interface/web/mail/lib/lang/it_mail_get_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_get_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Fetch emails from external POP3 / IMAP servers';
+$wb['list_head_txt'] = 'Preleva le emails da un server POP3 / IMAP esterni';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
-$wb['source_server_txt'] = 'External Server';
+$wb['source_server_txt'] = 'Server esterno';
 $wb['source_username_txt'] = 'Nome Utente';
-$wb['destination_txt'] = 'Destinazione';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Account';
+$wb['destination_txt'] = 'Destinatario';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Profilo';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_mailinglist.lng b/interface/web/mail/lib/lang/it_mail_mailinglist.lng
index 15629238a944628da95b67581036b0a323c4f244..37835237d865b5ab075906add885fa92dcecacba 100644
--- a/interface/web/mail/lib/lang/it_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/it_mail_mailinglist.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['limit_mailmailinglist_txt'] = 'Limit reached';
-$wb['domain_error_empty'] = 'Domain  vuoto.';
-$wb['listname_error_empty'] = 'Listname  vuoto.';
-$wb['domain_error_regex'] = 'Invalid domain name.';
-$wb['email_in_use_txt'] = 'Email is in use';
-$wb['no_domain_perm'] = 'Non hai i diritti per  this domain.';
+$wb['limit_mailmailinglist_txt'] = 'Limite raggiunto';
+$wb['domain_error_empty'] = 'Dominio vuoto.';
+$wb['listname_error_empty'] = 'Listname vuoto.';
+$wb['domain_error_regex'] = 'Nome dominio non valido.';
+$wb['email_in_use_txt'] = 'Email è già in uso';
+$wb['no_domain_perm'] = 'Non hai i diritti per questo dominio.';
 $wb['password_strength_txt'] = 'Livello sicurezza Password';
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
@@ -16,7 +16,7 @@ $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['listname_error_unique'] = 'There is already a mailinglist with name on the server. Please choose a different listname.';
-$wb['email_error_isemail'] = 'Email address is invalid.';
+$wb['listname_error_unique'] = 'Esiste già una lista mail con questo nome. Scegli un nome differente.';
+$wb['email_error_isemail'] = 'Indirizzo Email non valido.';
 $wb['mailinglist_txt'] = 'Mailing list';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_relay_domain.lng b/interface/web/mail/lib/lang/it_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e5ea20d1005c5c4d159e519357235d148ea6b094
--- /dev/null
+++ b/interface/web/mail/lib/lang/it_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Attivo';
+$wb['domain_txt'] = 'Dominio';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain  vuoto.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/it_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/it_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..96f997fe6eccb41d99012fe80d25d8a318b9e412
--- /dev/null
+++ b/interface/web/mail/lib/lang/it_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Attivo';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Dominio';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'access';
diff --git a/interface/web/mail/lib/lang/it_mail_relay_recipient.lng b/interface/web/mail/lib/lang/it_mail_relay_recipient.lng
index 3bac79de1e13dfa3f44d200a0918cd7fc6650df7..f3a9302ebc5fc1193465d96761aac4036e5ff3eb 100644
--- a/interface/web/mail/lib/lang/it_mail_relay_recipient.lng
+++ b/interface/web/mail/lib/lang/it_mail_relay_recipient.lng
@@ -1,9 +1,9 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['source_txt'] = 'Relay recipient';
+$wb['source_txt'] = 'Destinatario Relay';
 $wb['recipient_txt'] = 'Destinatario';
 $wb['active_txt'] = 'Attivo';
 $wb['source_error_notempty'] = 'Indirizzo vuoto.';
-$wb['type_txt'] = 'Type';
-$wb['limit_mailfilter_txt'] = 'Raggiunto numero massimo filtri emai per il tuo account.';
+$wb['type_txt'] = 'tipo';
+$wb['limit_mailfilter_txt'] = 'Raggiunto numero massimo filtri emai per il tuo profilo.';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_relay_recipient_list.lng b/interface/web/mail/lib/lang/it_mail_relay_recipient_list.lng
index 17a1fa008dbf8e049a0e8df75bee225d0c415439..3925fb753042f217d93ce6301d86c0f7cbfd2937 100644
--- a/interface/web/mail/lib/lang/it_mail_relay_recipient_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_relay_recipient_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Relay recipients';
+$wb['list_head_txt'] = 'Destinatari Relay';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
-$wb['source_txt'] = 'Recipient address';
-$wb['recipient_txt'] = 'Recipient';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  relay recipient';
-$wb['access_txt'] = 'access';
+$wb['source_txt'] = 'Indirizzo destinatario';
+$wb['recipient_txt'] = 'Destinatario';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo destinatario relay';
+$wb['access_txt'] = 'Accesso';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/it_mail_spamfilter_list.lng
index b7daa3eaad187c095fdce4ab7f1a555c65542586..ea46965e4e3e128080d87010927bd906f9977a2d 100644
--- a/interface/web/mail/lib/lang/it_mail_spamfilter_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_spamfilter_list.lng
@@ -4,5 +4,5 @@ $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
 $wb['server_name_txt'] = 'server_name';
 $wb['email_txt'] = 'Email';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Spamfilter record';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo record Spamfilter';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_transport.lng b/interface/web/mail/lib/lang/it_mail_transport.lng
index fbd1a58087e6d399d257e94b59df52b5dff1d6de..6b4734abaf7cd74a4a74f0738eab278cd6417593 100644
--- a/interface/web/mail/lib/lang/it_mail_transport.lng
+++ b/interface/web/mail/lib/lang/it_mail_transport.lng
@@ -2,10 +2,10 @@
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
 $wb['destination_txt'] = 'Destinazione';
-$wb['type_txt'] = 'Type';
+$wb['type_txt'] = 'Tipo';
 $wb['mx_txt'] = 'No MX lookup';
 $wb['sort_order_txt'] = 'Ordina per';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_mailrouting_txt'] = 'The max. number of routes raggiunto per il tuo account.';
+$wb['limit_mailrouting_txt'] = 'Hai raggiunto il numero massimo di mailroutes per il tuo profilo.';
 $wb['transport_txt'] = 'Transport';
-$wb['domain_error_unique'] = 'A mail transport for this Domain already exists on this server.';
+$wb['domain_error_unique'] = 'Un sistema di trasporto mail esiste già per questo dominio su questo server.';
diff --git a/interface/web/mail/lib/lang/it_mail_transport_list.lng b/interface/web/mail/lib/lang/it_mail_transport_list.lng
index c89bb9ff77b1b558227d5101397ebf399cea5c60..4c0c6b6b333e4301d11292d2f4dac7675b2f3e9a 100644
--- a/interface/web/mail/lib/lang/it_mail_transport_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_transport_list.lng
@@ -5,5 +5,5 @@ $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
 $wb['transport_txt'] = 'Transport';
 $wb['sort_order_txt'] = 'Ordina per';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  transport';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo transport';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index 9d96407e453e4055df66f919a66b20aa2d55982f..fbfdfd2ae49cc8bc29bcd3abb981e465f693bb55 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['custom_mailfilter_txt'] = 'Custom mail filter recipe';
+$wb['custom_mailfilter_txt'] = 'Filtro destinatari mail personalizzato';
 $wb['email_txt'] = 'Email';
 $wb['cryptpwd_txt'] = 'Password';
 $wb['password_strength_txt'] = 'Password livello sicurezza';
@@ -8,8 +8,8 @@ $wb['email_error_isemail'] = 'Indirizzo Email non valido.';
 $wb['email_error_unique'] = 'Indirizzo Email duplicato.';
 $wb['autoresponder_text_txt'] = 'Testo';
 $wb['autoresponder_txt'] = 'Autorisponditore';
-$wb['no_domain_perm'] = 'Non hai i diritti per  questo dominio.';
-$wb['error_no_pwd'] = 'Valore Password  vuoto.';
+$wb['no_domain_perm'] = 'Non hai i diritti per questo dominio.';
+$wb['error_no_pwd'] = 'Valore Password vuoto.';
 $wb['quota_error_isint'] = 'Il valore per la dimensione della casella di posta deve essere un numero.';
 $wb['quota_txt'] = 'quota in MB';
 $wb['server_id_txt'] = 'server_id';
@@ -17,11 +17,11 @@ $wb['password_txt'] = 'password';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Abilita ricezione';
-$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
+$wb['tooltip_postfix_txt'] = 'Abilita ricezione messaggi per questa email.';
 $wb['access_txt'] = 'Abilita indirizzo';
 $wb['policy_txt'] = 'Spamfilter';
-$wb['inherit_policy'] = '- Inherit domain setting -';
-$wb['limit_mailbox_txt'] = 'Hai raggiungo il numero massimo di caselle per il tuo account.';
+$wb['inherit_policy'] = '- Importa le impostazioni del dominio -';
+$wb['limit_mailbox_txt'] = 'Hai raggiungo il numero massimo di caselle per il tuo profilo.';
 $wb['limit_mailquota_txt'] = 'Hai raggiunto lo spazio massimo per le tue caselle di posta. Lo spazio massimo in MB è di';
 $wb['disableimap_txt'] = 'Disabilita IMAP';
 $wb['disablepop3_txt'] = 'Disabilita POP3';
@@ -32,22 +32,22 @@ $wb['autoresponder_start_date_ispast'] = 'La data di avvio no può essere anterg
 $wb['autoresponder_end_date_txt'] = 'Termina il';
 $wb['autoresponder_end_date_isgreater'] = 'La data termine deve essere impostata e successiva al giorno di inizio.';
 $wb['move_junk_txt'] = 'Sposta Email di Spam nella cartella di spam Junk';
-$wb['move_junk_y_txt'] = 'Move first, before custom filters.';
-$wb['move_junk_a_txt'] = 'Move last, after custom filters.';
-$wb['move_junk_n_txt'] = 'Do not move Spam Emails to Junk folder.';
+$wb['move_junk_y_txt'] = 'Sposta prima, poi i filtri personalizzati.';
+$wb['move_junk_a_txt'] = 'Sposta successivamente, prima i filtri personalizzati.';
+$wb['move_junk_n_txt'] = 'Non spostare le mail SPAM nella cartella Indesiderate.';
 $wb['name_txt'] = 'Nome vero';
 $wb['name_optional_txt'] = '(Opzionale)';
 $wb['autoresponder_active'] = 'Abilita autorisponditore';
 $wb['cc_txt'] = 'Trasmetti copia a';
 $wb['cc_error_isemail'] = 'Il campo trasmetti copia a non contiene un indirizzo email valido';
-$wb['forward_in_lda_txt'] = 'Copy during delivery';
-$wb['tooltip_forward_in_lda_txt'] = 'Controls if mail copy is forwarded before or during delivery to mailbox.';
+$wb['forward_in_lda_txt'] = 'Copia durante la consegna';
+$wb['tooltip_forward_in_lda_txt'] = 'Controlla se la copia mail è inviata prima o durante la consegna alla mailbox.';
 $wb['domain_txt'] = 'Dominio';
 $wb['now_txt'] = 'Ora';
-$wb['login_error_unique'] = 'Questo Login è già occupato.';
+$wb['login_error_unique'] = 'Questo Login è già presente.';
 $wb['login_error_regex'] = 'Caratteri ammessi sono A-Z, a-z, 0-9, ., _ e -.';
 $wb['login_txt'] = 'Login (opzionale)';
-$wb['error_login_email_txt'] = 'Questo login non è ammesso. Inserire un  login diverso o utilizzare un indirizzo email come login.';
+$wb['error_login_email_txt'] = 'Questo login non è ammesso. Inserire un login diverso o utilizzare un indirizzo email come login.';
 $wb['autoresponder_subject_txt'] = 'Oggetto Email';
 $wb['autoresponder_subject'] = 'Out of office reply';
 $wb['generate_password_txt'] = 'Genera Password';
@@ -57,22 +57,22 @@ $wb['password_match_txt'] = 'Le passwords coincidono.';
 $wb['email_error_isascii'] = 'Non utilizzare caratteri speciali unicode per la password. Potresti avere problemi con il tuo client di psota.';
 $wb['cc_note_txt'] = '(Separa indirizzi email multipli con la virgola)';
 $wb['disablesmtp_txt'] = 'Disabilita SMTP (trasmissione)';
-$wb['tooltip_disablesmtp_txt'] = 'Disables mail submission from this mail account.';
-$wb['disabledeliver_txt'] = 'Disable (local) delivering';
-$wb['tooltip_disabledeliver_txt'] = 'Disables delivery to INBOX, and processing by mail filters and sieve scripts.  Mail forwards to \'Send copy to\' address.';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
-$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'] = '(One email address only)';
-$wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
-$wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
-$wb['purge_junk_days_txt'] = 'Purge Junk automatically after X days';
-$wb['tooltip_purge_junk_days_txt'] = '0 = disabled';
+$wb['tooltip_disablesmtp_txt'] = 'Disabilita l\'invio di mail da questo profilo.';
+$wb['disabledeliver_txt'] = 'Disabilita invio (locale)';
+$wb['tooltip_disabledeliver_txt'] = 'Disabilita consegna in cartella INBOX, e gestione filtri mail e script di controllo. Inoltra le mail all\'indirizzo: \'Invia copia a\'.';
+$wb['autoresponder_start_date_is_required'] = 'La data di inizio deve essere impostata prima che sia abilitato l\'Autorisponditore.';
+$wb['greylisting_txt'] = 'Abilita liste grigie';
+$wb['sender_cc_txt'] = 'Invia i messaggi in uscita in copia nascosta a';
+$wb['sender_cc_error_isemail'] = 'Il campo -Invia copia in uscita a- non contiene un indirizzo mail valido';
+$wb['backup_interval_txt'] = 'Intervallo di Backup';
+$wb['backup_copies_txt'] = 'Numero di copie backup';
+$wb['no_backup_txt'] = 'Nessun backup';
+$wb['daily_backup_txt'] = 'Giornaliero';
+$wb['weekly_backup_txt'] = 'Settimanale';
+$wb['monthly_backup_txt'] = 'Mensile';
+$wb['sender_cc_note_txt'] = '(Un indirizzo mail solamente)';
+$wb['purge_trash_days_txt'] = 'Svuota automaticamente il Cestino dopo X giorni';
+$wb['tooltip_purge_trash_days_txt'] = '0 = Disabilitato';
+$wb['purge_junk_days_txt'] = 'Svuota cartella Indesiderati automaticamente dopo X giorni';
+$wb['tooltip_purge_junk_days_txt'] = '0 = Disabilitato';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_user_filter.lng b/interface/web/mail/lib/lang/it_mail_user_filter.lng
index 1287b716ff5a2a7dda59c026617ab8aeea3e3892..745e5deb1ef9932f2c711e1610349bcbdb8c3a43 100644
--- a/interface/web/mail/lib/lang/it_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/it_mail_user_filter.lng
@@ -6,26 +6,26 @@ $wb['active_txt'] = 'Attivo';
 $wb['rulename_error_empty'] = 'Nome  vuoto.';
 $wb['searchterm_is_empty'] = 'Termine ricerca vuoto.';
 $wb['source_txt'] = 'Origine';
-$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['target_error_regex'] = 'Può contenere solo: a-z, 0-9, -, ., _, &, /, e {spazio}';
+$wb['limit_mailfilter_txt'] = 'Hai raggiunto il numero massimo di filtri mail.';
 $wb['subject_txt'] = 'Oggetto';
 $wb['from_txt'] = 'Da';
 $wb['to_txt'] = 'A';
-$wb['list_id_txt'] = 'List ID';
+$wb['list_id_txt'] = 'Lista ID';
 $wb['contains_txt'] = 'Contiene';
 $wb['is_txt'] = 'è';
 $wb['begins_with_txt'] = 'Inizia con';
 $wb['ends_with_txt'] = 'Termina con';
-$wb['regex_txt'] = 'Matches Regex';
+$wb['regex_txt'] = 'Soddisfa espressione';
 $wb['delete_txt'] = 'Elimina';
-$wb['move_stop_txt'] = 'Move to';
-$wb['header_txt'] = 'Header';
-$wb['size_over_txt'] = 'Email size over (KB)';
-$wb['size_under_txt'] = 'Email size under (KB)';
-$wb['localpart_txt'] = 'Localpart';
-$wb['domain_txt'] = 'Domain';
-$wb['keep_txt'] = 'Keep';
-$wb['reject_txt'] = 'Reject';
+$wb['move_stop_txt'] = 'sposta a';
+$wb['header_txt'] = 'Intestazione';
+$wb['size_over_txt'] = 'dimensione Email oltre (KB)';
+$wb['size_under_txt'] = 'Dimensione Email inferiore (KB)';
+$wb['localpart_txt'] = 'Parte locale';
+$wb['domain_txt'] = 'Dominio';
+$wb['keep_txt'] = 'Mantieni';
+$wb['reject_txt'] = 'Rifiuta';
 $wb['stop_txt'] = 'Stop';
-$wb['move_to_txt'] = 'Move to';
+$wb['move_to_txt'] = 'Sposta a';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_whitelist.lng b/interface/web/mail/lib/lang/it_mail_whitelist.lng
index fbc9980fed0991ef1c1919811ed3b336fa0fa5dc..3d683c9d067114fa77844befe4ac3f8812746c73 100644
--- a/interface/web/mail/lib/lang/it_mail_whitelist.lng
+++ b/interface/web/mail/lib/lang/it_mail_whitelist.lng
@@ -1,12 +1,12 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['source_txt'] = 'Witelist Address';
-$wb['recipient_txt'] = 'Recipient';
+$wb['source_txt'] = 'Lista bianca indirizzi';
+$wb['recipient_txt'] = 'Destinatario';
 $wb['active_txt'] = 'Attivo';
-$wb['source_error_notempty'] = 'Address  vuoto.';
-$wb['type_txt'] = 'Type';
-$wb['limit_mailfilter_txt'] = 'The max. number of email filters raggiunto per il tuo account.';
-$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.';
-$wb['mail_access_unique'] = 'Whitelist Address already in use.';
-$wb['client_txt'] = 'Client';
-$wb['sender_txt'] = 'Sender';
+$wb['source_error_notempty'] = 'Indirizzo vuoto.';
+$wb['type_txt'] = 'Tipo';
+$wb['limit_mailfilter_txt'] = 'Hai raggiunto il limite massimo di filtri mail per il tuo profilo.';
+$wb['limit_mail_wblist_txt'] = 'Hai raggiunto il limite massimo di liste bianche / nere mail per il tuo profilo.';
+$wb['mail_access_unique'] = 'Indirizzo lista bianca già in uso.';
+$wb['client_txt'] = 'Cliente';
+$wb['sender_txt'] = 'Mittente';
diff --git a/interface/web/mail/lib/lang/it_mail_whitelist_list.lng b/interface/web/mail/lib/lang/it_mail_whitelist_list.lng
index 1a5bbb6bb97ede7221c1fdd525c3e98337c92937..7d096865efc956a3b2d718c59c596563a3fffdb6 100644
--- a/interface/web/mail/lib/lang/it_mail_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_whitelist_list.lng
@@ -3,8 +3,8 @@ $wb['list_head_txt'] = 'Email Whitelist';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
 $wb['source_txt'] = 'Whitelisted address';
-$wb['type_txt'] = 'Type';
-$wb['recipient_txt'] = 'Recipient';
-$wb['add_new_record_txt'] = 'Aggiungi un nuovo  Whitelist record';
-$wb['access_txt'] = 'access';
+$wb['type_txt'] = 'Tipo';
+$wb['recipient_txt'] = 'Destinatario';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo record Whitelist';
+$wb['access_txt'] = 'accesso';
 ?>
diff --git a/interface/web/mail/lib/lang/it_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/it_spamfilter_blacklist.lng
index 862999b00a4267848a61268df4904ef98c5de1ca..625b483309a5a4171b5f25aed215afcaf85b2c6c 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_blacklist.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_blacklist.lng
@@ -5,7 +5,7 @@ $wb['rid_txt'] = 'Utente';
 $wb['email_txt'] = 'Email';
 $wb['priority_txt'] = 'Priorita';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_spamfilter_wblist_txt'] = 'E stato raggiunto il numero massimo di record per White- o Blacklist del tuo account.';
+$wb['limit_spamfilter_wblist_txt'] = 'E stato raggiunto il numero massimo di record per White- o Blacklist del tuo profilo.';
 $wb['10 - highest'] = '10 - elevato';
 $wb['5 - medium'] = '5 - medio';
 $wb['1 - lowest'] = '1 - minimo';
diff --git a/interface/web/mail/lib/lang/it_spamfilter_config.lng b/interface/web/mail/lib/lang/it_spamfilter_config.lng
index 05b1a3dacf68ae554618c51eb34a439812c472cf..4f26656a1838de0b924e3974e99fd892e0eaf7d0 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_config.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_config.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['getmail_config_dir_txt'] = 'Getmail Config Path';
+$wb['getmail_config_dir_txt'] = 'Percorso di configurazione Getmail';
 $wb['ip_address_txt'] = 'Indirizzo IP';
-$wb['netmask_txt'] = 'Netmask';
+$wb['netmask_txt'] = 'Maschera sottorete';
 $wb['gateway_txt'] = 'Gateway';
 $wb['hostname_txt'] = 'Hostname';
 $wb['nameservers_txt'] = 'Nameservers';
diff --git a/interface/web/mail/lib/lang/it_spamfilter_policy.lng b/interface/web/mail/lib/lang/it_spamfilter_policy.lng
index 683b378c21e0eebc93556c6914165bc708521c02..abe6ac8c997cd03421ca65c75ee2ff395c9c46d5 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_policy.lng
@@ -1,51 +1,51 @@
 <?php
-$wb['policy_name_txt'] = 'Policy Name';
-$wb['virus_lover_txt'] = 'Virus lover';
-$wb['spam_lover_txt'] = 'SPAM lover';
-$wb['banned_files_lover_txt'] = 'Banned files lover';
-$wb['bad_header_lover_txt'] = 'Bad header lover';
-$wb['bypass_virus_checks_txt'] = 'Bypass virus checks';
-$wb['bypass_banned_checks_txt'] = 'Bypass banned checks';
-$wb['bypass_header_checks_txt'] = 'Bypass header checks';
-$wb['virus_quarantine_to_txt'] = 'Forward virus to email';
-$wb['spam_quarantine_to_txt'] = 'Forward spam to email';
-$wb['banned_quarantine_to_txt'] = 'Forward banned to email';
-$wb['bad_header_quarantine_to_txt'] = 'Forward bad header to email';
-$wb['clean_quarantine_to_txt'] = 'Forward clean to email';
-$wb['other_quarantine_to_txt'] = 'Forward other to email';
-$wb['spam_tag_level_txt'] = 'SPAM tag level';
-$wb['spam_tag2_level_txt'] = 'SPAM tag2 level';
-$wb['spam_kill_level_txt'] = 'SPAM kill level';
-$wb['spam_dsn_cutoff_level_txt'] = 'SPAM dsn cutoff level';
+$wb['policy_name_txt'] = 'Nome della politica di filtro';
+$wb['virus_lover_txt'] = 'Amante dei Virus';
+$wb['spam_lover_txt'] = 'Amante dello SPAM';
+$wb['banned_files_lover_txt'] = 'Amante dei files proibiti';
+$wb['bad_header_lover_txt'] = 'Amante delle intestazioni scorretter';
+$wb['bypass_virus_checks_txt'] = 'Escludi il controllo dei virus';
+$wb['bypass_banned_checks_txt'] = 'Escludi il controllo dei file proibiti';
+$wb['bypass_header_checks_txt'] = 'Escludi il controllo delle intestazioni';
+$wb['virus_quarantine_to_txt'] = 'Inoltra virus alla email';
+$wb['spam_quarantine_to_txt'] = 'Inoltra spam alla email';
+$wb['banned_quarantine_to_txt'] = 'Inoltra proibito alla email';
+$wb['bad_header_quarantine_to_txt'] = 'Inoltra intestazione scorretta alla email';
+$wb['clean_quarantine_to_txt'] = 'Inoltra puliti alla email';
+$wb['other_quarantine_to_txt'] = 'Inoltra gli altri alla email';
+$wb['spam_tag_level_txt'] = 'Etichetta SPAM';
+$wb['spam_tag2_level_txt'] = 'Etichetta2 SPAM';
+$wb['spam_kill_level_txt'] = 'Etichetta Elimina SPAM';
+$wb['spam_dsn_cutoff_level_txt'] = 'Etichetta Cancella dominio SPAM';
 $wb['spam_quarantine_cutoff_level_txt'] = 'SPAM quarantine cutoff level';
-$wb['spam_modifies_subj_txt'] = 'SPAM modifies subject';
-$wb['spam_subject_tag_txt'] = 'SPAM subject tag';
-$wb['spam_subject_tag2_txt'] = 'SPAM subject tag2';
-$wb['addr_extension_virus_txt'] = 'Addr. extension virus';
-$wb['addr_extension_spam_txt'] = 'Addr. extension SPAM';
-$wb['addr_extension_banned_txt'] = 'Addr. extension banned';
-$wb['addr_extension_bad_header_txt'] = 'Addr extension bad header';
-$wb['warnvirusrecip_txt'] = 'Warn virus recip.';
-$wb['warnbannedrecip_txt'] = 'Warn banned recip.';
-$wb['warnbadhrecip_txt'] = 'Warn bad header recip.';
-$wb['newvirus_admin_txt'] = 'Newvirus admin';
-$wb['virus_admin_txt'] = 'Virus admin';
-$wb['banned_admin_txt'] = 'Banned admin';
-$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';
+$wb['spam_modifies_subj_txt'] = 'Modifica oggetto SPAM';
+$wb['spam_subject_tag_txt'] = 'Etichetta oggetto SPAM';
+$wb['spam_subject_tag2_txt'] = 'Etichetta2 oggetto SPAM';
+$wb['addr_extension_virus_txt'] = 'Indirizzo con estensione virus';
+$wb['addr_extension_spam_txt'] = 'Indirizzo con estensione SPAM';
+$wb['addr_extension_banned_txt'] = 'Indirizzo con estensione proibito';
+$wb['addr_extension_bad_header_txt'] = 'Indirizzo con estensione intestazione errata';
+$wb['warnvirusrecip_txt'] = 'Avvisa destinatario virus';
+$wb['warnbannedrecip_txt'] = 'Avvisa destinatario proibito';
+$wb['warnbadhrecip_txt'] = 'Avvisa destinatario errata intestazione.';
+$wb['newvirus_admin_txt'] = 'Amministratore nuovi virus';
+$wb['virus_admin_txt'] = 'Amministratore Virus';
+$wb['banned_admin_txt'] = 'Amministratore proibiti';
+$wb['bad_header_admin_txt'] = 'Amministratore intestazioni errate';
+$wb['spam_admin_txt'] = 'Amministratore SPAM';
+$wb['message_size_limit_txt'] = 'Limite dimensione messaggio';
+$wb['banned_rulenames_txt'] = 'Nome regola proibiti';
+$wb['rspamd_greylisting_txt'] = 'Usare liste grigie';
+$wb['rspamd_spam_greylisting_level_txt'] = 'Livello di liste grigie';
+$wb['rspamd_spam_tag_level_txt'] = 'Etichetta SPAM';
+$wb['rspamd_spam_tag_method_txt'] = 'Etichetta metodo SPAM';
+$wb['rspamd_spam_kill_level_txt'] = 'Respinto SPAM';
+$wb['btn_save_txt'] = 'Salva';
+$wb['btn_cancel_txt'] = 'Annulla';
+$wb['amavis_settings_txt'] = 'Impostazioni';
+$wb['amavis_taglevel_txt'] = 'Livello Etichetta';
+$wb['amavis_quarantine_txt'] = 'Quarantena';
+$wb['amavis_other_txt'] = 'Altri';
+$wb['add_header_txt'] = 'Aggiungi intestazione';
+$wb['rewrite_subject_txt'] = 'Riscrivi oggett0';
 ?>
diff --git a/interface/web/mail/lib/lang/it_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/it_spamfilter_policy_list.lng
index 7010d6147151917ecfce8e288b2065417efd82eb..cc6fa50261df2f259f9bc54292e9e21aa39420f8 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_policy_list.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_policy_list.lng
@@ -1,9 +1,9 @@
 <?php
-$wb['list_head_txt'] = 'Spamfilter Policy';
+$wb['list_head_txt'] = 'Politica di Spamfilter';
 $wb['policy_name_txt'] = 'Nome';
-$wb['virus_lover_txt'] = 'Virus lover';
-$wb['spam_lover_txt'] = 'Spam lover';
-$wb['banned_files_lover_txt'] = 'Banned Files lover';
-$wb['bad_header_lover_txt'] = 'Bad Header lover';
-$wb['add_new_record_txt'] = 'Add Policy record';
+$wb['virus_lover_txt'] = 'Amante dei Virus';
+$wb['spam_lover_txt'] = 'Amante dello SPAM';
+$wb['banned_files_lover_txt'] = 'Amante dei files proibiti';
+$wb['bad_header_lover_txt'] = 'Amante delle intestazioni scorretter';
+$wb['add_new_record_txt'] = 'Aggiungi un record alla politica';
 ?>
diff --git a/interface/web/mail/lib/lang/it_spamfilter_users.lng b/interface/web/mail/lib/lang/it_spamfilter_users.lng
index 2f49b05a41afee3b8b92cd7e76918fa3684312fc..097d75ffbdbeabeb060b691734aad601d3cde7b8 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_users.lng
@@ -5,9 +5,9 @@ $wb['policy_id_txt'] = 'Policy';
 $wb['email_txt'] = 'Email (Pattern)';
 $wb['fullname_txt'] = 'Nome';
 $wb['local_txt'] = 'Local';
-$wb['email_error_notempty'] = 'The email address must not be vuoto.';
-$wb['fullname_error_notempty'] = 'The name must not be vuoto.';
+$wb['email_error_notempty'] = 'L\'indirizzo mail non può essere vuoto.';
+$wb['fullname_error_notempty'] = 'Il nome non può essere vuoto.';
 $wb['10 - highest'] = '10 - elevata';
 $wb['5 - medium'] = '5 - media';
 $wb['1 - lowest'] = '1 - minima';
-$wb['inherit_policy'] = '- Inherit domain setting -';
+$wb['inherit_policy'] = '- Importa le impostazioni del dominio -';
diff --git a/interface/web/mail/lib/lang/it_spamfilter_users_list.lng b/interface/web/mail/lib/lang/it_spamfilter_users_list.lng
index 3a707975508a2ed8cbf69390050d9c08504de994..33ffd4db99e400230f25bbf97a9c3726479d1337 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_users_list.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_users_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Spamfilter Users';
-$wb['local_txt'] = 'Local';
+$wb['list_head_txt'] = 'Utenti Spamfilter';
+$wb['local_txt'] = 'Locale';
 $wb['server_id_txt'] = 'Server';
 $wb['priority_txt'] = 'Priorita';
-$wb['policy_id_txt'] = 'Policy';
+$wb['policy_id_txt'] = 'Politica';
 $wb['fullname_txt'] = 'Nome';
 $wb['email_txt'] = 'Email';
-$wb['add_new_record_txt'] = 'Add Spamfilter User';
+$wb['add_new_record_txt'] = 'Aggiungi utente Spamfilter';
 ?>
diff --git a/interface/web/mail/lib/lang/it_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/it_spamfilter_whitelist.lng
index a484eaf4f8e8708c2d5695125d2ad09c1f665fbc..277abadf1bd609cb8f907e23067896932e2803e5 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_whitelist.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_whitelist.lng
@@ -5,7 +5,7 @@ $wb['rid_txt'] = 'Utente';
 $wb['email_txt'] = 'Email';
 $wb['priority_txt'] = 'Priorità';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_spamfilter_wblist_txt'] = 'Raggiunto numero massimo di record white/blacklist per questo account.';
+$wb['limit_spamfilter_wblist_txt'] = 'Raggiunto numero massimo di record white/blacklist per questo profilo.';
 $wb['10 - highest'] = '10 - elevata';
 $wb['5 - medium'] = '5 - media';
 $wb['1 - lowest'] = '1 - minima';
diff --git a/interface/web/mail/lib/lang/it_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/it_spamfilter_whitelist_list.lng
index 1b75490065ece922704624178802644cc6af9fe8..2f91ad20a42b2679677697dde787ea212ab65f6e 100644
--- a/interface/web/mail/lib/lang/it_spamfilter_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/it_spamfilter_whitelist_list.lng
@@ -2,7 +2,7 @@
 $wb['list_head_txt'] = 'Whitelist Filtro Spam ';
 $wb['active_txt'] = 'Activo';
 $wb['server_id_txt'] = 'Server';
-$wb['priority_txt'] = 'Priorita';
+$wb['priority_txt'] = 'Priorità';
 $wb['rid_txt'] = 'Utente';
 $wb['email_txt'] = 'Email in Whitelist';
 $wb['add_new_record_txt'] = 'Adggiungi record Whitelist';
diff --git a/interface/web/mail/lib/lang/it_xmpp_domain.lng b/interface/web/mail/lib/lang/it_xmpp_domain.lng
index 0541203b2e19bc1658e140470cb0375f774c7e0a..9e375a433c909ccefae70ce952df3207d6da0c2b 100644
--- a/interface/web/mail/lib/lang/it_xmpp_domain.lng
+++ b/interface/web/mail/lib/lang/it_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['client_group_id_txt'] = 'Cliente';
+$wb['domain_txt'] = 'Dominio';
+$wb['type_txt'] = 'Tipo';
+$wb['active_txt'] = 'Attivo';
+$wb['client_txt'] = 'Cliente';
+$wb['management_method_txt'] = 'Mgestione profili utenti';
+$wb['public_registration_txt'] = 'Consenti registrazione pubblica';
+$wb['registration_url_txt'] = 'URL di Registrazione';
+$wb['registration_message_txt'] = 'Messaggio di Registratione';
+$wb['domain_admins_txt'] = 'Amministratori di Dominio (JIDs)';
+$wb['use_pubsub_txt'] = 'Abilita Pubsub';
+$wb['use_proxy_txt'] = 'Abilita Bytestream Proxy';
+$wb['use_anon_host_txt'] = 'Abilita Anonymous Host';
+$wb['use_vjud_txt'] = 'Abilita 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['use_muc_host_txt'] = 'Abilita Chatrooms multi utente';
+$wb['muc_name_txt'] = 'Nome in MUC Service Discovery';
+$wb['muc_restrict_room_creation_txt'] = 'Permesso di creare chatrooms';
+$wb['muc_admins_txt'] = 'Amministratori MUC (JIDs)';
+$wb['use_pastebin_txt'] = 'Abilita Pastebin';
+$wb['pastebin_expire_after_txt'] = 'Pastes scade dopo (ore)';
 $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['use_http_archive_txt'] = 'Abilita archivio chatroom HTTP';
+$wb['http_archive_show_join_txt'] = 'Mostra messaggio di collegamento in archivio';
+$wb['http_archive_show_status_txt'] = 'Mostra il cambio di stato nell\'archivio';
+$wb['use_status_host_txt'] = 'Abilita lo stato XML';
+$wb['cant_change_domainname_txt'] = 'Il nome di dominio di domini XMPP esistenti non può essere cambiato.';
+$wb['about_registration_url_txt'] = 'Collegamento al tuo modulo di registrazione.';
+$wb['about_registration_message_txt'] = 'Descrizione dellle modalità di registrazione del tuo profilo.';
+$wb['no_corresponding_maildomain_txt'] = 'Il dominio emai corrispondente per la gestione utenti non è stato trovato. Crea prima il dominio email.';
+$wb['ssl_state_txt'] = 'Stato';
+$wb['ssl_locality_txt'] = 'Località';
+$wb['ssl_organisation_txt'] = 'Organizzazione';
+$wb['ssl_organisation_unit_txt'] = 'Reparto';
+$wb['ssl_country_txt'] = 'Paese';
+$wb['ssl_key_txt'] = 'Chiave SSL';
+$wb['ssl_request_txt'] = 'Richiesta SSL';
+$wb['ssl_cert_txt'] = 'SSL Certificato';
 $wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
-$wb['ssl_email_txt'] = 'Email Address';
+$wb['ssl_action_txt'] = 'SSL Azione';
+$wb['ssl_email_txt'] = 'Indirizzo Email';
 $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['error_ssl_state_empty'] = 'SSL Stato è vuoto.';
+$wb['error_ssl_locality_empty'] = 'SSL Località è vuoto.';
+$wb['error_ssl_organisation_empty'] = 'SSL Organizzazione è vuoto.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL Reparto è vuoto.';
+$wb['error_ssl_country_empty'] = 'SSL Paese è vuoto.';
+$wb['error_ssl_cert_empty'] = 'SSL Il campo Certificato è vuoto';
+$wb['ssl_state_error_regex'] = 'Stato SSL non valido. Caratteri ammessi: a-z, 0-9 and .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = 'Località SSL non valida. Caratteri ammessi: a-z, 0-9 and .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = 'Organizzazione SSL non valida. Caratteri ammessi: a-z, 0-9 and .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = 'Reparto SSL non valido. Caratteri ammessi: a-z, 0-9 and .,-_&äöüÄÖÜ';
+$wb['ssl_country_error_regex'] = 'Paese SSL non valido. Caratteri ammessi: A-Z';
+$wb['none_txt'] = 'Nessuno';
+$wb['save_certificate_txt'] = 'Salvare certificato';
+$wb['create_certificate_txt'] = 'Creare certificato';
+$wb['delete_certificate_txt'] = 'Cancellare certificato';
+$wb['ssl_error_isemail'] = 'Inserire un indirizzo email valido per generare il certificato SSL';
+$wb['limit_xmppdomain_txt'] = 'Hai raggiunto il massimo numero di domini XMPP per il tuo profilo.';
 ?>
diff --git a/interface/web/mail/lib/lang/it_xmpp_domain_admin_list.lng b/interface/web/mail/lib/lang/it_xmpp_domain_admin_list.lng
index af643eab5aee3835de27ff78c851d0048052fefe..45c5b08979d838160f873e189f4714108113fe1a 100644
--- a/interface/web/mail/lib/lang/it_xmpp_domain_admin_list.lng
+++ b/interface/web/mail/lib/lang/it_xmpp_domain_admin_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'XMPP Domain';
+$wb['list_head_txt'] = 'Dominio XMPP';
 $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['domain_txt'] = 'Dominio';
+$wb['add_new_record_txt'] = 'Aggiungi nuovo Dominio';
+$wb['active_txt'] = 'Attivo';
+$wb['sys_groupid_txt'] = 'Cliente';
 ?>
diff --git a/interface/web/mail/lib/lang/it_xmpp_domain_list.lng b/interface/web/mail/lib/lang/it_xmpp_domain_list.lng
index ebfebab7d50cc92cd87be46e8de665ba2bfb6f23..7bf8ea9187d4469bc21c3f525c5b0fc380cad4b2 100644
--- a/interface/web/mail/lib/lang/it_xmpp_domain_list.lng
+++ b/interface/web/mail/lib/lang/it_xmpp_domain_list.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'XMPP Domain';
+$wb['list_head_txt'] = 'Dominio XMPP';
 $wb['server_id_txt'] = 'Server';
-$wb['domain_txt'] = 'Domain';
-$wb['add_new_record_txt'] = 'Add new Domain';
-$wb['active_txt'] = 'Active';
+$wb['domain_txt'] = 'Dominio';
+$wb['add_new_record_txt'] = 'Aggiungi un nuovo Dominio';
+$wb['active_txt'] = 'Attivo';
 ?>
diff --git a/interface/web/mail/lib/lang/it_xmpp_user.lng b/interface/web/mail/lib/lang/it_xmpp_user.lng
index 6ab739d98b9ad877f9f9de5f04530b7add424fd5..960ff8b331f8f7481e9fca2a612c11fcaf9cdabc 100644
--- a/interface/web/mail/lib/lang/it_xmpp_user.lng
+++ b/interface/web/mail/lib/lang/it_xmpp_user.lng
@@ -1,15 +1,15 @@
 <?php
-$wb['list_head_txt'] = 'XMPP User Accounts';
+$wb['list_head_txt'] = 'Profilo utente XMPP';
 $wb['jid_txt'] = 'Jabber ID';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Attivo';
 $wb['cryptpwd_txt'] = 'Password';
-$wb['password_strength_txt'] = 'Password strength';
-$wb['error_no_pwd'] = 'Password is empty.';
+$wb['password_strength_txt'] = 'Forza della Password';
+$wb['error_no_pwd'] = 'Password è vuota.';
 $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['generate_password_txt'] = 'Genera Password';
+$wb['repeat_password_txt'] = 'Ripeti Password';
+$wb['password_mismatch_txt'] = 'Le password sono diverse.';
+$wb['password_match_txt'] = 'Le password coincidono.';
+$wb['no_domain_perm'] = 'Non hai i permessi per questo dominio.';
+$wb['limit_xmpp_user_txt'] = 'Hai raggiunto il massimo numero di utenti XMPP per il tuo profilo.';
 ?>
diff --git a/interface/web/mail/lib/lang/it_xmpp_user_list.lng b/interface/web/mail/lib/lang/it_xmpp_user_list.lng
index f2651cb62b0cfbe55156d943e91fd7e0c33ac515..0a22caf8a1b2edfbd08e2008eb548e7d89157f9d 100644
--- a/interface/web/mail/lib/lang/it_xmpp_user_list.lng
+++ b/interface/web/mail/lib/lang/it_xmpp_user_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'XMPP User Accounts';
+$wb['list_head_txt'] = 'Profilo utente XMPP';
 $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['is_domain_admin_txt'] = 'Amministratore Dominio';
+$wb['is_muc_admin_txt'] = 'Amministratore MUC';
+$wb['add_new_record_txt'] = 'Aggiungi nuovo utente';
+$wb['active_txt'] = 'Attivo';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_relay_domain.lng b/interface/web/mail/lib/lang/ja_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..ea66b94551477cee7f882d8f2f73f45a101f62e7
--- /dev/null
+++ b/interface/web/mail/lib/lang/ja_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Active';
+$wb['domain_txt'] = 'ドメイン';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ja_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/ja_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..dceb86ee842b3839df4ad16b312435058ac504d1
--- /dev/null
+++ b/interface/web/mail/lib/lang/ja_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Active';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'ドメイン';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'access';
diff --git a/interface/web/mail/lib/lang/nl_mail_relay_domain.lng b/interface/web/mail/lib/lang/nl_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e76ed68a5d2cb1eefbb8864f743b7986b5cf2cdd
--- /dev/null
+++ b/interface/web/mail/lib/lang/nl_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Actief';
+$wb['domain_txt'] = 'Domein';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/nl_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/nl_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..d25076fc2567ca61740ec68f5bb573bdabf8f8e3
--- /dev/null
+++ b/interface/web/mail/lib/lang/nl_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Actief';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domein';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'toegang';
diff --git a/interface/web/mail/lib/lang/pl_mail_relay_domain.lng b/interface/web/mail/lib/lang/pl_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..dc872f9242acd57a5d5eb8b8bad63465133c819b
--- /dev/null
+++ b/interface/web/mail/lib/lang/pl_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Serwer';
+$wb['active_txt'] = 'Aktywny';
+$wb['domain_txt'] = 'Domena';
+$wb['domain_error_regex'] = 'Nieprawidłowa nazwa domeny.';
+$wb['domain_error_empty'] = 'Domena jest pusta.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/pl_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/pl_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..2de57c6d2256732d3456ff0ef3e46a8152fe621c
--- /dev/null
+++ b/interface/web/mail/lib/lang/pl_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Aktywne';
+$wb['server_id_txt'] = 'Serwer';
+$wb['domain_txt'] = 'Domena';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'dostęp';
diff --git a/interface/web/mail/lib/lang/pt_mail_relay_domain.lng b/interface/web/mail/lib/lang/pt_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..a775995cde1f972e2487952c91cc92ca883dfce6
--- /dev/null
+++ b/interface/web/mail/lib/lang/pt_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Servidor';
+$wb['active_txt'] = 'Activo';
+$wb['domain_txt'] = 'Domínio';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/pt_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/pt_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..50b5422a17c4bd05274493c81154901223c48618
--- /dev/null
+++ b/interface/web/mail/lib/lang/pt_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Activo';
+$wb['server_id_txt'] = 'Servidor';
+$wb['domain_txt'] = 'Domínio';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'acesso';
diff --git a/interface/web/mail/lib/lang/ro_mail_relay_domain.lng b/interface/web/mail/lib/lang/ro_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e5296a9a9bba1dea5a068c7cef8187e5d4e51a4f
--- /dev/null
+++ b/interface/web/mail/lib/lang/ro_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Active';
+$wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ro_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/ro_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..e33b3bde4b1d93aca533bc9d806d4fe34e08dded
--- /dev/null
+++ b/interface/web/mail/lib/lang/ro_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Active';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domain';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'access';
diff --git a/interface/web/mail/lib/lang/ru_mail_relay_domain.lng b/interface/web/mail/lib/lang/ru_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..a80c439da8c5aaee5d26fd174da9879c48d3384d
--- /dev/null
+++ b/interface/web/mail/lib/lang/ru_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Сервер';
+$wb['active_txt'] = 'Активно';
+$wb['domain_txt'] = 'Домен';
+$wb['domain_error_regex'] = 'Некорректное имя домена.';
+$wb['domain_error_empty'] = 'Домен пустой.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ru_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/ru_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..87705b7fd393ffcb99ba24510841a1b62fd5aa90
--- /dev/null
+++ b/interface/web/mail/lib/lang/ru_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Активно';
+$wb['server_id_txt'] = 'Сервер';
+$wb['domain_txt'] = 'Домен';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'доступ';
diff --git a/interface/web/mail/lib/lang/se_mail_relay_domain.lng b/interface/web/mail/lib/lang/se_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..d1890449c420b0557aec76ff0af7c8a5d7737064
--- /dev/null
+++ b/interface/web/mail/lib/lang/se_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Aktiv';
+$wb['domain_txt'] = 'Domän';
+$wb['domain_error_regex'] = 'Ogiltigt domännamn.';
+$wb['domain_error_empty'] = 'Domänfältet är tomt.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/se_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/se_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..a3f53e633f323c2e5085235c79d99e01e9ac2cce
--- /dev/null
+++ b/interface/web/mail/lib/lang/se_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Aktiv';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Domän';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'Ã¥tkomst';
diff --git a/interface/web/mail/lib/lang/sk_mail_relay_domain.lng b/interface/web/mail/lib/lang/sk_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..f63a9fd66302b0d7c2613703e9dd22a1a8cca1c4
--- /dev/null
+++ b/interface/web/mail/lib/lang/sk_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Server';
+$wb['active_txt'] = 'Active';
+$wb['domain_txt'] = 'Doména';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/sk_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/sk_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..2dbfd76db6ae199817e906c6be409394fd4a0b48
--- /dev/null
+++ b/interface/web/mail/lib/lang/sk_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Active';
+$wb['server_id_txt'] = 'Server';
+$wb['domain_txt'] = 'Doména';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'access';
diff --git a/interface/web/mail/lib/lang/tr_mail_relay_domain.lng b/interface/web/mail/lib/lang/tr_mail_relay_domain.lng
new file mode 100644
index 0000000000000000000000000000000000000000..cd4b38cf2a0db2cae791b8919d3f935657c398f4
--- /dev/null
+++ b/interface/web/mail/lib/lang/tr_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email relay domain';
+$wb['tab_relay_domain_title'] = 'Relay domain';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['active_txt'] = 'Etkin';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/tr_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/tr_mail_relay_domain_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..eb93ca7e439cd5f8757bd4c873208ef5ffaaf88e
--- /dev/null
+++ b/interface/web/mail/lib/lang/tr_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'Relay domains';
+$wb['active_txt'] = 'Etkin';
+$wb['server_id_txt'] = 'Sunucu';
+$wb['domain_txt'] = 'Etki Alanı';
+$wb['add_new_record_txt'] = 'Add new relay domain';
+$wb['access_txt'] = 'EriÅŸim';
diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php
index 05910e6c461c160289857e75e83e619f5ef6ca2f..40a7813b6274ae141d66d74d0aa8ea57f9e9e16c 100644
--- a/interface/web/mail/lib/module.conf.php
+++ b/interface/web/mail/lib/module.conf.php
@@ -13,56 +13,49 @@ $module['order']    = '40';
 //**** Email accounts menu
 $items = array();
 
-if($app->auth->get_client_limit($userid, 'maildomain') != 0)
-{
+if($app->auth->get_client_limit($userid, 'maildomain') != 0) {
 	$items[] = array( 'title'  => 'Domain',
 		'target'  => 'content',
 		'link' => 'mail/mail_domain_list.php',
 		'html_id' => 'mail_domain_list');
 }
 
-if($app->auth->get_client_limit($userid, 'mailaliasdomain') != 0)
-{
+if($app->auth->get_client_limit($userid, 'mailaliasdomain') != 0) {
 	$items[] = array( 'title'  => 'Domain Alias',
 		'target'  => 'content',
 		'link' => 'mail/mail_aliasdomain_list.php',
 		'html_id' => 'mail_aliasdomain_list');
 }
 
-if($app->auth->get_client_limit($userid, 'mailbox') != 0)
-{
+if($app->auth->get_client_limit($userid, 'mailbox') != 0) {
 	$items[] = array( 'title'  => 'Email Mailbox',
 		'target'  => 'content',
 		'link' => 'mail/mail_user_list.php',
 		'html_id' => 'mail_user_list');
 }
 
-if($app->auth->get_client_limit($userid, 'mailalias') != 0)
-{
+if($app->auth->get_client_limit($userid, 'mailalias') != 0) {
 	$items[] = array( 'title'  => 'Email Alias',
 		'target'  => 'content',
 		'link' => 'mail/mail_alias_list.php',
 		'html_id' => 'mail_alias_list');
 }
 
-if($app->auth->get_client_limit($userid, 'mailforward') != 0)
-{
+if($app->auth->get_client_limit($userid, 'mailforward') != 0) {
 	$items[] = array( 'title'  => 'Email Forward',
 		'target'  => 'content',
 		'link' => 'mail/mail_forward_list.php',
 		'html_id' => 'mail_forward_list');
 }
 
-if($app->auth->get_client_limit($userid, 'mailcatchall') != 0)
-{
+if($app->auth->get_client_limit($userid, 'mailcatchall') != 0) {
 	$items[] = array( 'title'  => 'Email Catchall',
 		'target'  => 'content',
 		'link' => 'mail/mail_domain_catchall_list.php',
 		'html_id' => 'mail_domain_catchall_list');
 }
 
-if(! $app->auth->is_admin() && $app->auth->get_client_limit($userid, 'mail_wblist') != 0)
-{
+if(! $app->auth->is_admin() && $app->auth->get_client_limit($userid, 'mail_wblist') != 0) {
 	$items[] = array(   'title'  => 'Email Whitelist',
 		'target'  => 'content',
 		'link'     => 'mail/mail_whitelist_list.php',
@@ -73,18 +66,17 @@ if(! $app->auth->is_admin() && $app->auth->get_client_limit($userid, 'mail_wblis
 		'target'  => 'content',
 		'link'     => 'mail/mail_blacklist_list.php',
 		'html_id' => 'mail_blacklist_list');
-}
 
-if($app->auth->get_client_limit($userid, 'mailrouting') != 0)
-{
+if($app->auth->get_client_limit($userid, 'mailrouting') != 0) {
 	$items[] = array( 'title'  => 'Email Routing',
 		'target'  => 'content',
 		'link' => 'mail/mail_transport_list.php',
 		'html_id' => 'mail_transport_list');
 }
 
-if(count($items) && $app->system->has_service($userid, 'mail'))
-{
+}
+
+if(count($items) && $app->system->has_service($userid, 'mail')) {
 	$module['nav'][] = array( 'title' => 'Email Accounts',
 		'open'  => 1,
 		'items' => $items);
@@ -93,16 +85,14 @@ if(count($items) && $app->system->has_service($userid, 'mail'))
 //**** Mailinglist menu
 $items = array();
 
-if($app->auth->get_client_limit($userid, 'mailmailinglist') != 0)
-{
+if($app->auth->get_client_limit($userid, 'mailmailinglist') != 0) {
 	$items[] = array( 'title'  => 'Mailing List',
 		'target'  => 'content',
 		'link' => 'mail/mail_mailinglist_list.php',
 		'html_id' => 'mail_mailinglist_list');
 }
 
-if(count($items) && $app->system->has_service($userid, 'mail'))
-{
+if(count($items) && $app->system->has_service($userid, 'mail')) {
 	$module['nav'][] = array( 'title' => 'Mailing List',
 		'open'  => 1,
 		'items' => $items);
@@ -111,8 +101,7 @@ if(count($items) && $app->system->has_service($userid, 'mail'))
 //**** Spamfilter menu
 $items = array();
 
-if($app->auth->get_client_limit($userid, 'spamfilter_wblist') != 0)
-{
+if($app->auth->get_client_limit($userid, 'spamfilter_wblist') != 0) {
 	$items[] = array( 'title'  => 'Whitelist',
 		'target'  => 'content',
 		'link' => 'mail/spamfilter_whitelist_list.php',
@@ -124,8 +113,7 @@ if($app->auth->get_client_limit($userid, 'spamfilter_wblist') != 0)
 		'html_id' => 'spamfilter_blacklist_list');
 }
 
-if($app->auth->is_admin())
-{
+if($app->auth->is_admin()) {
 	$items[] = array(  'title'  => 'User / Domain',
 		'target'  => 'content',
 		'link'     => 'mail/spamfilter_users_list.php',
@@ -141,8 +129,7 @@ if($app->auth->is_admin())
 	//        'link'     => 'mail/spamfilter_config_list.php');
 }
 
-if(count($items))
-{
+if(count($items)) {
 	$module['nav'][] = array( 'title' => 'Spamfilter',
 		'open'  => 1,
 		'items' => $items);
@@ -151,8 +138,7 @@ if(count($items))
 //**** Fetchmail menu
 $items = array();
 
-if($app->auth->get_client_limit($userid, 'fetchmail') != 0)
-{
+if($app->auth->get_client_limit($userid, 'fetchmail') != 0) {
 	$items[] = array( 'title'  => 'Fetchmail',
 		'target'  => 'content',
 		'link' => 'mail/mail_get_list.php',
@@ -167,24 +153,21 @@ if($app->auth->get_client_limit($userid, 'fetchmail') != 0)
 if ($app->system->has_service($userid, 'xmpp')) {
        $items = array();
 
-	if($app->auth->get_client_limit($userid, 'xmpp_domain') != 0)
-	{
+	if($app->auth->get_client_limit($userid, 'xmpp_domain') != 0) {
 		$items[] = array( 'title'  => 'XMPP Domain',
 			'target'  => 'content',
 			'link' => 'mail/xmpp_domain_list.php',
 			'html_id' => 'xmpp_domain_list');
 	}
 
-	if($app->auth->get_client_limit($userid, 'xmpp_user') != 0)
-	{
+	if($app->auth->get_client_limit($userid, 'xmpp_user') != 0) {
 		$items[] = array( 'title'  => 'XMPP Account',
 			'target'  => 'content',
 			'link' => 'mail/xmpp_user_list.php',
 			'html_id' => 'xmpp_user_list');
 	}
 
-	if(count($items))
-	{
+	if(count($items)) {
 		$module['nav'][] = array( 'title' => 'Jabber / XMPP',
 			'open'  => 1,
 			'items' => $items);
@@ -206,8 +189,7 @@ $items[] = array( 'title'  => 'Mailbox traffic',
 	'link' => 'mail/mail_user_stats.php',
 	'html_id' => 'mail_user_stats');
 
-if($app->auth->get_client_limit($userid, 'backup') == 'y')
-{
+if($app->auth->get_client_limit($userid, 'mail_backup') != 'n') {
         $items[] = array (
             'title'   => 'Backup Stats',
             'target'  => 'content',
@@ -222,8 +204,7 @@ $module['nav'][] = array( 'title' => 'Statistics',
 
 //**** Global filters menu
 $items = array();
-if($app->auth->is_admin())
-{
+if($app->auth->is_admin()) {
 	$items[] = array(   'title'  => 'Postfix Whitelist',
 		'target'  => 'content',
 		'link'     => 'mail/mail_whitelist_list.php',
@@ -242,14 +223,25 @@ if($app->auth->is_admin())
 		'html_id' => 'mail_content_filter_list');
 
 
+	$items[] = array( 'title'  => 'Email Routing',
+		'target'  => 'content',
+		'link' => 'mail/mail_transport_list.php',
+		'html_id' => 'mail_transport_list');
+
+
+	$items[] = array(   'title'  => 'Relay Domains',
+		'target'  => 'content',
+		'link'     => 'mail/mail_relay_domain_list.php',
+		'html_id' => 'mail_relay_domain_list');
+
+
 	$items[] = array(   'title'  => 'Relay Recipients',
 		'target'  => 'content',
 		'link'     => 'mail/mail_relay_recipient_list.php',
 		'html_id' => 'mail_relay_recipient_list');
 
 
-	$module['nav'][] = array( 'title' => 'Global Filters',
+	$module['nav'][] = array( 'title' => 'Server Settings',
 		'open'  => 1,
 		'items' => $items);
 }
-?>
diff --git a/interface/web/mail/list/mail_relay_domain.list.php b/interface/web/mail/list/mail_relay_domain.list.php
new file mode 100644
index 0000000000000000000000000000000000000000..a6ff7834824de4c4e703bc876b48971e3ea2afa1
--- /dev/null
+++ b/interface/web/mail/list/mail_relay_domain.list.php
@@ -0,0 +1,111 @@
+<?php
+
+/*
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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.
+*/
+
+
+// Name of the list
+$liste["name"]     = "mail_relay_domain";
+
+// Database table
+$liste["table"]    = "mail_relay_domain";
+
+// Index index field of the database table
+$liste["table_idx"]   = "relay_domain_id";
+
+// Search Field Prefix
+$liste["search_prefix"]  = "search_";
+
+// Records per page
+$liste["records_per_page"]  = "15";
+
+// Script File of the list
+$liste["file"]    = "mail_relay_domain_list.php";
+
+// Script file of the edit form
+$liste["edit_file"]   = "mail_relay_domain_edit.php";
+
+// Script File of the delete script
+$liste["delete_file"]  = "mail_relay_domain_del.php";
+
+// Paging Template
+$liste["paging_tpl"]  = "templates/paging.tpl.htm";
+
+// Enable auth
+$liste["auth"]    = "yes";
+
+
+/*****************************************************
+ * Search fields
+ *****************************************************/
+
+/*
+	Datatypes:
+	- INTEGER
+	- DOUBLE
+	- CURRENCY
+	- VARCHAR
+	- TEXT
+	- DATE
+*/
+
+
+$liste["item"][] = array( 'field'  => "active",
+	'datatype' => "VARCHAR",
+	'formtype' => "SELECT",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
+	'width'  => "",
+	'value'  => array('y' => $app->lng('yes_txt'), 'n' => $app->lng('no_txt')));
+
+
+$liste["item"][] = array( 'field'  => "server_id",
+	'datatype' => "VARCHAR",
+	'formtype' => "SELECT",
+	'op'  => "like",
+	'prefix' => "%",
+	'suffix' => "%",
+	'datasource' => array (  'type' => 'SQL',
+		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
+		'keyfield'=> 'server_id',
+		'valuefield'=> 'server_name'
+	),
+	'width'  => "",
+	'value'  => "");
+
+
+$liste["item"][] = array( 'field'  => "domain",
+	'datatype' => "VARCHAR",
+	'formtype' => "TEXT",
+	'op'  => "like",
+	'prefix' => "%",
+	'suffix' => "%",
+	'width'  => "",
+	'value'  => "");
+
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index 48f6eb2e4d5f5ec90bd8f27cec7491147301ec62..f17f74e012f664dec4289db576905fc4921ed6b0 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -440,7 +440,7 @@ class page_action extends tform_actions {
 			}
 		}
 
-		$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $domain);
+		$tmp_user = $app->db->queryOneRecord("SELECT id, policy_id FROM spamfilter_users WHERE email = ?", '@' . $domain);
 		if($tmp_user["id"] > 0) {
 			// There is already a record that we will update
 			if((! $skip_spamfilter_users_update) && ($policy_id != $tmp_user['policy_id'])) {
diff --git a/interface/web/mail/mail_relay_domain_del.php b/interface/web/mail/mail_relay_domain_del.php
new file mode 100644
index 0000000000000000000000000000000000000000..2981d1518d2a62287fed9aa3e68fc169b48e95b0
--- /dev/null
+++ b/interface/web/mail/mail_relay_domain_del.php
@@ -0,0 +1,50 @@
+<?php
+
+/*
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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
+******************************************/
+
+$list_def_file = "list/mail_relay_domain.list.php";
+$tform_def_file = "form/mail_relay_domain.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('mail');
+
+$app->uses("tform_actions");
+$app->tform_actions->onDelete();
+
diff --git a/interface/web/mail/mail_relay_domain_edit.php b/interface/web/mail/mail_relay_domain_edit.php
new file mode 100644
index 0000000000000000000000000000000000000000..131b6fe06af73f19a00eed5bc9e2f43b3352683e
--- /dev/null
+++ b/interface/web/mail/mail_relay_domain_edit.php
@@ -0,0 +1,78 @@
+<?php
+
+/*
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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/mail_relay_domain.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('mail');
+
+//* Only administrators allowed
+if(! $app->auth->is_admin()) { die( $app->lng("non_admin_error") ); }
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+	function onSubmit() {
+		global $app, $conf;
+
+		//* make sure that the email domain is lowercase
+		if(isset($this->dataRecord["domain"])){
+			$this->dataRecord["domain"] = $app->functions->idn_encode($this->dataRecord["domain"]);
+			$this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
+		}
+
+		//* server_id must be > 0
+		if(isset($this->dataRecord["server_id"]) && $this->dataRecord["server_id"] < 1) {
+			$app->tform->errorMessage .= $app->lng("server_id_0_error_txt");
+		}
+
+		parent::onSubmit();
+	}
+
+}
+
+$app->tform_actions = new page_action;
+$app->tform_actions->onLoad();
+
diff --git a/interface/web/mail/mail_relay_domain_list.php b/interface/web/mail/mail_relay_domain_list.php
new file mode 100644
index 0000000000000000000000000000000000000000..56812b75805b5875695b703744d28fc6dbbffc42
--- /dev/null
+++ b/interface/web/mail/mail_relay_domain_list.php
@@ -0,0 +1,51 @@
+<?php
+
+/*
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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.
+*/
+
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/mail_relay_domain.list.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+//* Check permissions for module
+$app->auth->check_module_permissions('mail');
+
+$app->uses('listform_actions');
+
+$app->listform_actions->onLoad();
+
+
diff --git a/interface/web/mail/templates/mail_relay_domain_edit.htm b/interface/web/mail/templates/mail_relay_domain_edit.htm
new file mode 100644
index 0000000000000000000000000000000000000000..2d4d1f304164726292ad760f8511bdbf38add15a
--- /dev/null
+++ b/interface/web/mail/templates/mail_relay_domain_edit.htm
@@ -0,0 +1,26 @@
+        <div class="form-group">
+            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+            <div class="col-sm-9">
+                <select name="server_id" id="server_id" class="form-control">
+                    {tmpl_var name='server_id'}
+                </select>
+            </div>
+        </div>
+        <div class="form-group">
+            <label for="domain" class="col-sm-3 control-label">{tmpl_var name='domain_txt'}</label>
+            <div class="col-sm-9"><input type="text" name="domain" id="domain" value="{tmpl_var name='domain'}" class="form-control" /></div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+            <div class="col-sm-9">
+                {tmpl_var name='active'}
+            </div>
+        </div>
+
+        <input type="hidden" name="id" value="{tmpl_var name='id'}">
+        <input type="hidden" name="access" value="OK">
+
+        <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/mail_relay_domain_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/mail_relay_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+        </div></div>
diff --git a/interface/web/mail/templates/mail_relay_domain_list.htm b/interface/web/mail/templates/mail_relay_domain_list.htm
new file mode 100644
index 0000000000000000000000000000000000000000..4bc201a77b706fe6356f264c10be974b79d8a829
--- /dev/null
+++ b/interface/web/mail/templates/mail_relay_domain_list.htm
@@ -0,0 +1,68 @@
+        <div class='page-header'>
+            <h1><tmpl_var name="list_head_txt"></h1>
+        </div>
+
+        <tmpl_if name='datalog_changes_count' op='>' value='0'>
+        <div>
+            <div class="systemmonitor-state state-info">
+                <div class="status"></div>
+                <div class="statusMsg">
+                    {tmpl_var name="datalog_changes_txt"}
+                    <ul>
+                    <tmpl_loop name="datalog_changes">
+                        <li><strong>{tmpl_var name="text"}:</strong> {tmpl_var name="count"}</li>
+                    </tmpl_loop>
+                    </ul>
+                    {tmpl_var name="datalog_changes_end_txt"}
+                </div>
+            </div><br />
+        </div>
+        </tmpl_if>
+        <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
+
+        <button class="btn btn-default formbutton-success" type="button" data-load-content="mail/mail_relay_domain_edit.php">{tmpl_var name="add_new_record_txt"}</button>
+
+        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
+            <div class="table-wrapper marginTop15">
+<table class="table">
+                <thead class="dark form-group-sm">
+                    <tr>
+                        <th class="tiny-col" data-column="active"><tmpl_var name="active_txt"></th>
+                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
+                        <th data-column="domain"><tmpl_var name="domain_txt"></th>
+                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
+                    </tr>
+                    <tr>
+                        <td><select class="form-control" name="search_active">{tmpl_var name='search_active'}</select></td>
+                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                        <td><input class="form-control" type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
+                        <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/mail_relay_domain_list.php"><span class="icon icon-filter"></span></button>
+                        </td>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tmpl_loop name="records">
+                        <tr>
+                            <td><a href="#" data-load-content="mail/mail_relay_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_relay_domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
+                            <td><a href="#" data-load-content="mail/mail_relay_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_relay_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>
+                    <tmpl_unless name="records">
+                        <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                            <td colspan="4">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                        </tr>
+                    </tmpl_unless>
+                </tbody>
+                <tfoot>
+                    <tr>
+                        <td colspan="4"><tmpl_var name="paging"></td>
+                    </tr>
+                </tfoot>
+            </table>
+</div>
+
diff --git a/interface/web/mailuser/form/mail_user_filter.tform.php b/interface/web/mailuser/form/mail_user_filter.tform.php
index ec693fff36c3b819dbcf8273b53efb99b80804e3..f9f59db31a8942276f22e76f0f2c6aa73281b272 100644
--- a/interface/web/mailuser/form/mail_user_filter.tform.php
+++ b/interface/web/mailuser/form/mail_user_filter.tform.php
@@ -94,7 +94,6 @@ $form["tabs"]['filter'] = 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', 'regex'=>'regex_txt', 'localpart'=>'localpart_txt', 'domain'=>'domain_txt')
 		),
 		'searchterm' => array (
@@ -122,7 +121,7 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\p{Latin}0-9\.\-\_\ \&\/]{0,100}$/u',
+					'regex' => '/^[\p{Latin}0-9\.\'\-\_\ \&\/]{0,100}$/u',
 					'errmsg'=> 'target_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/mailuser/lib/lang/it_index.lng b/interface/web/mailuser/lib/lang/it_index.lng
index b0d9555d651f753191d452782bc99dafdc63cd07..41cd1a2532102f03425824687fb3ad61fd539309 100644
--- a/interface/web/mailuser/lib/lang/it_index.lng
+++ b/interface/web/mailuser/lib/lang/it_index.lng
@@ -1,6 +1,6 @@
 <?php
-$wb['page_head_txt'] = 'Impostazioni casela di posta';
-$wb['page_desc_txt'] = 'Qui puoi editare le impostazioni per gli account email.';
+$wb['page_head_txt'] = 'Impostazioni casella di posta';
+$wb['page_desc_txt'] = 'Qui puoi editare le impostazioni per i profili email.';
 $wb['email_txt'] = 'Indirizzo Email ';
 $wb['login_txt'] = 'Accedi';
 $wb['server_address_txt'] = 'Indirizzo server di posta';
diff --git a/interface/web/mailuser/lib/lang/it_mail_user_cc.lng b/interface/web/mailuser/lib/lang/it_mail_user_cc.lng
index 49c4fe904b803b9e7a60614cbaab8d671462af3a..2bf71b1de93e8807b9570d378b9a84bc391fa783 100644
--- a/interface/web/mailuser/lib/lang/it_mail_user_cc.lng
+++ b/interface/web/mailuser/lib/lang/it_mail_user_cc.lng
@@ -4,9 +4,9 @@ $wb['cc_txt'] = 'Manda copia a';
 $wb['email_txt'] = 'Email';
 $wb['email_txt'] = 'E-mail ricevute da';
 $wb['cc_error_isemail'] = 'Indirizzo e-mail non valido';
-$wb['email_is_cc_error'] = 'Specificare un indirizzo e-mail diverso dalll\'attuale e-mail.';
+$wb['email_is_cc_error'] = 'Specificare un indirizzo e-mail diverso dall\'attuale e-mail.';
 $wb['name_optional_txt'] = '(Opzionale)';
 $wb['cc_note_txt'] = '(Separare con una virgola e-mail multiple)';
-$wb['forward_in_lda_txt'] = 'Copy during delivery';
-$wb['tooltip_forward_in_lda_txt'] = 'Controls if mail copy is forwarded before or during delivery to mailbox.';
+$wb['forward_in_lda_txt'] = 'Copia durante la consegna';
+$wb['tooltip_forward_in_lda_txt'] = 'Controlla se copia della mail viene inoltrata prima o durante la consegna alla casella di posta.';
 ?>
diff --git a/interface/web/mailuser/lib/lang/it_mail_user_filter.lng b/interface/web/mailuser/lib/lang/it_mail_user_filter.lng
index 77f47f1c4c456541d6d8bf827ac22ea3c5566cd3..6a1ec61d52c7be44716354c444d3b1c7c4e31c5e 100644
--- a/interface/web/mailuser/lib/lang/it_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/it_mail_user_filter.lng
@@ -18,8 +18,8 @@ $wb['ends_with_txt'] = 'Termina con';
 $wb['move_to_txt'] = 'Sposta in';
 $wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Elimina';
-$wb['mailbox_filter_txt'] = 'Mailbox filter';
-$wb['header_txt'] = 'Header';
-$wb['size_over_txt'] = 'Email size over (KB)';
-$wb['size_under_txt'] = 'Email size under (KB)';
+$wb['mailbox_filter_txt'] = 'Mailbox filtro';
+$wb['header_txt'] = 'Intestazione';
+$wb['size_over_txt'] = 'dimensione Email sopra (KB)';
+$wb['size_under_txt'] = 'dimensione Email sotto (KB)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/it_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/it_mail_user_filter_list.lng
index e391368e0994e0a00776a9c9fbcdc39488fd1cbb..7970040a867cbc8c9d7681eee32a8d2d6a082c7d 100644
--- a/interface/web/mailuser/lib/lang/it_mail_user_filter_list.lng
+++ b/interface/web/mailuser/lib/lang/it_mail_user_filter_list.lng
@@ -1,8 +1,8 @@
 <?php
-$wb['list_head_txt'] = 'Email filter rules';
+$wb['list_head_txt'] = 'Regole di filtro della Email';
 $wb['rulename_txt'] = 'Nome';
 $wb['add_new_record_txt'] = 'Aggiungi un nuovo  Filter';
-$wb['page_txt'] = 'Page';
-$wb['page_of_txt'] = 'of';
-$wb['delete_confirmation'] = 'Do you really want to delete the mailfilter?';
+$wb['page_txt'] = 'Pagina';
+$wb['page_of_txt'] = 'di';
+$wb['delete_confirmation'] = 'Vuoi veramente cancellare il filtro della mail??';
 ?>
diff --git a/interface/web/mailuser/lib/lang/it_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/it_mail_user_spamfilter.lng
index 17c811f115ea70ab786cc8cad68ff27daab42536..96cd80f04afe9668baf49fcf3919188398ccf393 100644
--- a/interface/web/mailuser/lib/lang/it_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/it_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Filtro SPAM';
 $wb['spamfilter_txt'] = 'Filtro SPAM';
 $wb['email_txt'] = 'E-mail';
-$wb['inherit_policy'] = '- Inherit domain setting -';
-$wb['policy_txt'] = 'Policy';
+$wb['inherit_policy'] = '- Ingloba le impostazioni del dominio -';
+$wb['policy_txt'] = 'Politica';
 ?>
diff --git a/interface/web/monitor/lib/lang/ar_syslog_list.lng b/interface/web/monitor/lib/lang/ar_syslog_list.lng
index 00da5abc7bf7d0ccecbc908db94a12b61b6baa91..256c0cb1ec313cb0af47557ca959f3de97b24684 100644
--- a/interface/web/monitor/lib/lang/ar_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/ar_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Date';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Loglevel';
 $wb['message_txt'] = 'Message';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/bg_syslog_list.lng b/interface/web/monitor/lib/lang/bg_syslog_list.lng
index 98ac28c0a7b023aea0ff5600caa5361e966233f4..ceec6c7d72d52dd3f0ca11ea535f4a374656b9a5 100644
--- a/interface/web/monitor/lib/lang/bg_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/bg_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Дата';
 $wb['server_id_txt'] = 'Сървър';
 $wb['loglevel_txt'] = 'Loglevel';
 $wb['message_txt'] = 'Съобщение';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/br_syslog_list.lng b/interface/web/monitor/lib/lang/br_syslog_list.lng
index 18543c9ad39af92ce26f71d4cdd69c57031d3086..24118b48302b57b9ccff0445ebc2a2d83fe14c4e 100644
--- a/interface/web/monitor/lib/lang/br_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/br_syslog_list.lng
@@ -4,3 +4,7 @@ $wb['tstamp_txt'] = 'Data/hora';
 $wb['server_id_txt'] = 'Servidor';
 $wb['loglevel_txt'] = 'Nível';
 $wb['message_txt'] = 'Mensagem';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
+?>
diff --git a/interface/web/monitor/lib/lang/ca_syslog_list.lng b/interface/web/monitor/lib/lang/ca_syslog_list.lng
index 1b01a35df796d384b2e5ddd20fef5fa05c4dfc76..19396b5ca257d1aefcffd22e2b399bdda16301ce 100644
--- a/interface/web/monitor/lib/lang/ca_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/ca_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Date';
 $wb['server_id_txt'] = 'Serveur';
 $wb['loglevel_txt'] = 'Niveau de log ';
 $wb['message_txt'] = 'Message';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz_syslog_list.lng b/interface/web/monitor/lib/lang/cz_syslog_list.lng
index 5d5ce8f8c17b5d1af656fd454e0fba0d90553459..5fa66e066e51cd228c5f577d4a49c9d7645ad804 100644
--- a/interface/web/monitor/lib/lang/cz_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/cz_syslog_list.lng
@@ -4,3 +4,7 @@ $wb['tstamp_txt'] = 'Datum';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Úroveň protokolu';
 $wb['message_txt'] = 'Zpráva';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
+?>
diff --git a/interface/web/monitor/lib/lang/de_syslog_list.lng b/interface/web/monitor/lib/lang/de_syslog_list.lng
index 4aa045a24bfe1aaa8fc20a9b8640e382002a7162..6ee36a677bbdb35401f07cf1c37a0267abfebf4c 100644
--- a/interface/web/monitor/lib/lang/de_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/de_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Datum';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Protokoll-Level';
 $wb['message_txt'] = 'Nachricht';
+$wb['batch_delete_errors_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/dk_syslog_list.lng b/interface/web/monitor/lib/lang/dk_syslog_list.lng
index e1b067bfe3e5afeec224553e680665c46ea6e2fa..22fbadfd1d3b9c5c218f730206a3c73efba9f68d 100644
--- a/interface/web/monitor/lib/lang/dk_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/dk_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Dato';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Loglevel';
 $wb['message_txt'] = 'Meddelelse';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/el_syslog_list.lng b/interface/web/monitor/lib/lang/el_syslog_list.lng
index c2db4823dd51ad0bc68d1aaf1ce9dfa90fe0dade..1eb4831e889f3fd05e31461144ad8519ea93cbcc 100644
--- a/interface/web/monitor/lib/lang/el_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/el_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Ημερομηνία';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Επίπεδο καταγραφής';
 $wb['message_txt'] = 'Μήνυμα';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/en_syslog_list.lng b/interface/web/monitor/lib/lang/en_syslog_list.lng
index d85ab8d40fde1c9b002e481cfb2078dd24299f80..256c0cb1ec313cb0af47557ca959f3de97b24684 100644
--- a/interface/web/monitor/lib/lang/en_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/en_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Date';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Loglevel';
 $wb['message_txt'] = 'Message';
-?>
\ No newline at end of file
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
+?>
diff --git a/interface/web/monitor/lib/lang/es_syslog_list.lng b/interface/web/monitor/lib/lang/es_syslog_list.lng
index 355b1cffdf9d9b13f9224fd5ddb5a8f4bd9b3516..38cb93e098d57325b00bb5a8d55ff8421fa3d9f5 100644
--- a/interface/web/monitor/lib/lang/es_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/es_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['loglevel_txt'] = 'Nivel de registro';
 $wb['message_txt'] = 'Mensaje';
 $wb['server_id_txt'] = 'Servidor';
 $wb['tstamp_txt'] = 'Fecha';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/fi_syslog_list.lng b/interface/web/monitor/lib/lang/fi_syslog_list.lng
index 54aaa4e30695755e5408424a15ccc36a2434f05b..842ed0133552c658960081bc985a7ca36d585d87 100644
--- a/interface/web/monitor/lib/lang/fi_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/fi_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Päiväys';
 $wb['server_id_txt'] = 'Palvelin';
 $wb['loglevel_txt'] = 'Lokitaso';
 $wb['message_txt'] = 'Viesti';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/fr_syslog_list.lng b/interface/web/monitor/lib/lang/fr_syslog_list.lng
index 1b01a35df796d384b2e5ddd20fef5fa05c4dfc76..19396b5ca257d1aefcffd22e2b399bdda16301ce 100644
--- a/interface/web/monitor/lib/lang/fr_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/fr_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Date';
 $wb['server_id_txt'] = 'Serveur';
 $wb['loglevel_txt'] = 'Niveau de log ';
 $wb['message_txt'] = 'Message';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/hr_syslog_list.lng b/interface/web/monitor/lib/lang/hr_syslog_list.lng
index 83c5fcdf49e592af6984ce81fb388d01757394e8..8a62c6248906616780554da673661e79a9f5ea06 100644
--- a/interface/web/monitor/lib/lang/hr_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/hr_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Datum';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Logovi';
 $wb['message_txt'] = 'Poruka';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/hu_syslog_list.lng b/interface/web/monitor/lib/lang/hu_syslog_list.lng
index 65480b9d71688f3ca842686ca9caab35a9c5cef7..21ef2bfcdf9f0933bd0bebaa1877e1b810ba1f20 100644
--- a/interface/web/monitor/lib/lang/hu_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/hu_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Dátum';
 $wb['server_id_txt'] = 'Szerver';
 $wb['loglevel_txt'] = 'Naplózási szint';
 $wb['message_txt'] = 'Ãœzenet';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/id_syslog_list.lng b/interface/web/monitor/lib/lang/id_syslog_list.lng
index c523a55a2b924b37da1c3e646e4757b1062019f5..a06f5e3d711c1ef986b2ece88601729750390651 100644
--- a/interface/web/monitor/lib/lang/id_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/id_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Tanggal';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Tingkatan Log';
 $wb['message_txt'] = 'Pesan';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_list.lng b/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
index f1ba8c67b8eed44c916f66d91ec4bd7a1af49872..26138fba2503ea9a37ee24d3a3e010b82e6e6d83 100644
--- a/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_list.lng
@@ -2,7 +2,7 @@
 $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';
+$wb['dbtable_txt'] = 'Tabella DB';
+$wb['action_txt'] = 'Azione';
+$wb['status_txt'] = 'Stato';
 ?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng
index 0e040a3e77d48b89a779f7c7d3fb4198df0fe02e..32b9fb57a0e28b678d62f16be4534a087cc32219 100644
--- a/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_undo.lng
@@ -1,7 +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';
+$wb['list_head_txt'] = 'Elemento della History';
+$wb['success_txt'] = 'Annulla modifica eseguit con successo';
+$wb['error_txt'] = 'Errore durinte annulla modifica: il record non è più presente';
+$wb['error_undelete_txt'] = 'Errore durinte annulla modifica: il record con ID primario è già presente.';
+$wb['btn_cancel_txt'] = 'Indietro';
 ?>
diff --git a/interface/web/monitor/lib/lang/it_dataloghistory_view.lng b/interface/web/monitor/lib/lang/it_dataloghistory_view.lng
index df9ddd286f46e816e06132e7465929ab8dd87229..3951e6b87302df1403271b43dacd651000aca383 100644
--- a/interface/web/monitor/lib/lang/it_dataloghistory_view.lng
+++ b/interface/web/monitor/lib/lang/it_dataloghistory_view.lng
@@ -1,26 +1,26 @@
 <?php
-$wb['i'] = 'Insert';
-$wb['u'] = 'Update';
-$wb['d'] = 'Delete';
-$wb['list_head_txt'] = 'Data Log History Entry';
+$wb['i'] = 'Inserisci';
+$wb['u'] = 'Aggiorna';
+$wb['d'] = 'Cancella';
+$wb['list_head_txt'] = 'Elemento ddella Log History';
 $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?';
+$wb['timestamp_txt'] = 'Data/Ora';
+$wb['table_txt'] = 'Tabella';
+$wb['action_txt'] = 'Azione';
+$wb['session_id_txt'] = 'ID di Sessione';
+$wb['fields_txt'] = 'Campi';
+$wb['fields_inserted_txt'] = 'Campi inseriti';
+$wb['fields_updated_txt'] = 'Campi aggiornati';
+$wb['fields_deleted_txt'] = 'Campi cancellati';
+$wb['no_changes_txt'] = 'Nessun cambiamento (risincronizza)';
+$wb['is_diff_txt'] = 'Le differenze sono evidenziate';
+$wb['is_diff_inserts_txt'] = 'Inserimenti';
+$wb['is_diff_deletes_txt'] = 'Cancellazioni';
+$wb['field_txt'] = 'Campo';
+$wb['value_txt'] = 'Valore';
+$wb['old_txt'] = 'Precedente';
+$wb['new_txt'] = 'Nuovo';
+$wb['btn_cancel_txt'] = 'Indietro';
+$wb['undo_txt'] = 'Annulla modifica';
+$wb['undo_confirmation_txt'] = 'Vuoi veramente annullare la modifica?';
 ?>
diff --git a/interface/web/monitor/lib/lang/it_syslog_list.lng b/interface/web/monitor/lib/lang/it_syslog_list.lng
index 65ff6fc7c552d15eb69bb3f4282042edd3e85a5e..c67c716e3b4046a2c8e663ef7de4e09f93e7c0cc 100644
--- a/interface/web/monitor/lib/lang/it_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/it_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Data';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Livello log';
 $wb['message_txt'] = 'Messaggio';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/ja_syslog_list.lng b/interface/web/monitor/lib/lang/ja_syslog_list.lng
index 598b8d451a841ed13be696f3fc870225621660c4..bda73f402b2df2965fe579c810f7673ddae4b9b3 100644
--- a/interface/web/monitor/lib/lang/ja_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/ja_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = '日付';
 $wb['server_id_txt'] = 'サーバー';
 $wb['loglevel_txt'] = 'ログレベル';
 $wb['message_txt'] = 'メッセージ';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/nl_syslog_list.lng b/interface/web/monitor/lib/lang/nl_syslog_list.lng
index 7e2fa4a45f8c34b362715a31b5c320598ccf7cb1..b084d9120d8b29230add3d3bdee48465ea4fbd11 100644
--- a/interface/web/monitor/lib/lang/nl_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/nl_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Datum';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Log niveau';
 $wb['message_txt'] = 'Bericht';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/pl_syslog_list.lng b/interface/web/monitor/lib/lang/pl_syslog_list.lng
index e37799c4749129e4ff2e372ce82257cbbf046d4a..efd50405ed247a2c7b5d64a975e73b59efe8d15e 100644
--- a/interface/web/monitor/lib/lang/pl_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/pl_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Data';
 $wb['server_id_txt'] = 'Serwer';
 $wb['loglevel_txt'] = 'Poziom logowania';
 $wb['message_txt'] = 'Wiadomość';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/pt_syslog_list.lng b/interface/web/monitor/lib/lang/pt_syslog_list.lng
index 23f3c6d5daf43245f060b7de39004ede9e1895d4..9d9189d72056ed971ada50b9a2561969862b7323 100644
--- a/interface/web/monitor/lib/lang/pt_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/pt_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Data';
 $wb['server_id_txt'] = 'Servidor';
 $wb['loglevel_txt'] = 'Nível do Log';
 $wb['message_txt'] = 'Mensagem';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/ro_syslog_list.lng b/interface/web/monitor/lib/lang/ro_syslog_list.lng
index 572095d8da102edfb955ff717d338980956f4dea..617fbed9b9ab02caefdf4e88f2632aa8e7f4cb10 100644
--- a/interface/web/monitor/lib/lang/ro_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/ro_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Data';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Loglevel';
 $wb['message_txt'] = 'Mesaj';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/ru_syslog_list.lng b/interface/web/monitor/lib/lang/ru_syslog_list.lng
index 242d06f3e313d081d9b4c296790198fe8a58fa29..adeed60a3c0caf7dd9a92044256e92f4bfe83eee 100644
--- a/interface/web/monitor/lib/lang/ru_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/ru_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Отметка времени';
 $wb['server_id_txt'] = 'Сервер';
 $wb['loglevel_txt'] = 'Уровень журналирования';
 $wb['message_txt'] = 'Сообщение';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/se_syslog_list.lng b/interface/web/monitor/lib/lang/se_syslog_list.lng
index 6c7268cb76d9593096cceeca771759a2d7a568da..c0ad7a2466a666ed1e2a7c77f7e9a662e9e48aae 100644
--- a/interface/web/monitor/lib/lang/se_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/se_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Datum';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Loggnivå';
 $wb['message_txt'] = 'Meddelande';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/sk_syslog_list.lng b/interface/web/monitor/lib/lang/sk_syslog_list.lng
index e3a800c8c11d6d6558e8a92678b7d9a07ca3e29c..5a01e6bef694d7f415e8e460d7493aaa8e504c8d 100644
--- a/interface/web/monitor/lib/lang/sk_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/sk_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Dátum';
 $wb['server_id_txt'] = 'Server';
 $wb['loglevel_txt'] = 'Úroveň logovania';
 $wb['message_txt'] = 'Správa';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/lib/lang/tr_syslog_list.lng b/interface/web/monitor/lib/lang/tr_syslog_list.lng
index b961014e86e88bf3193397e0b2927d2b7b64e6ab..67a63387fa9ccbe1567a9a0c5a27f7183a076190 100644
--- a/interface/web/monitor/lib/lang/tr_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/tr_syslog_list.lng
@@ -4,4 +4,7 @@ $wb['tstamp_txt'] = 'Tarih';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['loglevel_txt'] = 'Günlükleme Düzeyi';
 $wb['message_txt'] = 'Ä°leti';
+$wb['batch_delete_warnings_txt'] = 'Remove all warnings';
+$wb['batch_delete_errors_txt'] = 'Remove all errors';
+$wb['batch_delete_confirmation'] = 'Are you sure you want to acknowledge all log entries?';
 ?>
diff --git a/interface/web/monitor/log_del.php b/interface/web/monitor/log_del.php
index 40fe185977ed37c2131b87078233bd612045111c..ec6b9442eb5823938f4ea2e996b9c61c31c25006 100644
--- a/interface/web/monitor/log_del.php
+++ b/interface/web/monitor/log_del.php
@@ -34,8 +34,14 @@ require_once '../../lib/app.inc.php';
 //* Check permissions for module
 $app->auth->check_module_permissions('monitor');
 
-$syslog_id = $app->functions->intval($_GET['id']);
-$app->db->query("UPDATE sys_log SET loglevel = 0 WHERE syslog_id = ?", $syslog_id);
+$type = $app->functions->intval($_GET['type']);
+if ($type == "batch") {
+  $loglevel = $app->functions->intval($_GET['loglevel']);
+  $app->db->query("UPDATE sys_log SET loglevel = 0 WHERE loglevel = ?", $loglevel);
+} else {
+  $syslog_id = $app->functions->intval($_GET['id']);
+  $app->db->query("UPDATE sys_log SET loglevel = 0 WHERE syslog_id = ?", $syslog_id);
+}
 
 header('Location: log_list.php');
 exit;
diff --git a/interface/web/monitor/templates/syslog_list.htm b/interface/web/monitor/templates/syslog_list.htm
index 7196e3ab02bbeb413c994b2eaaeafdb54e8bf72e..087af5cdc953f4036a25598cdcd5bc7c1a7b715d 100644
--- a/interface/web/monitor/templates/syslog_list.htm
+++ b/interface/web/monitor/templates/syslog_list.htm
@@ -1,59 +1,85 @@
 <div class='page-header'>
-	<h1><tmpl_var name="list_head_txt"></h1>
+	<h1>
+		<tmpl_var name="list_head_txt">
+	</h1>
 </div>
-<p><tmpl_var name="list_desc_txt"></p>
+<p>
+	<tmpl_var name="list_desc_txt">
+</p>
 
+<a class="btn btn-default formbutton-danger"
+		href="javascript: ISPConfig.confirm_action('monitor/log_del.php?type=batch&loglevel=1&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='batch_delete_confirmation'}');"><span
+			class="icon icon-delete"></span> {tmpl_var name='batch_delete_warnings_txt'}</a>
+	<a class="btn btn-default formbutton-danger"
+		href="javascript: ISPConfig.confirm_action('monitor/log_del.php?type=batch&loglevel=2&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='batch_delete_confirmation'}');"><span
+			class="icon icon-delete"></span> {tmpl_var name='batch_delete_errors_txt'}</a>
+<p class="fieldset-legend">
+	<tmpl_var name="list_head_txt">
+</p>
+<div class="table-wrapper marginTop15">
+	<table class="table">
+		<thead class="dark form-group-sm">
+			<tr>
+				<th data-column="tstamp">
+					<tmpl_var name="tstamp_txt">
+				</th>
+				<th data-column="server_id">
+					<tmpl_var name="server_id_txt">
+				</th>
+				<th data-column="loglevel">
+					<tmpl_var name="loglevel_txt">
+				</th>
+				<th data-column="message">
+					<tmpl_var name="message_txt">
+				</th>
+				<th class="small-col text-right">{tmpl_var name='search_limit'}</th>
+			</tr>
+			<tr>
+				<td>&nbsp;</td>
+				<td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+				<td><select class="form-control" name="search_loglevel">{tmpl_var name='search_loglevel'}</select></td>
+				<td><input class="form-control" type="text" name="search_message" value="{tmpl_var name='search_message'}" /></td>
+				<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="monitor/log_list.php"><span
+							class="icon icon-filter"></span></button>
+				</td>
+			</tr>
+		</thead>
+		<tbody>
+			<tmpl_loop name="records">
+				<tr>
+					<td>{tmpl_var name="tstamp"}</td>
+					<td>{tmpl_var name="server_id"}</td>
+					<td>{tmpl_var name="loglevel"}</td>
+					<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'}&_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'}&_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>
+			<tmpl_unless name="records">
+				<tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+					<td colspan="5">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+				</tr>
+			</tmpl_unless>
+		</tbody>
+		<tfoot>
+			<tr>
+				<td colspan="5">
+					<tmpl_var name="paging">
+				</td>
+			</tr>
+		</tfoot>
+	</table>
+</div>
 
-        <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
-            <div class="table-wrapper marginTop15">
-<table class="table">
-                <thead class="dark form-group-sm">
-                    <tr>
-                        <th data-column="tstamp"><tmpl_var name="tstamp_txt"></th>
-                        <th data-column="server_id"><tmpl_var name="server_id_txt"></th>
-                        <th data-column="loglevel"><tmpl_var name="loglevel_txt"></th>
-                        <th data-column="message"><tmpl_var name="message_txt"></th>
-                        <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
-                    </tr>
-                    <tr>
-                        <td>&nbsp;</td>
-                        <td><select class="form-control" name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
-                        <td><select class="form-control" name="search_loglevel">{tmpl_var name='search_loglevel'}</select></td>
-                        <td><input class="form-control" type="text" name="search_message" value="{tmpl_var name='search_message'}" /></td>
-                        <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="monitor/log_list.php"><span class="icon icon-filter"></span></button>
-                        </td>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tmpl_loop name="records">
-                        <tr>
-                            <td>{tmpl_var name="tstamp"}</td>
-                            <td>{tmpl_var name="server_id"}</td>
-                            <td>{tmpl_var name="loglevel"}</td>
-                            <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'}&_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'}&_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>
-                    <tmpl_unless name="records">
-                        <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
-                            <td colspan="5">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
-                        </tr>
-                    </tmpl_unless>
-                </tbody>
-                <tfoot>
-                <tr>
-                    <td colspan="5"><tmpl_var name="paging"></td>
-                </tr>
-                </tfoot>
-            </table>
 </div>
-        
-    </div>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/ar_web_backup_list.lng b/interface/web/sites/lib/lang/ar_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/ar_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ar_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/bg_web_backup_list.lng b/interface/web/sites/lib/lang/bg_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/bg_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/bg_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
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 77580e3cc62b8df480a72db72c6c210c027063c4..f718769c44599ababccf1edde36c5aef2b05cf85 100644
--- a/interface/web/sites/lib/lang/br_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/br_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Backup manual';
 $wb['make_backup_web_txt'] = 'Criar backup dos arquivos Web';
 $wb['make_backup_database_txt'] = 'Criar backup dos bancos de dados';
 $wb['make_backup_confirm_txt'] = 'Você está prestes a iniciar um processo de backup manual. Os backups manuais contam para o número total de cópias de backup permitidas: portanto, se o limite for excedido, os backups mais antigos podem ser excluídos automaticamente. Continuar?';
+$wb['final_size_txt'] = 'O tamanho final do download pode variar dependendo do formato de compressão selecionado.';
 $wb['yes_txt'] = 'Sim';
 $wb['no_txt'] = 'Não';
 $wb['backup_is_encrypted_txt'] = 'Criptografado';
diff --git a/interface/web/sites/lib/lang/ca_web_backup_list.lng b/interface/web/sites/lib/lang/ca_web_backup_list.lng
index af33c311422dfc75d603491e7b66162a31168fb9..fbb0495a986d8d7f4588006f201443582adb7874 100644
--- a/interface/web/sites/lib/lang/ca_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ca_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
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 e6f80dac093d38de6d210d16190bff3ae811de7b..d06d69fa2df15fa62cadb2ccbc70fc05358d5c65 100644
--- a/interface/web/sites/lib/lang/cz_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/cz_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Ruční zálohování';
 $wb['make_backup_web_txt'] = 'Vytvořit zálohu webových souborů';
 $wb['make_backup_database_txt'] = 'Vytvořit zálohu databází';
 $wb['make_backup_confirm_txt'] = 'Chystáte se zahájit proces ručního zálohování. Ruční zálohy se započítávají do celkového počtu povolených záložních kopií: proto pokud bude limit překročen, mohou být nejstarší zálohy automaticky odstraněny. Pokračovat ?';
+$wb['final_size_txt'] = 'Konečná velikost stahování se může lišit v závislosti na zvoleném kompresním formátu.';
 $wb['yes_txt'] = 'Ano';
 $wb['no_txt'] = 'Ne';
 $wb['backup_is_encrypted_txt'] = 'Šifrované';
diff --git a/interface/web/sites/lib/lang/de_web_backup_list.lng b/interface/web/sites/lib/lang/de_web_backup_list.lng
index 790156206ad075ce1f49c51b113bada9f9eb2d5c..11ebcd0645ecc950b456a31491325a58bad18682 100644
--- a/interface/web/sites/lib/lang/de_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/de_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/dk_web_backup_list.lng b/interface/web/sites/lib/lang/dk_web_backup_list.lng
index ba5b7234f8426856ea2b70dcc40336a70b79849b..1529fa1a96d9bbef512bf9db216bfce598f601e9 100644
--- a/interface/web/sites/lib/lang/dk_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/dk_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/el_web_backup_list.lng b/interface/web/sites/lib/lang/el_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/el_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/el_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/en_web_backup_list.lng b/interface/web/sites/lib/lang/en_web_backup_list.lng
index f2cde7f216def69746314b2c67f2040e4f4044cf..571f3959b8fbf4ac53d8469d870e75ccf64d75a5 100644
--- a/interface/web/sites/lib/lang/en_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/en_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/es_web_backup_list.lng b/interface/web/sites/lib/lang/es_web_backup_list.lng
index 61a7e83cb1c2bdc63308c1aa968facd26eeab4f8..fb8a547202bc615ab70d7c69e46a193df5f03a05 100644
--- a/interface/web/sites/lib/lang/es_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/es_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/fi_web_backup_list.lng b/interface/web/sites/lib/lang/fi_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/fi_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/fi_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/fr_web_backup_list.lng b/interface/web/sites/lib/lang/fr_web_backup_list.lng
index 1c3bd84662408614ce432caa71cf7bed1766f459..49da9188a10397bd2b45f41840dcf89690ce21ef 100644
--- a/interface/web/sites/lib/lang/fr_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/fr_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/hr_web_backup_list.lng b/interface/web/sites/lib/lang/hr_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/hr_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/hr_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/hu_web_backup_list.lng b/interface/web/sites/lib/lang/hu_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/hu_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/hu_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/id_web_backup_list.lng b/interface/web/sites/lib/lang/id_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/id_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/id_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/it_aps.lng b/interface/web/sites/lib/lang/it_aps.lng
index 0a6365f98f2b1eee54e80e88d6b59223347ca661..b075afda16dd47621d3c6287e92cae276a4d4d61 100644
--- a/interface/web/sites/lib/lang/it_aps.lng
+++ b/interface/web/sites/lib/lang/it_aps.lng
@@ -35,7 +35,7 @@ $wb['package_settings_txt'] = 'Impostazioni Pacchetto';
 $wb['error_main_domain'] = 'Il dominio del percorso di installazione è errato.';
 $wb['error_no_main_location'] = 'Hai fornito un percorso di installazione non valido.';
 $wb['error_inv_main_location'] = 'La cartella di installazione fornita non è valida.';
-$wb['error_license_agreement'] = 'Per poter proseguire è necessario che prendi visione ed accetti l accordi di licenza.';
+$wb['error_license_agreement'] = 'Per poter proseguire è necessario che prendi visione ed accetti gli accordi di licenza.';
 $wb['error_no_database_pw'] = 'La password fornita non è valida.';
 $wb['error_short_database_pw'] = 'Per favore scegli una password di database più lunga.';
 $wb['error_no_value_for'] = 'Il campo \\"%s\\" non può essere vuoto.';
@@ -45,8 +45,8 @@ $wb['error_inv_value_for'] = 'Hai inserito un valore non valido per il campo \\"
 $wb['error_inv_email_for'] = 'Hai inserito un indirizzo email non valido per il campo \\"%s\\".';
 $wb['error_inv_domain_for'] = 'Hai inserito un dominio non valido per il campo \\"%s\\".';
 $wb['error_inv_integer_for'] = 'Hai inserito un numero non valido per il campo  \\"%s\\".';
-$wb['error_inv_float_for'] = 'Hai inserito un numero di floating point non valido per il campo \\"%s\\".';
-$wb['error_used_location'] = 'L installazione della patch  contiene già un pacchetto di installazione.';
+$wb['error_inv_float_for'] = 'Hai inserito un numero decimale non valido per il campo \\"%s\\".';
+$wb['error_used_location'] = 'L\'installazione della patch contiene già un pacchetto di installazione.';
 $wb['installation_task_txt'] = 'Installazione pianificata';
 $wb['installation_error_txt'] = 'Errore di installazione';
 $wb['installation_success_txt'] = 'Installato';
@@ -54,7 +54,7 @@ $wb['installation_remove_txt'] = 'Rimozione pianificata';
 $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['limit_aps_txt'] = 'Nmero massimo di istanza APS raggiunto per il tuo profilo.';
 $wb['generate_password_txt'] = 'Genera Password';
 $wb['repeat_password_txt'] = 'Ripeti Password';
 $wb['password_mismatch_txt'] = 'Le password non coincidono.';
diff --git a/interface/web/sites/lib/lang/it_backup_stats_list.lng b/interface/web/sites/lib/lang/it_backup_stats_list.lng
index 65792aa591054d676f942164b40a0c7c3696825c..34645126a3be92d1e7a45970e34082a426d3871f 100644
--- a/interface/web/sites/lib/lang/it_backup_stats_list.lng
+++ b/interface/web/sites/lib/lang/it_backup_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'Backup Stats';
+$wb['list_head_txt'] = 'Backup Statistiche';
 $wb['database_name_txt'] = '';
-$wb['active_txt'] = 'Active';
-$wb['domain_txt'] = 'Domain';
-$wb['backup_count_txt'] = 'Backup count';
+$wb['active_txt'] = 'Attivo';
+$wb['domain_txt'] = 'Dominio';
+$wb['backup_count_txt'] = 'Numero di Backup';
 $wb['backup_server_txt'] = 'Server';
-$wb['backup_interval_txt'] = 'Interval / cnt.';
-$wb['backup_size_txt'] = 'Backupsize';
+$wb['backup_interval_txt'] = 'Intervallo / cnt.';
+$wb['backup_size_txt'] = 'Dimensione Backup';
 ?>
diff --git a/interface/web/sites/lib/lang/it_cron.lng b/interface/web/sites/lib/lang/it_cron.lng
index 1ecf489fe6fed6713e8a05b8af201cb8c056a784..ee38450186d2b0fcc92669cf560f27986c89f86e 100644
--- a/interface/web/sites/lib/lang/it_cron.lng
+++ b/interface/web/sites/lib/lang/it_cron.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['server_id_txt'] = 'Server';
-$wb['parent_domain_id_txt'] = 'Parent website';
+$wb['parent_domain_id_txt'] = 'Sito Web genitore';
 $wb['active_txt'] = 'Attivo';
 $wb['client_txt'] = 'Cliente';
 $wb['run_min_txt'] = 'Minuti';
@@ -8,7 +8,7 @@ $wb['run_hour_txt'] = 'Ore';
 $wb['run_mday_txt'] = 'Giorni del mese';
 $wb['run_month_txt'] = 'Mesi';
 $wb['run_wday_txt'] = 'Giorni della settimana';
-$wb['command_txt'] = 'Comando da lanciare(comandi eseguiti via sh, urls via wget)';
+$wb['command_txt'] = 'Comando da lanciare (comandi eseguiti via sh, urls via wget)';
 $wb['limit_cron_txt'] = 'Hai raggiunto il numero massimo di cron jobs.';
 $wb['limit_cron_frequency_txt'] = 'La frequenza del cron job supera il limite consentito.';
 $wb['run_min_error_format'] = 'Formato non valido per minuti.';
@@ -21,6 +21,6 @@ $wb['unknown_fieldtype_error'] = 'Campo sconosciuto.';
 $wb['server_id_error_empty'] = 'Server ID  vuoto.';
 $wb['limit_cron_url_txt'] = 'Solo URL cron. Per cortesia inserire una URL che inizi con https:// come comando cron.';
 $wb['command_error_empty'] = 'Command  vuoto.';
-$wb['command_hint_txt'] = 'e.g. /var/www/clients/clientX/webY/myscript.sh or https://www.mydomain.com/path/script.php, you can use [web_root] placeholder that is replaced by /var/www/clients/clientX/webY/web.';
+$wb['command_hint_txt'] = 'esempio: /var/www/clients/clientX/webY/myscript.sh o https://www.mydomain.com/path/script.php, puoi usare [web_root] come sostitutivo che viene rimpiazzato da /var/www/clients/clientX/webY/web.';
 $wb['log_output_txt'] = 'Log output';
 ?>
diff --git a/interface/web/sites/lib/lang/it_database.lng b/interface/web/sites/lib/lang/it_database.lng
index 007daaa00235c329cb627d15acb61dfb60e8a7ce..ba9be340915fc9313dc302ce08c5bd1f7df14fb4 100644
--- a/interface/web/sites/lib/lang/it_database.lng
+++ b/interface/web/sites/lib/lang/it_database.lng
@@ -10,7 +10,7 @@ $wb['remote_access_txt'] = 'Accesso remoto';
 $wb['client_txt'] = 'Cliente';
 $wb['active_txt'] = 'Attivo';
 $wb['database_name_error_empty'] = 'Il nome database è vuoto.';
-$wb['database_name_error_unique'] = 'Esiste già un nome di database con questo nome sul server. Per ottenere un nome unico, ad esempio. preponi il nome del tuo dominio al nome di database.';
+$wb['database_name_error_unique'] = 'Esiste già un database con questo nome sul server. Per ottenere un nome unico, ad esempio, preponi il nome del tuo dominio al nome di database.';
 $wb['database_name_error_regex'] = 'Nome database non valido. Il nome database può contenere i seguenti caratteri: a-z, A-Z, 0-9 e underscore. Lungheezza: 2 - 64 caratteri.';
 $wb['database_user_error_empty'] = 'Utente Database vuoto.';
 $wb['database_user_error_unique'] = 'Esiste già un utente di database con questo nome sul server. Per ottenere un nome unico, ad esempio. preponi il nome del tuo dominio al nome utente.';
@@ -18,7 +18,7 @@ $wb['database_user_error_regex'] = 'Nome utente database non valido. Il nome ute
 $wb['limit_database_txt'] = 'Numero massimo di databases raggiunto.';
 $wb['database_name_change_txt'] = 'Il nome di database non può essere modificato';
 $wb['database_charset_change_txt'] = 'Il charset per il database non può essere modificato';
-$wb['remote_ips_txt'] = 'Accesso IP remoti(separa con , e lascia campo vuoto per <i>qualunque</i>)';
+$wb['remote_ips_txt'] = 'Accesso IP remoti (separa con , e lascia campo vuoto per <i>qualunque</i>)';
 $wb['database_remote_error_ips'] = 'Almeno uno degli indirizzi IP inseriti non è valido.';
 $wb['database_name_error_len'] = 'Nome Database - {db} - troppo lungo. La lunghezza massima compreso il prefisso è di 64 caratteri.';
 $wb['database_user_error_len'] = 'Nome utente Database - {user}- troppo lungo. La lunghezza massima compreso il prefisso è di 16 caratteri.';
@@ -33,7 +33,7 @@ $wb['password_mismatch_txt'] = 'Le password non coincidono.';
 $wb['password_match_txt'] = 'Le password coincidono.';
 $wb['globalsearch_resultslimit_of_txt'] = 'di';
 $wb['globalsearch_resultslimit_results_txt'] = 'risultati';
-$wb['globalsearch_noresults_text_txt'] = 'Nesuun risultato.';
+$wb['globalsearch_noresults_text_txt'] = 'Nessun risultato.';
 $wb['globalsearch_noresults_limit_txt'] = '0 risultati';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Cerca';
 $wb['globalsearch_suggestions_text_txt'] = 'Suggerimenti';
@@ -41,10 +41,10 @@ $wb['database_ro_user_txt'] = 'Utente database di sola lettura';
 $wb['optional_txt'] = 'opzionale';
 $wb['select_dbuser_txt'] = 'Seleziona utente database';
 $wb['no_dbuser_txt'] = 'Nessuno';
-$wb['database_client_differs_txt'] = 'Il cliente del sito parent e il database non coincidono.';
+$wb['database_client_differs_txt'] = 'Il cliente del sito genitore e il database non coincidono.';
 $wb['database_user_missing_txt'] = 'Per favore selezionare un utente per questo database.';
 $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_not_0_txt']= 'Database quota can not be 0';
+$wb['limit_database_quota_error_notint'] = 'La quota del database deve essere un numero positivo.';
+$wb['limit_database_quota_free_txt'] = 'Quota DB disponibile ';
+$wb['limit_database_quota_not_0_txt'] = 'La quota Database non può essere 0';
 ?>
diff --git a/interface/web/sites/lib/lang/it_database_list.lng b/interface/web/sites/lib/lang/it_database_list.lng
index 09abd791bb7928cccf7ecde5980ec40d2917dcbe..f4288fc2969c6c7fba7efe3450b91cd7d30a018a 100644
--- a/interface/web/sites/lib/lang/it_database_list.lng
+++ b/interface/web/sites/lib/lang/it_database_list.lng
@@ -7,5 +7,5 @@ $wb['database_name_txt'] = 'Nome Database';
 $wb['add_new_record_txt'] = 'Aggiungi nuovo Database';
 $wb['database_user_txt'] = 'Utente Database';
 $wb['parent_domain_id_txt'] = 'Sito Web';
-$wb['type_txt'] = 'Type';
+$wb['type_txt'] = 'Tipo';
 ?>
diff --git a/interface/web/sites/lib/lang/it_database_quota_stats_list.lng b/interface/web/sites/lib/lang/it_database_quota_stats_list.lng
index 50f2dcc496d1140a77dce8a25c7ee0a38fe1e277..21a2220e7f1cbb1244e1f589093794c33d6f694c 100644
--- a/interface/web/sites/lib/lang/it_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/it_database_quota_stats_list.lng
@@ -2,8 +2,8 @@
 $wb['database_txt'] = 'Database';
 $wb['server_name_txt'] = 'Server';
 $wb['client_txt'] = 'Client';
-$wb['used_txt'] = 'Used space';
+$wb['used_txt'] = 'Spazio usato';
 $wb['quota_txt'] = 'Quota';
-$wb['percentage_txt'] = 'Used in %';
+$wb['percentage_txt'] = 'Usato in %';
 $wb['list_head_txt'] = 'Database Quota';
 ?>
diff --git a/interface/web/sites/lib/lang/it_database_user.lng b/interface/web/sites/lib/lang/it_database_user.lng
index c0cb43b9d5bcdaa6a674413fa090785984d11cc1..c7692d686a516c3e724421c3dc16fdbd6313a1e5 100644
--- a/interface/web/sites/lib/lang/it_database_user.lng
+++ b/interface/web/sites/lib/lang/it_database_user.lng
@@ -15,11 +15,11 @@ $wb['repeat_password_txt'] = 'Ripeti Password';
 $wb['password_mismatch_txt'] = 'Le password non coincidono.';
 $wb['password_match_txt'] = 'Le password coincidono.';
 $wb['globalsearch_resultslimit_of_txt'] = 'of';
-$wb['globalsearch_resultslimit_results_txt'] = 'results';
-$wb['globalsearch_noresults_text_txt'] = 'Nessun results.';
-$wb['globalsearch_noresults_limit_txt'] = '0 results';
+$wb['globalsearch_resultslimit_results_txt'] = 'risultati';
+$wb['globalsearch_noresults_text_txt'] = 'Nessun risultato.';
+$wb['globalsearch_noresults_limit_txt'] = '0 risultati';
 $wb['globalsearch_searchfield_watermark_txt'] = 'Cerca';
 $wb['globalsearch_suggestions_text_txt'] = 'Suggerimenti';
-$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'] = 'Hai raggiunto il numero massimo di utenti database.';
+$wb['database_password_error_empty'] = 'La password del Database è vuota.';
 ?>
diff --git a/interface/web/sites/lib/lang/it_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/it_ftp_sites_stats_list.lng
index e44025a715dbf435bdca9faee0b109ba25bf611d..e62f81b42966427d76c94948d441fc042ec561c4 100644
--- a/interface/web/sites/lib/lang/it_ftp_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/it_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['list_head_txt'] = 'Traffico FTP';
+$wb['domain_txt'] = 'Dominio';
+$wb['this_month_txt'] = 'Questo mese';
+$wb['last_month_txt'] = 'Mese scorso';
+$wb['this_year_txt'] = 'Questo anno';
+$wb['last_year_txt'] = 'Anno scorso';
 $wb['sum_txt'] = 'Sum (Download + Upload)';
 $wb['in_out_txt'] = 'DL/UL';
 ?>
diff --git a/interface/web/sites/lib/lang/it_ftp_user.lng b/interface/web/sites/lib/lang/it_ftp_user.lng
index 36b068335b0e67dcd7bd927226015b92ab8221f3..0a254471c5733470f1713871a887f01a7315a90b 100644
--- a/interface/web/sites/lib/lang/it_ftp_user.lng
+++ b/interface/web/sites/lib/lang/it_ftp_user.lng
@@ -2,7 +2,7 @@
 $wb['uid_txt'] = 'UID';
 $wb['gid_txt'] = 'GID';
 $wb['dir_txt'] = 'Cartella';
-$wb['quota_files_txt'] = 'Filequota';
+$wb['quota_files_txt'] = 'Quota file';
 $wb['ul_ratio_txt'] = 'Uploadratio';
 $wb['dl_ratio_txt'] = 'Downloadratio';
 $wb['ul_bandwidth_txt'] = 'Banda Upload';
@@ -14,11 +14,11 @@ $wb['password_txt'] = 'Password';
 $wb['password_strength_txt'] = 'Livello sicurezza Password';
 $wb['quota_size_txt'] = 'Quota Spazio Disco';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_ftp_user_txt'] = 'Hai raggiunto il numero masslimo consentito di utenti FTP per il tuo account.';
-$wb['username_error_empty'] = 'Nome utente  vuoto.';
+$wb['limit_ftp_user_txt'] = 'Hai raggiunto il numero masslimo consentito di utenti FTP per il tuo profilo.';
+$wb['username_error_empty'] = 'Nome utente vuoto.';
 $wb['username_error_unique'] = 'Nome utente deve essere unico.';
 $wb['username_error_regex'] = 'Il nome utente contiene dei carateri che non sono ammessi.';
-$wb['quota_size_error_empty'] = 'Quota  vuoto.';
+$wb['quota_size_error_empty'] = 'Quota vuoto.';
 $wb['uid_error_empty'] = 'GID vuoto.';
 $wb['directory_error_empty'] = 'Directory vuoto.';
 $wb['quota_files_unity_txt'] = 'Files';
@@ -31,5 +31,5 @@ $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['expires_txt'] = 'Expire at';
+$wb['expires_txt'] = 'Scade il';
 ?>
diff --git a/interface/web/sites/lib/lang/it_shell_user.lng b/interface/web/sites/lib/lang/it_shell_user.lng
index 53af373542e1aef7e5ceb4b476cfefda4d708d1f..a5fcf7e39be90269695ae8cfb825221aa5e6176b 100644
--- a/interface/web/sites/lib/lang/it_shell_user.lng
+++ b/interface/web/sites/lib/lang/it_shell_user.lng
@@ -12,25 +12,25 @@ $wb['active_txt'] = 'Attivo';
 $wb['username_error_empty'] = 'Username  vuoto.';
 $wb['username_error_unique'] = 'Il nome utente deve essere unico.';
 $wb['username_error_regex'] = 'Nome utente contiene caratteri non autorizzati.';
-$wb['quota_size_error_empty'] = 'Valore Quota  vuoto.';
+$wb['quota_size_error_empty'] = 'Valore Quota vuoto.';
 $wb['uid_error_empty'] = 'GID vuoto.';
 $wb['directory_error_empty'] = 'Valore direttrice vuoto.';
 $wb['limit_shell_user_txt'] = 'Numero massimo utenti shell raggiunto.';
 $wb['parent_domain_id_error_empty'] = 'Nessun sito selezionato.';
 $wb['puser_txt'] = 'Nome utente web';
 $wb['pgroup_txt'] = 'Gruppo web';
-$wb['ssh_rsa_txt'] = 'SSH-RSA Public Key (for key-based logins)';
-$wb['dir_dot_error'] = 'Nessun .. consentito nel percorso.';
-$wb['dir_slashdot_error'] = 'Nessun ./ consentito nel percorso.';
+$wb['ssh_rsa_txt'] = 'SSH-Chiave RSA Pubblica (per login basati su chiave)';
+$wb['dir_dot_error'] = 'Non è consentito .. nel percorso.';
+$wb['dir_slashdot_error'] = 'Non è consentito ./ nel percorso.';
 $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['username_must_not_exceed_32_chars_txt'] = 'il nome utente non deve superare i 32 caratteri.';
-$wb['username_not_allowed_txt'] = 'L utente non è autorizzato.';
+$wb['username_not_allowed_txt'] = 'L\'utente non è autorizzato.';
 $wb['invalid_system_user_or_group_txt'] = 'Utenti di sistema o gruppo non valido';
-$wb['directory_error_regex'] = 'Direttrice non valida';
+$wb['directory_error_regex'] = 'Percorso cartelle non valida';
 $wb['shell_error_regex'] = 'shell non valida';
 $wb['invalid_username_txt'] = 'Nome utente non valido';
-$wb['directory_error_notinweb'] = 'La direttrice deve essere all interno della direttrice del sito .';
+$wb['directory_error_notinweb'] = 'La cartella deve essere all\'interno della cartella del sito .';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_aliasdomain.lng b/interface/web/sites/lib/lang/it_web_aliasdomain.lng
index ee30db96a0df1812ca80d4efcc92bf3817591263..7ef46f8554b487836cdd5d525a00bdc9b68c8fc3 100644
--- a/interface/web/sites/lib/lang/it_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_aliasdomain.lng
@@ -5,24 +5,24 @@ $wb['backup_copies_txt'] = 'Numero copie di backup';
 $wb['ssl_state_txt'] = 'Stato';
 $wb['ssl_locality_txt'] = 'Paese';
 $wb['ssl_organisation_txt'] = 'Nome Organizzazione';
-$wb['ssl_organisation_unit_txt'] = 'Nome Unità di organizzazione';
+$wb['ssl_organisation_unit_txt'] = 'Nome Reparto';
 $wb['ssl_country_txt'] = 'Città';
-$wb['ssl_key_txt'] = 'SSL Key';
+$wb['ssl_key_txt'] = 'Chiav eSSL';
 $wb['ssl_request_txt'] = 'SSL Richiesta';
 $wb['ssl_cert_txt'] = 'SSL Certificato';
 $wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
+$wb['ssl_action_txt'] = 'Azione SSL';
 $wb['ssl_domain_txt'] = 'SSL Domain';
 $wb['server_id_txt'] = 'Server';
 $wb['web_folder_error_regex'] = 'Percorso inserito non valido. Non inserire slash.';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Sito Parent';
-$wb['redirect_type_txt'] = 'Tipo di Redirect';
-$wb['r_redirect_txt'] = 'R (Temporary redirect)';
-$wb['l_redirect_txt'] = 'L (Last redirect rule)';
-$wb['r_l_redirect_txt'] = 'R,L (Temporary redirect + last rule)';
-$wb['r_301_l_redirect_txt'] = 'R=301,L (Permanent redirect + last rule)';
-$wb['redirect_path_txt'] = 'Redirect Path';
+$wb['parent_domain_id_txt'] = 'Sito genitore';
+$wb['redirect_type_txt'] = 'Tipo di reindirizzamento';
+$wb['r_redirect_txt'] = 'R (Reindirizzamento temporaneo)';
+$wb['l_redirect_txt'] = 'L (Ultima regola di reindirizzamento)';
+$wb['r_l_redirect_txt'] = 'R,L (Reindirizzamento temporaneo + ultima regola)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (Reindirizzamento Permanente + ultima regola)';
+$wb['redirect_path_txt'] = 'Percorso di reindirizzamento';
 $wb['active_txt'] = 'Attivo';
 $wb['document_root_txt'] = 'Cartella del sito';
 $wb['system_user_txt'] = 'Utente Linux';
@@ -40,20 +40,20 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
-$wb['limit_web_domain_txt'] = 'Numero massimo domini per il tuo account raggiunti.';
-$wb['limit_web_aliasdomain_txt'] = 'Numero massimo domini alias per il tuo account è stato raggiunto.';
-$wb['limit_web_subdomain_txt'] = 'Numero massimo sottodomini per il tuo account raggiunto.';
-$wb['apache_directives_txt'] = 'Apache Direttive';
-$wb['domain_error_empty'] = 'Domain  vuoto.';
+$wb['limit_web_domain_txt'] = 'Hai raggiunto il numero massimo domini per il tuo profilo.';
+$wb['limit_web_aliasdomain_txt'] = 'Il numero massimo domini alias per il tuo profilo è stato raggiunto.';
+$wb['limit_web_subdomain_txt'] = 'Il numero massimo sottodomini per il tuo profilo raggiunto.';
+$wb['apache_directives_txt'] = 'Direttive Apache';
+$wb['domain_error_empty'] = 'Domain vuoto.';
 $wb['domain_error_unique'] = 'Esiste già un sito o sottodominio / domino alias con questo nome dominio.';
 $wb['domain_error_regex'] = 'Nome dominio non valido.';
 $wb['domain_error_autosub'] = 'Impostazioni di sottodominio esistenti.';
-$wb['hd_quota_error_empty'] = 'Harddisk quota 0 o vuoto.';
-$wb['traffic_quota_error_empty'] = 'Campo Quota Traffico  vuoto.';
-$wb['error_ssl_state_empty'] = 'SSL State  vuoto.';
+$wb['hd_quota_error_empty'] = 'quota disco 0 o vuoto.';
+$wb['traffic_quota_error_empty'] = 'Campo Quota Traffico vuoto.';
+$wb['error_ssl_state_empty'] = 'SSL Stato vuoto.';
 $wb['error_ssl_locality_empty'] = 'SSL Paese vuoto.';
-$wb['error_ssl_organisation_empty'] = 'SSL Organizzazione  vuoto.';
-$wb['error_ssl_organisation_unit_empty'] = 'SSL Organisation Unit  vuoto.';
+$wb['error_ssl_organisation_empty'] = 'SSL Organizzazione vuoto.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL Reparto vuoto.';
 $wb['error_ssl_country_empty'] = 'SSL Città vuoto.';
 $wb['error_ssl_cert_empty'] = 'SSL Certificato vuoto';
 $wb['client_group_id_txt'] = 'Cliente';
@@ -61,10 +61,10 @@ $wb['stats_password_txt'] = 'Impostare password accesso a Statistiche Web';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
 $wb['limit_web_quota_free_txt'] = 'Quota disco massima disponibile';
 $wb['ssl_state_error_regex'] = 'Campo Stato SSL non valido.Valori accettati: a-z, 0-9 e .,-_';
-$wb['ssl_locality_error_regex'] = 'Campo SSL Locality  non valido.. Caratteri ammessi: a-z, 0-9 e .,-_';
-$wb['ssl_organisation_error_regex'] = 'Campo  SSL Organisation  non valido.. Caratteri ammessi: a-z, 0-9 e .,-_';
-$wb['ssl_organistaion_unit_error_regex'] = 'Campo SSL Organisation Unit. Caratteri ammessi: a-z, 0-9 e .,-_';
-$wb['ssl_country_error_regex'] = 'Campo SSL Country. Valid characters are: A-Z';
+$wb['ssl_locality_error_regex'] = 'Campo SSL Località  non valido.. Caratteri ammessi: a-z, 0-9 e .,-_';
+$wb['ssl_organisation_error_regex'] = 'Campo SSL Organizzazione non valido.. Caratteri ammessi: a-z, 0-9 e .,-_';
+$wb['ssl_organistaion_unit_error_regex'] = 'Campo SSL Reparto. Caratteri ammessi: a-z, 0-9 e .,-_';
+$wb['ssl_country_error_regex'] = 'Campo SSL Paese. Caratteri ammessi: A-Z';
 $wb['limit_traffic_quota_free_txt'] = 'Quota Traffico massimo disponibile';
 $wb['redirect_error_regex'] = 'Percorso reinderizzamento non valido. Percorsi di redirect sono ad esempio: /test/ or https://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
@@ -77,7 +77,7 @@ $wb['disabled_txt'] = 'Disabilitato ';
 $wb['no_redirect_txt'] = 'Nessun redirect';
 $wb['no_flag_txt'] = 'Nessun flag';
 $wb['save_certificate_txt'] = 'Salva certificato';
-$wb['create_certificate_txt'] = 'Crea  certificato';
+$wb['create_certificate_txt'] = 'Crea certificato';
 $wb['delete_certificate_txt'] = 'Elimina certificato';
 $wb['nginx_directives_txt'] = 'nginx Direttive';
 $wb['seo_redirect_txt'] = 'Reinderizzamento SEO';
@@ -91,7 +91,7 @@ $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'] = 'I valori per PHP-FPM pm devono essere i seguenti: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['error_php_fpm_pm_settings_txt'] = 'I valori per PHP-FPM pm devono soddisfare: 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 essere un valore intero postivo.';
 $wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve essere un valore intero postivo.';
 $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve essere un valore intero postivo.';
@@ -109,11 +109,11 @@ $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['available_php_directive_snippets_txt'] = 'Sniipets Direttive PHP disponibili:';
-$wb['available_apache_directive_snippets_txt'] = 'Snippets Direttive Apache disponibili:';
-$wb['available_nginx_directive_snippets_txt'] = 'Snippets Direttive nginx Directive disponibili:';
+$wb['available_php_directive_snippets_txt'] = 'Direttive Snippets PHP disponibili:';
+$wb['available_apache_directive_snippets_txt'] = 'Direttive Snippets Apache disponibili:';
+$wb['available_nginx_directive_snippets_txt'] = 'Direttive Snippets nginx disponibili:';
 $wb['proxy_directives_txt'] = 'Direttive Proxy';
-$wb['available_proxy_directive_snippets_txt'] = 'Snippets Direttive Proxy disponibili:';
+$wb['available_proxy_directive_snippets_txt'] = 'Direttive Snippets Proxy disponibili:';
 $wb['Domain'] = 'Domini Alias';
-$wb['stats_type_txt'] = 'Webstatistics program';
+$wb['stats_type_txt'] = 'Gestrore statistiche Web';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_aliasdomain_list.lng b/interface/web/sites/lib/lang/it_web_aliasdomain_list.lng
index bea222d28d84999555777cf74a8cc9ef6f8addf3..d7c0728a28a44cf0ebb90d6f96705d2138a759de 100644
--- a/interface/web/sites/lib/lang/it_web_aliasdomain_list.lng
+++ b/interface/web/sites/lib/lang/it_web_aliasdomain_list.lng
@@ -5,10 +5,10 @@ $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Sito Web';
 $wb['domain_txt'] = 'Domini Alias';
 $wb['add_new_record_txt'] = 'Aggiungi un nuovo dominio alias';
-$wb['domain_error_empty'] = 'Domain  vuoto.';
+$wb['domain_error_empty'] = 'Dominio  vuoto.';
 $wb['domain_error_unique'] = 'Nome DOminio deve essere unico.';
 $wb['domain_error_regex'] = 'Nome Dominio non valido.';
 $wb['no_redirect_txt'] = 'Nessun reinderizzamento';
-$wb['no_flag_txt'] = 'Nessun flag';
+$wb['no_flag_txt'] = 'Nessuna bandierina';
 $wb['none_txt'] = 'Nessuno';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_backup_list.lng b/interface/web/sites/lib/lang/it_web_backup_list.lng
index 67cacff8645af8883809da15ceb44a396f2b9a0d..75587300a28acb94dcc5e56eb97d5f380a80a868 100644
--- a/interface/web/sites/lib/lang/it_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/it_web_backup_list.lng
@@ -12,28 +12,28 @@ $wb['download_pending_txt'] = 'Esiste già un operazione di download di backup i
 $wb['restore_pending_txt'] = 'Esiste già un operazione di ripristino da backup in attesa.';
 $wb['backup_type_mysql'] = 'Database MySQL';
 $wb['backup_type_web'] = 'Files del Sito Web';
-$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['filesize_txt'] = 'Dimensione file';
+$wb['delete_backup_txt'] = 'Cancella Backup';
+$wb['delete_info_txt'] = 'La cancellazione del backup è stata avviata. L\'operazione può richiedere diversi minuti per finire.';
+$wb['delete_confirm_txt'] = 'Vuoi realmente cancellare questo backup?';
+$wb['delete_pending_txt'] = 'C\'è già un\'operazione di cancellazione in corso.';
 $wb['backup_type_mongodb'] = 'MongoDB Database';
-$wb['backup_pending_txt'] = 'There is already a pending backup job.';
-$wb['error_txt'] = 'Error';
-$wb['backup_info_txt'] = 'A backup process started. This action can take several minutes to complete.';
-$wb['backup_format_txt'] = 'Backup format';
-$wb['backup_format_unknown_txt'] = 'Unknown';
-$wb['backup_job_txt'] = 'Scheduler';
-$wb['backup_job_manual_txt'] = 'Manual';
+$wb['backup_pending_txt'] = 'C\'è già un\'operazione di backup in corso.';
+$wb['error_txt'] = 'Errore';
+$wb['backup_info_txt'] = 'È stato avviato un backup. Questa operazione può richiedere diversi minuti.';
+$wb['backup_format_txt'] = 'Formato Backup';
+$wb['backup_format_unknown_txt'] = 'Formato Backup sconosciuto';
+$wb['backup_job_txt'] = 'Schedulatore';
+$wb['backup_job_manual_txt'] = 'Manuale';
 $wb['backup_job_auto_txt'] = 'Auto';
-$wb['manual_backup_title_txt'] = 'Manual backup';
-$wb['make_backup_web_txt'] = 'Make backup of web files';
-$wb['make_backup_database_txt'] = 'Make backup of databases';
-$wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
-$wb['yes_txt'] = 'Yes';
+$wb['manual_backup_title_txt'] = 'Backup manuale';
+$wb['make_backup_web_txt'] = 'Fare il backup dei file web';
+$wb['make_backup_database_txt'] = 'Fare il backup del databases';
+$wb['make_backup_confirm_txt'] = 'Stai per iniziare un backup manuale. I backup manuali rientrano nel conteggio del numero totale dei backup consentiti. Quindi se il limite sarà superato verranno cancellati automaticamente i backup più vecchi. Vuoi procedere?';
+$wb['yes_txt'] = 'Si';
 $wb['no_txt'] = 'No';
-$wb['backup_is_encrypted_txt'] = 'Encrypted';
-$wb['backup_format_zip_txt'] = 'zip (deflate)';
+$wb['backup_is_encrypted_txt'] = 'cifrato';
+$wb['backup_format_zip_txt'] = 'zip';
 $wb['backup_format_gzip_txt'] = 'gzip';
 $wb['backup_format_bzip2_txt'] = 'bzip2';
 $wb['backup_format_xz_txt'] = 'xz';
diff --git a/interface/web/sites/lib/lang/it_web_childdomain.lng b/interface/web/sites/lib/lang/it_web_childdomain.lng
index ed48eae876c648bb1dfab6ed2207e4efe45ca381..5918bf20fa894271341d50993b103921a5ceafb4 100644
--- a/interface/web/sites/lib/lang/it_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_childdomain.lng
@@ -1,30 +1,30 @@
 <?php
 $wb['ssl_state_txt'] = 'Stato';
-$wb['ssl_locality_txt'] = 'Locality';
+$wb['ssl_locality_txt'] = 'Località';
 $wb['ssl_organisation_txt'] = 'Organizzazione';
-$wb['ssl_organisation_unit_txt'] = 'Organisation Unit';
-$wb['ssl_country_txt'] = 'Country';
-$wb['ssl_request_txt'] = 'SSL Request';
-$wb['ssl_cert_txt'] = 'SSL Certificate';
+$wb['ssl_organisation_unit_txt'] = 'Reparto';
+$wb['ssl_country_txt'] = 'Paese';
+$wb['ssl_request_txt'] = 'Richiesta SSL';
+$wb['ssl_cert_txt'] = 'Certificato SSL';
 $wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
+$wb['ssl_action_txt'] = 'Azione SSL';
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Parent Website';
+$wb['parent_domain_id_txt'] = 'Sito Web genitore';
 $wb['redirect_type_txt'] = 'Tipo Redirect';
-$wb['r_redirect_txt'] = 'R (Temporary redirect)';
-$wb['l_redirect_txt'] = 'L (Last redirect rule)';
-$wb['r_l_redirect_txt'] = 'R,L (Temporary redirect + last rule)';
-$wb['r_301_l_redirect_txt'] = 'R=301,L (Permanent redirect + last rule)';
-$wb['redirect_path_txt'] = 'Percorso Redirect';
+$wb['r_redirect_txt'] = 'R (Reindirizzamento temporaneo)';
+$wb['l_redirect_txt'] = 'L (Ultima regola di reindirizzamento)';
+$wb['r_l_redirect_txt'] = 'R,L (Reindirizzamento temporaneo + Ultima regola)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (Reindirizzamento permanente + Ultima regol)';
+$wb['redirect_path_txt'] = 'Percorso di reindirizzamento';
 $wb['active_txt'] = 'Attivo';
-$wb['document_root_txt'] = 'Documentroot';
+$wb['document_root_txt'] = 'Cartella radice dei documenti';
 $wb['system_user_txt'] = 'Utente Linux';
 $wb['system_group_txt'] = 'Gruppo Linux';
 $wb['ip_address_txt'] = 'Indirizzo IP';
 $wb['vhost_type_txt'] = 'Tipo VHost';
-$wb['hd_quota_txt'] = 'Quota Harddisk';
+$wb['hd_quota_txt'] = 'Quota disco';
 $wb['traffic_quota_txt'] = 'Quota Traffico';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
@@ -32,93 +32,93 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
-$wb['limit_web_domain_txt'] = 'The max. number of web domains for your account is reached.';
-$wb['limit_web_aliasdomain_txt'] = 'The max. number of aliasdomains for your account is reached.';
-$wb['limit_web_subdomain_txt'] = 'The max. number of web subdomains for your account is reached.';
+$wb['limit_web_domain_txt'] = 'Hai raggiunto il limite dei siti Web per il tuo profilo.';
+$wb['limit_web_aliasdomain_txt'] = 'Hai raggiunto il limite dei domini Alias per il tuo profilo.';
+$wb['limit_web_subdomain_txt'] = 'Hai raggiunto il limite dei sottodomini per il tuo profilo.';
 $wb['apache_directives_txt'] = 'Direttive Apache';
-$wb['domain_error_empty'] = 'Domain is empty.';
-$wb['domain_error_unique'] = 'Domain must be unique.';
-$wb['domain_error_regex'] = 'Domain name invalid.';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
+$wb['domain_error_empty'] = 'Il campo Dominio è vuoto.';
+$wb['domain_error_unique'] = 'Il nome Dominio deve essere unico.';
+$wb['domain_error_regex'] = 'Il nome di dominio non è valido.';
+$wb['domain_error_acme_invalid'] = 'Il nome di dominio acme non è consentito.';
 $wb['host_txt'] = 'Host';
-$wb['redirect_error_regex'] = 'Invalid redirect path. Valid redirects are for example: /test/ or https://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['redirect_error_regex'] = 'Percorso di reindirizzamento non valido. Esempi corretti sono: /test/ or https://www.domain.tld/test/';
+$wb['no_redirect_txt'] = 'Nessun reindirizzamento';
+$wb['no_flag_txt'] = 'Nessuna bandierina';
+$wb['domain_error_wildcard'] = 'I domini * non sono consentiti.';
+$wb['proxy_directives_txt'] = 'Direttive Proxy';
+$wb['available_proxy_directive_snippets_txt'] = 'Direttive Snippets Proxy disponibili:';
+$wb['error_proxy_requires_url'] = 'La direttiva di reindirizzamento tipo \\"proxy\\" richiede un URL come percorso di reindirizzamento.';
+$wb['backup_interval_txt'] = 'Intervallo tra i Backup';
+$wb['backup_copies_txt'] = 'Numero di copie di backup';
+$wb['ssl_key_txt'] = 'Chiave SSL';
+$wb['ssl_domain_txt'] = 'Dominio SSL';
+$wb['web_folder_error_regex'] = 'Cartella inserita non corretta. Non inserire la sbarra.';
+$wb['ipv6_address_txt'] = 'Indirizzo IPv6';
+$wb['errordocs_txt'] = 'Documenti di errore personalizzati';
+$wb['subdomain_txt'] = 'Auto-Sottodomini';
+$wb['domain_error_autosub'] = 'Esiste già un sottodominio con queste impostazioni.';
+$wb['hd_quota_error_empty'] = 'La quota disco è 0 o è vuota.';
+$wb['traffic_quota_error_empty'] = 'La quota Traffico è vuota.';
+$wb['error_ssl_state_empty'] = 'SSL Lo Stato è vuoto.';
+$wb['error_ssl_locality_empty'] = 'SSL La Località è vuota.';
+$wb['error_ssl_organisation_empty'] = 'SSL l\'Organizzazione è vuota.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL Il Reparto è vuoto.';
+$wb['error_ssl_country_empty'] = 'SSL Il Paese è vuoto.';
+$wb['error_ssl_cert_empty'] = 'SSL Il campo Certificato è vuoto';
+$wb['client_group_id_txt'] = 'Cliente';
+$wb['stats_password_txt'] = 'Set Password per le statistiche Web password';
 $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'] = 'Massima Quota disco disponibile';
+$wb['ssl_state_error_regex'] = 'SSL Stato non valido. Caratteri ammessi: a-z, 0-9 and .,-_';
+$wb['ssl_locality_error_regex'] = 'SSL Località non valida. Caratteri ammessi: a-z, 0-9 and .,-_';
+$wb['ssl_organisation_error_regex'] = 'SSL Organizzazione non valida. Caratteri ammessi: a-z, 0-9 and .,-_';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL Reparto non valido. Caratteri ammessi: a-z, 0-9 and .,-_';
+$wb['ssl_country_error_regex'] = 'SSL Paese non valido Country. Caratteri ammessi: A-Z';
+$wb['limit_traffic_quota_free_txt'] = 'Massima quota Traffico disponibile';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
-$wb['traffic_quota_exceeded_txt'] = 'Traffic quota exceeded';
+$wb['traffic_quota_exceeded_txt'] = 'Hai superato la quota Traffico';
 $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'] = 'username per le statistiche Web';
+$wb['stats_type_txt'] = 'Gestore statistiche Web';
+$wb['custom_php_ini_txt'] = 'Impostazioni php.ini personalizzate';
+$wb['none_txt'] = 'Nessuno';
+$wb['disabled_txt'] = 'Disabilitato';
+$wb['save_certificate_txt'] = 'Salva il certificato';
+$wb['create_certificate_txt'] = 'Crea il certificato';
+$wb['delete_certificate_txt'] = 'Cancella il certificato';
+$wb['nginx_directives_txt'] = 'Direttive nginx';
+$wb['seo_redirect_txt'] = 'Reindirizzamento 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['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'] = 'Usare Socket per PHP-FPM';
+$wb['error_no_sni_txt'] = 'SNI per SSL non è attivo su questo server. Puoi abilitare un solo certificato SSL per ciascun indirizzo IP.';
 $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['server_php_id_txt'] = 'PHP Version';
-$wb['pm_txt'] = 'PHP-FPM Process Manager';
+$wb['error_php_fpm_pm_settings_txt'] = 'I valori di PHP-FPM pm devono soddisfare: 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 essere un intero positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve essere un intero positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve essere un intero positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve essere un intero positivo.';
+$wb['hd_quota_error_regex'] = 'Il valore quota disco non è valido.';
+$wb['traffic_quota_error_regex'] = 'Il valore di quota Traffico non è valido.';
+$wb['server_php_id_txt'] = 'Versione PHP';
+$wb['pm_txt'] = 'Gestore del processo 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 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['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 deve essere un intero positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve essere un intero >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'evi avere una versione PHP >= 5.3.9 per poter utilizzare ondemand process manager. Se hai selezionato ondemand per una versione PHP precedente, PHP non si avvierà più!';
+$wb['generate_password_txt'] = 'Generare Password';
+$wb['repeat_password_txt'] = 'Ripetere Password';
+$wb['password_mismatch_txt'] = 'Le passwords non coincidono.';
+$wb['password_match_txt'] = 'Le passwords sono uguali.';
+$wb['available_php_directive_snippets_txt'] = 'Direttive Snippets PHP disponibili:';
+$wb['available_apache_directive_snippets_txt'] = 'Direttive Snippets Apache disponibili:';
+$wb['available_nginx_directive_snippets_txt'] = 'Direttive Snippets nginx disponibili:';
+$wb['Domain'] = 'Dominio Alias';
+$wb['ssl_letsencrypt_exclude_txt'] = 'Non fare aggiunte al certificato Let\'s Encrypt';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_childdomain_list.lng b/interface/web/sites/lib/lang/it_web_childdomain_list.lng
index 45d82ecc58fe351faf9307d8bac9c20ac40a2f74..606ebc17bf57653be38726cfbcb8fc9d467c311e 100644
--- a/interface/web/sites/lib/lang/it_web_childdomain_list.lng
+++ b/interface/web/sites/lib/lang/it_web_childdomain_list.lng
@@ -11,8 +11,8 @@ $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['no_redirect_txt'] = 'No redirect';
 $wb['no_flag_txt'] = 'No flag';
 $wb['none_txt'] = 'None';
-$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['add_new_subdomain_txt'] = 'Aggiungi un Sottodominio';
+$wb['add_new_aliasdomain_txt'] = 'AAggiungi un Alias di dominio';
+$wb['aliasdomain_list_head_txt'] = 'Dominio Alias';
+$wb['subdomain_list_head_txt'] = 'Sottodominio';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_directive_snippets.lng b/interface/web/sites/lib/lang/it_web_directive_snippets.lng
index d2590e53cfbefea98a29cdd8fff773eb46050fe8..569070daaab79b3f9098e81bbb2f39841777a108 100644
--- a/interface/web/sites/lib/lang/it_web_directive_snippets.lng
+++ b/interface/web/sites/lib/lang/it_web_directive_snippets.lng
@@ -1,3 +1,3 @@
 <?php
-$wb['directive_snippets_id_txt'] = 'Desired configuration';
+$wb['directive_snippets_id_txt'] = 'Configuratione desiderata';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_domain.lng b/interface/web/sites/lib/lang/it_web_domain.lng
index b05f2a15575f7a5d4a4d62d5f56a752c51a4ecec..18765c470246f6743c3ef1f79dce8dee2816fc63 100644
--- a/interface/web/sites/lib/lang/it_web_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_domain.lng
@@ -2,24 +2,24 @@
 $wb['ssl_state_txt'] = 'Stato';
 $wb['ssl_locality_txt'] = 'Città';
 $wb['ssl_organisation_txt'] = 'Organizzazione';
-$wb['ssl_organisation_unit_txt'] = 'Organisation Unit';
+$wb['ssl_organisation_unit_txt'] = 'Reparto';
 $wb['ssl_country_txt'] = 'Codice Nazione';
 $wb['ssl_request_txt'] = 'Richiesta SSL';
 $wb['ssl_cert_txt'] = 'Certificato SSL';
 $wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
+$wb['ssl_action_txt'] = 'Azione SSL';
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
 $wb['type_txt'] = 'Tipo';
 $wb['parent_domain_id_txt'] = 'Sito Web di riferimento';
 $wb['redirect_type_txt'] = 'Tipo Reinderizzamento';
-$wb['r_redirect_txt'] = 'R (Temporary redirect)';
-$wb['l_redirect_txt'] = 'L (Last redirect rule)';
-$wb['r_l_redirect_txt'] = 'R,L (Temporary redirect + last rule)';
-$wb['r_301_l_redirect_txt'] = 'R=301,L (Permanent redirect + last rule)';
+$wb['r_redirect_txt'] = 'R (Reindirizzamento temporaneo)';
+$wb['l_redirect_txt'] = 'L (Ultima regola di reindirizzamento)';
+$wb['r_l_redirect_txt'] = 'R,L (Reindirizzamento temporaneo + ultima regola)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (Reindirizzamento permanente + ultima regola)';
 $wb['redirect_path_txt'] = 'Percorso Reinderizzamento';
 $wb['active_txt'] = 'Attivo';
-$wb['document_root_txt'] = 'Documentroot';
+$wb['document_root_txt'] = 'Radice dei documenti';
 $wb['system_user_txt'] = 'Utente Linux';
 $wb['system_group_txt'] = 'Gruppo Linux';
 $wb['ip_address_txt'] = 'Indirizzo IP';
@@ -33,11 +33,11 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
-$wb['limit_web_domain_txt'] = 'Numero massimo domini siti web raggiunto per il tuo account.';
-$wb['limit_web_aliasdomain_txt'] = 'Numero massimo di domini alias raggiunto per il tuo account.';
-$wb['limit_web_subdomain_txt'] = 'Numero massimo di sottodomini  raggiunto per il tuo account.';
-$wb['apache_directives_txt'] = 'Apache Direttive ';
-$wb['domain_error_empty'] = 'Domain  vuoto.';
+$wb['limit_web_domain_txt'] = 'Numero massimo domini siti web raggiunto per il tuo profilo.';
+$wb['limit_web_aliasdomain_txt'] = 'Numero massimo di domini alias raggiunto per il tuo profilo.';
+$wb['limit_web_subdomain_txt'] = 'Numero massimo di sottodomini  raggiunto per il tuo profilo.';
+$wb['apache_directives_txt'] = 'Direttive Apache ';
+$wb['domain_error_empty'] = 'Domain vuoto.';
 $wb['domain_error_unique'] = 'Il dominio deve essere unico.';
 $wb['domain_error_regex'] = 'Nome Dominio non valido.';
 $wb['hd_quota_error_empty'] = 'Quota Spazio Disco vuoto.';
@@ -51,7 +51,7 @@ $wb['subdomain_txt'] = 'Auto-Sottodominio';
 $wb['client_group_id_txt'] = 'Cliente';
 $wb['stats_password_txt'] = 'Pssword Statistiche Web';
 $wb['ssl_domain_txt'] = 'SSL Domimio';
-$wb['allow_override_txt'] = 'Allow Override';
+$wb['allow_override_txt'] = 'Consenti di trascurare';
 $wb['limit_web_quota_free_txt'] = 'Valore massimo Quota Spazio Disco disponibile';
 $wb['ssl_state_error_regex'] = 'SSL Stato non valido. Caratteri ammessi: a-z, 0-9 e .,-_';
 $wb['ssl_locality_error_regex'] = 'SSL Città non valido. Caratteri ammessi: a-z, 0-9 e .,-_';
@@ -88,16 +88,16 @@ $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'] = 'I Valori per impostazioni PHP-FPM pm devono essere i seguenti: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['error_php_fpm_pm_settings_txt'] = 'I Valori per impostazioni PHP-FPM pm devono soddisfare: 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 essere un valore intero positivo.';
 $wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers  deve essere un valore intero positivo.';
 $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers  deve essere un valore intero positivo.';
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers  deve essere un valore intero positivo.';
 $wb['hd_quota_error_regex'] = 'Quota spazio disco non valida.';
 $wb['traffic_quota_error_regex'] = 'Quota Traffico non valida.';
-$wb['ssl_key_txt'] = 'SSL Key';
+$wb['ssl_key_txt'] = 'Chiave SSL';
 $wb['perl_txt'] = 'Perl';
-$wb['server_php_id_txt'] = 'PHP Versione';
+$wb['server_php_id_txt'] = 'Versione PHP';
 $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';
@@ -123,7 +123,7 @@ $wb['monthly_backup_txt'] = 'Mensile';
 $wb['rewrite_rules_txt'] = 'Rewrite Rules';
 $wb['invalid_rewrite_rules_txt'] = 'Rewrite Rules non valide';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Allowed Directives:';
-$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
+$wb['configuration_error_txt'] = 'ERRORE DI CONFIGURAZIONE';
 $wb['variables_txt'] = 'Variabili';
 $wb['added_by_txt'] = 'Inserito da';
 $wb['added_date_txt'] = 'Data inserimento';
@@ -133,9 +133,9 @@ $wb['backup_excludes_error_regex'] = 'Le cartelle escluse contengono caratteri n
 $wb['invalid_custom_php_ini_settings_txt'] = 'Impsotazioni  php.ini non valide';
 $wb['invalid_system_user_or_group_txt'] = 'Utente di sistema o Gruppo non valido';
 $wb['apache_directive_blocked_error'] = 'Direttive di Apache bloccate da impostazioni di sicurezza:';
-$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'] = 'Porta HTTP';
+$wb['https_port_txt'] = 'Porta HTTPS';
+$wb['http_port_error_regex'] = 'Porta HTTP non valida.';
+$wb['https_port_error_regex'] = 'Porta HTTPS non valida.';
+$wb['nginx_directive_blocked_error'] = 'Direttive Nginx bloccate per impostazioni di sicurezza:';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_folder.lng b/interface/web/sites/lib/lang/it_web_folder.lng
index eb32a966f4f4e8fc975a3552838f668a01a16b72..37404ef1da99d24c53ed5e9390a6a67212ac555c 100644
--- a/interface/web/sites/lib/lang/it_web_folder.lng
+++ b/interface/web/sites/lib/lang/it_web_folder.lng
@@ -4,5 +4,5 @@ $wb['parent_domain_id_txt'] = 'Sito Web';
 $wb['path_txt'] = 'Path';
 $wb['active_txt'] = 'Attivo';
 $wb['path_error_regex'] = 'Percorso cartella non valido.';
-$wb['error_folder_already_protected_txt'] = 'esiste già un record per questa cartella.';
+$wb['error_folder_already_protected_txt'] = 'Esiste già un record per questa cartella.';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_subdomain.lng b/interface/web/sites/lib/lang/it_web_subdomain.lng
index e3438eaf75e4de551c5339ce27727c6f591b8837..6f8e81d7b6afa6af65ac05d5849dfbc260d57832 100644
--- a/interface/web/sites/lib/lang/it_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_subdomain.lng
@@ -1,30 +1,30 @@
 <?php
 $wb['ssl_state_txt'] = 'Stato';
-$wb['ssl_locality_txt'] = 'Locality';
+$wb['ssl_locality_txt'] = 'Località';
 $wb['ssl_organisation_txt'] = 'Organizzazione';
-$wb['ssl_organisation_unit_txt'] = 'Organisation Unit';
-$wb['ssl_country_txt'] = 'Country';
-$wb['ssl_request_txt'] = 'SSL Request';
-$wb['ssl_cert_txt'] = 'SSL Certificate';
+$wb['ssl_organisation_unit_txt'] = 'Reparto';
+$wb['ssl_country_txt'] = 'Paese';
+$wb['ssl_request_txt'] = 'Richiesta SSL';
+$wb['ssl_cert_txt'] = 'Certificato SSL';
 $wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
+$wb['ssl_action_txt'] = 'Azione SSL';
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Parent Website';
-$wb['redirect_type_txt'] = 'Tipo Redirect';
-$wb['r_redirect_txt'] = 'R (Temporary redirect)';
-$wb['l_redirect_txt'] = 'L (Last redirect rule)';
-$wb['r_l_redirect_txt'] = 'R,L (Temporary redirect + last rule)';
-$wb['r_301_l_redirect_txt'] = 'R=301,L (Permanent redirect + last rule)';
-$wb['redirect_path_txt'] = 'Percorso Redirect';
+$wb['parent_domain_id_txt'] = 'Website genitore';
+$wb['redirect_type_txt'] = 'Tipo Reindirizzamento';
+$wb['r_redirect_txt'] = 'R (Reindirizzamento temporaneo)';
+$wb['l_redirect_txt'] = 'L (Ultima regola di reindirizzamento)';
+$wb['r_l_redirect_txt'] = 'R,L (Reindirizzamento temporaneo + ultima regola)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (Reindirizzamento permanente + ultima regola)';
+$wb['redirect_path_txt'] = 'Percorso reindirizzamento';
 $wb['active_txt'] = 'Attivo';
-$wb['document_root_txt'] = 'Documentroot';
+$wb['document_root_txt'] = 'Radice dei documenti';
 $wb['system_user_txt'] = 'Utente Linux';
 $wb['system_group_txt'] = 'Gruppo Linux';
 $wb['ip_address_txt'] = 'Indirizzo IP';
 $wb['vhost_type_txt'] = 'Tipo VHost';
-$wb['hd_quota_txt'] = 'Quota Harddisk';
+$wb['hd_quota_txt'] = 'Quota disco';
 $wb['traffic_quota_txt'] = 'Quota Traffico';
 $wb['cgi_txt'] = 'CGI';
 $wb['ssi_txt'] = 'SSI';
@@ -32,23 +32,23 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
-$wb['limit_web_domain_txt'] = 'Hai raggiunto il numero massimo di siti web per il tuo account.';
-$wb['limit_web_aliasdomain_txt'] = 'Hai raggiunto il numero massimo di domini alias per il tuo account.';
-$wb['limit_web_subdomain_txt'] = 'Hai raggiunto il numero massimo di sottodomini per il tuo account.';
+$wb['limit_web_domain_txt'] = 'Hai raggiunto il numero massimo di siti web per il tuo profilo.';
+$wb['limit_web_aliasdomain_txt'] = 'Hai raggiunto il numero massimo di domini alias per il tuo profilo.';
+$wb['limit_web_subdomain_txt'] = 'Hai raggiunto il numero massimo di sottodomini per il tuo profilo.';
 $wb['apache_directives_txt'] = 'Direttive Apache';
-$wb['domain_error_empty'] = 'Dominio  vuoto.';
+$wb['domain_error_empty'] = 'Dominio vuoto.';
 $wb['domain_error_unique'] = 'Il dominio deve essere unico.';
 $wb['domain_error_regex'] = 'Nome dominio non valido.';
 $wb['host_txt'] = 'Host';
 $wb['redirect_error_regex'] = 'Percorso di reinderizzamento errato. esempi di reinderizzamento validi: /test/ o https://www.domain.tld/test/';
 $wb['no_redirect_txt'] = 'Nessun reinderizzamento';
-$wb['no_flag_txt'] = 'No flag';
+$wb['no_flag_txt'] = 'Nessuna bandierina';
 $wb['domain_error_wildcard'] = 'Non sono ammessi caratteri jolly per i sottodomini.';
 $wb['proxy_directives_txt'] = 'Direttive Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Snippets Direttive Proxy disponibili:';
 $wb['error_proxy_requires_url'] = 'Tipo reinderizzamento \\"proxy\\" richiede una URL come percorso di reinderizzamento.';
-$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['http_port_txt'] = 'Porta HTTP';
+$wb['https_port_txt'] = 'Porta HTTPS';
+$wb['http_port_error_regex'] = 'Porta HTTP non valida.';
+$wb['https_port_error_regex'] = 'Porta HTTPS non valida.';
 ?>
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 22fce96dab4a8555cdbd433cd54693290b72440e..3e036a77487b831f122571d93b4d93c8d88ad335 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -1,23 +1,23 @@
 <?php
 $wb['ssl_state_txt'] = 'Stato';
-$wb['ssl_locality_txt'] = 'Locality';
+$wb['ssl_locality_txt'] = 'Località';
 $wb['ssl_organisation_txt'] = 'Organizzazione';
-$wb['ssl_organisation_unit_txt'] = 'Organisation Unit';
+$wb['ssl_organisation_unit_txt'] = 'Reparto';
 $wb['ssl_country_txt'] = 'Regione';
 $wb['ssl_request_txt'] = 'Richiesta SSL';
 $wb['ssl_cert_txt'] = 'Certificato SSL';
 $wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
+$wb['ssl_action_txt'] = 'Azione SSL';
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
 $wb['type_txt'] = 'Tipo';
-$wb['parent_domain_id_txt'] = 'Parent Website';
-$wb['redirect_type_txt'] = 'Tipo Redirect';
-$wb['r_redirect_txt'] = 'R (Temporary redirect)';
-$wb['l_redirect_txt'] = 'L (Last redirect rule)';
-$wb['r_l_redirect_txt'] = 'R,L (Temporary redirect + last rule)';
-$wb['r_301_l_redirect_txt'] = 'R=301,L (Permanent redirect + last rule)';
-$wb['redirect_path_txt'] = 'Percorso Redirect';
+$wb['parent_domain_id_txt'] = 'Sito Web genitore';
+$wb['redirect_type_txt'] = 'Tipo Reindirizzamento';
+$wb['r_redirect_txt'] = 'R (Reindirizzamento temporaneo)';
+$wb['l_redirect_txt'] = 'L (Ultima regola di reindirizzamento)';
+$wb['r_l_redirect_txt'] = 'R,L (Reindirizzamento temporaneo + ultima regola)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (Reindirizzamento Permanente + ultima regola)';
+$wb['redirect_path_txt'] = 'Percorso Reindirizzamento';
 $wb['active_txt'] = 'Attivo';
 $wb['document_root_txt'] = 'Document Root';
 $wb['system_user_txt'] = 'Utente Linux';
@@ -34,141 +34,141 @@ $wb['ssl_letsencrypt_txt'] = 'Let\'s Encrypt';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
-$wb['limit_web_domain_txt'] = 'The max. number of web domains for your account is reached.';
-$wb['limit_web_aliasdomain_txt'] = 'The max. number of aliasdomains for your account is reached.';
-$wb['limit_web_subdomain_txt'] = 'The max. number of web subdomains for your account is reached.';
-$wb['apache_directives_txt'] = 'Apache directives';
-$wb['domain_error_empty'] = 'Domain is empty.';
-$wb['domain_error_unique'] = 'Domain must be unique.';
-$wb['domain_error_regex'] = 'Domain name invalid.';
-$wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
-$wb['hd_quota_error_empty'] = 'Harddisk quota is 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['subdomain_txt'] = 'Auto-Subdomain';
-$wb['client_group_id_txt'] = 'Client';
-$wb['stats_password_txt'] = 'Webstatistics password';
-$wb['ssl_domain_txt'] = 'SSL Domain';
-$wb['allow_override_txt'] = 'Allow Override';
-$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['redirect_error_regex'] = 'Invalid redirect path. Valid redirects are for example: /test/ or https://www.domain.tld/test/';
-$wb['php_open_basedir_txt'] = 'PHP open_basedir';
-$wb['traffic_quota_exceeded_txt'] = 'Traffic quota exceeded';
-$wb['backup_interval_txt'] = 'Backup interval';
-$wb['backup_copies_txt'] = 'Number of backup copies';
+$wb['limit_web_domain_txt'] = 'Hai raggiunto il numero massimo di siti Web.';
+$wb['limit_web_aliasdomain_txt'] = 'Hai raggiunto il numero massimo di domini Alias.';
+$wb['limit_web_subdomain_txt'] = 'Hai raggiunto il numero massimo di sottodomini Web.';
+$wb['apache_directives_txt'] = 'Direttive Apache';
+$wb['domain_error_empty'] = 'Il Dominio è vuoto.';
+$wb['domain_error_unique'] = 'Il Dominio deve essere unico.';
+$wb['domain_error_regex'] = 'Nome di Dominio non valido.';
+$wb['domain_error_acme_invalid'] = 'Errore di dominio acme.';
+$wb['hd_quota_error_empty'] = 'La quota disco è vuota.';
+$wb['traffic_quota_error_empty'] = 'La quota traffico è vuota.';
+$wb['error_ssl_state_empty'] = 'Lo Stato SSL è vuota';
+$wb['error_ssl_locality_empty'] = 'La Località SSL è vuota.';
+$wb['error_ssl_organisation_empty'] = 'SSL L\'Organizzazione è vuota.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL Il Reparto è vuoto.';
+$wb['error_ssl_country_empty'] = 'SSL Il Paese è vuoto.';
+$wb['subdomain_txt'] = 'Auto-Sottodominio';
+$wb['client_group_id_txt'] = 'Cliente';
+$wb['stats_password_txt'] = 'Password per le statistiche Web';
+$wb['ssl_domain_txt'] = 'SSL Dominio';
+$wb['allow_override_txt'] = 'Consenti di trascuraree';
+$wb['limit_web_quota_free_txt'] = 'Quota massima di disco';
+$wb['ssl_state_error_regex'] = 'SSL Stato non valido. Ammessi: a-z, 0-9 and .,-_';
+$wb['ssl_locality_error_regex'] = 'SSL Località non valida. Ammessi: a-z, 0-9 and .,-_';
+$wb['ssl_organisation_error_regex'] = 'SSL Organizzazione non valida. Ammessi: a-z, 0-9 and .,-_';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL Reparto non valido. Ammessi: a-z, 0-9 and .,-_';
+$wb['ssl_country_error_regex'] = 'SSL Paese non valido. Ammessi: A-Z';
+$wb['limit_traffic_quota_free_txt'] = 'Quota traffico massima disponibile';
+$wb['redirect_error_regex'] = 'Percorso di reindirizzamento non corretto. Esempi di percorsi corretti: /test/ or https://www.domain.tld/test/';
+$wb['php_open_basedir_txt'] = 'open_basedir PHP';
+$wb['traffic_quota_exceeded_txt'] = 'Superato quota di traffico';
+$wb['backup_interval_txt'] = 'Intervallo di backup';
+$wb['backup_copies_txt'] = 'Numero di copie di backup';
 $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['error_ssl_cert_empty'] = 'SSL Certificate field is empty';
-$wb['ipv6_address_txt'] = 'IPv6-Address';
-$wb['none_txt'] = 'None';
-$wb['disabled_txt'] = 'Disabled';
-$wb['no_redirect_txt'] = 'No redirect';
-$wb['no_flag_txt'] = 'No flag';
-$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'] = 'Username per statistiche Web';
+$wb['stats_type_txt'] = 'Gestore delle statistiche';
+$wb['custom_php_ini_txt'] = 'Impostazioni php.ini personalizzate';
+$wb['error_ssl_cert_empty'] = 'SSL Il campo certificato è vuoto';
+$wb['ipv6_address_txt'] = 'Indirizzo IPv6';
+$wb['none_txt'] = 'Nessuno';
+$wb['disabled_txt'] = 'Disabilitato';
+$wb['no_redirect_txt'] = 'Nessun reindirizzamento';
+$wb['no_flag_txt'] = 'Nessuna bandierina';
+$wb['save_certificate_txt'] = 'Salva il certificato';
+$wb['create_certificate_txt'] = 'Crea il certificato';
+$wb['delete_certificate_txt'] = 'Cancella il certificato';
+$wb['nginx_directives_txt'] = 'Direttive nginx';
+$wb['seo_redirect_txt'] = 'Reindirizzamento 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_use_socket_txt'] = 'Usa il Socket per 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['error_no_sni_txt'] = 'SNI per SSL non attivo su questo server. Puoi abilitare un solo certificato SSL per ogni indirizzo IP.';
 $wb['python_txt'] = 'Python';
 $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['ssl_key_txt'] = 'SSL Key';
+$wb['error_php_fpm_pm_settings_txt'] = 'I valori di PHP-FPM per pm devono soddisfare: 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 essere un valore intero positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve essere un valore intero positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve essere un valore intero positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve essere un valore intero positivo.';
+$wb['hd_quota_error_regex'] = 'Il valore di quota Disco non è valido.';
+$wb['traffic_quota_error_regex'] = 'Il valore di quota Traffico non è valido.';
+$wb['ssl_key_txt'] = 'SSL chiave';
 $wb['perl_txt'] = 'Perl';
-$wb['server_php_id_txt'] = 'PHP Version';
-$wb['server_php_id_invalid_txt'] = 'PHP Version is invalid.';
-$wb['server_php_id_default_hidden_warning_txt'] = 'PHP Version was set to "default" but that can no longer be selected. Choose your desired PHP Version and save your settings.';
+$wb['server_php_id_txt'] = 'Versione PHP';
+$wb['server_php_id_invalid_txt'] = 'Versione PHP non corretta.';
+$wb['server_php_id_default_hidden_warning_txt'] = 'Versione PHP impostata al "default" ma tale valore non può più essere selezionato. Scegli il valore di versione PHP che desideri e salva l\'impostazione.';
 $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';
-$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['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.';
-$wb['web_folder_error_empty'] = 'Web folder cannot be empty.  Use /web/ to make the same as the Parent Website';
-$wb['domain_error_autosub'] = 'There is already a subdomain with these settings.';
-$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['proxy_directives_txt'] = 'Proxy Directives';
-$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['no_server_error'] = 'No server selected.';
-$wb['no_backup_txt'] = 'No backup';
-$wb['daily_backup_txt'] = 'Daily';
-$wb['weekly_backup_txt'] = 'Weekly';
-$wb['monthly_backup_txt'] = 'Monthly';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve essere un valore intero positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve essere un valore intero positivo >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Devi avere una versione PHP >= 5.3.9 per utilizzare il processo on demand. Se selezioni ondemand con una versione PHP più vecchia, PHP non ripartirà più!';
+$wb['generate_password_txt'] = 'Genera una Password';
+$wb['repeat_password_txt'] = 'Ripeti Password';
+$wb['password_mismatch_txt'] = 'Le password sono diverse.';
+$wb['password_match_txt'] = 'Le password coincidono.';
+$wb['web_folder_error_regex'] = 'Cartella non valida. Non inserire la sbarra.';
+$wb['web_folder_error_empty'] = 'La cartella Web non può essere vuota.  Usa /web/ per assegnare lo stesso al sito Web genitore';
+$wb['domain_error_autosub'] = 'C\'è già un sottodominio con le stesse impostazioni.';
+$wb['available_php_directive_snippets_txt'] = 'Direttive PHP Snippets disponibili:';
+$wb['available_apache_directive_snippets_txt'] = 'Direttive Apache Snippets disponibili:';
+$wb['available_nginx_directive_snippets_txt'] = 'Direttive nginx Snippets disponibili:';
+$wb['proxy_directives_txt'] = 'Direttive Proxy';
+$wb['available_proxy_directive_snippets_txt'] = 'Direttive Proxy Snippets disponibili:';
+$wb['no_server_error'] = 'Nessun server selezionato.';
+$wb['no_backup_txt'] = 'Nessu backup';
+$wb['daily_backup_txt'] = 'Giornaliero';
+$wb['weekly_backup_txt'] = 'Settimanale';
+$wb['monthly_backup_txt'] = 'Mensile';
 $wb['rewrite_rules_txt'] = 'Rewrite Rules';
-$wb['invalid_rewrite_rules_txt'] = 'Invalid Rewrite Rules';
-$wb['allowed_rewrite_rule_directives_txt'] = 'Allowed Directives:';
-$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
-$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['invalid_rewrite_rules_txt'] = 'Rewrite Rules non valide';
+$wb['allowed_rewrite_rule_directives_txt'] = 'Directive consentite:';
+$wb['configuration_error_txt'] = 'ERRORE DI CONFIGURAZIONE';
+$wb['web_folder_txt'] = 'Cartella Web';
+$wb['web_folder_invalid_txt'] = 'La cartella web non è valida, usa un percorso differente.';
+$wb['web_folder_unique_txt'] = 'La cartella web è già usata, usa un percorso differente.';
 $wb['host_txt'] = 'Hostname';
-$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
-$wb['variables_txt'] = 'Variables';
-$wb['added_by_txt'] = 'Added by';
-$wb['added_date_txt'] = 'Added date';
-$wb['backup_excludes_txt'] = 'Excluded Directories';
-$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['btn_save_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Cancel';
-$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['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['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
-$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
-$wb['backup_format_web_txt'] = 'Backup format for web files';
-$wb['backup_format_db_txt'] = 'Backup format for database';
-$wb['backup_missing_utils_txt'] = 'The following formats can not be used because they are not installed on the webserver: ';
-$wb['backup_compression_options_txt'] = 'Compression options';
-$wb['backup_encryption_note_txt'] = 'Encryption is only available for 7z, RAR, and zip (not secure).';
-$wb['backup_encryption_options_txt'] = 'Encryption options';
-$wb['backup_enable_encryption_txt'] = 'Enable encryption';
+$wb['domain_error_wildcard'] = 'I sottodomini * non sono consentiti.';
+$wb['variables_txt'] = 'Variabili';
+$wb['added_by_txt'] = 'Aggiunto da';
+$wb['added_date_txt'] = 'Data di inserimento';
+$wb['backup_excludes_txt'] = 'Directory escluse';
+$wb['backup_excludes_note_txt'] = '(Separare le directory con una virgola. Esempio: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'Le directory inserite contengono caratteri non corretti.';
+$wb['server_chosen_not_ok'] = 'Il server selezionato non è abilitato al tuo profilo.';
+$wb['subdomain_error_empty'] = 'Il campo sottodominio è vuoto o contiene caratteri non validi.';
+$wb['btn_save_txt'] = 'Salva';
+$wb['btn_cancel_txt'] = 'Annulla';
+$wb['load_client_data_txt'] = 'Carica i dettagli del cliente';
+$wb['load_my_data_txt'] = 'Carica i dettagli del mio contatto';
+$wb['reset_client_data_txt'] = 'Cancella i dati';
+$wb['rewrite_to_https_txt'] = 'Riscrivi HTTP to HTTPS';
+$wb['password_strength_txt'] = 'Forza della password';
+$wb['directive_snippets_id_txt'] = 'Configurazione Web server';
+$wb['http_port_txt'] = 'Porta HTTP';
+$wb['https_port_txt'] = 'Porta HTTPS';
+$wb['http_port_error_regex'] = 'Porta HTTP non valida.';
+$wb['https_port_error_regex'] = 'Porta HTTPS non valida.';
+$wb['enable_pagespeed_txt'] = 'Abilita PageSpeed';
+$wb['log_retention_txt'] = 'Durata di mantenimento dei file di log';
+$wb['log_retention_error_regex'] = 'Tempo di mantenimento in giorni (valori consentiti: min. 0 - max. 9999)';
+$wb['limit_web_quota_not_0_txt'] = 'Quota disco non può essere 0.';
+$wb['proxy_protocol_txt'] = 'Abilita protocollo PROXY';
+$wb['backup_format_web_txt'] = 'Formato Backup per i file web';
+$wb['backup_format_db_txt'] = 'Formato Backup per il database';
+$wb['backup_missing_utils_txt'] = 'I seguenti formati non possono essere usati perchè non sono installati sul server web: ';
+$wb['backup_compression_options_txt'] = 'Opzioni di compressione';
+$wb['backup_encryption_note_txt'] = 'La cifratura è disponibile solo per i formati 7z, RAR e zip (poco sicura).';
+$wb['backup_encryption_options_txt'] = 'Opzioni di cifratura';
+$wb['backup_enable_encryption_txt'] = 'Abilita cifratura';
 $wb['backup_password_txt'] = 'Password';
-$wb['backup_format_default_txt'] = 'Default: zip (deflate) or tar (gzip)';
+$wb['backup_format_default_txt'] = 'Default: zip (deflate) o tar (gzip)';
 $wb['backup_format_zip_txt'] = 'zip (deflate)';
 $wb['backup_format_gzip_txt'] = 'gzip';
 $wb['backup_format_bzip2_txt'] = 'bzip2';
@@ -186,19 +186,19 @@ $wb['backup_format_tar_7z_lzma_txt'] = 'tar + 7z (LZMA)';
 $wb['backup_format_tar_7z_lzma2_txt'] = 'tar + 7z (LZMA2)';
 $wb['backup_format_tar_7z_ppmd_txt'] = 'tar + 7z (PPMd)';
 $wb['backup_format_tar_7z_bzip2_txt'] = 'tar + 7z (BZip2)';
-$wb['dependent_domains_txt'] = 'Dependent sub- / aliasdomains';
-$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.';
-$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.';
-$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.';
-$wb['error_server_change_not_possible'] = 'The server cannot be changed.';
-$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
-$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
-$wb['jailkit_chroot_app_sections_error_empty'] = 'Jailkit chroot app sections  vuoto.';
-$wb['jailkit_chroot_app_programs_error_empty'] = 'Jailkit chrooted applications  vuoto.';
-$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
-$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
-$wb['tooltip_jailkit_chroot_app_sections_txt'] = 'When empty, uses Jailkit chroot app sections from Server Config';
-$wb['tooltip_jailkit_chroot_app_programs_txt'] = 'When empty, uses Jailkit chroot applications from Server Config';
-$wb['delete_unused_jailkit_txt'] = 'Delete unused jailkit chroot';
-$wb['tooltip_delete_unused_jailkit_txt'] = 'Delete the jailkit chroot environment when there are no shell users or cron jobs which require it.';
-$wb['ssl_options_not_for_le_txt'] = 'You have Let\'s Encrypt certificates enabled for this website. Please be aware that all options on this page apply to non-Let\'s Encrypt certificates only. Remember to uncheck Let\'s Encrypt on the main tab if you want to switch to a different certificate.';
+$wb['dependent_domains_txt'] = ' sub- / alias dominio dipendente';
+$wb['error_ipv4_change_forbidden'] = 'Il numero IP non può essere cambiato. Contatta l\'amministratore se vuoi cambiare l\'indirizzo IP v4.';
+$wb['error_ipv6_change_forbidden'] = 'Il numero IP non può essere cambiato. Contatta l\'amministratore se vuoi cambiare l\'indirizzo IP v6.';
+$wb['error_domain_change_forbidden'] = 'Il dominio non può essere cambiato. Contatta l\'amministratore se vuoi cambiare il nome di dominio.';
+$wb['error_server_change_not_possible'] = 'Il server non può essere cambiato.';
+$wb['jailkit_chroot_app_sections_txt'] = 'Sezione Jailkit chroot app';
+$wb['jailkit_chroot_app_programs_txt'] = 'Applicazioni Jailkit chrooted';
+$wb['jailkit_chroot_app_sections_error_empty'] = 'Sezione Jailkit chroot app vuota.';
+$wb['jailkit_chroot_app_programs_error_empty'] = 'Applicazioni Jailkit chrooted vuota.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Sezione Jailkit chroot non valida.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Programmi Jailkit chroot app non validi.';
+$wb['tooltip_jailkit_chroot_app_sections_txt'] = 'Se vuota, usa la sezione Jailkit chroot app dalle configurazioni del server.';
+$wb['tooltip_jailkit_chroot_app_programs_txt'] = 'Se vuota, usa la sezione Jailkit chroot applications della configurazione del Server';
+$wb['delete_unused_jailkit_txt'] = 'Cancella jailkit chroot non usate';
+$wb['tooltip_delete_unused_jailkit_txt'] = 'Cancella l\'ambiente jailkit chroot quando non sono presenti utenti della shell o job cron che lo richiedono.';
+$wb['ssl_options_not_for_le_txt'] = 'Hai abilitato i certificati Let\'Encrypt per questo sito Web. Considera che tutte le opzioni di questa pagina si applicano a ai certificati non Let\'Encrypt solamente. Ricorda di deselezionare l\'opzione Let\'s Encrypt nella scheda principale se vuoi passare ad certificato differente.';
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain_admin_list.lng b/interface/web/sites/lib/lang/it_web_vhost_domain_admin_list.lng
index 4f07fd858847320507e6139e777fbce2abb646c2..db7fbdb378a55f73f0bef01d1b1399b4a7b81cc8 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain_admin_list.lng
@@ -1,14 +1,14 @@
 <?php
-$wb['sys_groupid_txt'] = 'Client';
-$wb['list_head_txt'] = 'Websites';
+$wb['sys_groupid_txt'] = 'Cliente';
+$wb['list_head_txt'] = 'Sito Web';
 $wb['domain_id_txt'] = 'ID';
-$wb['active_txt'] = 'Active';
+$wb['active_txt'] = 'Attivo';
 $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['domain_txt'] = 'Dominio';
+$wb['add_new_record_txt'] = 'Aggiungi un sito Web';
+$wb['add_new_subdomain_txt'] = 'Aggiungi un sottodominion';
+$wb['add_new_aliasdomain_txt'] = 'Aggiungi un Alias di dominio';
+$wb['domain_list_head_txt'] = 'Siti Web';
+$wb['aliasdomain_list_head_txt'] = 'dominio Alias (Vhost)';
+$wb['subdomain_list_head_txt'] = 'Sottodominio (Vhost)';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain_list.lng b/interface/web/sites/lib/lang/it_web_vhost_domain_list.lng
index b1ce2136c2e305dc49e79bbb87eb914b11ae9f94..4093dca27f6058c3ef33943a8302c1873b8ba681 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain_list.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain_list.lng
@@ -6,9 +6,9 @@ $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
 $wb['add_new_record_txt'] = 'Aggiungi nuovo sito';
 $wb['parent_domain_id_txt'] = '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['add_new_subdomain_txt'] = 'Aggiungi nuovo sottodominio';
+$wb['add_new_aliasdomain_txt'] = 'Aggiungi nuovo alis di dominio';
+$wb['domain_list_head_txt'] = 'Siti Web';
+$wb['aliasdomain_list_head_txt'] = 'Alias dominio (Vhost)';
+$wb['subdomain_list_head_txt'] = 'Subdominio (Vhost)';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng
index 5366e37bafbb0e78018de210d058aead00a0c912..7caed382ae7d440409b52eec4ebc876f4419eecb 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng
@@ -1,40 +1,40 @@
 <?php
-$wb['parent_domain_id_txt'] = 'Parent Website';
+$wb['parent_domain_id_txt'] = 'Website genitore';
 $wb['web_folder_txt'] = 'Cartella Web';
-$wb['web_folder_invalid_txt'] = 'La cartella web  è errata, indicarne una diversa.';
-$wb['web_folder_unique_txt'] = 'La cartella web  è già utilizzata, selezionarne una diversa.';
+$wb['web_folder_invalid_txt'] = 'La cartella web è errata, indicarne una diversa.';
+$wb['web_folder_unique_txt'] = 'La cartella web è già utilizzata, selezionarne una diversa.';
 $wb['backup_interval_txt'] = 'Intervallo Backup';
 $wb['backup_copies_txt'] = 'Numero copie di backup';
 $wb['ssl_state_txt'] = 'Stato';
 $wb['ssl_locality_txt'] = 'Città';
 $wb['ssl_organisation_txt'] = 'Organizzazione';
-$wb['ssl_organisation_unit_txt'] = 'Unità Organizzazione';
+$wb['ssl_organisation_unit_txt'] = 'Reparto';
 $wb['ssl_country_txt'] = 'Codice Nazione';
-$wb['ssl_key_txt'] = 'SSL Key';
-$wb['ssl_request_txt'] = 'SSL Request';
-$wb['ssl_cert_txt'] = 'SSL Certificate';
+$wb['ssl_key_txt'] = 'Chiave SSL';
+$wb['ssl_request_txt'] = 'Richiesta SSL';
+$wb['ssl_cert_txt'] = 'Certificato SSL';
 $wb['ssl_bundle_txt'] = 'SSL Bundle';
-$wb['ssl_action_txt'] = 'SSL Action';
-$wb['ssl_domain_txt'] = 'SSL Domain';
+$wb['ssl_action_txt'] = 'Azione SSL';
+$wb['ssl_domain_txt'] = 'Dominio SSL';
 $wb['server_id_txt'] = 'Server';
 $wb['domain_txt'] = 'Dominio';
 $wb['host_txt'] = 'Nome Host';
 $wb['web_folder_error_regex'] = 'Cartella inserita non valida. Per favore non inserire uno slash.';
-$wb['web_folder_error_empty'] = 'Web folder cannot be empty.  Use /web/ to make the same as the Parent Website';
+$wb['web_folder_error_empty'] = 'La cartella web non può essere vuota.  Usare /web/ per la stessa cartella del sito Web genitore';
 $wb['type_txt'] = 'Tipo';
 $wb['redirect_type_txt'] = 'Tipo reinderizzamento';
-$wb['r_redirect_txt'] = 'R (Temporary redirect)';
-$wb['l_redirect_txt'] = 'L (Last redirect rule)';
-$wb['r_l_redirect_txt'] = 'R,L (Temporary redirect + last rule)';
-$wb['r_301_l_redirect_txt'] = 'R=301,L (Permanent redirect + last rule)';
+$wb['r_redirect_txt'] = 'R (Reindirizzamento temporaneo)';
+$wb['l_redirect_txt'] = 'L (Ultima regola di reindirizzamento)';
+$wb['r_l_redirect_txt'] = 'R,L (Reindirizzamento temporaneo + ultima regola)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (Reindirizzamento permanente + ultima regola)';
 $wb['redirect_path_txt'] = 'Percorso Reinderizzamento';
 $wb['active_txt'] = 'Attivo';
-$wb['document_root_txt'] = 'Documentroot';
+$wb['document_root_txt'] = 'Radice dei Documenti';
 $wb['system_user_txt'] = 'Linux User';
 $wb['system_group_txt'] = 'Linux Group';
 $wb['ip_address_txt'] = 'Indirizzo IPv4';
 $wb['ipv6_address_txt'] = 'Indirizzo IPv6';
-$wb['vhost_type_txt'] = 'VHost Type';
+$wb['vhost_type_txt'] = 'Tipo VHost';
 $wb['hd_quota_txt'] = 'Quota Spazio Disco';
 $wb['traffic_quota_txt'] = 'Quota Traffico';
 $wb['cgi_txt'] = 'CGI';
@@ -45,35 +45,35 @@ $wb['ssl_txt'] = 'SSL';
 $wb['suexec_txt'] = 'SuEXEC';
 $wb['php_txt'] = 'PHP';
 $wb['client_txt'] = 'Cliente';
-$wb['limit_web_domain_txt'] = 'Hai raggiunto il numero massimo di siti web per il tuo account.';
-$wb['limit_web_aliasdomain_txt'] = 'Hai raggiunto il numero massimo di domini alias  per il tuo account.';
-$wb['limit_web_subdomain_txt'] = 'Hai raggiunto il numero massimo di sottodomini per il tuo account.';
+$wb['limit_web_domain_txt'] = 'Hai raggiunto il numero massimo di siti web per il tuo profilo.';
+$wb['limit_web_aliasdomain_txt'] = 'Hai raggiunto il numero massimo di domini alias  per il tuo profilo.';
+$wb['limit_web_subdomain_txt'] = 'Hai raggiunto il numero massimo di sottodomini per il tuo profilo.';
 $wb['apache_directives_txt'] = 'Direttive Apache';
-$wb['domain_error_empty'] = 'Domain  vuoto.';
+$wb['domain_error_empty'] = 'Dominio vuoto.';
 $wb['domain_error_unique'] = 'Esiste già un sito o sottodominio / dominio alias con questo nome dominio.';
 $wb['domain_error_regex'] = 'Nome dominio non valido.';
-$wb['domain_error_wildcard'] = 'Non sono ammessi sottodomini wildcard.';
+$wb['domain_error_wildcard'] = 'Non sono ammessi sottodomini *.';
 $wb['hd_quota_error_empty'] = 'Spazio disco 0 o vuoto.';
 $wb['traffic_quota_error_empty'] = 'Quota Traffico  vuoto.';
-$wb['error_ssl_state_empty'] = 'SSL State  vuoto.';
-$wb['error_ssl_locality_empty'] = 'SSL Locality  vuoto.';
-$wb['error_ssl_organisation_empty'] = 'SSL Organisation  vuoto.';
-$wb['error_ssl_organisation_unit_empty'] = 'SSL Organisation Unit  vuoto.';
-$wb['error_ssl_country_empty'] = 'SSL Country  vuoto.';
-$wb['error_ssl_cert_empty'] = 'SSL Certificate field is empty';
+$wb['error_ssl_state_empty'] = 'SSL Stato vuoto.';
+$wb['error_ssl_locality_empty'] = 'SSL Località  vuoto.';
+$wb['error_ssl_organisation_empty'] = 'SSL Organizzazione vuoto.';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL Reparto vuoto.';
+$wb['error_ssl_country_empty'] = 'SSL Paese vuoto.';
+$wb['error_ssl_cert_empty'] = 'Campo Certificato SSL vuoto';
 $wb['client_group_id_txt'] = 'Cliente';
-$wb['stats_password_txt'] = 'Statistiche Web password';
+$wb['stats_password_txt'] = 'password Statistiche Web';
 $wb['allow_override_txt'] = 'Apache AllowOverride';
-$wb['limit_web_quota_free_txt'] = 'Max. available Harddisk Quota';
-$wb['ssl_state_error_regex'] = 'Invalid SSL State. Caratteri ammessi: a-z, 0-9 e .,-_';
-$wb['ssl_locality_error_regex'] = 'Invalid SSL Locality. Caratteri ammessi: a-z, 0-9 e .,-_';
-$wb['ssl_organisation_error_regex'] = 'Invalid SSL Organisation. Caratteri ammessi: a-z, 0-9 e .,-_';
-$wb['ssl_organistaion_unit_error_regex'] = 'Invalid SSL Organisation Unit. Caratteri ammessi: a-z, 0-9 e .,-_';
-$wb['ssl_country_error_regex'] = 'Invalid SSL Country. Valid characters are: A-Z';
-$wb['limit_traffic_quota_free_txt'] = 'Max. available Traffic Quota';
-$wb['redirect_error_regex'] = 'Invalid redirect path. Valid redirects are for example: /test/ or https://www.domain.tld/test/';
+$wb['limit_web_quota_free_txt'] = 'Max. quota disco disponibile';
+$wb['ssl_state_error_regex'] = 'SSL Stato non valido. Caratteri ammessi: a-z, 0-9 e .,-_';
+$wb['ssl_locality_error_regex'] = 'SSL Località non valida. Caratteri ammessi: a-z, 0-9 e .,-_';
+$wb['ssl_organisation_error_regex'] = 'SSL Organizzazione non valida. Caratteri ammessi: a-z, 0-9 e .,-_';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL Reparto non valido. Caratteri ammessi: a-z, 0-9 e .,-_';
+$wb['ssl_country_error_regex'] = 'SSL Paese non valido. Caratteri ammessi: are: A-Z';
+$wb['limit_traffic_quota_free_txt'] = 'Max. quota Traffico disponibile';
+$wb['redirect_error_regex'] = 'Percorso di reindirizzamento non valido. Esempi di percorsi validi: /test/ o https://www.domain.tld/test/';
 $wb['php_open_basedir_txt'] = 'PHP open_basedir';
-$wb['traffic_quota_exceeded_txt'] = 'Traffic quota exceeded';
+$wb['traffic_quota_exceeded_txt'] = 'Quota Traffico superata';
 $wb['ruby_txt'] = 'Ruby';
 $wb['stats_user_txt'] = 'Statistiche Web nome utente';
 $wb['stats_type_txt'] = 'Applicazione Statistiche Web';
@@ -82,14 +82,14 @@ $wb['none_txt'] = 'Nessuno';
 $wb['disabled_txt'] = 'Disabilitato ';
 $wb['no_redirect_txt'] = 'Nessun reinderizzamento';
 $wb['no_flag_txt'] = 'No flag';
-$wb['save_certificate_txt'] = 'Save certificate';
-$wb['create_certificate_txt'] = 'Crea  certificate';
-$wb['delete_certificate_txt'] = 'Elimina certificate';
-$wb['nginx_directives_txt'] = 'nginx Directives';
-$wb['seo_redirect_txt'] = 'SEO Redirect';
+$wb['save_certificate_txt'] = 'Salva certificato';
+$wb['create_certificate_txt'] = 'Crea certificato';
+$wb['delete_certificate_txt'] = 'Elimina certificato';
+$wb['nginx_directives_txt'] = 'Direttive nginx';
+$wb['seo_redirect_txt'] = 'Reindirizzamento 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_use_socket_txt'] = 'Usare Socket per PHP-FPM';
 $wb['error_no_sni_txt'] = 'SNI per SSL non attivo su questo server. Puoi abilitare un solo certificato SSL per indirizzo IP.';
 $wb['python_txt'] = 'Python';
 $wb['perl_txt'] = 'Perl';
@@ -97,39 +97,39 @@ $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  deve essere un valore intero positivo.';
-$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers  deve essere un valore intero positivo.';
-$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers  deve essere un valore intero positivo.';
-$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers  deve essere un valore intero positivo.';
-$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
-$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['server_php_id_txt'] = 'PHP Version';
+$wb['error_php_fpm_pm_settings_txt'] = 'Valori di impostazioni PHP-FPM pm devono soddisfare: 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 essere un valore intero positivo.';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers deve essere un valore intero positivo.';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve essere un valore intero positivo.';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve essere un valore intero positivo.';
+$wb['hd_quota_error_regex'] = 'quota disco non è valido.';
+$wb['traffic_quota_error_regex'] = 'Quota Traffic non valida.';
+$wb['server_php_id_txt'] = 'Versione PHP';
 $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';
-$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout  deve essere un valore intero positivo.';
-$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['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout deve essere un valore intero positivo.';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests deve essere un intero >= 0.';
+$wb['pm_ondemand_hint_txt'] = 'Nota: che devi avere una versione PHP >= 5.3.9 per poter usare il processo ondemand. Se selezioni ondemand con una versione precedente di PHP, PHP non ripartirà più!';
 $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['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['proxy_directives_txt'] = 'Proxy Directives';
-$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['rewrite_rules_txt'] = 'Rewrite Rules';
-$wb['invalid_rewrite_rules_txt'] = 'Invalid Rewrite Rules';
-$wb['allowed_rewrite_rule_directives_txt'] = 'Allowed Directives:';
-$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
-$wb['variables_txt'] = 'Variables';
-$wb['backup_excludes_txt'] = 'Excluded Directories';
-$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['subdomain_error_empty'] = 'The subdommain field is empty or contiene caratteri non validi.';
-$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_php_directive_snippets_txt'] = 'Direttive PHP Snippets disponibili:';
+$wb['available_apache_directive_snippets_txt'] = 'Direttive Apache Snippets disponibili:';
+$wb['available_nginx_directive_snippets_txt'] = 'Direttive nginx Snippets disponibili:';
+$wb['proxy_directives_txt'] = 'Direttive Proxy';
+$wb['available_proxy_directive_snippets_txt'] = 'Direttive Proxy Snippets disponibili:';
+$wb['rewrite_rules_txt'] = 'Regole di riscrittura';
+$wb['invalid_rewrite_rules_txt'] = 'Regole di riscrittura non valide';
+$wb['allowed_rewrite_rule_directives_txt'] = 'Direttive consentite:';
+$wb['configuration_error_txt'] = 'ERRORE DI CONFIGURAZIONE';
+$wb['variables_txt'] = 'Variabili';
+$wb['backup_excludes_txt'] = 'Cartelle escluse';
+$wb['backup_excludes_note_txt'] = '(Separate le cartelle da virgola. Esempi: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'TLe cartelle escluse contengono caratteri non ammessi.';
+$wb['subdomain_error_empty'] = 'Il campo sottodominio è vuoto o contiene caratteri non validi.';
+$wb['http_port_txt'] = 'Porta HTTP';
+$wb['https_port_txt'] = 'Porta HTTPS';
+$wb['http_port_error_regex'] = 'Porta HTTP non valida.';
+$wb['https_port_error_regex'] = 'Porta HTTPS non valida.';
diff --git a/interface/web/sites/lib/lang/it_webdav_user.lng b/interface/web/sites/lib/lang/it_webdav_user.lng
index 37be4c086160d9fa7497e591c748f62cd74a82d3..71d3adc9d36cdbe288b10c7345b3b1862aaba52c 100644
--- a/interface/web/sites/lib/lang/it_webdav_user.lng
+++ b/interface/web/sites/lib/lang/it_webdav_user.lng
@@ -1,19 +1,19 @@
 <?php
-$wb['dir_txt'] = 'Direttrice';
+$wb['dir_txt'] = 'Directory';
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Sito Web';
 $wb['username_txt'] = 'Nome Utente';
 $wb['password_txt'] = 'Password';
 $wb['password_strength_txt'] = 'Livello sicurezza Password';
 $wb['active_txt'] = 'Attivo';
-$wb['limit_webdav_user_txt'] = 'Numero massimo utenti webdav per il tuo account,raggiunto.';
+$wb['limit_webdav_user_txt'] = 'Hai raggiunto il numero massimo utenti webdav per il tuo profilo.';
 $wb['username_error_empty'] = 'Username  vuoto.';
 $wb['username_error_unique'] = 'Il nome utente deve essere unico.';
 $wb['username_error_regex'] = 'Il nome utente contiene caratteri che non sono consentiti.';
-$wb['directory_error_empty'] = 'Direttrice vuota.';
+$wb['directory_error_empty'] = 'Direttory vuota.';
 $wb['parent_domain_id_error_empty'] = 'Nessun sito web selezionato.';
-$wb['dir_dot_error'] = 'No .. in path allowed.';
-$wb['dir_slashdot_error'] = 'No ./ in path allowed.';
+$wb['dir_dot_error'] = 'Non è consentito .. nel percorso.';
+$wb['dir_slashdot_error'] = 'Non è consentito ./ nel percorso.';
 $wb['generate_password_txt'] = 'Genera Password';
 $wb['repeat_password_txt'] = 'Ripeti Password';
 $wb['password_mismatch_txt'] = 'Le password non coincidono.';
diff --git a/interface/web/sites/lib/lang/ja_web_backup_list.lng b/interface/web/sites/lib/lang/ja_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/ja_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ja_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/nl_web_backup_list.lng b/interface/web/sites/lib/lang/nl_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/nl_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/nl_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/pl_web_backup_list.lng b/interface/web/sites/lib/lang/pl_web_backup_list.lng
index dfdd53c25f43273ac9717e40ed16f8d91183578d..6185db50a341636a79124757d1171cd4317b11f6 100644
--- a/interface/web/sites/lib/lang/pl_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/pl_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/pt_web_backup_list.lng b/interface/web/sites/lib/lang/pt_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/pt_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/pt_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/ro_web_backup_list.lng b/interface/web/sites/lib/lang/ro_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/ro_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ro_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/ru_web_backup_list.lng b/interface/web/sites/lib/lang/ru_web_backup_list.lng
index 2a92f2761b1d05f012f5ca78edb485bef4877eaa..3569ae7c09f816a78b24b88ab87140697656f53a 100644
--- a/interface/web/sites/lib/lang/ru_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/ru_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/se_web_backup_list.lng b/interface/web/sites/lib/lang/se_web_backup_list.lng
index 8e0167aa136ab0ed482b4864a9b3167d69cea6f5..3f210ecc4298fe1867c926d9c29301abbc48a158 100644
--- a/interface/web/sites/lib/lang/se_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/se_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/sites/lib/lang/sk_web_backup_list.lng b/interface/web/sites/lib/lang/sk_web_backup_list.lng
index 8f0d3a7469f807d706676c8581e3ea704584baec..0f19d9339ed75bcaaf730ee4b62bacc1cc70e4f9 100644
--- a/interface/web/sites/lib/lang/sk_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/sk_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
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 51bca34f2e40f292a55f5989de3b41b24c71475c..c61a5ab0180588c2c6320eb7ed3e655c894791fd 100644
--- a/interface/web/sites/lib/lang/tr_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_backup_list.lng
@@ -30,6 +30,7 @@ $wb['manual_backup_title_txt'] = 'Manual backup';
 $wb['make_backup_web_txt'] = 'Make backup of web files';
 $wb['make_backup_database_txt'] = 'Make backup of databases';
 $wb['make_backup_confirm_txt'] = 'You are about to start a manual backup process. Manual backups count towards the total number of allowed backup copies: therefore if the limit will be exceeded, then oldest backups may be deleted automatically. Proceed?';
+$wb['final_size_txt'] = 'Final download size may vary depending on selected compression format.';
 $wb['yes_txt'] = 'Yes';
 $wb['no_txt'] = 'No';
 $wb['backup_is_encrypted_txt'] = 'Encrypted';
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js
index c634ff7fb2fe314e85c640d8643b850beb47a67c..18940f6f3ba183a8af83e54bab0db50d5d6bf5d8 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -739,7 +739,7 @@ $(document).on("click", "[data-uncheck-fields] > input[type='checkbox']", functi
 	}
 });
 
-$(document).on('ready', function () {
+$(document).ready(function() {
 	$.fn.extend({
 		insertAtCaret: function(myValue){
 			return this.each(function(i) {
diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css
index c53b9886320465cdb4e38e28709a6d9d6c07f6ff..b614bebdf5ed1fe4e60fca4a4b1ba4e59e6fb924 100644
--- a/interface/web/themes/default/assets/stylesheets/ispconfig.css
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -340,34 +340,30 @@ thead.dark th.tiny-col {
   text-overflow: ellipsis; }
 
 thead.dark th[data-column] {
-  cursor: pointer;
+    cursor: pointer;
+    position: relative;
+}
+
+thead.dark th[data-column]:before {
+    content: "⇅";
+    position: absolute;
+    right: 15px;
+    vertical-align: middle;
+    line-height: inherit;
+    color: #aaa;
 }
 
 thead.dark th[data-column][data-ordered] {
-	font-weight: bold;
-	position: relative;
+    background: linear-gradient(to top, #57646d, #3e474e);
 }
 
 thead.dark th[data-column][data-ordered]:before {
-	content: "";
-	display: block;
-	position: absolute;
-	right: 5px;
-	top: 16px;
-	width: 0;
-	height: 0;
-	vertical-align: middle;
-	border-bottom: 5px solid #fff;
-	border-top: 5px solid transparent;
-	border-right: 5px solid transparent;
-	border-left: 6px solid transparent;
-	line-height: inherit;
+    color: #fff;
+    content: "🡫";
 }
 
 thead.dark th[data-column][data-ordered="desc"]:before {
-	top: 21px;
-	border-bottom: 5px solid transparent;
-	border-top: 5px solid #fff;
+    content: "🡩";
 }
 
 thead.dark td input,
diff --git a/interface/web/tools/lib/lang/it_import_ispconfig.lng b/interface/web/tools/lib/lang/it_import_ispconfig.lng
index ce47c4da4d24b0709be26b5ec28b82ef2ec33b79..f3b5fccde29eee5faa619d43e020801c50e3b257 100644
--- a/interface/web/tools/lib/lang/it_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/it_import_ispconfig.lng
@@ -1,23 +1,23 @@
 <?php
-$wb['head_txt'] = 'Import email configuration from ISPConfig 3';
-$wb['legend_txt'] = 'Remote server connection details';
-$wb['legend2_txt'] = 'Import email domain';
-$wb['resync_sites_txt'] = 'Resync Websites';
-$wb['resync_ftp_txt'] = 'Resync FTP users';
-$wb['resync_shell_txt'] = 'Resync shell users';
-$wb['resync_cron_txt'] = 'Resync cronjobs';
-$wb['resync_db_txt'] = 'Resync clientdb config';
-$wb['resync_mailbox_txt'] = 'Resync Mailboxes';
-$wb['resync_dns_txt'] = 'Resync DNS records';
-$wb['btn_start_txt'] = 'Start Import';
-$wb['btn_connect_txt'] = 'Connect to remote server';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['client_group_id_txt'] = 'Local client';
-$wb['mail_domain_txt'] = 'Remote email domain';
-$wb['import_mailbox_txt'] = 'Import mailbox';
-$wb['import_aliasdomain_txt'] = 'Import alias domain';
-$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['head_txt'] = 'Importa la configurazione email configuration da ISPConfig 3';
+$wb['legend_txt'] = 'Dettagli della connessione remota';
+$wb['legend2_txt'] = 'Importa dominio email';
+$wb['resync_sites_txt'] = 'Risincronizza siti Web';
+$wb['resync_ftp_txt'] = 'Risincronizza utenti FTP';
+$wb['resync_shell_txt'] = 'Risincronizza utenti shell';
+$wb['resync_cron_txt'] = 'Risincronizza cronjobs';
+$wb['resync_db_txt'] = 'Risincronizza configurazione clientdb';
+$wb['resync_mailbox_txt'] = 'Risincronizza Mailboxes';
+$wb['resync_dns_txt'] = 'Risincronizza record DNS';
+$wb['btn_start_txt'] = 'Avvia Importazione';
+$wb['btn_connect_txt'] = 'Connetti a un server remoto';
+$wb['btn_cancel_txt'] = 'Annulla';
+$wb['client_group_id_txt'] = 'Cliente locale';
+$wb['mail_domain_txt'] = 'Dominio email remoto';
+$wb['import_mailbox_txt'] = 'Importa mailbox';
+$wb['import_aliasdomain_txt'] = 'Importa domini alias';
+$wb['import_alias_txt'] = 'Importa alias email';
+$wb['import_forward_txt'] = 'Importa Inoltri';
+$wb['import_user_filter_txt'] = 'Importa filtri utente';
+$wb['import_spamfilter_txt'] = 'Importa spamfilter';
 ?>
diff --git a/interface/web/tools/lib/lang/it_import_vpopmail.lng b/interface/web/tools/lib/lang/it_import_vpopmail.lng
index 66fe56da1c7b170aaafa907796c2e5902387fc28..96a3ce35cd843d6d1fcb618fa9ed51f848245499 100644
--- a/interface/web/tools/lib/lang/it_import_vpopmail.lng
+++ b/interface/web/tools/lib/lang/it_import_vpopmail.lng
@@ -1,7 +1,7 @@
 <?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'] = 'Importa configurazione email da Vpopmail';
+$wb['legend_txt'] = 'Dettagli connessione al server database';
+$wb['btn_start_txt'] = 'Avvia importazione';
+$wb['btn_connect_txt'] = 'Collega a in seerver remoto';
+$wb['btn_cancel_txt'] = 'Annulla';
 ?>
diff --git a/interface/web/tools/lib/lang/it_index.lng b/interface/web/tools/lib/lang/it_index.lng
index a3ef38f21934a9d02669da2c2722feefc3f64325..ea996c4ff46f0e5ac57f518aa4dbb5a2b22e0816 100644
--- a/interface/web/tools/lib/lang/it_index.lng
+++ b/interface/web/tools/lib/lang/it_index.lng
@@ -1,4 +1,4 @@
 <?php
-$wb['page_head_txt'] = 'ISPConfig Tools';
-$wb['page_desc_txt'] = 'Change user settings';
+$wb['page_head_txt'] = 'Strumenti ISPConfig';
+$wb['page_desc_txt'] = 'Cambia impostazioni utente';
 ?>
diff --git a/interface/web/tools/lib/lang/it_interface.lng b/interface/web/tools/lib/lang/it_interface.lng
new file mode 100644
index 0000000000000000000000000000000000000000..151bc2c3f04a3671e9528cb61efd58da5bef1c03
--- /dev/null
+++ b/interface/web/tools/lib/lang/it_interface.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['interface_head_txt'] = 'Impostazioni Interfaccia';
+$wb['interface_desc_txt'] = 'Modifica interfaccia';
+$wb['language_txt'] = 'Lingua pannello';
+$wb['startmodule_txt'] = 'Modulo di avvio';
+$wb['app_theme_txt'] = 'Apparenza';
+?>
diff --git a/interface/web/tools/lib/lang/it_resync.lng b/interface/web/tools/lib/lang/it_resync.lng
index 42831b890be9d9590be70588fdce332c39ba7ddb..704533c52c8786f02c9b868b53d56663c9ce8f4d 100644
--- a/interface/web/tools/lib/lang/it_resync.lng
+++ b/interface/web/tools/lib/lang/it_resync.lng
@@ -1,53 +1,53 @@
 <?php
-$wb['head_txt'] = 'Resync Tool';
-$wb['legend_txt'] = 'Resync';
-$wb['resync_all_txt'] = 'All services';
-$wb['resync_sites_txt'] = 'Websites';
-$wb['resync_ftp_txt'] = 'FTP-Accounts';
-$wb['resync_webdav_txt'] = 'WebDAV-Users';
-$wb['resync_shell_txt'] = 'Shell users';
-$wb['resync_cron_txt'] = 'Cronjobs';
-$wb['resync_db_txt'] = 'Client Database config';
-$wb['resync_mailbox_txt'] = 'Mailboxes';
-$wb['resync_mail_txt'] = 'Maildomains';
-$wb['resync_mailfilter_txt'] = 'Mailfilter';
+$wb['head_txt'] = 'Strumento di risincronizzazione';
+$wb['legend_txt'] = 'Risincronizza';
+$wb['resync_all_txt'] = 'Tutti i servizi';
+$wb['resync_sites_txt'] = 'I sit Web';
+$wb['resync_ftp_txt'] = 'Gli utenti FTP';
+$wb['resync_webdav_txt'] = 'Gli utenti WebDAV';
+$wb['resync_shell_txt'] = 'Gli utenti della Shell';
+$wb['resync_cron_txt'] = 'I job periodici';
+$wb['resync_db_txt'] = 'Configurazione database Clienti';
+$wb['resync_mailbox_txt'] = 'Caselle Email';
+$wb['resync_mail_txt'] = 'Domini Email';
+$wb['resync_mailfilter_txt'] = 'Filtri mail';
 $wb['resync_mailinglist_txt'] = 'Mailinglist';
-$wb['resync_dns_txt'] = 'DNS records';
+$wb['resync_dns_txt'] = 'records DNS';
 $wb['resync_vserver_txt'] = 'vServer';
-$wb['resync_client_txt'] = 'Client and reseller';
-$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['resync_client_txt'] = 'Clienti e rivenditori';
+$wb['all_active_txt'] = 'Tutti i server Attivi';
+$wb['all_active_mail_txt'] = 'Tutti i Mail-Server attivi';
+$wb['all_active_web_txt'] = 'Tutti i server Web attivi';
+$wb['all_active_dns_txt'] = 'Tutti i server DNS attivi';
+$wb['all_active_file_txt'] = 'Tutti i File-Server attivi';
+$wb['all_active_db_txt'] = 'Tutti i server Database attivi';
+$wb['all_active_vserver_txt'] = 'Tutti i vServer attivi';
+$wb['do_sites_txt'] = 'Sit Web risincronizzati';
+$wb['do_ftp_txt'] = 'Utenti FTP risincronizzati';
+$wb['do_webdav_txt'] = 'Utenti WebDav risincronizzati';
+$wb['do_shell_txt'] = 'Utenti Shell risincronizzati';
 $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_db_user_txt'] = 'Utenti Database risincronizzati';
+$wb['do_db_txt'] = 'Database risincronizzati';
+$wb['do_mail_txt'] = 'Domini Mail risincronizzati';
+$wb['do_mailbox_txt'] = 'Caselle Mail risincronizzati';
+$wb['do_mail_alias_txt'] = 'Alias risincronizzati';
+$wb['do_mail_access_txt'] = 'Accessi Mail risincronizzati';
+$wb['do_mail_contentfilter_txt'] = 'Filtri di contenuto risincronizzati';
+$wb['do_mail_userfilter_txt'] = 'Filtri utenti mail risincronizzati';
+$wb['do_mailinglist_txt'] = 'Mailinglist risincronizzate';
+$wb['do_dns_txt'] = 'Zone DNS risincronizzati';
+$wb['do_vserver_txt'] = 'vServer risincronizzati';
+$wb['do_clients_txt'] = 'Clients e rivenditori risincronizzati';
+$wb['no_results_txt'] = 'Niente';
 $wb['btn_start_txt'] = 'Start';
-$wb['btn_cancel_txt'] = 'Cancel';
-$wb['do_mail_spamfilter_policy_txt'] = 'Resynced Spamfilter Policies';
-$wb['do_mail_spamfilter_txt'] = 'Resynced Spamfilter';
-$wb['do_mailget_txt'] = 'Resynced Fetchmail';
+$wb['btn_cancel_txt'] = 'Annulla';
+$wb['do_mail_spamfilter_policy_txt'] = 'Politiche Spamfilter risincronizzate';
+$wb['do_mail_spamfilter_txt'] = 'Filtri Spam risincronizzati';
+$wb['do_mailget_txt'] = 'Fetchmail risincronizzati';
 $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['do_mailtransport_txt'] = 'Mailtransport risincronizzati';
+$wb['do_mailrelay_txt'] = 'Mailrelay risincronizzati';
 ?>
diff --git a/interface/web/tools/lib/lang/it_tpl_default.lng b/interface/web/tools/lib/lang/it_tpl_default.lng
index c06246304d016300490b28f50eb168cff4cdbc4e..aca4cc59e44a23360d67fc6a515172f3b42f782b 100644
--- a/interface/web/tools/lib/lang/it_tpl_default.lng
+++ b/interface/web/tools/lib/lang/it_tpl_default.lng
@@ -1,7 +1,7 @@
 <?php
-$wb['list_head_txt'] = 'Default Theme settings';
-$wb['list_desc_txt'] = 'Modify default-theme specific options';
-$wb['no_settings_txt'] = 'There are no settings for the default theme.';
-$wb['btn_start_txt'] = 'Save';
-$wb['btn_cancel_txt'] = 'Back';
+$wb['list_head_txt'] = 'Impostazioni default del tema';
+$wb['list_desc_txt'] = 'Modifica le opzioni specifiche del tema default';
+$wb['no_settings_txt'] = 'Non sono presenti impostazioni per il tema default.';
+$wb['btn_start_txt'] = 'Salva';
+$wb['btn_cancel_txt'] = 'Indietro';
 ?>
diff --git a/interface/web/tools/lib/lang/it_usersettings.lng b/interface/web/tools/lib/lang/it_usersettings.lng
index a1ad8eba871125a2cf17c29a4e70b39f2f2f995d..0f1cefe1bf3411eeb539324b6927dd3ac96dfe26 100644
--- a/interface/web/tools/lib/lang/it_usersettings.lng
+++ b/interface/web/tools/lib/lang/it_usersettings.lng
@@ -2,14 +2,14 @@
 $wb['password_txt'] = 'Password';
 $wb['language_txt'] = 'Lingua';
 $wb['password_mismatch'] = 'Il secondo campo password non corrisponde con il primo.';
-$wb['Form to edit the user password and language.'] = 'Form per modificare la password e la lingua dellutente.';
+$wb['Form to edit the user password and language.'] = 'Form per modificare la password e la lingua dell\'utente.';
 $wb['Settings'] = 'Impostazioni';
 $wb['password_strength_txt'] = 'Sicurezza della 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['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
+$wb['generate_password_txt'] = 'Genera Password';
+$wb['repeat_password_txt'] = 'Ripeti Password';
+$wb['password_mismatch_txt'] = 'Le password sono diverse.';
+$wb['password_match_txt'] = 'Le password coincidono.';
+$wb['language_txt'] = 'Lingua pannello';
+$wb['startmodule_txt'] = 'Modulo di avvio';
+$wb['app_theme_txt'] = 'Apparenza';
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_ostemplate.lng b/interface/web/vm/lib/lang/it_openvz_ostemplate.lng
index 5b58e7ebc5c30df7f3e5a67f28d5803b20221601..3d5bbda64bae2961a63fd51ae3f71cece0df1f42 100644
--- a/interface/web/vm/lib/lang/it_openvz_ostemplate.lng
+++ b/interface/web/vm/lib/lang/it_openvz_ostemplate.lng
@@ -1,11 +1,11 @@
 <?php
-$wb['template_file_txt'] = 'Nome file del Template';
+$wb['template_file_txt'] = 'Nome file del Modello';
 $wb['server_id_txt'] = 'Server';
 $wb['allservers_txt'] = 'Esiste su tutti i servers';
 $wb['active_txt'] = 'Attivo';
 $wb['description_txt'] = 'Descrizione';
-$wb['template_name_error_empty'] = 'Template name  vuoto.';
-$wb['template_file_error_empty'] = 'Template filename  vuoto.';
-$wb['Template'] = 'Template';
-$wb['template_name_txt'] = 'Template name';
+$wb['template_name_error_empty'] = 'Modello nome vuoto.';
+$wb['template_file_error_empty'] = 'Modello filename  vuoto.';
+$wb['Template'] = 'Modello';
+$wb['template_name_txt'] = 'Modello nome';
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_ostemplate_list.lng b/interface/web/vm/lib/lang/it_openvz_ostemplate_list.lng
index 7df4dc7fe63d8e2b1892bb6eb2fbe301590f7cc4..847ee336cf4483e2053779e5988917b1237beeb4 100644
--- a/interface/web/vm/lib/lang/it_openvz_ostemplate_list.lng
+++ b/interface/web/vm/lib/lang/it_openvz_ostemplate_list.lng
@@ -4,5 +4,5 @@ $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Server';
 $wb['allservers_txt'] = 'Esiste su tutti i servers';
 $wb['ostemplate_id_txt'] = 'ID';
-$wb['template_name_txt'] = 'Template name';
+$wb['template_name_txt'] = 'Modello name';
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_template.lng b/interface/web/vm/lib/lang/it_openvz_template.lng
index b23f8623632c780e5e70f0156de887c00a3700d2..07e6b16281841260935c4518cf34c7da6160d325 100644
--- a/interface/web/vm/lib/lang/it_openvz_template.lng
+++ b/interface/web/vm/lib/lang/it_openvz_template.lng
@@ -56,7 +56,7 @@ $wb['dcachesize_desc_txt'] = 'Dimensione totale di dentry and inode structures l
 $wb['numiptent_desc_txt'] = 'Numero di inserimenti NETFILTER (IP packet filtering).';
 $wb['swappages_desc_txt'] = 'Dimensione di swap space da mostrare nel contenitore.';
 $wb['create_dns_txt'] = 'Crea  DNS per questo nome host';
-$wb['template_name_error_empty'] = 'Template name  vuoto.';
+$wb['template_name_error_empty'] = 'Modello name  vuoto.';
 $wb['diskspace_error_empty'] = 'Spazio disco    vuoto.';
 $wb['ram_error_empty'] = 'RAM (guaranteed)  vuoto.';
 $wb['ram_burst_error_empty'] = 'RAM (burst)  vuoto.';
@@ -87,11 +87,11 @@ $wb['numsiginfo_error_empty'] = 'Numsiginfo  vuoto.';
 $wb['dcachesize_error_empty'] = 'Dcachesize  vuoto.';
 $wb['numiptent_error_empty'] = 'Numiptent  vuoto.';
 $wb['swappages_error_empty'] = 'Swappages  vuoto.';
-$wb['Template'] = 'Template';
-$wb['Advanced'] = 'Advanced';
-$wb['template_name_txt'] = 'Template name';
-$wb['features_txt'] = 'Features';
+$wb['Template'] = 'Modello';
+$wb['Advanced'] = 'Avanzate';
+$wb['template_name_txt'] = 'Nome Modello';
+$wb['features_txt'] = 'Caratteristiche';
 $wb['iptables_txt'] = 'IP Tables';
-$wb['custom_txt'] = 'Custom settings';
-$wb['custom_error'] = 'Not allowed in Custom settings: ';
+$wb['custom_txt'] = 'Impostazioni personalizzate';
+$wb['custom_error'] = 'Non consentito nelle impostazioni personalizzate: ';
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_template_list.lng b/interface/web/vm/lib/lang/it_openvz_template_list.lng
index f7520680851c11968f134ea1fa881d95cf83af53..d0e815f8f338bf69003f082aa97dca95c7a2ee00 100644
--- a/interface/web/vm/lib/lang/it_openvz_template_list.lng
+++ b/interface/web/vm/lib/lang/it_openvz_template_list.lng
@@ -1,5 +1,5 @@
 <?php
-$wb['list_head_txt'] = 'OpenVZ Virtual Machine Template';
+$wb['list_head_txt'] = 'OpenVZ Virtual Machine Modello';
 $wb['active_txt'] = 'Attivo';
-$wb['template_name_txt'] = 'Template name';
+$wb['template_name_txt'] = 'Modello name';
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_vm.lng b/interface/web/vm/lib/lang/it_openvz_vm.lng
index 8290d94e99935a339ac53ce1b5c64d0b53101a9a..ee32d56e56b9d5c9853eb0cbc7769518446fa102 100644
--- a/interface/web/vm/lib/lang/it_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/it_openvz_vm.lng
@@ -8,10 +8,10 @@ $wb['cpu_limit_txt'] = 'CPU limite';
 $wb['io_priority_txt'] = 'I/O priorita';
 $wb['nameserver_txt'] = 'Nameserver(s)';
 $wb['nameserver_desc_txt'] = '(separati da spazi)';
-$wb['capability_txt'] = 'Capacita';
+$wb['capability_txt'] = 'Capacità';
 $wb['server_id_txt'] = 'Hostserver';
 $wb['ostemplate_id_txt'] = 'OSTemplate';
-$wb['template_id_txt'] = 'Template';
+$wb['template_id_txt'] = 'Modello';
 $wb['ip_address_txt'] = 'Indirizzo IP ';
 $wb['hostname_txt'] = 'Hostname';
 $wb['vm_password_txt'] = 'VM Password';
@@ -37,9 +37,9 @@ $wb['io_priority_error_empty'] = 'I/O priority  vuoto.';
 $wb['template_nameserver_error_empty'] = 'Nameserver(s)  vuoto.';
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Avanzato';
-$wb['features_txt'] = 'Features';
+$wb['features_txt'] = 'Caratteristiche';
 $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'] = 'Impostazioni personalizzate';
+$wb['bootorder_txt'] = 'Ordine di priorità di boot';
+$wb['bootorder_error_notpositive'] = 'Sono consentiti solo numeri interi positivi per ordine di priorità Boot';
 ?>
diff --git a/interface/web/vm/lib/lang/it_openvz_vm_list.lng b/interface/web/vm/lib/lang/it_openvz_vm_list.lng
index 3ed0a012af67354c2de67299b9428c29c21c4507..22d4b00ad9ba730d71c0ac7515206020e5df79b9 100644
--- a/interface/web/vm/lib/lang/it_openvz_vm_list.lng
+++ b/interface/web/vm/lib/lang/it_openvz_vm_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'Virtual server';
 $wb['active_txt'] = 'Attivo';
 $wb['server_id_txt'] = 'Hostserver';
 $wb['ostemplate_id_txt'] = 'OSTemplate';
-$wb['template_id_txt'] = 'Template';
+$wb['template_id_txt'] = 'Modello';
 $wb['hostname_txt'] = 'Nome Host';
 $wb['ip_address_txt'] = 'Indirizzo IP';
 $wb['veid_txt'] = 'VEID';
diff --git a/remoting_client/API-docs/dns_a_add.html b/remoting_client/API-docs/dns_a_add.html
index eaa7f8eb92313a22ae6def268155fd377402f678..e7217bcdcfd4972e7c10213b07a0da9ea340de9f 100644
--- a/remoting_client/API-docs/dns_a_add.html
+++ b/remoting_client/API-docs/dns_a_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx''naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_a_update.html b/remoting_client/API-docs/dns_a_update.html
index b279c6d476cdc980d480bafca9ec036a23c1ed43..ccacab408bd3b3171dfb01e33c21137e95ac7a3b 100644
--- a/remoting_client/API-docs/dns_a_update.html
+++ b/remoting_client/API-docs/dns_a_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx''naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_aaaa_add.html b/remoting_client/API-docs/dns_aaaa_add.html
index 0f8e8b61d1c0e2537daecfc7ae11bdf01e8b23a9..ea21b15361cd0fdbe02b547b2e1f2ceb58e69542 100644
--- a/remoting_client/API-docs/dns_aaaa_add.html
+++ b/remoting_client/API-docs/dns_aaaa_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx''naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_aaaa_update.html b/remoting_client/API-docs/dns_aaaa_update.html
index 1ad798fd5defce0274dea5cf48274b0c204c54df..94b60f4df4601530b4d0ac3bd63e441ea9da8def 100644
--- a/remoting_client/API-docs/dns_aaaa_update.html
+++ b/remoting_client/API-docs/dns_aaaa_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx''naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_alias_add.html b/remoting_client/API-docs/dns_alias_add.html
index d7d68dc64e1868059d1c51a8acf49a8a7933f083..4bea3dea6f2a2b2700cdfc01afad04aff5e657cb 100644
--- a/remoting_client/API-docs/dns_alias_add.html
+++ b/remoting_client/API-docs/dns_alias_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_alias_update.html b/remoting_client/API-docs/dns_alias_update.html
index e43e5c40f8baaed0bbb860b6237c2748e46c00b0..058654f2f7817bde1a885be060b5a5a6e0e06987 100644
--- a/remoting_client/API-docs/dns_alias_update.html
+++ b/remoting_client/API-docs/dns_alias_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_cname_add.html b/remoting_client/API-docs/dns_cname_add.html
index 71b585a68e86222ff41867798cb035c9faf4df66..afef2bd75c3d5aa409c127bb4a71a30adbd67945 100644
--- a/remoting_client/API-docs/dns_cname_add.html
+++ b/remoting_client/API-docs/dns_cname_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_cname_update.html b/remoting_client/API-docs/dns_cname_update.html
index 568091c7db8f59567f4cbffbf0897e8e67f25d7a..f0666331045cc09c0115d7510a3bce1e056b5d0c 100644
--- a/remoting_client/API-docs/dns_cname_update.html
+++ b/remoting_client/API-docs/dns_cname_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_ds_add.html b/remoting_client/API-docs/dns_ds_add.html
new file mode 100644
index 0000000000000000000000000000000000000000..9a6ffdec04957c680f107c78ce63f1cfb50e5841
--- /dev/null
+++ b/remoting_client/API-docs/dns_ds_add.html
@@ -0,0 +1,38 @@
+<!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>dns_ds_add(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Adds a dns authoritative nameserver record if <em>type</em> is <em>ds</em>.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$params</span></p>
+<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"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> stamp&nbsp;&nbsp;(<span class="paratype">timestamp</span>)</p>
+<p class="margin"> serial&nbsp;&nbsp;(<span class="paratype">int(10)</span>)</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns the ID of the newly added ds resource record.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_ds_delete.html b/remoting_client/API-docs/dns_ds_delete.html
new file mode 100644
index 0000000000000000000000000000000000000000..6e54496d0a0020fd042ddef3cd09d9ffa3c880b6
--- /dev/null
+++ b/remoting_client/API-docs/dns_ds_delete.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>dns_ds_delete(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Deletes target dns ds resource record.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns the number of deleted records.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_ds_get.html b/remoting_client/API-docs/dns_ds_get.html
new file mode 100644
index 0000000000000000000000000000000000000000..f8d8785b54db3f663f8a4c41e3976e5e3b7265f8
--- /dev/null
+++ b/remoting_client/API-docs/dns_ds_get.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>dns_ds_get(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Retrieves information about target dns ds resource record.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns all fields and values of the chosen dns ds resource record.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_ds_update.html b/remoting_client/API-docs/dns_ds_update.html
new file mode 100644
index 0000000000000000000000000000000000000000..6b04a847b91474be5d72d51ce60f60c8969d4b70
--- /dev/null
+++ b/remoting_client/API-docs/dns_ds_update.html
@@ -0,0 +1,38 @@
+<!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>dns_ds_update(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<b>Description: </b>
+<p class="margin"> Updates an authoritative nameserver record if <em>type</em> is <em>ds</em>.</p><br>
+<b>Input Variables: </b> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
+<b>Parameters (in <span style= "color:#A17FFF">$params</span>): </b>
+<p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> stamp&nbsp;&nbsp;(<span class="paratype">timestamp</span>)</p>
+<p class="margin"> serial&nbsp;&nbsp;(<span class="paratype">int(10)</span>)</p>
+<b>Output: </b> 
+<p class="margin"> Returns the number of affected rows.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_hinfo_add.html b/remoting_client/API-docs/dns_hinfo_add.html
index c1bac26bddbdbb9ffcba6a9244a554876b9682af..acd89b3d34f857cb8b9e6e6c2d1a16a57edec412 100644
--- a/remoting_client/API-docs/dns_hinfo_add.html
+++ b/remoting_client/API-docs/dns_hinfo_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_hinfo_update.html b/remoting_client/API-docs/dns_hinfo_update.html
index b2a266cef708950b26067ff3614092194f01cc5a..463b25b84a71b26d4bdab6feff2ec2ea802448e4 100644
--- a/remoting_client/API-docs/dns_hinfo_update.html
+++ b/remoting_client/API-docs/dns_hinfo_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_mx_add.html b/remoting_client/API-docs/dns_mx_add.html
index d2c08877fea848e63bbbcb5fc4600bc880d2fbe9..e306b81a187ea450b88e0dde71fac0cac17c3750 100644
--- a/remoting_client/API-docs/dns_mx_add.html
+++ b/remoting_client/API-docs/dns_mx_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_mx_update.html b/remoting_client/API-docs/dns_mx_update.html
index 81acd1f70641fc675f4eb88a35c5dae0d33f3c23..d75a8343d3a42f79b8fb204e4af569d0f5775abb 100644
--- a/remoting_client/API-docs/dns_mx_update.html
+++ b/remoting_client/API-docs/dns_mx_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_naptr_add.html b/remoting_client/API-docs/dns_naptr_add.html
index d691d65b3a1c2569c73c198fbf8bef151b356be7..a8b5d966bf9306d8ded5cedc17d2161ef0c212ca 100644
--- a/remoting_client/API-docs/dns_naptr_add.html
+++ b/remoting_client/API-docs/dns_naptr_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_naptr_update.html b/remoting_client/API-docs/dns_naptr_update.html
index 97f40f056f172d133b333e4e3e360f36cae5de49..98c4f031833c66b720f1173cf983e48e9c712478 100644
--- a/remoting_client/API-docs/dns_naptr_update.html
+++ b/remoting_client/API-docs/dns_naptr_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_ns_add.html b/remoting_client/API-docs/dns_ns_add.html
index d231d37e509ad1256c5c72edc65d163486210dbe..8fd9564bbb4d2907b8e6939166a4c7d5f793598b 100644
--- a/remoting_client/API-docs/dns_ns_add.html
+++ b/remoting_client/API-docs/dns_ns_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_ns_update.html b/remoting_client/API-docs/dns_ns_update.html
index fa35029efd1bc12a79d46688a9a90db4cf6f1126..32258a1504b7959c9a3b3c75e7975e43b77ac23f 100644
--- a/remoting_client/API-docs/dns_ns_update.html
+++ b/remoting_client/API-docs/dns_ns_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_ptr_add.html b/remoting_client/API-docs/dns_ptr_add.html
index 8e9a29a74aefd8d984003b36242dc6909ee34fbc..d2331660d2e36713151a883cd5a119e1101dfc5e 100644
--- a/remoting_client/API-docs/dns_ptr_add.html
+++ b/remoting_client/API-docs/dns_ptr_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_ptr_update.html b/remoting_client/API-docs/dns_ptr_update.html
index 026a44eee17d23b805eec9bed485d786d356ffb9..25097708ae2a929ff927c75e849821caac60127e 100644
--- a/remoting_client/API-docs/dns_ptr_update.html
+++ b/remoting_client/API-docs/dns_ptr_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_rp_add.html b/remoting_client/API-docs/dns_rp_add.html
index 3f2bde4fce89f9297687002bee228b76900ad51d..e20f5186c3c2efe925f56d6852176bb293f547af 100644
--- a/remoting_client/API-docs/dns_rp_add.html
+++ b/remoting_client/API-docs/dns_rp_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_rp_update.html b/remoting_client/API-docs/dns_rp_update.html
index a1adbd289ad58ea61e2d69754063c3ae76905d48..1e7a92db1f305293cddffe069220f04bbbc1a188 100644
--- a/remoting_client/API-docs/dns_rp_update.html
+++ b/remoting_client/API-docs/dns_rp_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_srv_add.html b/remoting_client/API-docs/dns_srv_add.html
index 342965687b89baded754718370044e8b79c6a720..5a2649cadbfb76f7610a8ac9b937c0904072dd3d 100644
--- a/remoting_client/API-docs/dns_srv_add.html
+++ b/remoting_client/API-docs/dns_srv_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_srv_update.html b/remoting_client/API-docs/dns_srv_update.html
index d7caef2d602d803d1922ba843e47c08569817f56..8a2a6107bfa1073034a5633791f0eb1542f7831f 100644
--- a/remoting_client/API-docs/dns_srv_update.html
+++ b/remoting_client/API-docs/dns_srv_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_txt_add.html b/remoting_client/API-docs/dns_txt_add.html
index 11c3d89463d4be2c98f75f7dad263e4abae17ffa..d99f79084659482ccbacbcca9d359dc395677324 100644
--- a/remoting_client/API-docs/dns_txt_add.html
+++ b/remoting_client/API-docs/dns_txt_add.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/API-docs/dns_txt_update.html b/remoting_client/API-docs/dns_txt_update.html
index 9bb7f6ac30e70cffabf5312529cebf60c9037d1d..374bede8fb0bf4f203ff5030a9be233448b63dac 100644
--- a/remoting_client/API-docs/dns_txt_update.html
+++ b/remoting_client/API-docs/dns_txt_update.html
@@ -22,7 +22,7 @@
 <p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
-<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt')</span>)</p>
 <p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
 <p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
 <p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
diff --git a/remoting_client/examples/dns_ds_add.php b/remoting_client/examples/dns_ds_add.php
new file mode 100644
index 0000000000000000000000000000000000000000..b673150ec1cda6e32ed7164ef41acf542783a3c1
--- /dev/null
+++ b/remoting_client/examples/dns_ds_add.php
@@ -0,0 +1,47 @@
+<?php
+
+require 'soap_config.php';
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Set the function parameters. 
+	//* 'data' are given for example MUST be edited with appropriate DS record
+	$client_id = 1;
+	$params = array(
+		'server_id' => 1,
+		'zone' => 7,
+		'name' => 'nameserver',
+		'type' => 'ds',
+		'data' => '13456 13 2 0EXD84534054012XFN7880EDFR23Z56Y34GRC64KOY704DFTEV87AE A34ZDC45',
+		'aux' => '0',
+		'ttl' => '3600',
+		'active' => 'y',
+		'stamp' => 'CURRENT_TIMESTAMP',
+		'serial' => '1',
+	);
+
+	$id = $client->dns_ds_add($session_id, $client_id, $params);
+
+	echo "ID: ".$id."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_ds_delete.php b/remoting_client/examples/dns_ds_delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..28794ca6fe440053107410431df780e58635c5e3
--- /dev/null
+++ b/remoting_client/examples/dns_ds_delete.php
@@ -0,0 +1,35 @@
+<?php
+
+require 'soap_config.php';
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Parameters
+	$id = 8;
+
+
+	$affected_rows = $client->dns_ds_delete($session_id, $id);
+
+	echo "Number of records that have been deleted: ".$affected_rows."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_ds_get.php b/remoting_client/examples/dns_ds_get.php
new file mode 100644
index 0000000000000000000000000000000000000000..6dffa18c10eabc7a7bb3ca94f01b01334840aa19
--- /dev/null
+++ b/remoting_client/examples/dns_ds_get.php
@@ -0,0 +1,34 @@
+<?php
+
+require 'soap_config.php';
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Set the function parameters.
+	$id = 8;
+
+	$dns_record = $client->dns_ds_get($session_id, $id);
+
+	print_r($dns_record);
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_ds_update.php b/remoting_client/examples/dns_ds_update.php
new file mode 100644
index 0000000000000000000000000000000000000000..94f5cb10a40dbc29ccf84d9b1f7c296fba8650f6
--- /dev/null
+++ b/remoting_client/examples/dns_ds_update.php
@@ -0,0 +1,42 @@
+<?php
+
+require 'soap_config.php';
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Parameters
+	$id = 8;
+	$client_id = 1;
+
+
+	//* Get the dns record
+	$dns_record = $client->dns_ds_get($session_id, $id);
+
+	//* Change active to inactive
+	$dns_record['active'] = 'n';
+
+	$affected_rows = $client->dns_ds_update($session_id, $client_id, $id, $dns_record);
+
+	echo "Number of records that have been changed in the database: ".$affected_rows."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_templatezone_add.php b/remoting_client/examples/dns_templatezone_add.php
index aedfc61f5d9be0989bccb31177922b1fb331b446..fa45965b4875522cf0a210afcb474987ca9fa33e 100644
--- a/remoting_client/examples/dns_templatezone_add.php
+++ b/remoting_client/examples/dns_templatezone_add.php
@@ -32,8 +32,9 @@ try {
         $ns1 = 'ns1.testhoster.tld';
         $ns2 = 'ns2.testhoster.tld';
         $email = 'email.test.tld';
+        $ipv6 = '2606:2800:220:1:248:1893:25c8:1946';
 
-        $id = $client->dns_templatezone_add($session_id, $client_id, $template_id, $domain, $ip, $ns1, $ns2, $email);
+        $id = $client->dns_templatezone_add($session_id, $client_id, $template_id, $domain, $ip, $ns1, $ns2, $email, $ipv6);
 
         echo "ID: ".$id."<br>";
 
@@ -47,4 +48,4 @@ try {
         die('SOAP Error: '.$e->getMessage());
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/server/conf/index/standard_index.html_sk b/server/conf/index/standard_index.html_sk
new file mode 100644
index 0000000000000000000000000000000000000000..d6edcdeb9f3c73ab85f1292b8d4a320ad8b6fafe
--- /dev/null
+++ b/server/conf/index/standard_index.html_sk
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Vitajte!</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <link rel="shortcut icon" href="/favicon.ico" />
+    <meta name="robots" content="noindex" />
+	<style type="text/css"><!--
+    body {
+        color: #444444;
+        background-color: #EEEEEE;
+        font-family: 'Trebuchet MS', sans-serif;
+        font-size: 80%;
+    }
+    h1 {}
+    h2 { font-size: 1.2em; }
+    #page{
+        background-color: #FFFFFF;
+        width: 60%;
+        margin: 24px auto;
+        padding: 12px;
+    }
+    #header{
+        padding: 6px ;
+        text-align: center;
+    }
+    .header{ background-color: #83A342; color: #FFFFFF; }
+    #content {
+        padding: 4px 0 24px 0;
+    }
+    #footer {
+        color: #666666;
+        background: #f9f9f9;
+        padding: 10px 20px;
+        border-top: 5px #efefef solid;
+        font-size: 0.8em;
+        text-align: center;
+    }
+    #footer a {
+        color: #999999;
+    }
+    --></style>
+</head>
+<body>
+    <div id="page">
+        <div id="header" class="header">
+            <h1>Vitajte na <!--ADRESSE//-->Vašej webstránke!<!--ADRESSE//--></h1>
+        </div>
+        <div id="content">
+            <h2>Toto je štandardná stránka Vašej webstránky.</h2>
+            <p>Môžete ju bez obáv vymazať alebo nahradiť iným súborom. Toto je súbor <b>index.html</b> v adresári <b>web</b>.</p>
+            <p>Ak máte akékoľvek otázky kontaktujte <!--SUPPORT//-->podporu<!--SUPPORT//-->.</p>
+        </div>
+        <div id="footer">
+            <p>Powered by <a href="https://www.ispconfig.org">ISPConfig</a></p>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/server/conf/index/user_standard_index.html_sk b/server/conf/index/user_standard_index.html_sk
new file mode 100644
index 0000000000000000000000000000000000000000..36e8e90db844d24a0c23767ec25b1260f249e9ea
--- /dev/null
+++ b/server/conf/index/user_standard_index.html_sk
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Vitajte!</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <link rel="shortcut icon" href="/favicon.ico" />
+    <meta name="robots" content="noindex" />
+	<style type="text/css"><!--
+    body {
+        color: #444444;
+        background-color: #EEEEEE;
+        font-family: 'Trebuchet MS', sans-serif;
+        font-size: 80%;
+    }
+    h1 {}
+    h2 { font-size: 1.2em; }
+    #page{
+        background-color: #FFFFFF;
+        width: 60%;
+        margin: 24px auto;
+        padding: 12px;
+    }
+    #header{
+        padding: 6px ;
+        text-align: center;
+    }
+    .header{ background-color: #83A342; color: #FFFFFF; }
+    #content {
+        padding: 4px 0 24px 0;
+    }
+    #footer {
+        color: #666666;
+        background: #f9f9f9;
+        padding: 10px 20px;
+        border-top: 5px #efefef solid;
+        font-size: 0.8em;
+        text-align: center;
+    }
+    #footer a {
+        color: #999999;
+    }
+    --></style>
+</head>
+<body>
+    <div id="page">
+        <div id="header" class="header">
+            <h1>Vitajte na <!--ADRESSE//-->Vašej webstránke!<!--ADRESSE//--></h1>
+        </div>
+        <div id="content">
+            <h2>Toto je štandardná stránka Vašej webstránky <b>{USER_USERNAME}</b></h2>
+            <p>Môžete ju bez obáv vymazať alebo nahradiť iným súborom. Toto je súbor <b>index.html</b> v adresári <b>user/{USER_USERNAME}/web</b>.</p>
+            <p>Ak máte akékoľvek otázky kontaktujte <!--SUPPORT//-->podporu<!--SUPPORT//-->.</p>
+        </div>
+        <div id="footer">
+            <p>Powered by <a href="https://www.ispconfig.org">ISPConfig</a></p>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/server/conf/mail/db_quota_notification_sk.txt b/server/conf/mail/db_quota_notification_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c90c9854073801c943ef39ced9d6b37f6bb18273
--- /dev/null
+++ b/server/conf/mail/db_quota_notification_sk.txt
@@ -0,0 +1,13 @@
+MIME-Version: 1.0
+Content-type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+From: {admin_mail}
+Reply-To: {admin_mail}
+Subject: Upozornenie na veľkosť databázy
+
+Databáza {database_name} je blízko alebo prekročila limit veľkosti.
+
+Databáza:			{database_name}
+Využité miesto:		{used}
+Limit:				{quota}
+Percento využitia:	{ratio}
diff --git a/server/conf/mail/db_quota_ok_notification_sk.txt b/server/conf/mail/db_quota_ok_notification_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..10dc74ca811fc443c222a336799efb96dc8ba111
--- /dev/null
+++ b/server/conf/mail/db_quota_ok_notification_sk.txt
@@ -0,0 +1,13 @@
+MIME-Version: 1.0
+Content-type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+From: {admin_mail}
+Reply-To: {admin_mail}
+Subject: Veľkosť databázy ok
+
+Databáza {database_name} už nie je blízko ani neprekračuje limit veľkosti.
+
+Databáza:			{database_name}
+Využité miesto:		{used}
+Limit:				{quota}
+Percento využitia:	{ratio}
diff --git a/server/conf/mail/mail_quota_notification_sk.txt b/server/conf/mail/mail_quota_notification_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f9abcab03a3785ffa99b2b27eb210984774fac65
--- /dev/null
+++ b/server/conf/mail/mail_quota_notification_sk.txt
@@ -0,0 +1,14 @@
+MIME-Version: 1.0
+Content-type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+From: {admin_mail}
+Reply-To: {admin_mail}
+Subject: Upozornenie na veľkosť poštovej schránky
+
+Poštová schránka {email} je blízko alebo prekročila limit veľkosti.
+
+Poštová schránka:		{email}
+Meno:					{name}
+Využité miesto:			{used}
+Limit:					{quota}
+Percento využitia:		{ratio}
diff --git a/server/conf/mail/mail_quota_ok_notification_sk.txt b/server/conf/mail/mail_quota_ok_notification_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1750a5ecd51902bd0da6d5cf04174de4bbd712b7
--- /dev/null
+++ b/server/conf/mail/mail_quota_ok_notification_sk.txt
@@ -0,0 +1,14 @@
+MIME-Version: 1.0
+Content-type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+From: {admin_mail}
+Reply-To: {admin_mail}
+Subject: Veľkosť poštovej schránky ok
+
+Poštová schránka {email} už nie je blízko ani neprekračuje limit veľkosti.
+
+Poštová schránka:		{email}
+Meno:					{name}
+Využité miesto:			{used}
+Limit:					{quota}
+Percento využitia:		{ratio}
diff --git a/server/conf/mail/web_quota_notification_sk.txt b/server/conf/mail/web_quota_notification_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..62a73a7404f44e22853fd1422f589fb3858947e0
--- /dev/null
+++ b/server/conf/mail/web_quota_notification_sk.txt
@@ -0,0 +1,14 @@
+MIME-Version: 1.0
+Content-type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+From: {admin_mail}
+Reply-To: {admin_mail}
+Subject: Upozornenie na veľkosť webstránky
+
+Webstránka {domain} je blízko alebo prekročila limit veľkosti.
+
+Doména: 				{domain}
+Využité miesto:			{used}
+Mäkký limit:			{soft}
+Tvrdý limit:			{hard}
+Percento využitia:		{ratio}
diff --git a/server/conf/mail/web_quota_ok_notification_sk.txt b/server/conf/mail/web_quota_ok_notification_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..88f36432a0bfbd669cfce24e441ed724a9d7c895
--- /dev/null
+++ b/server/conf/mail/web_quota_ok_notification_sk.txt
@@ -0,0 +1,14 @@
+MIME-Version: 1.0
+Content-type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+From: {admin_mail}
+Reply-To: {admin_mail}
+Subject: Veľkosť webstránky ok
+
+Webstránka {domain} už nie je blízko ani neprekračuje limit veľkosti.
+
+Doména: 				{domain}
+Využité miesto:			{used}
+Mäkký limit:			{soft}
+Tvrdý limit:			{hard}
+Percento využitia:		{ratio}
diff --git a/server/conf/mail/web_traffic_notification_sk.txt b/server/conf/mail/web_traffic_notification_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8cac0e96138e92e3ed0520054cbc631c6d7ada77
--- /dev/null
+++ b/server/conf/mail/web_traffic_notification_sk.txt
@@ -0,0 +1,8 @@
+MIME-Version: 1.0
+Content-type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+From: {admin_mail}
+Reply-To: {admin_mail}
+Subject: Upozornenie na dátovú premávku webstránky
+
+Webstránka {domain} prekročila limit dátovej premávky a bola zablokovaná.
diff --git a/server/conf/mail/web_traffic_notification_warn_sk.txt b/server/conf/mail/web_traffic_notification_warn_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7f83616a5e14472a03509e8839b915456301c212
--- /dev/null
+++ b/server/conf/mail/web_traffic_notification_warn_sk.txt
@@ -0,0 +1,8 @@
+MIME-Version: 1.0
+Content-type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+From: {admin_mail}
+Reply-To: {admin_mail}
+Subject: Upozornenie na dátovú premávku webstránky
+
+Webstránka {domain} prekročila limit dátovej premávky.
diff --git a/server/conf/mail/welcome_email_sk.txt b/server/conf/mail/welcome_email_sk.txt
new file mode 100644
index 0000000000000000000000000000000000000000..98f6d8ecc668519608bdcd7c7b216e334531b6d4
--- /dev/null
+++ b/server/conf/mail/welcome_email_sk.txt
@@ -0,0 +1,4 @@
+From: {admin_name} <{admin_mail}>
+Subject: Vitajte vo Vašej novej emailovej schránke.
+
+Vitajte vo Vašej novej emailovej schránke. Váš správca.
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 0b432f2bf4de7b9c5418462f8a12ff6f523763bb..a1873eab84033afbc75776924ac7414962aeef6a 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -517,8 +517,12 @@
 		RewriteCond %{REQUEST_URI} !^/php-fcgi/
 		RewriteCond %{REQUEST_URI} !^<tmpl_var name='rewrite_target'>
 </tmpl_if>
+<tmpl_if name='use_proxy_protocol' op='==' value='y'>
+<tmpl_if name='ssl_enabled'>
 <tmpl_if name="rewrite_target_is_ssl" op="==" value="y">
 		SSLProxyEngine On
+</tmpl_if>
+</tmpl_if>
 </tmpl_if>
 
 		RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'><tmpl_if name="rewrite_add_path" op="==" value="y">$1</tmpl_if>  <tmpl_var name='rewrite_type'>
diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php
index e0e8c85db2882eff0178e19995aa093f5d9d43a3..ffd20e9fb6129df681a0c5ae158b2d3929557f6a 100644
--- a/server/lib/app.inc.php
+++ b/server/lib/app.inc.php
@@ -1,7 +1,6 @@
 <?php
-
-/*
-Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+/**
+Copyright (c) 2007-2022, Till Brehm, projektfarm Gmbh
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -28,35 +27,56 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
-//* Set timezone
-if(isset($conf['timezone']) && $conf['timezone'] != '') date_default_timezone_set($conf['timezone']);
+if(version_compare(phpversion(), '7.0', '<')) {
+	require_once 'compatibility.inc.php';
+}
 
-class app {
+// Set timezone
+if(isset($conf['timezone']) && $conf['timezone'] != '') {	// note: !empty($conf['timezone']) should give the same result and is more idiomatic for current versions of PHP (gwyneth 20220315)
+	date_default_timezone_set($conf['timezone']);
+}
 
-	var $loaded_modules = array();
-	var $loaded_plugins = array();
+/**
+ * Class for defining (mostly static) methods that are commonly used across the whole application.
+ *
+ * @category unknown
+ * @package server
+ * @author Till Brehm
+ * @license bsd-3-clause
+ * @link empty
+ **/
+class app {
+	/** @var array	List of modules that have been loaded. */
+	var $loaded_modules = [];
+	/** @var array	List of plugins that have been loaded. */
+	var $loaded_plugins = [];
+	/** @var callable	Script calling this. */
 	var $_calling_script = '';
-	/**
-	 * @var db
-	 */
+	/** @var resource?	Database used for ISPConfig3. */
 	public $db;
 
+	/**
+	 * Class constructor, which depends on the global configuration stored in $conf.
+	 *
+	 * @param void
+	 * @return void
+	 */
 	function __construct() {
-
+		/** @var object Global object storing this application's configuration. */
 		global $conf;
 
 		if($conf['start_db'] == true) {
-			$this->load('db_'.$conf['db_type']);
+			$this->load('db_' . $conf['db_type']);
 			try {
 				$this->db = new db;
-			} catch (Exception $e) {
+			} catch(Exception $e) {
 				$this->db = false;
 			}
 
 			/*
-					Initialize the connection to the master DB,
-					if we are in a multiserver setup
-					*/
+				Initialize the connection to the master DB,
+				if we are in a multiserver setup
+			*/
 
 			if($conf['dbmaster_host'] != '' && ($conf['dbmaster_host'] != $conf['db_host'] || ($conf['dbmaster_host'] == $conf['db_host'] && $conf['dbmaster_database'] != $conf['db_database']))) {
 				try {
@@ -67,14 +87,19 @@ class app {
 			} else {
 				$this->dbmaster = $this->db;
 			}
-
-
 		}
+	} // end constructor
 
-	}
-
+	/**
+	 * Getter method for some of the (valid) proprieties.
+	 *
+	 * @param string $name	A valid property name to get. Will be checked for validity first!
+	 *
+	 * @return mixed
+	 */
 	public function __get($name) {
-		$valid_names = array('functions', 'getconf', 'letsencrypt', 'modules', 'plugins', 'services', 'system');
+		/** @var array List of all possible proprieties that are valid to get. */
+		$valid_names = ['functions', 'getconf', 'letsencrypt', 'modules', 'plugins', 'services', 'system'];
 		if(!in_array($name, $valid_names)) {
 			trigger_error('Undefined property ' . $name . ' of class app', E_USER_WARNING);
 		}
@@ -89,14 +114,37 @@ class app {
 		}
 	}
 
+	/**
+	 * Sets the calling script.
+	 *
+	 * @param callable $caller	Calling script function.
+	 *
+	 * @return void
+	 */
 	function setCaller($caller) {
 		$this->_calling_script = $caller;
 	}
 
+	/**
+ 	* Gets the calling script.
+	*
+	* Note that there is no error checking!
+ 	*
+ 	* @param void
+ 	*
+ 	* @return callable|null
+ 	*/
 	function getCaller() {
 		return $this->_calling_script;
 	}
 
+	/**
+	 * Emergency exit funcion.
+	 *
+	 * @param string $errmsg	Error message to be displayedby the die() command on exit.
+	 *
+	 * @return void
+	 */
 	function forceErrorExit($errmsg = 'undefined') {
 		global $conf;
 
@@ -106,16 +154,27 @@ class app {
 		die('Exiting because of error: ' . $errmsg);
 	}
 
+	/**
+	 * Dynamic plugin loader and instantiator.
+	 *
+	 * This will include PHP scripts on demand, each representing a class to be loaded,
+	 * and if the process succeeds, it will retrieve an instance for the class.
+	 *
+	 * @param string $classes	A list of plugin classes to be loaded (e.g. their files will be included)
+	 *							and subsequently instantiated; it's a comma-separated string.
+	 *
+	 * @return void
+	 */
 	function uses($classes) {
-
 		global $conf;
 
+		/** @var array|null List of classes to be used, as an array, after successful 'explosion' */
 		$cl = explode(',', $classes);
 		if(is_array($cl)) {
 			foreach($cl as $classname) {
 				if(!@is_object($this->$classname)) {
-					if(is_file($conf['classpath'].'/'.$classname.'.inc.php') && (DEVSYSTEM ||  !is_link($conf['classpath'].'/'.$classname.'.inc.php'))) {
-						include_once $conf['classpath'].'/'.$classname.'.inc.php';
+					if(is_file($conf['classpath'] . '/' . $classname . '.inc.php') && (DEVSYSTEM || !is_link($conf['classpath'] . '/' . $classname . '.inc.php'))) {
+						include_once $conf['classpath'] . '/' . $classname . '.inc.php';
 						$this->$classname = new $classname;
 					}
 				}
@@ -123,64 +182,119 @@ class app {
 		}
 	}
 
+	/**
+ 	* Dynamic plugin loader (no instantation).
+ 	*
+	* Similar to uses() but does _not_ instantate a new class; files are merely included.
+	* die() is called on a failure to include the file for a class.
+	*
+	* @param string $classes	A list of plugin classes to be loaded (e.g. their files will be included);
+	*							it's a comma-separated string.
+	*
+ 	* @return void
+ 	*/
 	function load($classes) {
-
 		global $conf;
 
+		/** @var array|null List of classes to be loaded, as an array, after successful 'explosion' */
 		$cl = explode(',', $classes);
 		if(is_array($cl)) {
 			foreach($cl as $classname) {
-				if(is_file($conf['classpath'].'/'.$classname.'.inc.php') && (DEVSYSTEM || !is_link($conf['classpath'].'/'.$classname.'.inc.php'))) {
-					include_once $conf['classpath'].'/'.$classname.'.inc.php';
+				if(is_file($conf['classpath'] . '/' . $classname . '.inc.php') && (DEVSYSTEM || !is_link($conf['classpath'] . '/' . $classname . '.inc.php'))) {
+					include_once $conf['classpath'] . '/' . $classname . '.inc.php';
 				} else {
-					die('Unable to load: '.$conf['classpath'].'/'.$classname.'.inc.php');
+					die('Unable to load: ' . $conf['classpath'] . '/' . $classname . '.inc.php');
 				}
 			}
 		}
 	}
 
-	/*
-         0 = DEBUG
-         1 = WARNING
-         2 = ERROR
-        */
-
+	/**
+  	* Logs a message with a certain priority to the different log backends.
+  	*
+  	* This method will check if the priority is equal or larger than what the user has
+	* defined as the minimum logging level, and will output to several logging facilities:
+	*  - At the very least, the message will _usually_ go to stdout;
+	*  - It may optionally also go to the file log (usually `/var/log/ispconfig/ispconfig.log`)
+	*      which will be created if it doesn't exist;
+	*  - When the $dblog parameter is set to true (the default), the message will also be logged
+	*      to the database;
+	*  - If the system is configured to send email messages to the administrator,
+	*      this method will also handle those (assuming, again, that the priority matches).
+	*
+	* Debugging messages will also have the name of the calling module/script as well as a line number
+	*   to assist error tracking (gwyneth 20220315). This incurs in a slight performance hit.
+	*
+  	* @param string $msg	The message to be logged.
+  	* @param int $priority	Should be set to 0 = DEBUG, 1 = WARNING or 2 = ERROR; anything else
+	*   will skip setting the priority textual variable.
+	* @param bool $dblog	Should the message also be logged to the database? (Default is _true_)
+  	*
+  	* @return void
+	*
+	* @note The error() method below seems to write to an invalid priority (3), which will cause
+	* no message priority text to be emitted, and will _force_ a database write and/or sending
+	* an email to the administrator.
+  	*/
 	function log($msg, $priority = 0, $dblog = true) {
-
 		global $conf;
 
+		/**
+		 * @var string $file_line_caller
+		 *
+		 * For debugging, deal with retrieving caller information from the stack. (gwyneth 20220315)
+		 * See https://stackoverflow.com/q/1252529/1035977 (including the precious comments!) for an explanation
+		 * of how this works.
+		 **/
+		$file_line_caller = "";
+		/** @var string	Defined here because recent versions of PHP are stricter with scoping issues. (gwyneth 20220315) */
+		$priority_txt = '';
+
 		switch ($priority) {
 		case 0:
-			$priority_txt = 'DEBUG';
-			break;
+				$priority_txt = 'DEBUG';
+				$bt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);	// we don't need _all_ data, so we save some processing time here (gwyneth 20220315)
+				$caller = array_shift($bt);
+				if(!empty($caller['file']) && !empty($caller['line'])) {
+					$file_line_caller = '[' . strtr(basename($caller['file'], '.php'), '_', ' ') . ':' . $caller['line'] . '] ';
+				}
+				break;
 		case 1:
-			$priority_txt = 'WARNING';
-			break;
+				$priority_txt = 'WARNING';
+				break;
 		case 2:
-			$priority_txt = 'ERROR';
-			break;
+				$priority_txt = 'ERROR';
+				break;
+		// Note: $this->error() seems to use case 3 to deliberately skip setting a priority text.
+		// It will also *force* a write to the logs and/or send emails. (gwyneth 20220315)
 		}
-		$log_msg = @date('d.m.Y-H:i').' - '.$priority_txt.' - '. $msg;
 
+		/** @var string Formatted message to be sent to the logging subsystems. */
+		$log_msg = @date('d.m.Y-H:i') . ' - ' . $priority_txt . ' ' . $file_line_caller . '- '. $msg;
+
+		// Check if the user-set priority defines that this message should be output at all.
 		if($priority >= $conf['log_priority']) {
-			//if (is_writable($conf["log_file"])) {
-			if (!$fp = fopen($conf['log_file'], 'a')) {
+			// Prepare to add a line on the logfile, or to create the logfile in
+			// append mode if it doesn't exist yet. Failure means that die() is called.
+
+			//if(is_writable($conf["log_file"])) {
+			if(!$fp = fopen($conf['log_file'], 'a')) {
 				die('Unable to open logfile.');
 			}
 
-			if (!fwrite($fp, $log_msg."\r\n")) {
+			if(!fwrite($fp, $log_msg . "\r\n")) {
 				die('Unable to write to logfile.');
 			}
 
-			echo $log_msg."\n";
+			echo $log_msg . "\n";
 			fclose($fp);
 
-			// Log to database
+			// Log to database.
 			if($dblog === true && isset($this->dbmaster)) {
 				$server_id = $conf['server_id'];
 				$loglevel = $priority;
 				$message = $msg;
-				$datalog_id = (isset($this->modules->current_datalog_id) && $this->modules->current_datalog_id > 0)?$this->modules->current_datalog_id:0;
+				$datalog_id = (isset($this->modules->current_datalog_id) && $this->modules->current_datalog_id > 0)? $this->modules->current_datalog_id : 0;
 				if($datalog_id > 0) {
 					$tmp_rec = $this->dbmaster->queryOneRecord("SELECT count(syslog_id) as number FROM sys_log WHERE datalog_id = ? AND loglevel = ?", $datalog_id, LOGLEVEL_ERROR);
 					//* Do not insert duplicate errors into the web log.
@@ -198,18 +312,18 @@ class app {
 			//    die("Unable to write to logfile.");
 			//}
 
-
 		} // if
 
+		// Send an email to the administrator if the current priority demands it.
 		if(isset($conf['admin_notify_priority']) && $priority >= $conf['admin_notify_priority'] && $conf['admin_mail'] != '') {
 			if($conf['hostname'] != 'localhost' && $conf['hostname'] != '') {
 				$hostname = $conf['hostname'];
 			} else {
 				$hostname = exec('hostname -f');
 			}
-			// send notification to admin
+			// Send notification to admin.
 			$mailBody         = $hostname . " - " . $log_msg;
-			$mailSubject      = substr("[" . $hostname . "]" . " " . $log_msg, 0, 70).'...';
+			$mailSubject      = substr("[" . $hostname . "]" . " " . $log_msg, 0, 70) . '...';
 			$mailHeaders      = "MIME-Version: 1.0" . "\n";
 			$mailHeaders     .= "Content-type: text/plain; charset=utf-8" . "\n";
 			$mailHeaders     .= "Content-Transfer-Encoding: 8bit" . "\n";
@@ -218,26 +332,30 @@ class app {
 
 			mail($conf['admin_mail'], $mailSubject, $mailBody, $mailHeaders);
 		}
-	} // func
-
-
-	/*
-         0 = DEBUG
-         1 = WARNING
-         2 = ERROR
-        */
+	} // func log
 
+	/**
+  	* Logs a message with an undefined priority (3) and dies.
+  	*
+  	* This method writes to an invalid/undefined priority level (3), which will cause
+  	* no message priority text to be emitted, but will _force_ a database write and/or sending
+  	* an email to the administrator.
+  	*
+  	* @param string $msg	The message to be logged.
+  	*
+  	* @return void
+  	*/
 	function error($msg) {
-		$this->log($msg, 3);
+		$this->log($msg, 3);	// isn't this supposed to be error code 2? (gwyneth 20220315)
 		die($msg);
 	}
-
 }
 
-/*
- Initialize application (app) object
-*/
-
+/**
+ * @var \app $app
+ *
+ * Initialize application object.
+ */
 $app = new app;
 
 ?>
diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php
index 3cdf17d1fc8fe9eacacd440257589507f65b1475..2b6d21e57e3ad5501d69dc1ad83f55fdf2693c1b 100644
--- a/server/lib/classes/backup.inc.php
+++ b/server/lib/classes/backup.inc.php
@@ -32,6 +32,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * Class backup
  * All code that makes actual backup and restore of web files and database is here.
  * @author Ramil Valitov <ramilvalitov@gmail.com>
+ * @author Jorge Muñoz <elgeorge2k@gmail.com> (Repository addition)
  * @see backup::run_backup() to run a single backup
  * @see backup::run_all_backups() to run all backups
  * @see backup::restoreBackupDatabase() to restore a database
@@ -93,6 +94,16 @@ class backup
         }
         return null;
     }
+    /**
+     * Checks whatever a backup mode is for a repository
+     * @param $mode Backup mode
+     * @return bool
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
+     */
+    protected static function backupModeIsRepos($mode)
+    {
+        return 'borg' === $mode;
+    }
 
     /**
      * Sets file ownership to $web_user for all files and folders except log, ssl and web/stats
@@ -148,6 +159,7 @@ class backup
      * @return bool true if succeeded
      * @see backup_plugin::mount_backup_dir()
      * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
      */
     public static function restoreBackupDatabase($backup_format, $password, $backup_dir, $filename, $backup_mode, $backup_type)
     {
@@ -155,60 +167,116 @@ class backup
 
         //* Load sql dump into db
         include 'lib/mysql_clientdb.conf';
+        if (self::backupModeIsRepos($backup_mode)) {
 
-        if (empty($backup_format)) {
-            $backup_format = self::getDefaultBackupFormat($backup_mode, $backup_type);
-        }
-        $extension = self::getBackupDbExtension($backup_format);
-        if (!empty($extension)) {
-            //Replace dots for preg_match search
-            $extension = str_replace('.', '\.', $extension);
-        }
-        $success = false;
-        $full_filename = $backup_dir . '/' . $filename;
+            $backup_archive = $filename;
+
+            preg_match('@^(manual-)?db_(?P<db>.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}$@', $backup_archive, $matches);
+            if (isset($matches['db']) && ! empty($matches['db'])) {
+                $db_name = $matches['db'];
+                $backup_repos_folder = self::getReposFolder($backup_mode, 'mysql', '_' . $db_name);
+                $backup_repos_path = $backup_dir . '/' . $backup_repos_folder;
+                $full_archive_path = $backup_repos_path . '::' . $backup_archive;
+
+                $app->log('Restoring MySQL backup from archive ' . $backup_archive . ', backup mode "' . $backup_mode . '"', LOGLEVEL_DEBUG);
+
+                $archives = self::getReposArchives($backup_mode, $backup_repos_path, $password);
+            } else {
+                $app->log('Failed to detect database name during restore of ' . $backup_archive, LOGLEVEL_ERROR);
+                $db_name = null;
+                $archives = null;
+            }
+            if (is_array($archives)) {
+                if (in_array($backup_archive, $archives)) {
+                    switch ($backup_mode) {
+                        case "borg":
+                            $command = self::getBorgCommand('borg extract --nobsdflags', $password);
+                            $command .= " --stdout ? stdin | mysql -h ? -u ? -p? ?";
+                            break;
+                    }
+                } else {
+                    $app->log('Failed to process MySQL backup ' . $full_archive_path . ' because it does not exist', LOGLEVEL_ERROR);
+                    $command = null;
+                }
+            }
+            if (!empty($command)) {
+                /** @var string $clientdb_host */
+                /** @var string $clientdb_user */
+                /** @var string $clientdb_password */
+                $app->system->exec_safe($command, $full_archive_path, $clientdb_host, $clientdb_user, $clientdb_password, $db_name);
+                $retval = $app->system->last_exec_retcode();
+                if ($retval == 0) {
+                    $app->log('Restored database backup ' . $full_archive_path, LOGLEVEL_DEBUG);
+                    $success = true;
+                } else {
+                    $app->log('Failed to restore database backup ' . $full_archive_path . ', exit code ' . $retval, LOGLEVEL_ERROR);
+                }
+            }
+        } else {
+            if (empty($backup_format)) {
+                $backup_format = self::getDefaultBackupFormat($backup_mode, $backup_type);
+            }
+            $extension = self::getBackupDbExtension($backup_format);
+            if (!empty($extension)) {
+                //Replace dots for preg_match search
+                $extension = str_replace('.', '\.', $extension);
+            }
+            $success = false;
+            $full_filename = $backup_dir . '/' . $filename;
 
-        $app->log('Restoring MySQL backup ' . $full_filename . ', backup format "' . $backup_format . '", backup mode "' . $backup_mode . '"', LOGLEVEL_DEBUG);
+            $app->log('Restoring MySQL backup ' . $full_filename . ', backup format "' . $backup_format . '", backup mode "' . $backup_mode . '"', LOGLEVEL_DEBUG);
 
-        if (file_exists($full_filename) && !empty($extension)) {
             preg_match('@^(manual-)?db_(?P<db>.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}' . $extension . '$@', $filename, $matches);
             if (!isset($matches['db']) || empty($matches['db'])) {
                 $app->log('Failed to detect database name during restore of ' . $full_filename, LOGLEVEL_ERROR);
-                return false;
+                $db_name = null;
+            } else {
+                $db_name = $matches['db'];
             }
-            $db_name = $matches['db'];
-            switch ($backup_format) {
-                case "gzip":
-                    $command = "gunzip --stdout ? | mysql -h ? -u ? -p? ?";
-                    break;
-                case "zip":
-                case "zip_bzip2":
-                    $command = "unzip -qq -p -P " . escapeshellarg($password) . " ? | mysql -h ? -u ? -p? ?";
-                    break;
-                case "bzip2":
-                    $command = "bunzip2 -q -c ? | mysql -h ? -u ? -p? ?";
-                    break;
-                case "xz":
-                    $command = "unxz -q -q -c ? | mysql -h ? -u ? -p? ?";
-                    break;
-                case "rar":
+
+            if ( ! empty($db_name)) {
+                $file_check = file_exists($full_filename) && !empty($extension);
+                if ( ! $file_check) {
+                    $app->log('Archive test failed for ' . $full_filename, LOGLEVEL_WARN);
+                }
+            } else {
+                $file_check = false;
+            }
+            if ($file_check) {
+                switch ($backup_format) {
+                    case "gzip":
+                        $command = "gunzip --stdout ? | mysql -h ? -u ? -p? ?";
+                        break;
+                    case "zip":
+                    case "zip_bzip2":
+                        $command = "unzip -qq -p -P " . escapeshellarg($password) . " ? | mysql -h ? -u ? -p? ?";
+                        break;
+                    case "bzip2":
+                        $command = "bunzip2 -q -c ? | mysql -h ? -u ? -p? ?";
+                        break;
+                    case "xz":
+                        $command = "unxz -q -q -c ? | mysql -h ? -u ? -p? ?";
+                        break;
+                    case "rar":
+                        //First, test that the archive is correct and we have a correct password
+                        $options = self::getUnrarOptions($password);
+                        $app->system->exec_safe("rar t " . $options . " ?", $full_filename);
+                        if ($app->system->last_exec_retcode() == 0) {
+                            $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
+                            $command = "rar x " . $options. " ? | mysql -h ? -u ? -p? ?";
+                        }
+                        break;
+                }
+                if (strpos($backup_format, "7z_") === 0) {
+                    $options = self::get7zDecompressOptions($password);
                     //First, test that the archive is correct and we have a correct password
-                    $options = self::getUnrarOptions($password);
-                    $app->system->exec_safe("rar t " . $options . " ?", $full_filename);
+                    $app->system->exec_safe("7z t " . $options . " ?", $full_filename);
                     if ($app->system->last_exec_retcode() == 0) {
                         $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
-                        $command = "rar x " . $options. " ? | mysql -h ? -u ? -p? ?";
-                    }
-                    break;
-            }
-            if (strpos($backup_format, "7z_") === 0) {
-                $options = self::get7zDecompressOptions($password);
-                //First, test that the archive is correct and we have a correct password
-                $app->system->exec_safe("7z t " . $options . " ?", $full_filename);
-                if ($app->system->last_exec_retcode() == 0) {
-                    $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
-                    $command = "7z x " . $options . " -so ? | mysql -h ? -u ? -p? ?";
-                } else
-                    $command = null;
+                        $command = "7z x " . $options . " -so ? | mysql -h ? -u ? -p? ?";
+                    } else
+                        $command = null;
+                }
             }
             if (!empty($command)) {
                 /** @var string $clientdb_host */
@@ -220,13 +288,9 @@ class backup
                     $app->log('Restored MySQL backup ' . $full_filename, LOGLEVEL_DEBUG);
                     $success = true;
                 } else {
-                    $app->log('Failed to restore web backup ' . $full_filename . ', exit code ' . $retval, LOGLEVEL_ERROR);
+                    $app->log('Failed to restore MySQL backup ' . $full_filename . ', exit code ' . $retval, LOGLEVEL_ERROR);
                 }
-            } else {
-                $app->log('Archive test failed for ' . $full_filename, LOGLEVEL_DEBUG);
             }
-        } else {
-            $app->log('Failed to process MySQL backup ' . $full_filename, LOGLEVEL_ERROR);
         }
         unset($clientdb_host);
         unset($clientdb_user);
@@ -250,118 +314,337 @@ class backup
      * @return bool true if succeed
      * @see backup_plugin::mount_backup_dir()
      * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
      */
     public static function restoreBackupWebFiles($backup_format, $password, $backup_dir, $filename, $backup_mode, $backup_type, $web_root, $web_user, $web_group)
     {
         global $app;
 
-        if (empty($backup_format)) {
-            $backup_format = self::getDefaultBackupFormat($backup_mode, $backup_type);
-        }
-        $full_filename = $backup_dir . '/' . $filename;
         $result = false;
 
-        $app->log('Restoring web backup ' . $full_filename . ', backup format "' . $backup_format . '", backup mode "' . $backup_mode . '"', LOGLEVEL_DEBUG);
+        $app->system->web_folder_protection($web_root, false);
+        if (self::backupModeIsRepos($backup_mode)) {
+            $backup_archive = $filename;
+            $backup_repos_folder = self::getReposFolder($backup_mode, 'web');
+            $backup_repos_path = $backup_dir . '/' . $backup_repos_folder;
+            $full_archive_path = $backup_repos_path . '::' . $backup_archive;
+
+            $app->log('Restoring web backup archive ' . $full_archive_path . ', backup mode "' . $backup_mode . '"', LOGLEVEL_DEBUG);
+
+            $archives = self::getReposArchives($backup_mode, $backup_repos_path, $password);
+            if (is_array($archives) && in_array($backup_archive, $archives)) {
+                $retval = 0;
+                switch ($backup_mode) {
+                    case "borg":
+                        $command = 'cd ? && borg extract --nobsdflags ?';
+                        $app->system->exec_safe($command, $web_root, $full_archive_path);
+                        $retval = $app->system->last_exec_retcode();
+                        $success = ($retval == 0 || $retval == 1);
+                        break;
+                }
+                if ($success) {
+                    $app->log('Restored web backup ' . $full_archive_path, LOGLEVEL_DEBUG);
+                    $result = true;
+                } else {
+                    $app->log('Failed to restore web backup ' . $full_archive_path . ', exit code ' . $retval, LOGLEVEL_ERROR);
+                }
+            } else {
+                $app->log('Web backup archive does not exist ' . $full_archive_path, LOGLEVEL_ERROR);
+            }
 
-        if (!empty($backup_format)) {
-            $app->system->web_folder_protection($web_root, false);
-            if ($backup_mode == 'userzip' || $backup_mode == 'rootgz') {
-                $user_mode = $backup_mode == 'userzip';
-                $filename = $user_mode ? ($web_root . '/backup/' . $filename) : $full_filename;
+        } elseif ($backup_mode == 'userzip' || $backup_mode == 'rootgz') {
 
-                if (file_exists($full_filename) && $web_root != '' && $web_root != '/' && !stristr($full_filename, '..') && !stristr($full_filename, 'etc')) {
-                    if ($user_mode) {
-                        if (file_exists($filename)) rename($filename, $filename . '.bak');
-                        copy($full_filename, $filename);
-                        chgrp($filename, $web_group);
-                    }
-                    $user_prefix_cmd = $user_mode ? 'sudo -u ' . escapeshellarg($web_user) : '';
-                    $success = false;
-                    $retval = 0;
-                    switch ($backup_format) {
-                        case "tar_gzip":
-                        case "tar_bzip2":
-                        case "tar_xz":
-                            $command = $user_prefix_cmd . ' tar xf ? --directory ?';
-                            $app->system->exec_safe($command, $filename, $web_root);
-                            $retval = $app->system->last_exec_retcode();
-                            $success = ($retval == 0 || $retval == 2);
-                            break;
-                        case "zip":
-                        case "zip_bzip2":
-                            $command = $user_prefix_cmd . ' unzip -qq -P ' . escapeshellarg($password) . ' -o ? -d ? 2> /dev/null';
-                            $app->system->exec_safe($command, $filename, $web_root);
-                            $retval = $app->system->last_exec_retcode();
-                            /*
-                             * Exit code 50 can happen when zip fails to overwrite files that do not
-                             * belong to selected user, so we can consider this situation as success
-                             * with warnings.
-                             */
-                            $success = ($retval == 0 || $retval == 50);
-                            if ($success) {
-                                self::restoreFileOwnership($web_root, $web_user, $web_group);
-                            }
-                            break;
-                        case 'rar':
-                            $options = self::getUnRarOptions($password);
-                            //First, test that the archive is correct and we have a correct password
-                            $command = $user_prefix_cmd . " rar t " . $options . " ? ?";
-                            //Rar requires trailing slash
-                            $app->system->exec_safe($command, $filename, $web_root . '/');
-                            $success = ($app->system->last_exec_retcode() == 0);
-                            if ($success) {
-                                //All good, now we can extract
-                                $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
-                                $command = $user_prefix_cmd . " rar x " . $options . " ? ?";
-                                //Rar requires trailing slash
-                                $app->system->exec_safe($command, $filename, $web_root . '/');
-                                $retval = $app->system->last_exec_retcode();
-                                //Exit code 9 can happen when we have file permission errors, in this case some
-                                //files will be skipped during extraction.
-                                $success = ($retval == 0 || $retval == 1 || $retval == 9);
-                            } else {
-                                $app->log('Archive test failed for ' . $full_filename, LOGLEVEL_DEBUG);
-                            }
-                            break;
-                    }
-                    if (strpos($backup_format, "tar_7z_") === 0) {
-                        $options = self::get7zDecompressOptions($password);
+            if (empty($backup_format) || $backup_format == 'default') {
+                $backup_format = self::getDefaultBackupFormat($backup_mode, $backup_type);
+            }
+            $full_filename = $backup_dir . '/' . $filename;
+
+            $app->log('Restoring web backup ' . $full_filename . ', backup format "' . $backup_format . '", backup mode "' . $backup_mode . '"', LOGLEVEL_DEBUG);
+
+            $user_mode = $backup_mode == 'userzip';
+            $filename = $user_mode ? ($web_root . '/backup/' . $filename) : $full_filename;
+
+            if (file_exists($full_filename) && $web_root != '' && $web_root != '/' && !stristr($full_filename, '..') && !stristr($full_filename, 'etc')) {
+                if ($user_mode) {
+                    if (file_exists($filename)) rename($filename, $filename . '.bak');
+                    copy($full_filename, $filename);
+                    chgrp($filename, $web_group);
+                }
+                $user_prefix_cmd = $user_mode ? 'sudo -u ' . escapeshellarg($web_user) : '';
+                $success = false;
+                $retval = 0;
+                switch ($backup_format) {
+                    case "tar_gzip":
+                    case "tar_bzip2":
+                    case "tar_xz":
+                        $command = $user_prefix_cmd . ' tar xf ? --directory ?';
+                        $app->system->exec_safe($command, $filename, $web_root);
+                        $retval = $app->system->last_exec_retcode();
+                        $success = ($retval == 0 || $retval == 2);
+                        break;
+                    case "zip":
+                    case "zip_bzip2":
+                        $command = $user_prefix_cmd . ' unzip -qq -P ' . escapeshellarg($password) . ' -o ? -d ? 2> /dev/null';
+                        $app->system->exec_safe($command, $filename, $web_root);
+                        $retval = $app->system->last_exec_retcode();
+                        /*
+                         * Exit code 50 can happen when zip fails to overwrite files that do not
+                         * belong to selected user, so we can consider this situation as success
+                         * with warnings.
+                         */
+                        $success = ($retval == 0 || $retval == 50);
+                        if ($success) {
+                            self::restoreFileOwnership($web_root, $web_user, $web_group);
+                        }
+                        break;
+                    case 'rar':
+                        $options = self::getUnRarOptions($password);
                         //First, test that the archive is correct and we have a correct password
-                        $command = $user_prefix_cmd . " 7z t " . $options . " ?";
-                        $app->system->exec_safe($command, $filename);
+                        $command = $user_prefix_cmd . " rar t " . $options . " ? ?";
+                        //Rar requires trailing slash
+                        $app->system->exec_safe($command, $filename, $web_root . '/');
                         $success = ($app->system->last_exec_retcode() == 0);
                         if ($success) {
                             //All good, now we can extract
                             $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
-                            $command = $user_prefix_cmd . " 7z x " . $options . " -so ? | tar xf - --directory ?";
-                            $app->system->exec_safe($command, $filename, $web_root);
+                            $command = $user_prefix_cmd . " rar x " . $options . " ? ?";
+                            //Rar requires trailing slash
+                            $app->system->exec_safe($command, $filename, $web_root . '/');
                             $retval = $app->system->last_exec_retcode();
-                            $success = ($retval == 0 || $retval == 2);
+                            //Exit code 9 can happen when we have file permission errors, in this case some
+                            //files will be skipped during extraction.
+                            $success = ($retval == 0 || $retval == 1 || $retval == 9);
                         } else {
                             $app->log('Archive test failed for ' . $full_filename, LOGLEVEL_DEBUG);
                         }
-                    }
-                    if ($user_mode) {
-                        unlink($filename);
-                        if (file_exists($filename . '.bak')) rename($filename . '.bak', $filename);
-                    }
+                        break;
+                }
+                if (strpos($backup_format, "tar_7z_") === 0) {
+                    $options = self::get7zDecompressOptions($password);
+                    //First, test that the archive is correct and we have a correct password
+                    $command = $user_prefix_cmd . " 7z t " . $options . " ?";
+                    $app->system->exec_safe($command, $filename);
+                    $success = ($app->system->last_exec_retcode() == 0);
                     if ($success) {
-                        $app->log('Restored web backup ' . $full_filename, LOGLEVEL_DEBUG);
-                        $result = true;
+                        //All good, now we can extract
+                        $app->log('Archive test passed for ' . $full_filename, LOGLEVEL_DEBUG);
+                        $command = $user_prefix_cmd . " 7z x " . $options . " -so ? | tar xf - --directory ?";
+                        $app->system->exec_safe($command, $filename, $web_root);
+                        $retval = $app->system->last_exec_retcode();
+                        $success = ($retval == 0 || $retval == 2);
                     } else {
-                        $app->log('Failed to restore web backup ' . $full_filename . ', exit code ' . $retval, LOGLEVEL_ERROR);
+                        $app->log('Archive test failed for ' . $full_filename, LOGLEVEL_DEBUG);
                     }
                 }
-            } else {
-                $app->log('Failed to restore web backup ' . $full_filename . ', backup mode "' . $backup_mode . '" not recognized.', LOGLEVEL_DEBUG);
+                if ($user_mode) {
+                    unlink($filename);
+                    if (file_exists($filename . '.bak')) rename($filename . '.bak', $filename);
+                }
+                if ($success) {
+                    $app->log('Restored web backup ' . $full_filename, LOGLEVEL_DEBUG);
+                    $result = true;
+                } else {
+                    $app->log('Failed to restore web backup ' . $full_filename . ', exit code ' . $retval, LOGLEVEL_ERROR);
+                }
             }
-            $app->system->web_folder_protection($web_root, true);
         } else {
-            $app->log('Failed to restore web backup ' . $full_filename . ', backup format not recognized.', LOGLEVEL_DEBUG);
+            $app->log('Failed to restore web backup ' . $full_filename . ', backup mode "' . $backup_mode . '" not recognized.', LOGLEVEL_DEBUG);
         }
+        $app->system->web_folder_protection($web_root, true);
         return $result;
     }
 
+    /**
+     * Deletes backup copy
+     * @param string $backup_format
+     * @param string $backup_password
+     * @param string $backup_dir
+     * @param string $filename
+     * @param string $backup_mode
+     * @param string $backup_type
+     * @param int $domain_id
+     * @param bool true on success
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
+     */
+    public static function deleteBackup($backup_format, $backup_password, $backup_dir, $filename, $backup_mode, $backup_type, $domain_id) {
+        global $app, $conf;
+        $server_id = $conf['server_id'];
+        $success = false;
+
+        if (empty($backup_format) || $backup_format == 'default') {
+            $backup_format = self::getDefaultBackupFormat($backup_mode, $backup_type);
+        }
+        if(self::backupModeIsRepos($backup_mode)) {
+            $repos_password = '';
+            $backup_archive = $filename;
+            $backup_repos_folder = self::getBackupReposFolder($backup_mode, $backup_type);
+            if ($backup_type != 'web') {
+                preg_match('@^(manual-)?db_(?P<db>.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}$@', $backup_archive, $matches);
+                if (!isset($matches['db']) || empty($matches['db'])) {
+                    $app->log('Failed to detect database name during delete of ' . $backup_archive, LOGLEVEL_ERROR);
+                    return false;
+                }
+                $db_name = $matches['db'];
+                $backup_repos_folder .= '_' . $db_name;
+            }
+            $backup_repos_path = $backup_dir . '/' . $backup_repos_folder;
+            $archives = self::getReposArchives($backup_mode, $backup_repos_path, $repos_password);
+            if (is_array($archives) && in_array($backup_archive, $archives)) {
+                $success = self::deleteArchive($backup_mode, $backup_repos_path, $backup_archive, $repos_password);
+            } else {
+                $success = true;
+            }
+        } else {
+            if(file_exists($backup_dir.'/'.$filename) && !stristr($backup_dir.'/'.$filename, '..') && !stristr($backup_dir.'/'.$filename, 'etc')) {
+                $success = unlink($backup_dir.'/'.$filename);
+            } else {
+                $success = true;
+            }
+        }
+        if ($success) {
+            $sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+            $app->db->query($sql, $server_id, $domain_id, $filename);
+            if($app->db->dbHost != $app->dbmaster->dbHost)
+                $app->dbmaster->query($sql, $server_id, $domain_id, $filename);
+            $app->log($sql . ' - ' . json_encode([$server_id, $domain_id, $filename]), LOGLEVEL_DEBUG);
+        }
+        return $success;
+    }
+    /**
+     * Downloads the backup copy
+     * @param string $backup_format
+     * @param string $password
+     * @param string $backup_dir
+     * @param string $filename
+     * @param string $backup_mode
+     * @param string $backup_type
+     * @param array $domain web_domain record
+     * @param bool true on success
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
+     */
+    public static function downloadBackup($backup_format, $password, $backup_dir, $filename, $backup_mode, $backup_type, $domain)
+    {
+        global $app;
+
+        $success = false;
+
+        if (self::backupModeIsRepos($backup_mode)) {
+            $backup_archive = $filename;
+            //When stored in repos, we first get target backup format to generate final download file
+            $repos_password = '';
+            $server_id = $domain['server_id'];
+            $password = $domain['backup_encrypt'] == 'y' ? trim($domain['backup_password']) : '';
+            $server_config = $app->getconf->get_server_config($server_id, 'server');
+            $backup_tmp = trim($server_config['backup_tmp']);
+
+            if ($backup_type == 'web') {
+                $backup_format = $domain['backup_format_web'];
+                if (empty($backup_format) || $backup_format == 'default') {
+                    $backup_format = self::getDefaultBackupFormat($server_backup_mode, 'web');
+                }
+                $backup_repos_folder = self::getBackupReposFolder($backup_mode, 'web');
+                $extension = self::getBackupWebExtension($backup_format);
+            } else {
+                if (preg_match('@^(manual-)?db_(?P<db>.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}$@', $backup_archive, $matches)) {
+                    $db_name = $matches['db'];
+                    $backup_format = $domain['backup_format_db'];
+                    if (empty($backup_format)) {
+                        $backup_format = self::getDefaultBackupFormat($server_backup_mode, $backup_type);
+                    }
+                    $backup_repos_folder = self::getBackupReposFolder($backup_mode, $backup_type) . '_' . $db_name;
+                    $extension = self::getBackupDbExtension($backup_format);
+                } else {
+                    $app->log('Failed to detect database name during download of ' . $backup_archive, LOGLEVEL_ERROR);
+                    $db_name = null;
+                }
+            }
+            if ( ! empty($extension)) {
+                $filename .= $extension;
+                $backup_repos_path = $backup_dir . '/' . $backup_repos_folder;
+                $full_archive_path = $backup_repos_path . '::' . $backup_archive;
+                $archives = self::getReposArchives($backup_mode, $backup_repos_path, $repos_password);
+            } else {
+                $archives = null;
+            }
+            if (is_array($archives)) {
+                if (in_array($backup_archive, $archives)) {
+                    $app->log('Extracting ' . $backup_type . ' backup from repository archive '.$full_archive_path. ' to ' . $domain['document_root'].'/backup/' . $filename, LOGLEVEL_DEBUG);
+                    switch ($backup_mode) {
+                        case 'borg':
+                            if ($backup_type == 'mysql') {
+                                if (strpos($extension, '.sql.gz') === 0 || strpos($extension, '.sql.bz2') === 0) {
+                                    //* .sql.gz and .sql.bz2 don't need a source file, so we can just pipe through the compression command
+                                    $ccmd = strpos($extension, '.sql.gz') === 0 ? 'gzip' : 'bzip2';
+                                    $command = self::getBorgCommand('borg extract', $repos_password) . ' --stdout ? stdin | ' . $ccmd . ' -c > ?';
+                                    $success = $app->system->exec_safe($command, $full_archive_path, $domain['document_root'].'/backup/'.$filename) == 0;
+                                } else {
+                                    $tmp_extract = $backup_tmp . '/' . $backup_archive . '.sql';
+                                    if (file_exists($tmp_extract)) {
+                                        unlink($tmp_extract);
+                                    }
+                                    $command = self::getBorgCommand('borg extract', $repos_password) . ' --stdout ? stdin > ?';
+                                    $app->system->exec_safe($command, $full_archive_path, $tmp_extract);
+                                }
+                            } else {
+                                if (strpos($extension, '.tar') === 0 && ($password == '' || strpos($extension, '.tar.7z') !== 0)) {
+                                    //* .tar.gz, .tar.bz2, etc are supported via borg export-tar, if they don't need encryption
+                                    $command = self::getBorgCommand('borg export-tar', $repos_password) . ' ? ?';
+                                    $app->system->exec_safe($command, $full_archive_path, $domain['document_root'].'/backup/'.$filename);
+                                    $success = $app->system->last_exec_retcode() == 0;
+                                } else {
+                                    $tmp_extract = tempnam($backup_tmp, $backup_archive);
+                                    unlink($tmp_extract);
+                                    mkdir($tmp_extract);
+                                    $command = 'cd ' . $tmp_extract . ' && ' . self::getBorgCommand('borg extract --nobsdflags', $repos_password) . ' ?';
+                                    $app->system->exec_safe($command, $full_archive_path);
+                                    if ($app->system->last_exec_retcode() != 0) {
+                                        $app->log('Extraction of ' . $full_archive_path . ' into ' . $tmp_extract . ' failed.', LOGLEVEL_ERROR);
+                                        $tmp_extract = null;
+                                    }
+                                }
+                            }
+                            break;
+                    }
+                    if ( ! empty($tmp_extract)) {
+                        if (is_dir($tmp_extract)) {
+                            $web_config = $app->getconf->get_server_config($server_id, 'web');
+                            $http_server_user = $web_config['user'];
+                            $success = self::runWebCompression($backup_format, [], 'rootgz', $tmp_extract, $domain['document_root'].'/backup/', $filename, $domain['system_user'], $domain['system_group'], $http_server_user, $backup_tmp, $password);
+                        } else {
+                            self::runDatabaseCompression($backup_format, dirname($tmp_extract), basename($tmp_extract), $filename, $backup_tmp, $password)
+                                AND $success = rename(dirname($tmp_extract) . '/' . $filename, $domain['document_root'].'/backup/'. $filename);
+                        }
+                        if ($success) {
+                            $app->system->exec_safe('rm -Rf ?', $tmp_extract);
+                        } else {
+                             $app->log('Failed to run compression of ' . $tmp_extract . ' into ' . $domain['document_root'].'/backup/' . $filename . ' failed.', LOGLEVEL_ERROR);
+                        }
+                    }
+                } else {
+                    $app->log('Failed to find archive ' . $full_archive_path . ' for download', LOGLEVEL_ERROR);
+                }
+            }
+            if ($success) {
+                $app->log('Download of archive ' . $full_archive_path . ' into ' . $domain['document_root'].'/backup/'.$filename . ' succeeded.', LOGLEVEL_DEBUG);
+            }
+        }
+        //* Copy the backup file to the backup folder of the website
+        elseif(file_exists($backup_dir.'/'.$filename) && file_exists($domain['document_root'].'/backup/') && !stristr($backup_dir.'/'.$filename, '..') && !stristr($backup_dir.'/'.$filename, 'etc')) {
+            $success = copy($backup_dir.'/'.$filename, $domain['document_root'].'/backup/'.$filename);
+        }
+        if (file_exists($domain['document_root'].'/backup/'.$filename)) {
+            chgrp($domain['document_root'].'/backup/'.$filename, $domain['system_group']);
+            chown($domain['document_root'].'/backup/'.$filename, $domain['system_user']);
+            chmod($domain['document_root'].'/backup/'.$filename,0600);
+            $app->log('Ready '.$domain['document_root'].'/backup/'.$filename, LOGLEVEL_DEBUG);
+            return true;
+        } else {
+            $app->log('Failed download of '.$domain['document_root'].'/backup/'.$filename , LOGLEVEL_ERROR);
+            return false;
+        }
+    }
+
+
     /**
      * Returns a compression method, for example returns bzip2 for tar_7z_bzip2
      * @param string $format
@@ -688,6 +971,139 @@ class backup
         return $options;
     }
 
+    /**
+     * Get borg command with password appended to the base command
+     * @param $command Base command to add password to
+     * @param $password Password to add
+     * @param $is_new Specify if command is for a new borg repository initialization
+     */
+    protected static function getBorgCommand($command, $password, $is_new = false)
+    {
+        if ($password) {
+            if ($is_new) {
+                return "BORG_NEW_PASSPHRASE='" . escapeshellarg($password) . "' " . $command;
+            }
+            return "BORG_PASSPHRASE='" . escapeshellarg($password) . "' " . $command;
+        }
+        return $command;
+    }
+    /**
+     * Obtains command line options for "borg create" command.
+     * @param string $compression Compression options are validated and fixed if necessary.
+     *      See: https://borgbackup.readthedocs.io/en/stable/internals/data-structures.html#compression
+     * @return string
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
+     */
+    protected static function getBorgCreateOptions($compression)
+    {
+        global $app;
+
+        //* Validate compression
+
+        $C = explode(',', $compression);
+        if (count($C) > 2) {
+            $app->log("Invalid compression option " . $C[2] . " from compression " . $compression . ".", LOGLEVEL_WARN);
+            $compression = $C[0] . ',' . $C[1];
+            $C = [$C[0], $C[1]];
+        }
+        if (count($C) > 1 && ! ctype_digit($C[1])) {
+            $app->log("Invalid compression option " . $C[1] . " from compression " . $compression . ".", LOGLEVEL_WARN);
+            $compression = $C[0];
+            $C = [$C[0]];
+        }
+
+        switch ($C[0]) {
+            case 'none':
+            case 'lz4':
+                if (count($C) > 1) {
+                    $app->log("Invalid compression format " . $compression . '. Defaulting to ' . $C[0] . '.', LOGLEVEL_WARN);
+                    $compression = $C[0];
+                }
+                break;
+            case 'zstd':
+                //* Check borg version
+                list(,$ver) = explode(' ', exec('borg --version'));
+                if (version_compare($ver, '1.1.4') < 0) {
+                    $app->log("Current borg version " . $ver . " does not support compression format " . $compression . '. Defaulting to zlib.', LOGLEVEL_WARN);
+                    $compression = 'zlib';
+                } elseif (count($C) > 1 && ($C[1] < 1 || $C[1] > 22)) {
+                    $app->log("Invalid compression format " . $compression . '. Defaulting to zstd.', LOGLEVEL_WARN);
+                    $compression = 'zstd';
+                }
+                break;
+            case 'zlib':
+            case 'lzma':
+                if (count($C) > 1 && ($C[1] < 0 || $C[1] > 9)) {
+                    $app->log("Invalid compression format " . $compression . '. Defaulting to ' . $C[0] . '.', LOGLEVEL_WARN);
+                    $compression = $C[0];
+                }
+                break;
+            default:
+                $app->log("Unsupported borg compression format " . $compression . '. Defaulting to zlib.', LOGLEVEL_WARN);
+                $compression = 'zlib';
+        }
+
+        $options = array(
+            /**
+             * -C --compression
+             */
+            '-C ' . $compression,
+            /**
+             * Excludes directories that contain CACHEDIR.TAG
+             */
+            '--exclude-caches',
+            /**
+             * specify the chunker parameters (CHUNK_MIN_EXP, CHUNK_MAX_EXP, HASH_MASK_BITS, HASH_WINDOW_SIZE).
+             * @see https://borgbackup.readthedocs.io/en/stable/internals/data-structures.html#chunker-details
+             * Default: 19,23,21,4095
+             */
+            //'--chunker-params 19,23,21,4095',
+        );
+        $options = implode(" ", $options);
+        return $options;
+    }
+
+    /**
+     * Gets a list of repository archives
+     * @param string $backup_mode
+     * @param string $repos_path absolute path to repository
+     * @param string $password repository password or empty string if none
+     * @param string $list_format Supports either 'short' or 'json'
+     * @return array
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
+     */
+    protected static function getReposArchives($backup_mode, $repos_path, $password, $list_format = 'short')
+    {
+        global $app;
+        if ( ! is_dir($repos_path)) {
+            $app->log("Unknown path " . var_export($repos_path, TRUE)
+                . ' called from ' . (function() {
+                    $dbt = debug_backtrace();
+                    return $dbt[1]['file'] . ':' . $dbt[1]['line'];
+                })(), LOGLEVEL_ERROR);
+            return FALSE;
+        }
+        switch ($backup_mode) {
+            case 'borg':
+
+                $command = self::getBorgCommand('borg list', $password);
+
+                if ($list_format == 'json') {
+                    $command_opts = '--json';
+                } else {
+                    $command_opts = '--short';
+                }
+
+                $app->system->exec_safe($command . ' ' . $command_opts . ' ?', $repos_path);
+
+                if ($app->system->last_exec_retcode() == 0) {
+                    return array_map('trim', $app->system->last_exec_out());
+                }
+                break;
+        }
+        return FALSE;
+    }
+
     /**
      * Clears expired backups.
      * The backup directory must be mounted before calling this method.
@@ -699,36 +1115,108 @@ class backup
      * @see backup_plugin::backups_garbage_collection() call this method first
      * @see backup_plugin::mount_backup_dir()
      * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
      */
     protected static function clearBackups($server_id, $web_id, $max_backup_copies, $backup_dir, $prefix_list=null)
     {
         global $app;
 
-        $files = self::get_files($backup_dir, $prefix_list);
-        usort($files, function ($a, $b) use ($backup_dir) {
-            $time_a = filemtime($backup_dir . '/' . $a);
-            $time_b = filemtime($backup_dir . '/' . $b);
-            return ($time_a > $time_b) ? -1 : 1;
-        });
+        $server_config = $app->getconf->get_server_config($server_id, 'server');
+        $backup_mode = $server_config['backup_mode'];
+        //@todo obtain password from server config
+        $password = NULL;
 
         $db_list = array($app->db);
         if ($app->db->dbHost != $app->dbmaster->dbHost)
             array_push($db_list, $app->dbmaster);
 
-        //Delete old files that are beyond the limit
-        for ($n = $max_backup_copies; $n < sizeof($files); $n++) {
-            $filename = $files[$n];
-            $full_filename = $backup_dir . '/' . $filename;
-            $app->log('Backup file ' . $full_filename . ' is beyond the limit of ' . $max_backup_copies . " copies and will be deleted from disk and database", LOGLEVEL_DEBUG);
-            $sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-            foreach ($db_list as $db) {
-                $db->query($sql, $server_id, $web_id, $filename);
+        if ($backup_mode == "userzip" || $backup_mode == "rootgz") {
+            $files = self::get_files($backup_dir, $prefix_list);
+            usort($files, function ($a, $b) use ($backup_dir) {
+                $time_a = filemtime($backup_dir . '/' . $a);
+                $time_b = filemtime($backup_dir . '/' . $b);
+                return ($time_a > $time_b) ? -1 : 1;
+            });
+
+            //Delete old files that are beyond the limit
+            for ($n = $max_backup_copies; $n < sizeof($files); $n++) {
+                $filename = $files[$n];
+                $full_filename = $backup_dir . '/' . $filename;
+                $app->log('Backup file ' . $full_filename . ' is beyond the limit of ' . $max_backup_copies . " copies and will be deleted from disk and database", LOGLEVEL_DEBUG);
+                $sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+                foreach ($db_list as $db) {
+                    $db->query($sql, $server_id, $web_id, $filename);
+                }
+                @unlink($full_filename);
+            }
+        } elseif (self::backupModeIsRepos($backup_mode)) {
+            $repos_archives = self::getAllArchives($backup_dir, $backup_mode, $password);
+            usort($repos_archives, function ($a, $b)  {
+                return ($a['created_at'] > $b['created_at']) ? -1 : 1;
+            });
+            //Delete old files that are beyond the limit
+            for ($n = $max_backup_copies; $n < sizeof($repos_archives); $n++) {
+                $archive = $repos_archives[$n];
+                $app->log('Backup archive ' . $archive['archive'] . ' is beyond the limit of ' . $max_backup_copies . " copies and will be deleted from disk and database", LOGLEVEL_DEBUG);
+                $sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
+                foreach ($db_list as $db) {
+                    $db->query($sql, $server_id, $web_id, $archive['archive']);
+                }
+                $backup_repos_path = $backup_dir . '/' . $archive['repos'];
+                self::deleteArchive($backup_mode, $backup_repos_path, $archive['archive'], $password);
             }
-            @unlink($full_filename);
         }
         return true;
     }
 
+    protected static function getAllArchives($backup_dir, $backup_mode, $password)
+    {
+        $d = dir($backup_dir);
+        $archives = [];
+        /**
+         * $archives[] = [
+         *      'repos'      => string,
+         *      'archive'    => string,
+         *      'created_at' => int,
+         * ];
+         */
+        while (false !== ($entry = $d->read())) {
+            if ('.' === $entry || '..' === $entry) {
+                continue;
+            }
+            switch ($backup_mode) {
+                case 'borg':
+                    $repos_path = $backup_dir . '/' . $entry;
+                    if (is_dir($repos_path) && strncmp('borg_', $entry, 5) === 0) {
+                        $archivesJson = json_decode(implode("", self::getReposArchives($backup_mode, $repos_path, $password, 'json')), TRUE);
+                        foreach ($archivesJson['archives'] as $archive) {
+                            $archives[] = [
+                                'repos'      => $entry,
+                                'archive'    => $archive['name'],
+                                'created_at' => strtotime($archive['time']),
+                            ];
+                        }
+                    }
+                    break;
+            }
+        }
+        return $archives;
+    }
+
+    protected static function deleteArchive($backup_mode, $backup_repos_path, $backup_archive, $password)
+    {
+        global $app;
+        $app->log("Delete Archive - repos = " . $backup_repos_path . ", archive = " . $backup_archive, LOGLEVEL_DEBUG);
+        switch ($backup_mode) {
+            case 'borg':
+                $app->system->exec_safe('borg delete ?', $backup_repos_path . '::' . $backup_archive);
+                return $app->system->last_exec_retcode() == 0;
+            default:
+                $app->log("Unknown repos type " . $backup_mode, LOGLEVEL_ERROR);
+        }
+        return FALSE;
+    }
+
     /**
      * Garbage collection: deletes records from database about files that do not exist and deletes untracked files and cleans up backup download directories.
      * The backup directory must be mounted before calling this method.
@@ -748,7 +1236,7 @@ class backup
         $args_sql_domains_with_backups = array();
         $server_config = $app->getconf->get_server_config($server_id, 'server');
         $backup_dir = trim($server_config['backup_dir']);
-        $sql = "SELECT * FROM web_backup WHERE server_id = ?";
+        $sql = "SELECT * FROM web_backup WHERE server_id = ? AND backup_mode != 'borg'";
         $sql_domains = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')";
         $sql_domains_with_backups = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE domain_id in (SELECT parent_domain_id FROM web_backup WHERE server_id = ?" . ((!empty($backup_type)) ? " AND backup_type = ?" : "") . ") AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')";
         array_push($args_sql, $server_id);
@@ -772,7 +1260,7 @@ class backup
         if ($app->db->dbHost != $app->dbmaster->dbHost)
             array_push($db_list, $app->dbmaster);
 
-	// Cleanup web_backup entries for non-existent backup files
+        // Cleanup web_backup entries for non-existent backup files
         foreach ($db_list as $db) {
             $backups = $app->db->queryAllRecords($sql, true, $args_sql);
             foreach ($backups as $backup) {
@@ -785,7 +1273,7 @@ class backup
             }
         }
 
-	// Cleanup backup files with missing web_backup entries (runs on all servers)
+        // Cleanup backup files with missing web_backup entries (runs on all servers)
         $domains = $app->dbmaster->queryAllRecords($sql_domains_with_backups, true, $args_sql_domains_with_backups);
         foreach ($domains as $rec) {
             $domain_id = $rec['domain_id'];
@@ -795,7 +1283,7 @@ class backup
             if (!empty($files)) {
                 // leave out server_id here, in case backup storage is shared between servers
                 $sql = "SELECT backup_id, filename FROM web_backup WHERE parent_domain_id = ?";
-		$untracked_backup_files = array();
+                $untracked_backup_files = array();
                 foreach ($db_list as $db) {
                     $backups = $db->queryAllRecords($sql, $domain_id);
                     foreach ($backups as $backup) {
@@ -804,8 +1292,8 @@ class backup
                         }
                     }
                 }
-		array_unique( $untracked_backup_files );
-		foreach ($untracked_backup_files as $f) {
+                array_unique( $untracked_backup_files );
+                foreach ($untracked_backup_files as $f) {
                     $backup_file = $backup_dir . '/web' . $domain_id . '/' . $f;
                     $app->log('Backup file ' . $backup_file . ' is not contained in database, deleting this file from disk', LOGLEVEL_DEBUG);
                     @unlink($backup_file);
@@ -813,7 +1301,7 @@ class backup
             }
         }
 
-	// This cleanup only runs on web servers
+        // This cleanup only runs on web servers
         $domains = $app->db->queryAllRecords($sql_domains, true, $args_sql_domains);
         foreach ($domains as $rec) {
             $domain_id = $rec['domain_id'];
@@ -856,6 +1344,15 @@ class backup
         }
     }
 
+    protected static function getReposFolder($backup_mode, $backup_type, $postfix = '')
+    {
+        switch ($backup_mode) {
+            case 'borg':
+                return 'borg_' . $backup_type . $postfix;
+        }
+        return null;
+    }
+
     /**
      * Gets list of files in directory
      * @param string $directory
@@ -922,6 +1419,48 @@ class backup
         return $files;
     }
 
+    /**
+     * Gets list of directories in directory
+     * @param string $directory
+     * @param string[]|null $prefix_list filter files that have one of the prefixes. Use null for default filtering.
+     * @return string[]
+     * @author Ramil Valitov <ramilvalitov@gmail.com>
+     */
+    protected static function get_dirs($directory, $prefix_list = null, $endings_list = null)
+    {
+        $default_prefix_list = array(
+            'borg',
+        );
+        if (is_null($prefix_list))
+            $prefix_list = $default_prefix_list;
+
+        if (!is_dir($directory)) {
+            return array();
+        }
+
+        $dir_handle = dir($directory);
+        $dirs = array();
+        while (false !== ($entry = $dir_handle->read())) {
+            $full_dirname = $directory . '/' . $entry;
+            if ($entry != '.' && $entry != '..' && is_dir($full_dirname)) {
+                if (!empty($prefix_list)) {
+                    $add = false;
+                    foreach ($prefix_list as $prefix) {
+                        if (substr($entry, 0, strlen($prefix)) == $prefix) {
+                            $add = true;
+                            break;
+                        }
+                    }
+                } else
+                    $add = true;
+                if ($add)
+                    array_push($dirs, $entry);
+            }
+        }
+        $dir_handle->close();
+
+        return $dirs;
+    }
     /**
      * Generates excludes list for compressors
      * @param string[] $backup_excludes
@@ -935,7 +1474,7 @@ class backup
     {
         $excludes = "";
         foreach ($backup_excludes as $ex) {
-	    # pass through escapeshellarg if not already done
+            # pass through escapeshellarg if not already done
             if ( preg_match( "/^'.+'$/", $ex ) ) {
                 $excludes .= "${arg}${pre}${ex}${post} ";
             } else {
@@ -1167,6 +1706,7 @@ class backup
      * @param string $backup_job type of backup job: manual or auto
      * @return bool true if success
      * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
      * @see backup_plugin::run_backup() recommeneded to use if you need to make backups
      */
     protected static function make_database_backup($web_domain, $backup_job)
@@ -1176,6 +1716,7 @@ class backup
         $server_id = intval($web_domain['server_id']);
         $domain_id = intval($web_domain['domain_id']);
         $server_config = $app->getconf->get_server_config($server_id, 'server');
+        $backup_mode = $server_config['backup_mode'];
         $backup_dir = trim($server_config['backup_dir']);
         $backup_tmp = trim($server_config['backup_tmp']);
         $db_backup_dir = $backup_dir . '/web' . $domain_id;
@@ -1200,67 +1741,118 @@ class backup
         unset($tmp);
 
         foreach ($records as $rec) {
-            $password = ($web_domain['backup_encrypt'] == 'y') ? trim($web_domain['backup_password']) : '';
-            $backup_format_db = $web_domain['backup_format_db'];
-            if (empty($backup_format_db)) {
-                $backup_format_db = 'gzip';
-            }
-            $backup_extension_db = self::getBackupDbExtension($backup_format_db);
-
-            if (!empty($backup_extension_db)) {
-                //* Do the mysql database backup with mysqldump
+            if (self::backupModeIsRepos($backup_mode)) {
+                //@todo get $password from server config
+                $repos_password = '';
+                //@todo get compression from server config
+                $compression = 'zlib';
                 $db_name = $rec['database_name'];
-                $db_file_prefix = 'db_' . $db_name . '_' . date('Y-m-d_H-i');
-                $db_backup_file = $db_file_prefix . '.sql';
-                $db_compressed_file = ($backup_job == 'manual' ? 'manual-' : '') . $db_file_prefix . $backup_extension_db;
-                $command = "mysqldump -h ? -u ? -p? -c --add-drop-table --create-options --quick --max_allowed_packet=512M " . $mysqldump_routines . " --result-file=? ?";
-                /** @var string $clientdb_host */
-                /** @var string $clientdb_user */
-                /** @var string $clientdb_password */
-                $app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $db_backup_dir . '/' . $db_backup_file, $db_name);
-                $exit_code = $app->system->last_exec_retcode();
-
-                //* Compress the backup
-                if ($exit_code == 0) {
-                    $exit_code = self::runDatabaseCompression($backup_format_db, $db_backup_dir, $db_backup_file, $db_compressed_file, $backup_tmp, $password) ? 0 : 1;
-                    if ($exit_code !== 0)
-                        $app->log('Failed to make backup of database ' . $rec['database_name'], LOGLEVEL_ERROR);
+                $db_repos_folder = self::getBackupReposFolder($backup_mode, 'mysql') . '_' . $db_name;
+                $backup_repos_path = $db_backup_dir . '/' . $db_repos_folder;
+                $backup_format_db = '';
+                if (self::prepareRepos($backup_mode, $backup_repos_path, $repos_password)) {
+                    $db_backup_archive = ($backup_job == 'manual' ? 'manual-' : '') . 'db_' . $db_name . '_' . date('Y-m-d_H-i');
+                    $full_archive_path = $backup_repos_path . '::' . $db_backup_archive;
+                    $dump_command = "mysqldump -h ? -u ? -p? -c --add-drop-table --create-options --quick --max_allowed_packet=512M " . $mysqldump_routines . " ?";
+                    switch ($backup_mode) {
+                        case 'borg':
+                            $borg_cmd = self::getBorgCommand('borg create', $repos_password);
+                            $borg_options = self::getBorgCreateOptions($compression);
+                            $command = $dump_command . ' | ' . $borg_cmd . ' ' . $borg_options . ' ? -';
+                            /** @var string $clientdb_host */
+                            /** @var string $clientdb_user */
+                            /** @var string $clientdb_password */
+                            $app->system->exec_safe($command,
+                                $clientdb_host, $clientdb_user, $clientdb_password, $db_name, #mysqldump command part
+                                $full_archive_path #borg command part
+                            );
+                            $exit_code = $app->system->last_exec_retcode();
+                            break;
+                    }
+                    if ($exit_code == 0) {
+                        $archive_size = self::getReposArchiveSize($backup_mode, $backup_repos_path, $db_backup_archive, $repos_password);
+                        if ($archive_size !== false) {
+                            //* Insert web backup record in database
+                            $sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, backup_format, tstamp, filename, filesize, backup_password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
+                            //* password is for `Encrypted` column informative purposes, on download password is obtained from web_domain settings
+                            $password = $repos_password ? '*secret*' : '';
+                            $app->db->query($sql, $server_id, $domain_id, 'mysql', $backup_mode, $backup_format_db, time(), $db_backup_archive, $archive_size, $password);
+                            if ($app->db->dbHost != $app->dbmaster->dbHost)
+                                $app->dbmaster->query($sql, $server_id, $domain_id, 'mysql', $backup_mode, $backup_format_db, time(), $db_backup_archive, $archive_size, $password);
+                            $success = true;
+                        } else {
+                            $app->log('Failed to obtain backup size of ' . $full_archive_path . ' for database ' . $rec['database_name'], LOGLEVEL_ERROR);
+                            return false;
+                        }
+                    } else {
+                        rename($backup_repos_path, $new_path = $backup_repos_path . '_failed_' . uniqid());
+                        $app->log('Failed to process mysql backup format ' . $backup_format_db . ' for database ' . $rec['database_name'] . ' repos renamed to ' . $new_path, LOGLEVEL_ERROR);
+                    }
                 } else {
-                    $app->log('Failed to make backup of database ' . $rec['database_name'] . ', because mysqldump failed', LOGLEVEL_ERROR);
+                    $app->log('Failed to initialize repository for database ' . $rec['database_name'] . ', folder ' . $backup_repos_path . ', backup mode ' . $backup_mode . '.', LOGLEVEL_ERROR);
+                }
+            } else {
+                $password = ($web_domain['backup_encrypt'] == 'y') ? trim($web_domain['backup_password']) : '';
+                $backup_format_db = $web_domain['backup_format_db'];
+                if (empty($backup_format_db)) {
+                    $backup_format_db = 'gzip';
                 }
+                $backup_extension_db = self::getBackupDbExtension($backup_format_db);
+
+                if (!empty($backup_extension_db)) {
+                    //* Do the mysql database backup with mysqldump
+                    $db_name = $rec['database_name'];
+                    $db_file_prefix = 'db_' . $db_name . '_' . date('Y-m-d_H-i');
+                    $db_backup_file = $db_file_prefix . '.sql';
+                    $db_compressed_file = ($backup_job == 'manual' ? 'manual-' : '') . $db_file_prefix . $backup_extension_db;
+                    $command = "mysqldump -h ? -u ? -p? -c --add-drop-table --create-options --quick --max_allowed_packet=512M " . $mysqldump_routines . " --result-file=? ?";
+                    /** @var string $clientdb_host */
+                    /** @var string $clientdb_user */
+                    /** @var string $clientdb_password */
+                    $app->system->exec_safe($command, $clientdb_host, $clientdb_user, $clientdb_password, $db_backup_dir . '/' . $db_backup_file, $db_name);
+                    $exit_code = $app->system->last_exec_retcode();
 
-                if ($exit_code == 0) {
-                    if (is_file($db_backup_dir . '/' . $db_compressed_file)) {
-                        chmod($db_backup_dir . '/' . $db_compressed_file, 0750);
-                        chown($db_backup_dir . '/' . $db_compressed_file, fileowner($db_backup_dir));
-                        chgrp($db_backup_dir . '/' . $db_compressed_file, filegroup($db_backup_dir));
-
-                        //* Insert web backup record in database
-                        $file_size = filesize($db_backup_dir . '/' . $db_compressed_file);
-                        $sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, backup_format, tstamp, filename, filesize, backup_password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
-                        //Making compatible with previous versions of ISPConfig:
-                        $sql_mode = ($backup_format_db == 'gzip') ? 'sqlgz' : ('sql' . $backup_format_db);
-                        $app->db->query($sql, $server_id, $domain_id, 'mysql', $sql_mode, $backup_format_db, time(), $db_compressed_file, $file_size, $password);
-                        if ($app->db->dbHost != $app->dbmaster->dbHost)
-                            $app->dbmaster->query($sql, $server_id, $domain_id, 'mysql', $sql_mode, $backup_format_db, time(), $db_compressed_file, $file_size, $password);
-                        $success = true;
+                    //* Compress the backup
+                    if ($exit_code == 0) {
+                        $exit_code = self::runDatabaseCompression($backup_format_db, $db_backup_dir, $db_backup_file, $db_compressed_file, $backup_tmp, $password) ? 0 : 1;
+                        if ($exit_code !== 0)
+                            $app->log('Failed to make backup of database ' . $rec['database_name'], LOGLEVEL_ERROR);
+                    } else {
+                        $app->log('Failed to make backup of database ' . $rec['database_name'] . ', because mysqldump failed', LOGLEVEL_ERROR);
                     }
-                } else {
-                    if (is_file($db_backup_dir . '/' . $db_compressed_file)) unlink($db_backup_dir . '/' . $db_compressed_file);
+
+                    if ($exit_code == 0) {
+                        if (is_file($db_backup_dir . '/' . $db_compressed_file)) {
+                            chmod($db_backup_dir . '/' . $db_compressed_file, 0750);
+                            chown($db_backup_dir . '/' . $db_compressed_file, fileowner($db_backup_dir));
+                            chgrp($db_backup_dir . '/' . $db_compressed_file, filegroup($db_backup_dir));
+
+                            //* Insert web backup record in database
+                            $file_size = filesize($db_backup_dir . '/' . $db_compressed_file);
+                            $sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, backup_format, tstamp, filename, filesize, backup_password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
+                            //Making compatible with previous versions of ISPConfig:
+                            $sql_mode = ($backup_format_db == 'gzip') ? 'sqlgz' : ('sql' . $backup_format_db);
+                            $app->db->query($sql, $server_id, $domain_id, 'mysql', $sql_mode, $backup_format_db, time(), $db_compressed_file, $file_size, $password);
+                            if ($app->db->dbHost != $app->dbmaster->dbHost)
+                                $app->dbmaster->query($sql, $server_id, $domain_id, 'mysql', $sql_mode, $backup_format_db, time(), $db_compressed_file, $file_size, $password);
+                            $success = true;
+                        }
+                    } else {
+                        if (is_file($db_backup_dir . '/' . $db_compressed_file)) unlink($db_backup_dir . '/' . $db_compressed_file);
+                    }
+                    //* Remove the uncompressed file
+                    if (is_file($db_backup_dir . '/' . $db_backup_file)) unlink($db_backup_dir . '/' . $db_backup_file);
+                }  else {
+                    $app->log('Failed to process mysql backup format ' . $backup_format_db . ' for database ' . $rec['database_name'], LOGLEVEL_ERROR);
                 }
-                //* Remove the uncompressed file
-                if (is_file($db_backup_dir . '/' . $db_backup_file)) unlink($db_backup_dir . '/' . $db_backup_file);
-
-                //* Remove old backups
-                self::backups_garbage_collection($server_id, 'mysql', $domain_id);
-                $prefix_list = array(
-                            "db_${db_name}_",
-                            "manual-db_${db_name}_",
-                        );
-                self::clearBackups($server_id, $domain_id, intval($rec['backup_copies']), $db_backup_dir, $prefix_list);
-            } else {
-                $app->log('Failed to process mysql backup format ' . $backup_format_db . ' for database ' . $rec['database_name'], LOGLEVEL_ERROR);
             }
+            //* Remove old backups
+            self::backups_garbage_collection($server_id, 'mysql', $domain_id);
+            $prefix_list = array(
+                        "db_${db_name}_",
+                        "manual-db_${db_name}_",
+                    );
+            self::clearBackups($server_id, $domain_id, intval($rec['backup_copies']), $db_backup_dir, $prefix_list);
         }
 
         unset($clientdb_host);
@@ -1278,6 +1870,7 @@ class backup
      * @param string $backup_job type of backup job: manual or auto
      * @return bool true if success
      * @author Ramil Valitov <ramilvalitov@gmail.com>
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
      * @see backup_plugin::mount_backup_dir()
      * @see backup_plugin::run_backup() recommeneded to use if you need to make backups
      */
@@ -1328,11 +1921,11 @@ class backup
         self::prepare_backup_dir($server_id, $web_domain);
         $web_backup_dir = $backup_dir . '/web' . $web_id;
 
-	# default exclusions
-	$backup_excludes = array(
-		'./backup*',
-		'./bin', './dev', './etc', './lib', './lib32', './lib64', './opt', './sys', './usr', './var', './proc', './run', './tmp',
-		);
+        # default exclusions
+        $backup_excludes = array(
+            './backup*',
+            './bin', './dev', './etc', './lib', './lib32', './lib64', './opt', './sys', './usr', './var', './proc', './run', './tmp',
+        );
 
         $b_excludes = explode(',', trim($web_domain['backup_excludes']));
         if (is_array($b_excludes) && !empty($b_excludes)) {
@@ -1343,43 +1936,217 @@ class backup
                 }
             }
         }
+        if (self::backupModeIsRepos($backup_mode)) {
+            $backup_format_web = '';
+            $web_backup_archive = ($backup_job == 'manual' ? 'manual-' : '') . 'web' . $web_id . '_' . date('Y-m-d_H-i');
+            $backup_repos_folder = self::getBackupReposFolder($backup_mode, 'web');
+
+            $backup_repos_path = $web_backup_dir . '/' . $backup_repos_folder;
+            $full_archive_path = $backup_repos_path . '::' . $web_backup_archive;
+            /**
+             * @todo the internal borg password can't be the backup instance $password because the repos shares all backups
+             * in a period of time. Instead we'll set the backup password on backup file download.
+             */
+            $repos_password = '';
+            //@todo get this from the server config perhaps
+            $compression = 'zlib';
 
-        $web_backup_file = ($backup_job == 'manual' ? 'manual-' : '') . 'web' . $web_id . '_' . date('Y-m-d_H-i') . $backup_extension_web;
-        $full_filename = $web_backup_dir . '/' . $web_backup_file;
-        if (self::runWebCompression($backup_format_web, $backup_excludes, $backup_mode, $web_path, $web_backup_dir, $web_backup_file, $web_user, $web_group, $http_server_user, $backup_tmp, $password)) {
-            if (is_file($full_filename)) {
+            if ( ! self::prepareRepos($backup_mode, $backup_repos_path, $repos_password)) {
+                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' using path ' . $backup_repos_path . ' failed. Unable to prepare repository for ' . $backup_mode, LOGLEVEL_ERROR);
+                return FALSE;
+            }
+            #we wont use tar to be able to speed up things and extract specific files easily
+            #$find_user_files = 'cd ? && find . -group ? -or -user ? -print 2> /dev/null';
+            $excludes = backup::generateExcludeList($backup_excludes, '--exclude ');
+            $success = false;
+
+            $app->log('Performing web files backup of ' . $web_path . ', mode ' . $backup_mode, LOGLEVEL_DEBUG);
+            switch ($backup_mode) {
+                case 'borg':
+                    $command = self::getBorgCommand('borg create', $repos_password);
+                    $command_opts = self::getBorgCreateOptions($compression);
+
+                    $app->system->exec_safe(
+                        'cd ? && ' . $command . ' ' . $command_opts . ' ' . $excludes . ' ? .',
+                        $web_path, $backup_repos_path . '::' . $web_backup_archive
+                    );
+                    $success = $app->system->last_exec_retcode() == 0;
+            }
+
+            if ($success) {
                 $backup_username = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_user : 'root';
                 $backup_group = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_group : 'root';
-                chown($full_filename, $backup_username);
-                chgrp($full_filename, $backup_group);
-                chmod($full_filename, 0750);
-
+    
                 //Insert web backup record in database
-                $file_size = filesize($full_filename);
+                $archive_size = self::getReposArchiveSize($backup_mode, $backup_repos_path, $web_backup_archive, $repos_password);
+                $password = $repos_password ? '*secret*' : '';
                 $sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, backup_format, tstamp, filename, filesize, backup_password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
-                $app->db->query($sql, $server_id, $web_id, 'web', $backup_mode, $backup_format_web, time(), $web_backup_file, $file_size, $password);
+                $backup_time = time();
+                $app->db->query($sql, $server_id, $web_id, 'web', $backup_mode, $backup_format_web, $backup_time, $web_backup_archive, $archive_size, $password);
                 if ($app->db->dbHost != $app->dbmaster->dbHost)
-                    $app->dbmaster->query($sql, $server_id, $web_id, 'web', $backup_mode, $backup_format_web, time(), $web_backup_file, $file_size, $password);
-                unset($file_size);
-                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' completed successfully to file ' . $full_filename, LOGLEVEL_DEBUG);
+                    $app->dbmaster->query($sql, $server_id, $web_id, 'web', $backup_mode, $backup_format_web, $backup_time, $web_backup_archive, $archive_size, $password);
+                unset($archive_size);
+                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' completed successfully to archive ' . $full_archive_path, LOGLEVEL_DEBUG);
             } else {
-                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' reported success, but the resulting file ' . $full_filename . ' not found.', LOGLEVEL_ERROR);
+                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' using path ' . $web_path . ' failed.', LOGLEVEL_ERROR);
             }
-
         } else {
-            if (is_file($full_filename))
-                unlink($full_filename);
-            $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' failed using path ' . $web_path . ' failed.', LOGLEVEL_ERROR);
+            $web_backup_file = ($backup_job == 'manual' ? 'manual-' : '') . 'web' . $web_id . '_' . date('Y-m-d_H-i') . $backup_extension_web;
+            $full_filename = $web_backup_dir . '/' . $web_backup_file;
+            if (self::runWebCompression($backup_format_web, $backup_excludes, $backup_mode, $web_path, $web_backup_dir, $web_backup_file, $web_user, $web_group, $http_server_user, $backup_tmp, $password)) {
+                if (is_file($full_filename)) {
+                    $backup_username = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_user : 'root';
+                    $backup_group = ($global_config['backups_include_into_web_quota'] == 'y') ? $web_group : 'root';
+                    chown($full_filename, $backup_username);
+                    chgrp($full_filename, $backup_group);
+                    chmod($full_filename, 0750);
+
+                    //Insert web backup record in database
+                    $file_size = filesize($full_filename);
+                    $sql = "INSERT INTO web_backup (server_id, parent_domain_id, backup_type, backup_mode, backup_format, tstamp, filename, filesize, backup_password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
+                    $app->db->query($sql, $server_id, $web_id, 'web', $backup_mode, $backup_format_web, time(), $web_backup_file, $file_size, $password);
+                    if ($app->db->dbHost != $app->dbmaster->dbHost)
+                        $app->dbmaster->query($sql, $server_id, $web_id, 'web', $backup_mode, $backup_format_web, time(), $web_backup_file, $file_size, $password);
+                    unset($file_size);
+                    $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' completed successfully to file ' . $full_filename, LOGLEVEL_DEBUG);
+                } else {
+                    $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' reported success, but the resulting file ' . $full_filename . ' not found.', LOGLEVEL_ERROR);
+                }
+
+            } else {
+                if (is_file($full_filename))
+                    unlink($full_filename);
+                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' failed using path ' . $web_path . ' failed.', LOGLEVEL_ERROR);
+            }
         }
 
-	$prefix_list = array(
-		    'web',
-		    'manual-web',
-		);
+        $prefix_list = array(
+            'web',
+            'manual-web',
+        );
         self::clearBackups($server_id, $web_id, intval($web_domain['backup_copies']), $web_backup_dir, $prefix_list);
         return true;
     }
 
+    protected static function getBackupReposFolder($backup_mode, $backup_type)
+    {
+        switch ($backup_mode) {
+            case 'borg': return 'borg_' . $backup_type;
+        }
+        return null;
+    }
+
+    /**
+     * Prepares repository for backup. Initialization, etc.
+     */
+    protected static function prepareRepos($backup_mode, $repos_path, $password)
+    {
+        global $app;
+        if (is_dir($repos_path)) {
+            self::getReposArchives($backup_mode, $repos_path, $password);
+            if ($app->system->last_exec_retcode() == 0) {
+                return true;
+            }
+            if ($app->system->last_exec_retcode() == 2 && preg_match('/passphrase supplied in.*is incorrect/', $app->system->last_exec_out()[0])) {
+                //Password was updated, so we rename folder and alert the event.
+                $repos_stat = stat($repos_path);
+                $mtime = $repos_stat['mtime'];
+                $new_repo_path = $repos_path . '_' . date('Y-m-d_H-i', $mtime);
+                rename($repos_path, $new_repo_name);
+                $app->log('Backup of web files for domain ' . $web_domain['domain'] . ' are encrypted under a different password. Original repos was moved to ' . $new_repo_name, LOGLEVEL_WARN);
+            } else {
+                return false;
+            }
+        }
+        switch ($backup_mode) {
+            case 'borg':
+                if ($password) {
+                    $command = self::getBorgCommand('borg init', $password, true);
+                    $app->system->exec_safe($command . ' --make-parent-dirs -e authenticated ?', $repos_path);
+                } else {
+                    $app->system->exec_safe('borg init --make-parent-dirs -e none ?', $repos_path);
+                }
+                return $app->system->last_exec_retcode() == 0;
+        }
+        return false;
+    }
+
+    /**
+     * Obtains archive compressed size from specific repository.
+     * @param string $backup_mode Server backup mode.
+     * @param string $backup_repos_path Absolute path to repository.
+     * @param string $backup_archive Name of the archive to obtain size from.
+     * @param string $password Provide repository password or empty string if there is none.
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
+     */
+    protected static function getReposArchiveSize($backup_mode, $backup_repos_path, $backup_archive, $password)
+    {
+        $info = self::getReposArchiveInfo($backup_mode, $backup_repos_path, $backup_archive, $password);
+        if ($info) {
+            return $info['compressed_size'];
+        }
+        return false;
+    }
+    /**
+     * Obtains archive information for specific repository archive.
+     * @param string $backup_mode Server backup mode.
+     * @param string $backup_repos_path Absolute path to repository.
+     * @param string $backup_archive Name of the archive to obtain size from.
+     * @param string $password Provide repository password or empty string if there is none.
+     * @return array Can contain one or more of the following keys:
+     *      'created_at': int unixtime
+     *      'created_by': string
+     *      'comment': string
+     *      'original_size': int
+     *      'compressed_size': int
+     *      'deduplicated_size': int
+     *      'num_files': int
+     *      'compression': string
+     * @author Jorge Muñoz <elgeorge2k@gmail.com>
+     */
+    protected static function getReposArchiveInfo($backup_mode, $backup_repos_path, $backup_archive, $password)
+    {
+        global $app;
+        $info = [];
+        switch ($backup_mode) {
+            case 'borg':
+                $command = self::getBorgCommand('borg info', $password);
+                $full_archive_path = $backup_repos_path . '::' . $backup_archive;
+                $app->system->exec_safe($command . ' --json ?', $full_archive_path);
+                if ($app->system->last_exec_retcode() != 0) {
+                    $app->log('Command `borg info` failed for ' . $full_archive_path . '.', LOGLEVEL_ERROR);
+                }
+                $out = implode("", $app->system->last_exec_out());
+                if ($out) {
+                    $out = json_decode($out, true);
+                }
+                if (empty($out)) {
+                    $app->log('No json result could be parsed from `borg info --json` command for repository ' . $full_archive_path . '.', LOGLEVEL_ERROR);
+                    return false;
+                }
+                if (empty($out['archives'])) {
+                    $app->log('No archive ' . $backup_archive . ' found for repository ' . $backup_repos_path . '.', LOGLEVEL_WARN);
+                    return false;
+                }
+                $info['created_at'] = strtotime($out['archives'][0]['start']);
+                $info['created_by'] = $out['archives'][0]['username'];
+                $info['comment'] = $out['archives'][0]['comment'];
+                $info['original_size'] = (int)$out['archives'][0]['stats']['original_size'];
+                $info['compressed_size'] = (int)$out['archives'][0]['stats']['compressed_size'];
+                $info['deduplicated_size'] = (int)$out['archives'][0]['stats']['deduplicated_size'];
+                $info['num_files'] = (int)$out['archives'][0]['stats']['nfiles'];
+                $prev_arg = null;
+                foreach ($out['archives'][0]['command_line'] as $arg) {
+                    if ($prev_arg == '-C' || $prev_arg == '--compression') {
+                        $info['compression'] = $arg;
+                        break;
+                    }
+                    $prev = $arg;
+                }
+        }
+        return $info;
+    }
+
     /**
      * Creates and prepares a backup dir
      * @param int $server_id
@@ -1498,7 +2265,7 @@ class backup
             }
         }
 
-	$sql = "SELECT DISTINCT d.*, db.server_id as `server_id` FROM web_database as db INNER JOIN web_domain as d ON (d.domain_id = db.parent_domain_id) WHERE db.server_id = ? AND db.active = 'y' AND d.backup_interval != 'none' AND d.backup_interval != ''";
+        $sql = "SELECT DISTINCT d.*, db.server_id as `server_id` FROM web_database as db INNER JOIN web_domain as d ON (d.domain_id = db.parent_domain_id) WHERE db.server_id = ? AND db.active = 'y' AND d.backup_interval != 'none' AND d.backup_interval != ''";
         $databases = $app->dbmaster->queryAllRecords($sql, $server_id);
 
         foreach ($databases as $database) {
diff --git a/server/lib/classes/cron.d/100-monitor_backup.inc.php b/server/lib/classes/cron.d/100-monitor_backup.inc.php
index 40f5362082e262d43d9d62b6d139045cc0b134e9..b90290d7c3f70d9c0f73ea277672ddfa4e2684b2 100644
--- a/server/lib/classes/cron.d/100-monitor_backup.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_backup.inc.php
@@ -63,7 +63,8 @@ class cronjob_monitor_backup extends cronjob {
 		$type = 'backup_utils';
 
 		$missing_utils = array();
-		$compressors_list = array(
+		$util_list = array(
+			'borg',
 			'gzip',
 			'gunzip',
 			'zip',
@@ -77,9 +78,9 @@ class cronjob_monitor_backup extends cronjob {
 			'7z',
 			'rar',
 		);
-		foreach ($compressors_list as $compressor) {
-			if (!$app->system->is_installed($compressor)) {
-				$missing_utils[] = $compressor;
+		foreach ($util_list as $util) {
+			if (!$app->system->is_installed($util)) {
+				$missing_utils[] = $util;
 			}
 		}
 
diff --git a/server/lib/classes/cron.d/300-quota_notify.inc.php b/server/lib/classes/cron.d/300-quota_notify.inc.php
index 5e1bb922767e395569a045e394c3b65b555c1445..ac7ae0aa5c70fab9c8e539145f558c950d174563 100644
--- a/server/lib/classes/cron.d/300-quota_notify.inc.php
+++ b/server/lib/classes/cron.d/300-quota_notify.inc.php
@@ -210,8 +210,8 @@ class cronjob_quota_notify extends cronjob {
 						$rec['hard'] .= ' KB';
 					}
 
-					// send notifications only if 90% or more of the quota are used
-					if($used_ratio < 0.9) {
+					// send notifications only if the website is over the quota threshold
+					if($used_ratio <= $web_config['overquota_notify_threshold'] / 100) {
 						// reset notification date
 						if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('web_domain', array("last_quota_notification" => null), 'domain_id', $rec['domain_id']);
 
@@ -339,8 +339,8 @@ class cronjob_quota_notify extends cronjob {
 						$rec['used'] = round($rec['used'] / 1048576, 4).' MB';
 					}
 
-					// send notifications only if 90% or more of the quota are used
-					if($used_ratio < 0.9) {
+					// send notifications only if the mail account is over the quota threshold
+					if($used_ratio <= $mail_config['overquota_notify_threshold'] / 100) {
 						// reset notification date
 						if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('mail_user', array("last_quota_notification" => null), 'mailuser_id', $rec['mailuser_id']);
 
@@ -455,8 +455,8 @@ class cronjob_quota_notify extends cronjob {
 								if ($quota > 0) $used_ratio = $monitor['size'] / $quota;
 								else $used_ratio = 0;
 
-								//* send notifications only if 90% or more of the quota are used
-								if($used_ratio > 0.9 && $used_ratio != 0) {
+								//* send notifications only if the database is over the quota threshold
+								if($used_ratio >= $web_config['overquota_db_notify_threshold'] / 100 && $used_ratio != 0) {
 
 									//* could a notification be sent?
 									$send_notification = false;
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 6a133fa839fe3d14c6701b4d0a0fa3909376a60a..4dcb1994142065a7e8aed42036578c1a88229c29 100644
--- a/server/lib/classes/cron.d/500-backup_mail.inc.php
+++ b/server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -126,7 +126,7 @@ 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
-							$app->system->exec_safe("su -c ?", 'dsync backup -o plugin/acl= -o plugin/quota= -u "'.$rec["email"].'" mdbox:' . $this->tmp_backup_dir . '/backup');
+							$app->system->exec_safe("su -c ?", 'dsync -o plugin/acl= -o plugin/quota= backup -u "'.$rec["email"].'" mdbox:' . $this->tmp_backup_dir . '/backup');
 		
 							if($backup_mode == 'userzip') {
 								$mail_backup_file.='.zip';
diff --git a/server/lib/classes/functions.inc.php b/server/lib/classes/functions.inc.php
index 5296c3012b65cb4bf0d9889c893252e99ec9d4a8..34e5943cda865a11fd279c88dcb57785abf810a4 100644
--- a/server/lib/classes/functions.inc.php
+++ b/server/lib/classes/functions.inc.php
@@ -468,14 +468,16 @@ class functions {
 		global $app;
 
 		// generate the SSH key pair for the client
-		$id_rsa_file = '/tmp/'.uniqid('',true);
+		$app->system->exec_safe('mktemp -dt id_rsa.XXXXXXXX');
+		$tmpdir = $app->system->last_exec_out();
+		$id_rsa_file = $tmpdir . uniqid('',true);
 		$id_rsa_pub_file = $id_rsa_file.'.pub';
 		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)) {
 			$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);
-			$app->system->exec_safe('rm -f ? ?', $id_rsa_file, $id_rsa_pub_file);
+			$app->system->rmdir($tmpdir, true);
 		} else {
 			$app->log("Failed to create SSH keypair for ".$username, LOGLEVEL_WARN);
 		}
diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index aaa118fb91212511c70df216e3ad64538f96533d..e78ef2636e4aca32451fb53053d1d01edfff9442 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -74,7 +74,7 @@ class letsencrypt {
 			$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 --always-force-new-domain-key --keylength 4096; 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()) . ' --log ' . escapeshellarg($conf['ispconfig_log_dir'].'/acme.log') . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
+		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme --always-force-new-domain-key --keylength 4096; R=$? ; if [ $R -eq 0 -o $R -eq 2 ] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' ' . $cert_arg . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . ' --log ' . escapeshellarg($conf['ispconfig_log_dir'].'/acme.log') . '; C=$? ; fi ; if [ $C -eq 0 ] ; then exit $R ; else exit $C  ; fi';
 
 		return $cmd;
 	}
@@ -373,7 +373,7 @@ class letsencrypt {
 		$temp_domains = array_unique($temp_domains);
 
 		// check if domains are reachable to avoid letsencrypt verification errors
-		$le_rnd_file = uniqid('le-') . '.txt';
+		$le_rnd_file = uniqid('le-', true) . '.txt';
 		$le_rnd_hash = md5(uniqid('le-', true));
 		if(!is_dir('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/')) {
 			$app->system->mkdir('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/', false, 0755, true);
@@ -415,6 +415,10 @@ class letsencrypt {
 		if($use_acme) {
 			$letsencrypt_cmd = $this->get_acme_command($temp_domains, $key_file, $bundle_file, $crt_file, $server_type);
 			$allow_return_codes = array(2);
+			// Cleanup ssl cert symlinks, if exists
+			if(@is_link($key_file)) unlink($key_file);
+			if(@is_link($bundle_file)) unlink($bundle_file);
+			if(@is_link($crt_file)) unlink($crt_file);
 		} else {
 			$letsencrypt_cmd = $this->get_certbot_command($temp_domains);
 			umask($old_umask);
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index 42ed9146e4f12f90ab67a75028f896cca1c2d2d4..5d91bf5ace51733753749363d492f12c0b3e4279 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -261,8 +261,8 @@ class monitor_tools {
 			$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);
+			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';
@@ -276,84 +276,81 @@ class monitor_tools {
 	}
 
 
-	//** Redhat
-	elseif(file_exists('/etc/redhat-release')) {
+	//** RHEL (including compatible clones) & Fedora
+	elseif(file_exists('/etc/redhat-release') && file_exists('/etc/os-release')) {
 
-		$content = file_get_contents('/etc/redhat-release');
+		$content = file_get_contents('/etc/os-release');
 
-		if(stristr($content, 'Fedora release 9 (Sulphur)')) {
-			$distname = 'Fedora';
-			$distver = '9';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'Fedora release 10 (Cambridge)')) {
-			$distname = 'Fedora';
-			$distver = '10';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'Fedora release 10')) {
-			$distname = 'Fedora';
-			$distver = '11';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'Fedora release 32 (Thirty Two)')) {
+		preg_match('/(?<=PRETTY_NAME=\").+?(?=\")/', $content, $prettyname);
+		preg_match('/(?<=NAME=\").+?(?=\")/', $content, $name);
+		preg_match('/(?<=VERSION=\").+?(?=\")/', $content, $version);
+		preg_match('/(?<=VERSION_ID=\").+?(?=\")/', $content, $versionid);
+
+		if(stristr($prettyname[0], 'Fedora 32 (Thirty Two)')) {
 			$distname = 'Fedora';
 			$distver = '32';
 			$distid = 'fedora32';
 			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) {
+		} elseif(stristr($prettyname[0], 'Fedora 33 (Thirty Three)')) {
 			$distname = 'Fedora';
 			$distver = '33';
 			$distid = 'fedora33';
 			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS release 5.2 (Final)')) {
-			$distname = 'CentOS';
-			$distver = '5.2';
-			$distid = 'centos52';
+                //** RHEL 7 and compatible clones 
+		} elseif(preg_match('/^(?:7|7\.[0-9]{1,2})$/', $versionid[0])) {
+			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', file_get_contents('/etc/redhat-release'), $centos7_version);
+			$distname = $name[0];
+			$distver = is_array($centos7_version)? implode('.', array_filter(array($centos7_version[1][0],$centos7_version[2][0],$centos7_version[3][0]),'strlen')) : $version[0];
+			$distid = 'centos72';
 			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS release 5.3 (Final)')) {
-			$distname = 'CentOS';
-			$distver = '5.3';
-			$distid = 'centos53';
+		//** RHEL 8 and compatible clones
+		} elseif(preg_match('/^(?:8|8\.[0-9]{1,2})$/', $versionid[0])) {
+			$distname = $name[0];
+			$distver = $version[0];
+			$distid = 'centos80';
 			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS release 5')) {
-			$distname = 'CentOS';
-			$distver = 'Unknown';
-			$distid = 'centos53';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
-			$distname = 'CentOS';
-			$distver = 'Unknown';
-			$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 = 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]);
-			$var=$var[0].".".$var[1];
-			if($var=='7.0' || $var=='7.1') {
-				$distid = 'centos70';
-			} else {
-				$distid = 'centos72';
-			}
-		} elseif(stristr($content, 'CentOS Linux release 8')) {
-			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
-			$distname = 'CentOS';
-			$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]);
-			$var=$var[0].".".$var[1];
 		} else {
 			$distname = 'Redhat';
 			$distver = 'Unknown';
 			$distid = 'fedora9';
 			$distbaseid = 'fedora';
 		}
-	}
+        //** CentOS 6
+        } elseif(file_exists('/etc/redhat-release') && !file_exists('/etc/os-release') && !file_exists('/etc/els-release')) {
+
+                $content = file_get_contents('/etc/redhat-release');
+
+                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+                        preg_match_all('/(6\.?([0-9]{0,2})\.?(\s)?([a-zA-Z()]+))$/', $content, $centos6_version);
+                        $distname = 'CentOS Linux';
+                        $distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
+                        $distid = 'centos53';
+                        $distbaseid = 'fedora';
+                } else {
+                        $distname = 'Redhat';
+                        $distver = 'Unknown';
+                        $distid = 'fedora9';
+                        $distbaseid = 'fedora';
+                }
+        //** CentOS 6 Extended Lifecycle Support by CloudLinux
+        } elseif(file_exists('/etc/redhat-release') && file_exists('/etc/els-release') && !file_exists('/etc/os-release')) {
+
+                $content = file_get_contents('/etc/els-release');
+
+                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+                        preg_match_all('/(6)\.?([0-9]{0,2})?\.?\s([a-zA-Z(), ]+)?$/', $content, $centos6_version);
+                        $distname = 'CentOS Linux';
+                        $distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
+                        $distid = 'centos53';
+                        $distbaseid = 'fedora';
+                } else {
+                        $distname = 'Redhat';
+                        $distver = 'Unknown';
+                        $distid = 'fedora9';
+                        $distbaseid = 'fedora';
+                }
+        }
+
 
 	//** Gentoo
 	elseif(file_exists('/etc/gentoo-release')) {
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 37418149ae3fff0b57a7c4253d06fa90c103effd..7e4e7ae447c64bbac3c6a3049d6fafc21ed1a56b 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1707,10 +1707,7 @@ class system{
 			$out = '';
 			foreach($lines as $line) {
 				if($strict == 0 && preg_match('/^REGEX:(.*)$/', $search_pattern)) {
-					if(preg_match(substr($search_pattern, 6), $line)) {
-						$out .= $new_line."\n";
-						$found = 1;
-					} else {
+					if(!preg_match(substr($search_pattern, 6), $line)) {
 						$out .= $line;
 					}
 				} elseif($strict == 0) {
diff --git a/server/lib/compatibility.inc.php b/server/lib/compatibility.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..562e07ada42f404cae0708f32105dcf39a84768c
--- /dev/null
+++ b/server/lib/compatibility.inc.php
@@ -0,0 +1,80 @@
+<?php
+
+/*
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+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.
+*/
+
+/* random_bytes can be dropped when php 5.6 support is dropped */
+if (! function_exists('random_bytes')) {
+	function random_bytes($length) {
+		return openssl_random_pseudo_bytes($length);
+	}
+}
+
+/* random_int can be dropped when php 5.6 support is dropped */
+if (! function_exists('random_int')) {
+	function random_int($min=null, $max=null) {
+		if (null === $min) {
+			$min = PHP_INT_MIN;
+		}
+
+		if (null === $max) {
+			$min = PHP_INT_MAX;
+		}
+
+		if (!is_int($min) || !is_int($max)) {
+			trigger_error('random_int: $min and $max must be integer values', E_USER_NOTICE);
+			$min = (int)$min;
+			$max = (int)$max;
+		}
+
+		if ($min > $max) {
+			trigger_error('random_int: $max can\'t be lesser than $min', E_USER_WARNING);
+			return null;
+		}
+
+		$range = $counter = $max - $min;
+		$bits = 1;
+
+		while ($counter >>= 1) {
+			++$bits;
+		}
+
+		$bytes = (int)max(ceil($bits/8), 1);
+		$bitmask = pow(2, $bits) - 1;
+
+		if ($bitmask >= PHP_INT_MAX) {
+			$bitmask = PHP_INT_MAX;
+		}
+
+		do {
+			$result = hexdec(bin2hex(random_bytes($bytes))) & $bitmask;
+		} while ($result > $range);
+
+		return $result + $min;
+	}
+}
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index f2a121825b75464ee9af81dd935866509b59ee42..76573c0e964009e5acdb468ed9cabb68f63e49e8 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -296,16 +296,9 @@ class apache2_plugin {
 			if(file_exists($crt_file)) $app->system->rename($crt_file, $crt_file.'.bak');
 
 			$rand_file = $ssl_dir.'/random_file';
-			$rand_data = md5(uniqid(microtime(), 1));
-			for($i=0; $i<1000; $i++) {
-				$rand_data .= md5(uniqid(microtime(), 1));
-				$rand_data .= md5(uniqid(microtime(), 1));
-				$rand_data .= md5(uniqid(microtime(), 1));
-				$rand_data .= md5(uniqid(microtime(), 1));
-			}
-			$app->system->file_put_contents($rand_file, $rand_data);
+			$app->system->exec_safe('dd if=/dev/urandom of=? bs=256 count=1', $rand_file);
 
-			$ssl_password = substr(md5(uniqid(microtime(), 1)), 0, 15);
+			$ssl_password = bin2hex(random_bytes(12));
 
 			$ssl_cnf = "        RANDFILE               = $rand_file
 
@@ -724,6 +717,7 @@ class apache2_plugin {
 		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', 0770);
 		if(!is_dir($data['new']['document_root'].'/webdav')) $app->system->mkdirpath($data['new']['document_root'].'/webdav');
+		if(!is_dir($data['new']['document_root'].'/backup')) $app->system->mkdirpath($data['new']['document_root'].'/backup');
 
 		if(!is_dir($data['new']['document_root'].'/.ssh')) {
 			$app->system->mkdirpath($data['new']['document_root'].'/.ssh');
diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php
index 91a994b109555ae704339b06787609c3b0971778..6318c519ef70c5c1ef1f9c086e87d64aca98001b 100644
--- a/server/plugins-available/apps_vhost_plugin.inc.php
+++ b/server/plugins-available/apps_vhost_plugin.inc.php
@@ -214,7 +214,7 @@ class apps_vhost_plugin {
 				$content = str_replace('{ssl_comment}', '#', $content);
 				$content = preg_replace('/(\s)\{ssl_on\}/', '', $content);
 			}
-	 
+
 			$content = str_replace('{use_tcp}', $use_tcp, $content);
 			$content = str_replace('{use_socket}', $use_socket, $content);
 
@@ -227,11 +227,11 @@ class apps_vhost_plugin {
 			$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);
-			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);
+			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.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.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.0-fpm.sock')) $content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content);
 
 			// PHP-FPM
 			// Dont just copy over the php-fpm pool template but add some custom settings
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index a92165ba6d917bf32b4449d926bf180716317eec..8ba345b4c46315939be690a252485f1537997bc9 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -87,14 +87,7 @@ class backup_plugin {
 			if($backup_dir_is_ready){
 				//* Make backup available for download
 				if($action_name == 'backup_download') {
-					//* Copy the backup file to the backup folder of the website
-					if(file_exists($backup_dir.'/'.$backup['filename']) && file_exists($web['document_root'].'/backup/') && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-						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']);
-						chmod($web['document_root'].'/backup/'.$backup['filename'],0600);
-						$app->log('cp '.$backup_dir.'/'.$backup['filename'].' '.$web['document_root'].'/backup/'.$backup['filename'], LOGLEVEL_DEBUG);
-					}
+					backup::downloadBackup($backup['backup_format'], trim($backup['backup_password']), $backup_dir, $backup['filename'], $backup['backup_mode'], $backup['backup_type'], $web);
 				}
 
 				//* Restore a MongoDB backup
@@ -134,14 +127,7 @@ class backup_plugin {
 				}
 				
 				if($action_name == 'backup_delete') {
-					if(file_exists($backup_dir.'/'.$backup['filename']) && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-						unlink($backup_dir.'/'.$backup['filename']);
-						
-						$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
-						$app->db->query($sql, $conf['server_id'], $backup['parent_domain_id'], $backup['filename']);
-						if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql, $conf['server_id'], $backup['parent_domain_id'], $backup['filename']);
-						$app->log('unlink '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
-					}
+					backup::deleteBackup($backup['backup_format'], trim($backup['backup_password']), $backup_dir, $backup['filename'], $backup['backup_mode'], $backup['backup_type'], $backup['parent_domain_id']);
 				}
 
 				backup::unmount_backup_dir($conf['server_id']);
diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index 76b358237961017fa919783ef3a779943bd38509..49fd043aff42a89753e81e28196d618468b18fbe 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -328,10 +328,15 @@ class bind_plugin {
 			$filename = $dns_config['bind_zonefiles_dir'].'/' . $this->zone_file_prefix() . str_replace("/", "_", substr($zone['origin'], 0, -1));
 
 			$old_zonefile = @file_get_contents($filename);
-			file_put_contents($filename, $tpl->grab());
+			$rendered_zone = $tpl->grab();
+			file_put_contents($filename, $rendered_zone);
+
 			chown($filename, $dns_config['bind_user']);
 			chgrp($filename, $dns_config['bind_group']);
 
+			// Store also in the db for exports.
+			$app->dbmaster->query("UPDATE `dns_soa` SET `rendered_zone`=? WHERE id=?", $rendered_zone, $zone['id']);
+
 			//* Check the zonefile
 			if(is_file($filename.'.err')) unlink($filename.'.err');
 			$app->system->exec_safe('named-checkzone ? ?', $zone['origin'], $filename);
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 0e2cacaef9bfd0da4db665ef3cdc3fe68057461f..dd0ad5892146ccd414f5746117240e53adb3576a 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -129,16 +129,10 @@ class nginx_plugin {
 			if(file_exists($crt_file)) $app->system->rename($crt_file, $crt_file.'.bak');
 
 			$rand_file = $ssl_dir.'/random_file';
-			$rand_data = md5(uniqid(microtime(), 1));
-			for($i=0; $i<1000; $i++) {
-				$rand_data .= md5(uniqid(microtime(), 1));
-				$rand_data .= md5(uniqid(microtime(), 1));
-				$rand_data .= md5(uniqid(microtime(), 1));
-				$rand_data .= md5(uniqid(microtime(), 1));
-			}
-			$app->system->file_put_contents($rand_file, $rand_data);
+			$app->system->exec_safe('dd if=/dev/urandom of=? bs=256 count=1', $rand_file);
+
+			$ssl_password = bin2hex(random_bytes(12));
 
-			$ssl_password = substr(md5(uniqid(microtime(), 1)), 0, 15);
 
 			$ssl_cnf = "        RANDFILE               = $rand_file
 
@@ -567,6 +561,7 @@ class nginx_plugin {
 		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'].'/backup')) $app->system->mkdirpath($data['new']['document_root'].'/backup');
 
 		if(!is_dir($data['new']['document_root'].'/.ssh')) {
 			$app->system->mkdirpath($data['new']['document_root'].'/.ssh');
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 8cdb95066bde7cf78a085f9020c62e6dd2e13be0..be81fb62a46c64baf21a94a8d9763fa0b2afea95 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -72,6 +72,12 @@ class postfix_server_plugin {
 		global $app, $conf;
 		$postfix_restart = false;
 
+		// Plugin should only run on mail servers
+		if(! $data['new']['mail_server']) {
+			$app->log("postfix_server_plugin: plugin is enabled but this server is not configured as a mail server.", LOGLEVEL_WARN);
+			return false;
+		}
+
 		// get the config
 		$app->uses("getconf,system");
 		$old_ini_data = $app->ini_parser->parse_ini_string($data['old']['config']);
@@ -138,7 +144,7 @@ class postfix_server_plugin {
 				if ($value == '') continue;
 				if (preg_match('/^reject_rbl_client/', $value)) continue;
 				$new_options[] = $value;
-				if (preg_match('/^permit_mynetworks/', $value)) {
+				if (preg_match('/^permit_sasl_authenticated/', $value)) {
 					$new_options = array_merge($new_options, $rbl_options);
 					$rbl_options = array(); // so we don't ever array_merge twice
 				}
@@ -326,7 +332,9 @@ class postfix_server_plugin {
 			}
 		}
 
-		$quoted_postfix_config_dir = preg_quote($conf['postfix']['config_dir'], '|');
+		$config_dir = exec("postconf -h config_directory");
+		$quoted_postfix_config_dir = preg_quote($config_dir, '|');
+
 		$new_options = array();
 		$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 		foreach ($options as $key => $value) {
@@ -337,10 +345,14 @@ class postfix_server_plugin {
 			}
 			$new_options[] = $value;
 		}
-		if (defined($configure_lmtp) && $configure_lmtp && $mail_config['content_filter'] == 'amavisd') {
+		if (isset($configure_lmtp) && $configure_lmtp && $mail_config['content_filter'] == 'amavisd') {
 			for ($i = 0; isset($new_options[$i]); $i++) {
 				if ($new_options[$i] == 'reject_unlisted_recipient') {
 					array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${quoted_postfix_config_dir}/mysql-verify_recipients.cf"));
+
+					$app->system->exec_safe("postconf -e ?", 'address_verify_virtual_transport = smtp:[127.0.0.1]:10025');
+					$app->system->exec_safe("postconf -e ?", 'address_verify_transport_maps = static:smtp:[127.0.0.1]:10025');
+
 					break;
 				}
 			}
@@ -351,62 +363,64 @@ class postfix_server_plugin {
 		}
 		exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
 
-		if($mail_config['content_filter'] != $old_ini_data['mail']['content_filter']) {
-			$rslm = ($mail_config['reject_sender_login_mismatch'] == 'y') ? "reject_sender_login_mismatch," : "";
-			$raslm = ($mail_config['reject_sender_login_mismatch'] == 'y') ? "reject_authenticated_sender_login_mismatch," : "";
-
-			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'");
+		$rslm = ($mail_config['reject_sender_login_mismatch'] == 'y') ? "reject_sender_login_mismatch," : "";
+		$raslm = ($mail_config['reject_sender_login_mismatch'] == 'y') ? "reject_authenticated_sender_login_mismatch," : "";
 
-				exec("postconf -e 'smtpd_sender_restrictions = ${raslm} permit_mynetworks, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender'");
+		if($mail_config['content_filter'] == 'rspamd'){
+			exec("postconf -X 'receive_override_options'");
+			exec("postconf -X 'content_filter'");
+			exec("postconf -X address_verify_virtual_transport");
+			exec("postconf -X address_verify_transport_maps");
 
+			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'");
 
-				$new_options = array();
-				$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
-				foreach ($options as $key => $value) {
-					$value = trim($value);
-					if ($value == '') continue;
-					if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
-						continue;
-					}
-					$new_options[] = $value;
-				}
-				exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
+			exec("postconf -e 'smtpd_sender_restrictions = ${raslm} permit_mynetworks, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender'");
 
-				// 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);
+			$new_options = array();
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+			foreach ($options as $key => $value) {
+				$value = trim($value);
+				if ($value == '') continue;
+				if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
+					continue;
 				}
-				$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");
+				if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_postfix_config_dir}/mysql-verify_recipients.cf|", $value)) {
+					continue;
 				}
-				fclose($fpp);
-				fclose($fps);
-				unset($dkim_domains);
-			} else {
-				exec("postconf -X 'smtpd_milters'");
-				exec("postconf -X 'non_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 = " . ($configure_lmtp ? "lmtp" : "amavis" ) . ":[127.0.0.1]:10024'");
+				$new_options[] = $value;
+			}
+			exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
 
-				// fixme: should read this from conf templates
-				exec("postconf -e 'smtpd_sender_restrictions = ${raslm} check_sender_access regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'");
+			// 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 'non_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 = " . ($configure_lmtp ? "lmtp" : "amavis" ) . ":[127.0.0.1]:10024'");
+
+			// fixme: should read this from conf templates
+			exec("postconf -e 'smtpd_sender_restrictions = ${raslm} check_sender_access regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, 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'])) {
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index f9a316d90e195e6e35a68eceba8b67744c08a837..2fc4f0dfc7cdc0b657825dbdfe51fbb299794b53 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -168,6 +168,11 @@ class shelluser_base_plugin {
 				$app->system->chown($homedir.'/.profile', $data['new']['username']);
 				$app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']);
 
+				// Create symlinks for conveniance, SFTP user should not land in an empty dir.
+				symlink('../../web', $homedir.'/web');
+				symlink('../../log', $homedir.'/log');
+				symlink('../../private', $homedir.'/private');
+
 				//* Disable shell user temporarily if we use jailkit
 				if($data['new']['chroot'] == 'jailkit') {
 					$command = 'usermod -s /bin/false -L ? 2>/dev/null';
diff --git a/server/scripts/letsencrypt_renew_hook.sh b/server/scripts/letsencrypt_renew_hook.sh
index 63100ed6503808bd5d34c5d42ecf153197251b35..5ec9912f59d87728b83cf0fcd233b78146d2f456 100644
--- a/server/scripts/letsencrypt_renew_hook.sh
+++ b/server/scripts/letsencrypt_renew_hook.sh
@@ -36,15 +36,15 @@ if [ -d "$lelive" ]; then
     pureftpdpem=/etc/ssl/private/pure-ftpd.pem; if [ -e "$pureftpdpem" ]; then chmod 600 $pureftpdpem; fi
     # For Red Hat, Centos or derivatives
     if which yum &> /dev/null 2>&1 ; then
-        if [ rpm -q pure-ftpd ]; then service pure-ftpd restart; fi
-        if [ rpm -q monit ]; then service monit restart; fi
-        if [ rpm -q postfix ]; then service postfix restart; fi
-        if [ rpm -q dovecot ]; then service dovecot restart; fi
-        if [ rpm -q mysql-server ]; then service mysqld restart; fi
-        if [ rpm -q mariadb-server ]; then service mariadb restart; fi
-        if [ rpm -q MariaDB-server ]; then service mysql restart; fi
-        if [ rpm -q nginx ]; then service nginx restart; fi
-        if [ rpm -q httpd ]; then service httpd restart; fi
+        if ( rpm -q pure-ftpd ); then service pure-ftpd restart; fi
+        if ( rpm -q monit ); then service monit restart; fi
+        if ( rpm -q postfix ); then service postfix restart; fi
+        if ( rpm -q dovecot ); then service dovecot restart; fi
+        if ( rpm -q mysql-server ); then service mysqld restart; fi
+        if ( rpm -q mariadb-server ); then service mariadb restart; fi
+        if ( rpm -q MariaDB-server ); then service mysql restart; fi
+        if ( rpm -q nginx ); then service nginx restart; fi
+        if ( rpm -q httpd ); then service httpd restart; fi
     # For Debian, Ubuntu or derivatives
     elif apt-get -v >/dev/null 2>&1 ; then
         if [ $(dpkg-query -W -f='${Status}' pure-ftpd-mysql 2>/dev/null | grep -c "ok installed") -eq 1 ]; then service pure-ftpd-mysql restart; fi