diff --git a/.gitignore b/.gitignore
index d42aee61f4caf9d716977a21353bf598c3092220..32f43c2430e66a26c0100ade3e1685f1836d458a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 .DS_Store
 /nbproject/private/
 .phplint-cache
+*.swp
diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 4a7c9cfbfe2f831795ffd9fa33f8569f43b5b306..2d31b89bbd63bd459b1721e911e979820bcb0e60 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -63,6 +63,12 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_forwardings.cf
 		$this->process_postfix_config('mysql-virtual_forwardings.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
+
+		//* mysql-virtual_alias_maps.cf
+		$this->process_postfix_config('mysql-virtual_alias_maps.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
@@ -102,6 +108,9 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_uids.cf
 		$this->process_postfix_config('mysql-virtual_uids.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-verify_recipients.cf');
+
 		//* postfix-dkim
 		$filename='tag_as_originating.re';
 		$full_file_name=$config_dir.'/'.$filename;
@@ -115,12 +124,6 @@ class installer_dist extends installer_base {
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
 		wf($full_file_name, $content);
 
-		//* Changing mode and group of the new created config files.
-		caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
-
 		//* Creating virtual mail user and group
 		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
 		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -150,9 +153,16 @@ class installer_dist extends installer_base {
 		}
 
 		$reject_sender_login_mismatch = '';
+		$reject_authenticated_sender_login_mismatch = '';
 		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
-			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+			$reject_sender_login_mismatch = ', reject_sender_login_mismatch';
+			$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
 		}
+
+		# placeholder includes comment char
+		$stress_adaptive_placeholder = '#{stress_adaptive} ';
+		$stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder;
+
 		unset($server_ini_array);
 
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
@@ -162,6 +172,8 @@ class installer_dist extends installer_base {
 			'{rbl_list}' => $rbl_list,
 			'{greylisting}' => $greylisting,
 			'{reject_slm}' => $reject_sender_login_mismatch,
+			'{reject_aslm}' => $reject_authenticated_sender_login_mismatch,
+			$stress_adaptive_placeholder => $stress_adaptive,
 		);
 
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_postfix.conf.master', 'tpl/fedora_postfix.conf.master');
diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index a39c3463761b049708a9e0adcc8ac7908d65f4d7..342a583facb64e433a8410abf136c570f7e34df2 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -102,9 +102,16 @@ class installer extends installer_base
 		}
 
 		$reject_sender_login_mismatch = '';
+		$reject_authenticated_sender_login_mismatch = '';
 		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
-			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+			$reject_sender_login_mismatch = ', reject_sender_login_mismatch';
+			$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
 		}
+
+		# placeholder includes comment char
+		$stress_adaptive_placeholder = '#{stress_adaptive} ';
+		$stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder;
+
 		unset($server_ini_array);
 
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
@@ -114,6 +121,8 @@ class installer extends installer_base
 			'{rbl_list}' => $rbl_list,
 			'{greylisting}' => $greylisting,
 			'{reject_slm}' => $reject_sender_login_mismatch,
+			'{reject_aslm}' => $reject_authenticated_sender_login_mismatch,
+			$stress_adaptive_placeholder => $stress_adaptive,
 		);
 
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_postfix.conf.master', 'tpl/gentoo_postfix.conf.master');
@@ -338,6 +347,11 @@ class installer extends installer_base
 			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
 		}
 
+		//* Get the dovecot version
+		exec('dovecot --version', $tmp);
+		$dovecot_version = $tmp[0];
+		unset($tmp);
+
 		//* dovecot-sql.conf
 		$configfile = $config_dir.'/dovecot-sql.conf';
 		$content = $this->get_template_file('debian_dovecot-sql.conf', true, true);
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 60fb0511fd8998118a2140d2c2aca8e49128c284..07dd5cc690f36cb46d6556e1a67cd9dae38c416e 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -63,6 +63,12 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_forwardings.cf
 		$this->process_postfix_config('mysql-virtual_forwardings.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
+
+		//* mysql-virtual_alias_maps.cf
+		$this->process_postfix_config('mysql-virtual_alias_maps.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
@@ -99,6 +105,9 @@ class installer_dist extends installer_base {
 		//* mysql-virtual_uids.cf
 		$this->process_postfix_config('mysql-virtual_uids.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-verify_recipients.cf');
+
 		//* postfix-dkim
 		$filename='tag_as_originating.re';
 		$full_file_name=$config_dir.'/'.$filename;
@@ -112,12 +121,6 @@ class installer_dist extends installer_base {
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
 		wf($full_file_name, $content);
 
-		//* Changing mode and group of the new created config files.
-		caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
-
 		if(!is_dir($cf['vmail_mailbox_base'])) mkdir($cf['vmail_mailbox_base']);
 
 		//* Creating virtual mail user and group
@@ -161,9 +164,16 @@ class installer_dist extends installer_base {
 		}
 
 		$reject_sender_login_mismatch = '';
+		$reject_authenticated_sender_login_mismatch = '';
 		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
-			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+			$reject_sender_login_mismatch = ', reject_sender_login_mismatch';
+			$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
 		}
+
+		# placeholder includes comment char
+		$stress_adaptive_placeholder = '#{stress_adaptive} ';
+		$stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder;
+
 		unset($server_ini_array);
 
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
@@ -173,6 +183,8 @@ class installer_dist extends installer_base {
 			'{rbl_list}' => $rbl_list,
 			'{greylisting}' => $greylisting,
 			'{reject_slm}' => $reject_sender_login_mismatch,
+			'{reject_aslm}' => $reject_authenticated_sender_login_mismatch,
+			$stress_adaptive_placeholder => $stress_adaptive,
 		);
 
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/opensuse_postfix.conf.master', 'tpl/opensuse_postfix.conf.master');
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 81b1257db006458c4ce968415890dfb147c96b53..11163806abfc75774d41b0880a53c67b6ac6fdc4 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -737,11 +737,16 @@ class installer_base {
 		global $conf;
 
 		$config_dir = $conf['postfix']['config_dir'].'/';
+		$postfix_group = $conf['postfix']['group'];
 		$full_file_name = $config_dir.$configfile;
+
 		//* Backup exiting file
 		if(is_file($full_file_name)) {
 			copy($full_file_name, $config_dir.$configfile.'~');
+			chmod($config_dir.$configfile.'~',0600);
 		}
+
+		//* Replace variables in config file template
 		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
 		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
@@ -749,6 +754,13 @@ class installer_base {
 		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
 		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf($full_file_name, $content);
+
+		//* Changing mode and group of the new created config file
+		caselog('chmod u=rw,g=r,o= '.escapeshellarg($full_file_name).' &> /dev/null',
+			__FILE__, __LINE__, 'chmod on '.$full_file_name, 'chmod on '.$full_file_name.' failed');
+		caselog('chgrp '.escapeshellarg($postfix_group).' '.escapeshellarg($full_file_name).' &> /dev/null',
+			__FILE__, __LINE__, 'chgrp on '.$full_file_name, 'chgrp on '.$full_file_name.' failed');
+
 	}
 
 	public function configure_jailkit() {
@@ -876,8 +888,8 @@ class installer_base {
 			$postfix_service = @($out[0]=='')?false:true;
 		} else { //* fallback - Postfix < 2.9
 			$content = rf($conf['postfix']['config_dir'].'/master.cf');
-			$regex = "/^((?!#)".$service.".*".$type.".*)$/m";
-			$postfix_service = @(preg_match($regex, $content))?true:false;
+			$quoted_regex = "^((?!#)".preg_quote($service, '/').".*".preg_quote($type, '/').".*)$";
+			$postfix_service = @(preg_match("/$quoted_regex/m", $content))?true:false;
 		}
 
 		return $postfix_service;
@@ -915,10 +927,11 @@ class installer_base {
 			while ( !feof( $cf ) ) {
 				$line = fgets( $cf );
 
+				$quoted_regex = '^'.preg_quote($service, '/').'\s+'.preg_quote($type, '/');
 				if ( $reading_service ) {
 					# regex matches a new service or "empty" (whitespace) line
 					if ( preg_match( '/^([^\s#]+.*|\s*)$/', $line ) &&
-					   ! preg_match( '/^'.$service.'\s+'.$type.'/', $line ) ) {
+					   ! preg_match( "/$quoted_regex/", $line ) ) {
 						$out .= $line;
 						$reading_service = false;
 					}
@@ -926,7 +939,7 @@ class installer_base {
 					# $skipped_lines .= $line;
 
 				# regex matches definition matching service to be removed
-				} else if ( preg_match( '/^'.$service.'\s+'.$type.'/', $line ) ) {
+				} else if ( preg_match( "/$quoted_regex/", $line ) ) {
 
 					$reading_service = true;
 					# $skipped_lines .= $line;
@@ -954,12 +967,23 @@ class installer_base {
 			$this->error("The postfix configuration directory '$config_dir' does not exist.");
 		}
 
+		//* Get postfix version
+		exec('postconf -d mail_version 2>&1', $out);
+		$postfix_version = preg_replace('/.*=\s*/', '', $out[0]);
+		unset($out);
+
 		//* mysql-virtual_domains.cf
 		$this->process_postfix_config('mysql-virtual_domains.cf');
 
 		//* mysql-virtual_forwardings.cf
 		$this->process_postfix_config('mysql-virtual_forwardings.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-virtual_alias_domains.cf');
+
+		//* mysql-virtual_alias_maps.cf
+		$this->process_postfix_config('mysql-virtual_alias_maps.cf');
+
 		//* mysql-virtual_mailboxes.cf
 		$this->process_postfix_config('mysql-virtual_mailboxes.cf');
 
@@ -999,6 +1023,9 @@ class installer_base {
 		//* mysql-virtual_uids.cf
 		$this->process_postfix_config('mysql-virtual_uids.cf');
 
+		//* mysql-virtual_alias_domains.cf
+		$this->process_postfix_config('mysql-verify_recipients.cf');
+
 		// test if lmtp if available
 		$configure_lmtp = $this->get_postfix_service('lmtp','unix');
 
@@ -1021,12 +1048,6 @@ class installer_base {
 		}
 		wf($full_file_name, $content);
 
-		//* Changing mode and group of the new created config files.
-		caselog('chmod u=rw,g=r,o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
-		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
-
 		//* Creating virtual mail user and group
 		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
 		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -1056,12 +1077,28 @@ class installer_base {
 		}
 
 		$reject_sender_login_mismatch = '';
-		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
-			$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
+		$reject_authenticated_sender_login_mismatch = '';
+		if (isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
+			$reject_sender_login_mismatch = ',reject_sender_login_mismatch,';
+			$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
+		}
+
+		# placeholder includes comment char
+		$stress_adaptive_placeholder = '#{stress_adaptive}';
+		$stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder;
+
+		$reject_unknown_client_hostname='';
+		if (isset($server_ini_array['mail']['reject_unknown']) && ($server_ini_array['mail']['reject_unknown'] == 'client' || $server_ini_array['mail']['reject_unknown'] == 'client_helo')) {
+			$reject_unknown_client_hostname=',reject_unknown_client_hostname';
 		}
+		$reject_unknown_helo_hostname='';
+		if ((!isset($server_ini_array['mail']['reject_unknown'])) || $server_ini_array['mail']['reject_unknown'] == 'helo' || $server_ini_array['mail']['reject_unknown'] == 'client_helo') {
+			$reject_unknown_helo_hostname=',reject_unknown_helo_hostname';
+		}
+
 		unset($server_ini_array);
 
-		$tmp = str_replace('.','\.',$conf['hostname']);
+		$myhostname = str_replace('.','\.',$conf['hostname']);
 
 		$postconf_placeholders = array('{config_dir}' => $config_dir,
 			'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
@@ -1070,13 +1107,43 @@ class installer_base {
 			'{rbl_list}' => $rbl_list,
 			'{greylisting}' => $greylisting,
 			'{reject_slm}' => $reject_sender_login_mismatch,
-			'{myhostname}' => $tmp,
+			'{reject_aslm}' => $reject_authenticated_sender_login_mismatch,
+			'{myhostname}' => $myhostname,
+			$stress_adaptive_placeholder => $stress_adaptive,
+			'{reject_unknown_client_hostname}' => $reject_unknown_client_hostname,
+			'{reject_unknown_helo_hostname}' => $reject_unknown_helo_hostname,
 		);
 
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_postfix.conf.master', 'tpl/debian_postfix.conf.master');
 		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
 		$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
 
+		//* Merge version-specific postfix config
+		if(version_compare($postfix_version , '2.5', '>=')) {
+		    $configfile = 'postfix_2-5.conf';
+		    $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		    $content = strtr($content, $postconf_placeholders);
+		    $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+		if(version_compare($postfix_version , '2.10', '>=')) {
+		    $configfile = 'postfix_2-10.conf';
+		    $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		    $content = strtr($content, $postconf_placeholders);
+		    $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+		if(version_compare($postfix_version , '3.0', '>=')) {
+		    $configfile = 'postfix_3-0.conf';
+		    $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		    $content = strtr($content, $postconf_placeholders);
+		    $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+		if(version_compare($postfix_version , '3.3', '>=')) {
+		    $configfile = 'postfix_3-3.conf';
+		    $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		    $content = strtr($content, $postconf_placeholders);
+		    $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+
 		//* These postconf commands will be executed on installation only
 		if($this->is_update == false) {
 			$postconf_commands = array_merge($postconf_commands, array(
@@ -1151,13 +1218,13 @@ class installer_base {
 		if(is_file('/var/run/courier/authdaemon/')) caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
 
 		//* Check maildrop service in posfix master.cf
-		$regex = "/^maildrop   unix.*pipe flags=DRhu user=vmail argv=\\/usr\\/bin\\/maildrop -d ".$cf['vmail_username']." \\$\{extension} \\$\{recipient} \\$\{user} \\$\{nexthop} \\$\{sender}/";
+		$quoted_regex = '^maildrop   unix.*pipe flags=DRhu user=vmail '.preg_quote('argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}', '/');
 		$configfile = $config_dir.'/master.cf';
 		if($this->get_postfix_service('maildrop', 'unix')) {
 			exec ("postconf -M maildrop.unix 2> /dev/null", $out, $ret);
-			$change_maildrop_flags = @(preg_match($regex, $out[0]) && $out[0] !='')?false:true;
+			$change_maildrop_flags = @(preg_match("/$quoted_regex/", $out[0]) && $out[0] !='')?false:true;
 		} else {
-			$change_maildrop_flags = @(preg_match($regex, $configfile))?false:true;
+			$change_maildrop_flags = @(preg_match("/$quoted_regex/", $configfile))?false:true;
 		}
 		if ($change_maildrop_flags) {
 			//* Change maildrop service in posfix master.cf
@@ -1337,6 +1404,9 @@ class installer_base {
 		}
 
 		$config_dir = $conf['postfix']['config_dir'];
+		$quoted_config_dir = preg_quote($config_dir, '/');
+		$postfix_version = `postconf -d mail_version 2>/dev/null`;
+		$postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version );
 
 		//* Configure master.cf and add a line for deliver
 		if(!$this->get_postfix_service('dovecot', 'unix')) {
@@ -1348,7 +1418,7 @@ class installer_base {
 				chmod($config_dir.'/master.cf~2', 0400);
 			}
 			//* Configure master.cf and add a line for deliver
-			$content = rf($conf["postfix"]["config_dir"].'/master.cf');
+			$content = rf($config_dir.'/master.cf');
 			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
 			af($config_dir.'/master.cf', $deliver_content);
 			unset($content);
@@ -1365,7 +1435,31 @@ class installer_base {
 		);
 
 		// Make a backup copy of the main.cf file
-		copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~3');
+		copy($config_dir.'/main.cf', $config_dir.'/main.cf~3');
+
+		$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:${quoted_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);
 
 		// Executing the postconf commands
 		foreach($postconf_commands as $cmd) {
@@ -1603,14 +1697,43 @@ class installer_base {
 			exec("postconf -e 'milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}'");
 			exec("postconf -e 'milter_default_action = accept'");
 
-			exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
-
+			if(! isset($mail_config['reject_sender_login_mismatch'])) {
+				$mail_config['reject_sender_login_mismatch'] = 'n';
+			}
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_sender_restrictions"));
 			$new_options = array();
+			foreach ($options as $key => $value) {
+				$value = trim($value);
+				if ($value == '') continue;
+				if (preg_match('/tag_as_(originating|foreign)\.re/', $value)) {
+					continue;
+				}
+				if (preg_match('/reject_(authenticated_)?sender_login_mismatch/', $value)) {
+					continue;
+				}
+				$new_options[] = $value;
+			}
+			if ($mail_config['reject_sender_login_mismatch'] == 'y') {
+				array_splice($new_options, 0, 0, array('reject_authenticated_sender_login_mismatch'));
+
+				for ($i = 0; isset($new_options[$i]); $i++) {
+					if ($new_options[$i] == 'permit_mynetworks') {
+						array_splice($new_options, $i+1, 0, array('reject_sender_login_mismatch'));
+						break;
+					}
+				}
+			}
+			exec("postconf -e 'smtpd_sender_restrictions = ".implode(", ", $new_options)."'");
+
 			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+			$new_options = array();
 			foreach ($options as $value) {
-				if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
-					$new_options[] = $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)."'");
 
@@ -1766,7 +1889,12 @@ class installer_base {
 
 		$tpl = new tpl();
 		$tpl->newTemplate('rspamd_worker-controller.inc.master');
-		$tpl->setVar('rspamd_password', $mail_config['rspamd_password']);
+		$rspamd_password = $mail_config['rspamd_password'];
+		$crypted_password = trim(exec('rspamadm pw -p ' . escapeshellarg($rspamd_password)));
+		if($crypted_password) {
+			$rspamd_password = $crypted_password;
+		}
+		$tpl->setVar('rspamd_password', $rspamd_password);
 		wf('/etc/rspamd/local.d/worker-controller.inc', $tpl->grab());
 		chmod('/etc/rspamd/local.d/worker-controller.inc', 0644);
 	}
@@ -2375,6 +2503,16 @@ class installer_base {
 			$tpl->setVar('apps_vhost_dir',$conf['web']['website_basedir'].'/apps');
 			$tpl->setVar('apps_vhost_basedir',$conf['web']['website_basedir']);
 			$tpl->setVar('apps_vhost_servername',$apps_vhost_servername);
+			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
+				$tpl->setVar('ssl_comment','');
+			} else {
+				$tpl->setVar('ssl_comment','#');
+			}
+			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key') && is_file($install_dir.'/interface/ssl/ispserver.bundle')) {
+				$tpl->setVar('ssl_bundle_comment','');
+			} else {
+				$tpl->setVar('ssl_bundle_comment','#');
+			}
 			$tpl->setVar('apache_version',getapacheversion());
 			if($this->is_update == true) {
 				$tpl->setVar('logging',get_logging_state());
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 1b4b2c0f4f8934756a7173a93c4da32b81f8155e..f6bd9982f798916b7a214dd7b878995730ac41a8 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -45,6 +45,34 @@ ALTER TABLE `web_domain` DROP COLUMN `enable_spdy`;
 -- was missing in incremental, inserted for fixing older installations
 ALTER TABLE `web_domain` ADD `folder_directive_snippets` TEXT NULL AFTER `https_port`;
 
+
+ALTER TABLE `web_domain` ADD `server_php_id` INT(11) UNSIGNED NOT NULL DEFAULT 0;
+
+UPDATE `web_domain` as w LEFT JOIN sys_group as g ON (g.groupid = w.sys_groupid) INNER JOIN `server_php` as p ON (w.fastcgi_php_version = CONCAT(p.name, ':', p.php_fastcgi_binary, ':', p.php_fastcgi_ini_dir) AND p.server_id IN (0, w.server_id) AND p.client_id IN (0, g.client_id)) SET w.server_php_id = p.server_php_id, w.fastcgi_php_version = '' WHERE 1;
+
+UPDATE `web_domain` as w LEFT JOIN sys_group as g ON (g.groupid = w.sys_groupid) INNER JOIN `server_php` as p ON (w.fastcgi_php_version = CONCAT(p.name, ':', p.php_fpm_init_script, ':', p.php_fpm_ini_dir, ':', p.php_fpm_pool_dir) AND p.server_id IN (0, w.server_id) AND p.client_id IN (0, g.client_id)) SET w.server_php_id = p.server_php_id, w.fastcgi_php_version = '' WHERE 1;
+
+-- we have to decide whether to delete the column or leave it there for investigating not-converted entries
+-- ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`;
+
+ALTER TABLE `web_domain` CHANGE `apache_directives` `apache_directives` mediumtext NULL DEFAULT NULL;
+ALTER TABLE `web_domain` CHANGE `nginx_directives` `nginx_directives` mediumtext NULL DEFAULT NULL;
+
+-- add move to junk before/after option, default to after
+ALTER TABLE `mail_user` MODIFY `move_junk` enum('y','a','n') NOT NULL DEFAULT 'y';
+
+-- Change id_rsa column to TEXT format
+ALTER TABLE `client` CHANGE `id_rsa` `id_rsa` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
+
+ALTER TABLE `directive_snippets` ADD `update_sites` ENUM('y','n') NOT NULL DEFAULT 'n' ;
+
+-- Add DNSSEC Algorithm setting
+ALTER TABLE `dns_soa` ADD `dnssec_algo` SET('NSEC3RSASHA1','ECDSAP256SHA256') NULL DEFAULT NULL AFTER `dnssec_wanted`;
+UPDATE `dns_soa` SET `dnssec_algo` = 'NSEC3RSASHA1' WHERE `dnssec_algo` IS NULL AND dnssec_initialized = 'Y';
+UPDATE `dns_soa` SET `dnssec_algo` = 'ECDSAP256SHA256' WHERE `dnssec_algo` IS NULL AND dnssec_initialized = 'N';
+ALTER TABLE `dns_soa` CHANGE `dnssec_algo` `dnssec_algo` SET('NSEC3RSASHA1','ECDSAP256SHA256') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'ECDSAP256SHA256';
+
 -- Fix issue #5635
 ALTER TABLE `client_template` CHANGE `ssh_chroot` `ssh_chroot` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
 ALTER TABLE `client_template` CHANGE `web_php_options` `web_php_options` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';
+
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 05b5c93841d5c9d881e11c9357b56c2ee1825406..095a2d37de445c0fbeec796055d3fb685355fb64 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -253,7 +253,7 @@ CREATE TABLE `client` (
   `canceled` enum('n','y') NOT NULL DEFAULT 'n',
   `can_use_api` enum('n','y') NOT NULL DEFAULT 'n',
   `tmp_data` mediumblob,
-  `id_rsa` varchar(2000) NOT NULL DEFAULT '',
+  `id_rsa` text NOT NULL DEFAULT '',
   `ssh_rsa` varchar(600) NOT NULL DEFAULT '',
   `customer_no_template` varchar(255) DEFAULT 'R[CLIENTID]C[CUSTOMER_NO]',
   `customer_no_start` int(11) NOT NULL DEFAULT '1',
@@ -470,6 +470,7 @@ CREATE TABLE IF NOT EXISTS `directive_snippets` (
   `required_php_snippets` varchar(255) NOT NULL DEFAULT '',
   `active` enum('n','y') NOT NULL DEFAULT 'y',
   `master_directive_snippets_id` int(11) unsigned NOT NULL DEFAULT '0',
+  `update_sites` ENUM('y','n') NOT NULL DEFAULT 'n',
   PRIMARY KEY (`directive_snippets_id`)
 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
@@ -625,6 +626,7 @@ CREATE TABLE `dns_soa` (
   `update_acl` varchar(255) default NULL,
   `dnssec_initialized` ENUM('Y','N') NOT NULL DEFAULT 'N',
   `dnssec_wanted` ENUM('Y','N') NOT NULL DEFAULT 'N',
+  `dnssec_algo` SET('NSEC3RSASHA1','ECDSAP256SHA256') NOT NULL DEFAULT 'ECDSAP256SHA256',
   `dnssec_last_signed` BIGINT NOT NULL DEFAULT '0',
   `dnssec_info` TEXT NULL,
   PRIMARY KEY  (`id`),
@@ -1046,7 +1048,7 @@ CREATE TABLE `mail_user` (
   `autoresponder_end_date` datetime NULL default NULL,
   `autoresponder_subject` varchar(255) NOT NULL default 'Out of office reply',
   `autoresponder_text` mediumtext NULL,
-  `move_junk` enum('n','y') NOT NULL default 'n',
+  `move_junk` enum('y','a','n') NOT NULL default 'y',
   `purge_trash_days` INT NOT NULL DEFAULT '0',
   `purge_junk_days` INT NOT NULL DEFAULT '0',
   `custom_mailfilter` mediumtext,
@@ -2046,8 +2048,8 @@ CREATE TABLE `web_domain` (
   `stats_password` varchar(255) default NULL,
   `stats_type` varchar(255) default 'awstats',
   `allow_override` varchar(255) NOT NULL default 'All',
-  `apache_directives` mediumtext,
-  `nginx_directives` mediumtext,
+  `apache_directives` mediumtext NULL DEFAULT NULL,
+  `nginx_directives` mediumtext NULL DEFAULT NULL,
   `php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'y',
   `php_fpm_chroot` enum('n','y') NOT NULL DEFAULT 'n',
   `pm` enum('static','dynamic','ondemand') NOT NULL DEFAULT 'ondemand',
@@ -2068,7 +2070,6 @@ CREATE TABLE `web_domain` (
   `backup_excludes` mediumtext,
   `active` enum('n','y') NOT NULL default 'y',
   `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
-  `fastcgi_php_version` varchar(255) DEFAULT NULL,
   `proxy_directives` mediumtext,
   `last_quota_notification` date NULL default NULL,
   `rewrite_rules` mediumtext,
@@ -2081,6 +2082,7 @@ CREATE TABLE `web_domain` (
   `folder_directive_snippets` text,
   `log_retention` int(11) NOT NULL DEFAULT '10',
   `proxy_protocol` enum('n','y') NOT NULL default 'n',
+  `server_php_id` INT(11) UNSIGNED NOT NULL DEFAULT 0,
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -2499,7 +2501,7 @@ INSERT INTO `country` (`iso`, `name`, `printable_name`, `iso3`, `numcode`, `eu`)
 -- Dumping data for table `dns_template`
 --
 
-INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM,DNSSEC', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=3600\nttl=3600\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\nTXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600', 'y');
+INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM,DNSSEC', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=3600\nttl=3600\ndnssec_algo=ECDSAP256SHA256\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\nTXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600', 'y');
 
 
 -- --------------------------------------------------------
diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index 14f0f10da275e560cdeb51e3b10472dedf146dd7..f65f47df90cf5df9868aecd50cb1d2a593f3fade 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -1,4 +1,3 @@
-
 ######################################################
 # This virtual host contains the configuration
 # for the ISPConfig apps vhost
@@ -15,6 +14,56 @@
     SetHandler None
   </FilesMatch>
 
+  # SSL Configuration
+  <tmpl_var name="ssl_comment">SSLEngine On
+  <tmpl_if name='apache_version' op='>=' value='2.3.16' format='version'>
+  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv3 -TLSv1 -TLSv1.1
+  <tmpl_else>
+  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv2 -SSLv3
+  </tmpl_if>
+  <tmpl_var name="ssl_comment">SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt
+  <tmpl_var name="ssl_comment">SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
+  <tmpl_var name="ssl_bundle_comment">SSLCACertificateFile /usr/local/ispconfig/interface/ssl/ispserver.bundle
+
+  <tmpl_var name="ssl_comment">SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+  <tmpl_var name="ssl_comment">SSLHonorCipherOrder On
+  <tmpl_if name='apache_version' op='>=' value='2.4.3' format='version'>
+  <tmpl_var name="ssl_comment">SSLCompression Off
+  </tmpl_if>
+  <tmpl_if name='apache_version' op='>=' value='2.4.11' format='version'>
+  <tmpl_var name="ssl_comment">SSLSessionTickets Off
+  </tmpl_if>
+
+  <IfModule mod_headers.c>
+    # ISPConfig 3.1 currently requires unsafe-line for both scripts and styles, as well as unsafe-eval
+    Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'"
+    <tmpl_var name="ssl_comment">Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'; upgrade-insecure-requests"
+    Header set X-Content-Type-Options: nosniff
+    Header set X-Frame-Options: SAMEORIGIN
+    Header set X-XSS-Protection: "1; mode=block"
+    Header always edit Set-Cookie (.*) "$1; HTTPOnly"
+    <tmpl_var name="ssl_comment">Header always edit Set-Cookie (.*) "$1; Secure"
+    <IfVersion >= 2.4.7>
+        Header setifempty Strict-Transport-Security "max-age=15768000"
+    </IfVersion>
+    <IfVersion < 2.4.7>
+        Header set Strict-Transport-Security "max-age=15768000"
+    </IfVersion>
+    RequestHeader unset Proxy early
+  </IfModule>
+
+  <tmpl_if name='apache_version' op='>=' value='2.3.3' format='version'>
+  <tmpl_var name="ssl_comment">SSLUseStapling On
+  <tmpl_var name="ssl_comment">SSLStaplingResponderTimeout 5
+  <tmpl_var name="ssl_comment">SSLStaplingReturnResponderErrors Off
+  </tmpl_if>
+
+<tmpl_if name='apache_version' op='>=' value='2.3.3' format='version'>
+<IfModule mod_ssl.c>
+  <tmpl_var name="ssl_comment">SSLStaplingCache shmcb:/var/run/ocsp(128000)
+</IfModule>
+</tmpl_if>
+
   <IfModule mod_headers.c>
 	RequestHeader unset Proxy early
   </IfModule>
diff --git a/install/tpl/apache_ispconfig.conf.master b/install/tpl/apache_ispconfig.conf.master
index 84eec5c5540c9b2f3f4c4ef159417cc96ff55cfb..ff744741ff2a7f67953e70c3f4b0350f00fb2911 100644
--- a/install/tpl/apache_ispconfig.conf.master
+++ b/install/tpl/apache_ispconfig.conf.master
@@ -35,6 +35,10 @@ CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m
 	</tmpl_if>
 </Directory>
 
+<Directory /var/www>
+  Options -Indexes
+</Directory>
+
 <Directory /var/www/conf>
     AllowOverride None
 	<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
diff --git a/install/tpl/apache_ispconfig.vhost.master b/install/tpl/apache_ispconfig.vhost.master
index 61e9a588593756e8671c1062ae7dd89eb71ffb51..f90876170bbd6da883fb5fc9dee83a6ffb9b9096 100644
--- a/install/tpl/apache_ispconfig.vhost.master
+++ b/install/tpl/apache_ispconfig.vhost.master
@@ -70,7 +70,7 @@ NameVirtualHost *:<tmpl_var name="vhost_port">
   # SSL Configuration
   <tmpl_var name="ssl_comment">SSLEngine On
   <tmpl_if name='apache_version' op='>=' value='2.3.16' format='version'>
-  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv3
+  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv3 -TLSv1 -TLSv1.1
   <tmpl_else>
   <tmpl_var name="ssl_comment">SSLProtocol All -SSLv2 -SSLv3
   </tmpl_if>
@@ -78,7 +78,7 @@ NameVirtualHost *:<tmpl_var name="vhost_port">
   <tmpl_var name="ssl_comment">SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
   <tmpl_var name="ssl_bundle_comment">SSLCACertificateFile /usr/local/ispconfig/interface/ssl/ispserver.bundle
 
-  <tmpl_var name="ssl_comment">SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
+  <tmpl_var name="ssl_comment">SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
   <tmpl_var name="ssl_comment">SSLHonorCipherOrder On
   <tmpl_if name='apache_version' op='>=' value='2.4.3' format='version'>
   <tmpl_var name="ssl_comment">SSLCompression Off
diff --git a/install/tpl/debian6_dovecot.conf.master b/install/tpl/debian6_dovecot.conf.master
index a112712690d663db76537911af3f9e04e9ced29e..f1df2e241e855df746a3b4d7eea5498c8bdf6ba9 100644
--- a/install/tpl/debian6_dovecot.conf.master
+++ b/install/tpl/debian6_dovecot.conf.master
@@ -60,6 +60,7 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
   sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master
index a1810ab509b91974bacec775f03b80dbc6ee719f..1080eeb5599706a7c1361def9500c621e6808480 100644
--- a/install/tpl/debian6_dovecot2.conf.master
+++ b/install/tpl/debian6_dovecot2.conf.master
@@ -7,8 +7,10 @@ mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
 ssl_dh = </etc/dovecot/dh.pem
-ssl_protocols = !SSLv2 !SSLv3
-ssl_min_protocol = TLSv1
+ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1
+ssl_min_protocol = TLSv1.2
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+ssl_prefer_server_ciphers = no
 auth_verbose = yes
 mail_max_userip_connections = 100
 mail_plugins = quota
@@ -29,6 +31,7 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
   sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
diff --git a/install/tpl/debian_dovecot.conf.master b/install/tpl/debian_dovecot.conf.master
index f91959a1f5fd3958cef2ebbc24fbdf7478f4fe7c..4109498cea9214adfd036449df92f876efa1a778 100644
--- a/install/tpl/debian_dovecot.conf.master
+++ b/install/tpl/debian_dovecot.conf.master
@@ -1145,6 +1145,7 @@ plugin {
   # and they're not deleted automatically (use a cronjob or something).
   #lazy_expunge = .EXPUNGED/ .DELETED/ .DELETED/.EXPUNGED/
 
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
   sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master
index 88d6a1b9248fb07d04984a667644b7552d0d16ae..60a1263e48e3d3e218c8ab9cf7f957a1ffca6fa7 100644
--- a/install/tpl/debian_dovecot2.conf.master
+++ b/install/tpl/debian_dovecot2.conf.master
@@ -7,7 +7,9 @@ mail_privileged_group = vmail
 postmaster_address = postmaster@example.com
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
-ssl_protocols = !SSLv2 !SSLv3
+ssl_min_protocol = TLSv1.2
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+ssl_prefer_server_ciphers = no
 auth_verbose = yes
 mail_max_userip_connections = 100
 mail_plugins = $mail_plugins quota
@@ -28,6 +30,7 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
   sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index 1c739a5c7ebd9fcf01d81c6f74c962f2129aab34..07128357e4d5441addb8757927e869e6af51be47 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -1,12 +1,12 @@
 alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
-virtual_alias_domains =
-virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
-virtual_uid_maps = mysql:/etc/postfix/mysql-virtual_uids.cf
-virtual_gid_maps = mysql:/etc/postfix/mysql-virtual_gids.cf
+virtual_uid_maps = proxy:mysql:/etc/postfix/mysql-virtual_uids.cf
+virtual_gid_maps = proxy:mysql:/etc/postfix/mysql-virtual_gids.cf
 sender_bcc_maps = proxy:mysql:{config_dir}/mysql-virtual_outgoing_bcc.cf
 inet_protocols=all
 inet_interfaces = all
@@ -14,21 +14,23 @@ smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
-greylisting = check_policy_service inet:127.0.0.1:10023 
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+greylisting = check_policy_service inet:127.0.0.1:10023
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
 smtpd_tls_key_file = {config_dir}/smtpd.key
 transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf
-relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
-relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
+relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
+relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
 smtpd_helo_required = yes
-smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
-smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
-smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
+smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
+smtpd_sender_restrictions =  {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf
+smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks{rbl_list}, permit_sasl_authenticated, reject_unauth_pipelining {reject_unknown_client_hostname}, permit
+smtpd_etrn_restrictions = permit_mynetworks, reject
+smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit
 smtpd_client_message_rate_limit = 100
 maildrop_destination_concurrency_limit = 1
 maildrop_destination_recipient_limit   = 1
@@ -39,8 +41,13 @@ nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
 owner_request_special = no
 smtp_tls_security_level = may
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2,!SSLv3
-smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtpd_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+smtpd_tls_mandatory_ciphers = medium
+tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+tls_preempt_cipherlist = no
+# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
+enable_original_recipient = yes
diff --git a/install/tpl/fedora_dovecot.conf.master b/install/tpl/fedora_dovecot.conf.master
index e6879549864e944d94620856be7e12e266ed0381..0bd4f7ca6d8b5dd9be6dbc10ebe5cdb6a2a89f6f 100644
--- a/install/tpl/fedora_dovecot.conf.master
+++ b/install/tpl/fedora_dovecot.conf.master
@@ -1306,6 +1306,7 @@ plugin {
   # ManageSieve this is where the uploaded scripts are stored.
   sieve_dir=~/sieve
 
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
   sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master
index 9ec150ce493d6ccc1ca4d771a13ecc77a9b70ccd..4b9bb5c6a9cc1bc142bd45468af930758b598444 100644
--- a/install/tpl/fedora_dovecot2.conf.master
+++ b/install/tpl/fedora_dovecot2.conf.master
@@ -6,7 +6,9 @@ log_timestamp = "%Y-%m-%d %H:%M:%S "
 mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
-ssl_protocols = !SSLv2 !SSLv3
+ssl_min_protocol = TLSv1.2
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+ssl_prefer_server_ciphers = no
 auth_verbose = yes
 mail_plugins = quota
 passdb {
@@ -26,6 +28,7 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
   sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index d504c6ed56db5da9ad23cfe6d4beb05477854bc6..a580f6a04268fdb9698e00270e6666399bdbd495 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -1,30 +1,32 @@
-virtual_alias_domains =
-virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
-virtual_uid_maps = mysql:/etc/postfix/mysql-virtual_uids.cf
-virtual_gid_maps = mysql:/etc/postfix/mysql-virtual_gids.cf
+virtual_uid_maps = proxy:mysql:/etc/postfix/mysql-virtual_uids.cf
+virtual_gid_maps = proxy:mysql:/etc/postfix/mysql-virtual_gids.cf
 sender_bcc_maps = proxy:mysql:{config_dir}/mysql-virtual_outgoing_bcc.cf
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
 smtpd_tls_key_file = {config_dir}/smtpd.key
 transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf
-relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
-relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
+relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
+relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
 smtpd_helo_required = yes
-smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
-smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
-smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
+smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
+smtpd_sender_restrictions =  {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf
+smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks{rbl_list}, permit_sasl_authenticated, reject_unauth_pipelining {reject_unknown_client_hostname}, permit
+smtpd_etrn_restrictions = permit_mynetworks, reject
+smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit
 smtpd_client_message_rate_limit = 100
 maildrop_destination_concurrency_limit = 1
 maildrop_destination_recipient_limit   = 1
@@ -35,8 +37,13 @@ nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
 inet_interfaces = all
 smtp_tls_security_level = may
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2,!SSLv3
-smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtpd_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+smtpd_tls_mandatory_ciphers = medium
+tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+tls_preempt_cipherlist = no
+# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
+enable_original_recipient = yes
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index cad2b97c3cf0d2a17846fcd2fc543fa2b01915f5..d0ed3d69f78e749a0d92656e770d6c5a5f43d3ee 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -1,29 +1,31 @@
-virtual_alias_domains =
-virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
-virtual_uid_maps = mysql:/etc/postfix/mysql-virtual_uids.cf
-virtual_gid_maps = mysql:/etc/postfix/mysql-virtual_gids.cf
+virtual_uid_maps = proxy:mysql:/etc/postfix/mysql-virtual_uids.cf
+virtual_gid_maps = proxy:mysql:/etc/postfix/mysql-virtual_gids.cf
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
 smtpd_tls_key_file = {config_dir}/smtpd.key
 transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf
-relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
-relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
+relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
+relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
 smtpd_helo_required = yes
-smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
-smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
-smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
+smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
+smtpd_sender_restrictions =  {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf
+smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks{rbl_list}, permit_sasl_authenticated, reject_unauth_pipelining {reject_unknown_client_hostname}, permit
+smtpd_etrn_restrictions = permit_mynetworks, reject
+smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit
 smtpd_client_message_rate_limit = 100
 maildrop_destination_concurrency_limit = 1
 maildrop_destination_recipient_limit   = 1
@@ -34,8 +36,13 @@ nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
 inet_interfaces = all
 smtp_tls_security_level = may
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2,!SSLv3
-smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtpd_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+smtpd_tls_mandatory_ciphers = medium
+tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+tls_preempt_cipherlist = no
+# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
+enable_original_recipient = yes
diff --git a/install/tpl/mysql-verify_recipients.cf.master b/install/tpl/mysql-verify_recipients.cf.master
new file mode 100644
index 0000000000000000000000000000000000000000..2b433491d8e3d9817d20f2d6d9674200410ade96
--- /dev/null
+++ b/install/tpl/mysql-verify_recipients.cf.master
@@ -0,0 +1,5 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
+query = SELECT 'reject_unverified_recipient' FROM mail_domain WHERE domain = '%s' AND active = 'y' AND server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_alias_domains.cf.master b/install/tpl/mysql-virtual_alias_domains.cf.master
new file mode 100644
index 0000000000000000000000000000000000000000..26b14ac00da538ba9253fe937cb6a4f79bec5942
--- /dev/null
+++ b/install/tpl/mysql-virtual_alias_domains.cf.master
@@ -0,0 +1,7 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
+query = SELECT SUBSTRING_INDEX(destination, '@', -1) FROM mail_forwarding
+         WHERE source = '@%s' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id}
+
diff --git a/install/tpl/mysql-virtual_alias_maps.cf.master b/install/tpl/mysql-virtual_alias_maps.cf.master
new file mode 100644
index 0000000000000000000000000000000000000000..e55fd8ea8df088457ba43a01c8df62a33e888b6f
--- /dev/null
+++ b/install/tpl/mysql-virtual_alias_maps.cf.master
@@ -0,0 +1,6 @@
+user = {mysql_server_ispconfig_user}
+password = {mysql_server_ispconfig_password}
+dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
+query = SELECT destination FROM mail_forwarding
+         WHERE source = '@%d' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_client.cf.master b/install/tpl/mysql-virtual_client.cf.master
index bad0cb9655db1fcb2924438f51b073de7b61f6db..106b647e4ae6aca74a46ecf3ca4a2cce29ff0995 100644
--- a/install/tpl/mysql-virtual_client.cf.master
+++ b/install/tpl/mysql-virtual_client.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table        = mail_access
-select_field = access
-where_field  = source
-additional_conditions = and type = 'client' and active = 'y'
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select access from mail_access where source = '%s' and type = 'client' and active = 'y'
diff --git a/install/tpl/mysql-virtual_domains.cf.master b/install/tpl/mysql-virtual_domains.cf.master
index 5b711422f257b4eeb9b0ea998a11346aa4c4330e..11ccb046ef0a37a9bd2a3f33437a5efbe4e7b428 100644
--- a/install/tpl/mysql-virtual_domains.cf.master
+++ b/install/tpl/mysql-virtual_domains.cf.master
@@ -1,8 +1,6 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_domain
-select_field = domain
-where_field = domain
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = SELECT domain FROM mail_domain WHERE domain = '%s' AND active = 'y' AND server_id = {server_id}
+           AND NOT EXISTS (SELECT source FROM mail_forwarding WHERE source = '@%s' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id})
diff --git a/install/tpl/mysql-virtual_email2email.cf.master b/install/tpl/mysql-virtual_email2email.cf.master
index e18ef2407e80040c1f0e7875753902c1de61f342..17e1cdf0bf93c91370183d62947d277b54e02015 100644
--- a/install/tpl/mysql-virtual_email2email.cf.master
+++ b/install/tpl/mysql-virtual_email2email.cf.master
@@ -1,8 +1,7 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = email
-where_field = email
-additional_conditions = and postfix = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = SELECT email FROM mail_user WHERE email = '%s' AND postfix = 'y' AND disabledeliver = 'n' AND server_id = {server_id}
+        UNION
+        SELECT cc AS email FROM mail_user WHERE email = '%s' AND postfix = 'y' AND disabledeliver = 'y' AND server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_forwardings.cf.master b/install/tpl/mysql-virtual_forwardings.cf.master
index e39b129f509714e523aada079519e9a662e06ce8..9ab6f3e860fa06ac2f987343f17f2c43115f36bd 100644
--- a/install/tpl/mysql-virtual_forwardings.cf.master
+++ b/install/tpl/mysql-virtual_forwardings.cf.master
@@ -2,4 +2,10 @@ user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
 hosts = {mysql_server_ip}
-query = SELECT u.email as target FROM mail_forwarding as s INNER JOIN mail_user as u ON (u.email = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1))) WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND u.disabledeliver = 'n' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s WHERE s.source = '%s' AND s.type IN ('alias', 'forward') and s.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s INNER JOIN mail_forwarding as f ON (f.source = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1))) WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND f.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s WHERE s.source = '@%d' AND s.type IN ('catchall') and s.active = 'y' AND s.server_id = {server_id} UNION SELECT s.destination as target FROM mail_forwarding as s INNER JOIN mail_forwarding as t ON (t.source = s.destination AND t.type = 'catchall') WHERE s.source = '@%d' AND s.type = 'aliasdomain' and s.active = 'y' AND t.active = 'y' AND s.server_id = {server_id}
+query = SELECT s.destination AS target FROM mail_forwarding AS s
+            WHERE s.source = '%s' AND s.type IN ('alias', 'forward') AND s.active = 'y' AND s.server_id = {server_id}
+        UNION
+        SELECT s.destination AS target FROM mail_forwarding AS s
+            WHERE s.source = '@%d' AND s.type = 'catchall' AND s.active = 'y' AND s.server_id = {server_id}
+            AND NOT EXISTS (SELECT email FROM mail_user WHERE email = '%s' AND server_id = {server_id})
+            AND NOT EXISTS (SELECT source FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND server_id = {server_id})
diff --git a/install/tpl/mysql-virtual_gids.cf.master b/install/tpl/mysql-virtual_gids.cf.master
index 7c7d995fc98bb334e087f3a0e307a793f8cc1b9b..5611b935dd2cf6f8fa2afd10713cdf313fb9e11f 100644
--- a/install/tpl/mysql-virtual_gids.cf.master
+++ b/install/tpl/mysql-virtual_gids.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = gid
-where_field = email
-additional_conditions = and postfix = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select gid from mail_user where email = '%s' and postfix = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_mailboxes.cf.master b/install/tpl/mysql-virtual_mailboxes.cf.master
index 2fe47bbdf5d85c9765141208a7b43f844f44429e..97825f9ffc9c492e68f8703efce25f00b79d66e7 100644
--- a/install/tpl/mysql-virtual_mailboxes.cf.master
+++ b/install/tpl/mysql-virtual_mailboxes.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
-where_field = login
-additional_conditions = and postfix = 'y' and server_id = {server_id}
 hosts = {mysql_server_ip}
+query = select CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') from mail_user where login = '%s' and postfix = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf b/install/tpl/mysql-virtual_outgoing_bcc.cf
deleted file mode 100644
index 78fca41a2f54013ac500613691dc8319cd1ab289..0000000000000000000000000000000000000000
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf
+++ /dev/null
@@ -1,8 +0,0 @@
-user = {mysql_server_ispconfig_user}
-password = {mysql_server_ispconfig_password}
-dbname = {mysql_server_database}
-table = mail_user
-select_field = sender_cc
-where_field = email
-additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disables$
-hosts = {mysql_server_ip}
\ No newline at end of file
diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
index 53afa531062d2cadcfbdf5ee57464f366dbb7446..19b235fcf5a19c2b3a068e9a4820a671f194559d 100644
--- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master
+++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master
@@ -1,8 +1,16 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = sender_cc
-where_field = email
-additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disablesmtp = 'n' and sender_cc != ''
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = SELECT sender_cc FROM (
+            SELECT SUBSTRING_INDEX(sender_cc, ',', 1) AS sender_cc
+              FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
+            UNION
+            SELECT SUBSTRING_INDEX(u.sender_cc, ',', 1) AS sender_cc
+              FROM mail_user u, mail_forwarding f
+             WHERE f.destination REGEXP CONCAT( '((^|\\n)[[:blank:]]*,?|[[:alnum:]][[:blank:]]*,)[[:blank:]]*',
+                                                REPLACE( REPLACE(u.email, '+', '\\+'), '.', '\\.' ),
+                                                '[[:blank:]]*(,[[:blank:]]*[[:alnum:]]|,?[[:blank:]]*(\\r?\\n|$))' )
+               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
+               AND f.source = '%s' AND f.allow_send_as = 'y' AND f.active = 'y' AND f.server_id = {server_id}
+        ) table1 WHERE sender_cc != '' LIMIT 1
diff --git a/install/tpl/mysql-virtual_policy_greylist.cf.master b/install/tpl/mysql-virtual_policy_greylist.cf.master
index 55378b29cae4ebbe59815fedfed235c61632a4a1..5203b1a2ea65a597d034d204289f4abc6bdffd1b 100644
--- a/install/tpl/mysql-virtual_policy_greylist.cf.master
+++ b/install/tpl/mysql-virtual_policy_greylist.cf.master
@@ -1,10 +1,13 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
+hosts = {mysql_server_ip}
 query = SELECT 'greylisting' FROM
-  (SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s' 
-  UNION SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s' 
-  UNION SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1) as rules 
+  (
+   SELECT `greylisting`, 1 as `prio` FROM `mail_user` WHERE `server_id` = {server_id} AND `email` = '%s'
+   UNION
+   SELECT `greylisting`, 2 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '%s'
+   UNION
+   SELECT `greylisting`, 3 as `prio` FROM `mail_forwarding` WHERE `server_id` = {server_id} AND `source` = '@%d' ORDER BY `prio` ASC LIMIT 1
+  ) AS rules
   WHERE rules.greylisting = 'y'
-
-hosts = {mysql_server_ip}
diff --git a/install/tpl/mysql-virtual_recipient.cf.master b/install/tpl/mysql-virtual_recipient.cf.master
index 49024f3ebd262cc8929fc947e373b21d5a56fac6..2099966df2411b223ec21b14f251056eeaf12f38 100644
--- a/install/tpl/mysql-virtual_recipient.cf.master
+++ b/install/tpl/mysql-virtual_recipient.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table        = mail_access
-select_field = access
-where_field  = source
-additional_conditions = and type = 'recipient' and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select access from mail_access where source = '%s' and type = 'recipient' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_relaydomains.cf.master b/install/tpl/mysql-virtual_relaydomains.cf.master
index fb7bec1a3a60d53ee9103f0a8bb32cc280bc8797..5ce2db6954429b96b9b4437f2cd9831cb002bc21 100644
--- a/install/tpl/mysql-virtual_relaydomains.cf.master
+++ b/install/tpl/mysql-virtual_relaydomains.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_transport
-select_field = domain
-where_field = domain
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select domain from mail_transport where domain = '%s' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_relayrecipientmaps.cf.master b/install/tpl/mysql-virtual_relayrecipientmaps.cf.master
index a6304fe3234ff6ff70dbb5c594b6882ad8955ea0..ea67220215dcb3ec12d0a862e78cba08592ee75d 100644
--- a/install/tpl/mysql-virtual_relayrecipientmaps.cf.master
+++ b/install/tpl/mysql-virtual_relayrecipientmaps.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_relay_recipient
-select_field = access
-where_field = source
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select access from mail_relay_recipient where source = '%s' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_sender.cf.master b/install/tpl/mysql-virtual_sender.cf.master
index 0ef634aec762547e1e92113d3e6be1499c8b9a1a..1a5c4cb877626f05b6ecfa8253b4aaed26144cf4 100644
--- a/install/tpl/mysql-virtual_sender.cf.master
+++ b/install/tpl/mysql-virtual_sender.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table        = mail_access
-select_field = access
-where_field  = source
-additional_conditions = and type = 'sender' and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select access from mail_access where source = '%s' and type = 'sender' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_sender_login_maps.cf.master b/install/tpl/mysql-virtual_sender_login_maps.cf.master
index 5b7f144f8cb94c5686a388f950651a86d1c9a618..f97229d213a9a549065e2ac458f31ae85dfdf3cf 100644
--- a/install/tpl/mysql-virtual_sender_login_maps.cf.master
+++ b/install/tpl/mysql-virtual_sender_login_maps.cf.master
@@ -1,5 +1,7 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND allow_send_as = 'y' AND server_id = {server_id} UNION SELECT email FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id};
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND allow_send_as = 'y' AND server_id = {server_id}
+        UNION
+        SELECT email FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id};
diff --git a/install/tpl/mysql-virtual_transports.cf.master b/install/tpl/mysql-virtual_transports.cf.master
index 048a7a81ac85deec4ae936a74515dc9f5cf2748c..e9585ca6cc1b1dc848104094da890710908e00bf 100644
--- a/install/tpl/mysql-virtual_transports.cf.master
+++ b/install/tpl/mysql-virtual_transports.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_transport
-select_field = transport
-where_field = domain
-additional_conditions = and active = 'y' and server_id = {server_id}
-hosts = {mysql_server_ip}
\ No newline at end of file
+hosts = {mysql_server_ip}
+query = select transport from mail_transport where domain = '%s' and active = 'y' and server_id = {server_id}
diff --git a/install/tpl/mysql-virtual_uids.cf.master b/install/tpl/mysql-virtual_uids.cf.master
index da3cd7c2a0936dc181a478d568a12a3a7aed7347..de35368c0ad39dbba4ee1cfb52ed5f8a48fbab11 100644
--- a/install/tpl/mysql-virtual_uids.cf.master
+++ b/install/tpl/mysql-virtual_uids.cf.master
@@ -1,8 +1,5 @@
 user = {mysql_server_ispconfig_user}
 password = {mysql_server_ispconfig_password}
 dbname = {mysql_server_database}
-table = mail_user
-select_field = uid
-where_field = email
-additional_conditions = and postfix = 'y' and server_id = {server_id}
 hosts = {mysql_server_ip}
+query = select uid from mail_user where email = '%s' and postfix = 'y' and server_id = {server_id}
diff --git a/install/tpl/named.conf.options.master b/install/tpl/named.conf.options.master
index f13976ffd6db31f72447c1d0d57be7d2935a556d..88c0e06493493f9493bfccb733e9bba74de22d25 100644
--- a/install/tpl/named.conf.options.master
+++ b/install/tpl/named.conf.options.master
@@ -5,9 +5,9 @@ options {
 	// to talk to, you may need to fix the firewall to allow multiple
 	// ports to talk.  See http://www.kb.cert.org/vuls/id/800113
 
-	// If your ISP provided one or more IP addresses for stable 
-	// nameservers, you probably want to use them as forwarders.  
-	// Uncomment the following block, and insert the addresses replacing 
+	// If your ISP provided one or more IP addresses for stable
+	// nameservers, you probably want to use them as forwarders.
+	// Uncomment the following block, and insert the addresses replacing
 	// the all-0's placeholder.
 
 	// forwarders {
@@ -21,8 +21,9 @@ options {
 	dnssec-enable yes;
 	dnssec-validation yes;
 	dnssec-lookaside auto;
+	
+	allow-transfer {none;};
 
 	auth-nxdomain no;    # conform to RFC1035
 	listen-on-v6 { any; };
 };
-
diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master
index 871dff8c57dddff8f6a45193345928e90c1dcb4a..2680b209a2522b8ef4455ffb73f4f835c3e66477 100644
--- a/install/tpl/nginx_apps.vhost.master
+++ b/install/tpl/nginx_apps.vhost.master
@@ -2,7 +2,7 @@ server {
         listen {apps_vhost_port} {ssl_on};
         listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on;
 
-        {ssl_comment}ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+        {ssl_comment}ssl_protocols TLSv1.2;
         {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt;
         {ssl_comment}ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key;
 
@@ -115,7 +115,7 @@ server {
         location /phpMyAdmin {
                rewrite ^/* /phpmyadmin last;
         }
-		
+
         location /squirrelmail {
                root /usr/share/;
                index index.php index.html index.htm;
@@ -200,7 +200,7 @@ server {
                fastcgi_pass unix:{cgi_socket};
         }
 
-        location /images/mailman {
+        location ^~ /images/mailman {
                alias /usr/share/images/mailman;
         }
 
diff --git a/install/tpl/nginx_ispconfig.vhost.master b/install/tpl/nginx_ispconfig.vhost.master
index aad670e97a8a74d022eb3c0c11927c559bd858d6..dbe44d7064861eae187731a39e5ced7d120affd3 100644
--- a/install/tpl/nginx_ispconfig.vhost.master
+++ b/install/tpl/nginx_ispconfig.vhost.master
@@ -1,13 +1,13 @@
 server {
         listen {vhost_port} {ssl_on};
         listen [::]:{vhost_port} {ssl_on} ipv6only=on;
-		
-		{ssl_comment}ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+
+		{ssl_comment}ssl_protocols TLSv1.2;
         {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt;
         {ssl_comment}ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key;
         {ssl_comment}ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
         {ssl_comment}ssl_prefer_server_ciphers on;
-		
+
 		# redirect to https if accessed with http
 		{ssl_comment}error_page 497 https://$host:{vhost_port}$request_uri;
 
@@ -44,7 +44,7 @@ server {
         location ~ /\. {
                deny  all;
         }
-		
+
 #        location /phpmyadmin {
 #               root /usr/share/;
 #               index index.php index.html index.htm;
@@ -64,7 +64,7 @@ server {
 #        location /phpMyAdmin {
 #               rewrite ^/* /phpmyadmin last;
 #        }
-#		
+#
 #        location /squirrelmail {
 #               root /usr/share/;
 #               index index.php index.html index.htm;
diff --git a/install/tpl/opensuse_dovecot.conf.master b/install/tpl/opensuse_dovecot.conf.master
index 1eacf4c3a31c1e35562a19477d641b2ef442a2c4..4a4d5e319ca62e05a3286c250c76b0e7134ac481 100644
--- a/install/tpl/opensuse_dovecot.conf.master
+++ b/install/tpl/opensuse_dovecot.conf.master
@@ -1280,6 +1280,7 @@ plugin {
   # ManageSieve this is where the uploaded scripts are stored.
   sieve_dir=~/sieve
 
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
   sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master
index 070590181b4e129e6b7871f947ecefb19a1def8a..9624c05684e4564f49613cf101a5eef60e2fdc8e 100644
--- a/install/tpl/opensuse_dovecot2.conf.master
+++ b/install/tpl/opensuse_dovecot2.conf.master
@@ -6,7 +6,9 @@ log_timestamp = "%Y-%m-%d %H:%M:%S "
 mail_privileged_group = vmail
 ssl_cert = </etc/postfix/smtpd.cert
 ssl_key = </etc/postfix/smtpd.key
-ssl_protocols = !SSLv2 !SSLv3
+ssl_min_protocol = TLSv1.2
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+ssl_prefer_server_ciphers = no
 mail_plugins = quota
 passdb {
   args = /etc/dovecot/dovecot-sql.conf
@@ -25,6 +27,7 @@ plugin {
   # no longer needed, as 'sieve' is in userdb extra fields:
   sieve=/var/vmail/%d/%n/.sieve
 
+  sieve_before=/var/vmail/%d/%n/.ispconfig-before.sieve
   sieve_after=/var/vmail/%d/%n/.ispconfig.sieve
   sieve_max_script_size = 2M
   sieve_max_actions = 100
@@ -78,7 +81,7 @@ mail_plugins = $mail_plugins quota
 #2.3+         group = vmail
 #2.3+         mode = 0660
 #2.3+     }
-#2.3+ 
+#2.3+
 #2.3+     unix_listener stats-writer {
 #2.3+         user = vmail
 #2.3+         group = vmail
@@ -121,4 +124,3 @@ namespace inbox {
     special_use = \Trash
   }
 }
-
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index c59d46fa970783c3b5f0b3275c7780028773692d..9065e9fa037036bade4f9460576e6151d9c39ab4 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -1,32 +1,34 @@
 alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
-virtual_alias_domains =
-virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
-virtual_uid_maps = mysql:/etc/postfix/mysql-virtual_uids.cf
-virtual_gid_maps = mysql:/etc/postfix/mysql-virtual_gids.cf
+virtual_uid_maps = proxy:mysql:/etc/postfix/mysql-virtual_uids.cf
+virtual_gid_maps = proxy:mysql:/etc/postfix/mysql-virtual_gids.cf
 sender_bcc_maps = proxy:mysql:{config_dir}/mysql-virtual_outgoing_bcc.cf
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
 smtpd_restriction_classes = greylisting
 greylisting = check_policy_service inet:127.0.0.1:10023
-smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
+smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
 smtpd_tls_key_file = {config_dir}/smtpd.key
 transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf
-relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
-relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
+relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
+relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
 smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
-proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
+proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
 smtpd_helo_required = yes
-smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
-smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
-smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
+smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
+smtpd_sender_restrictions =  {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf
+smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks{rbl_list}, permit_sasl_authenticated, reject_unauth_pipelining {reject_unknown_client_hostname}, permit
+smtpd_etrn_restrictions = permit_mynetworks, reject
+smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit
 smtpd_client_message_rate_limit = 100
 maildrop_destination_concurrency_limit = 1
 maildrop_destination_recipient_limit   = 1
@@ -37,8 +39,13 @@ nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
 inet_interfaces = all
 smtp_tls_security_level = may
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-smtpd_tls_protocols = !SSLv2,!SSLv3
-smtp_tls_protocols = !SSLv2,!SSLv3
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtpd_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_protocols = !SSLv2,!SSLv3, !TLSv1, !TLSv1.1
 smtpd_tls_exclude_ciphers = RC4, aNULL
 smtp_tls_exclude_ciphers = RC4, aNULL
+smtpd_tls_mandatory_ciphers = medium
+tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+tls_preempt_cipherlist = no
+# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
+enable_original_recipient = yes
diff --git a/install/tpl/postfix_2-10.conf.master b/install/tpl/postfix_2-10.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..d77f37e0a07bdedea1d15c629a07c871ba496b0c
--- /dev/null
+++ b/install/tpl/postfix_2-10.conf.master
@@ -0,0 +1,5 @@
+# Postfix configuration for version 2.10 and up
+smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
+
+# This is supported in version 2.9, but lets not create another conf file for it
+address_verify_sender_ttl = 15686s
diff --git a/install/tpl/postfix_2-5.conf.master b/install/tpl/postfix_2-5.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..132c80822e488b6b123e88002f1092e7dbd5b633
--- /dev/null
+++ b/install/tpl/postfix_2-5.conf.master
@@ -0,0 +1,13 @@
+# Postfix configuration for version 2.5 and up
+
+# These will make postfix adapt more to load spikes
+#{stress_adaptive} in_flow_delay = ${stress?3}${stress:1}s
+#{stress_adaptive} smtp_connect_timeout = ${stress?10}${stress:30}s
+#{stress_adaptive} smtp_helo_timeout = ${stress?10}${stress:60}s
+#{stress_adaptive} smtp_mail_timeout = ${stress?10}${stress:60}s
+#{stress_adaptive} smtpd_error_sleep_time = ${stress?1}${stress:2}s
+#{stress_adaptive} smtpd_hard_error_limit = ${stress?1}${stress:10}
+#{stress_adaptive} smtpd_recipient_overshoot_limit = ${stress?60}${stress:600}
+#{stress_adaptive} smtpd_soft_error_limit = ${stress?2}${stress:5}
+#{stress_adaptive} smtpd_timeout = ${stress?10}${stress:60}s
+
diff --git a/install/tpl/postfix_3-0.conf.master b/install/tpl/postfix_3-0.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..aa205679ad7818e0a19621a8f930e5838250d161
--- /dev/null
+++ b/install/tpl/postfix_3-0.conf.master
@@ -0,0 +1,13 @@
+# Postfix configuration for version 3.0 and up
+
+# These will make postfix adapt more to load spikes
+#{stress_adaptive} in_flow_delay = ${stress?{3}:{1}}s
+#{stress_adaptive} smtp_connect_timeout = ${stress?{10}:{30}}s
+#{stress_adaptive} smtp_helo_timeout = ${stress?{10}:{60}}s
+#{stress_adaptive} smtp_mail_timeout = ${stress?{10}:{60}}s
+#{stress_adaptive} smtpd_error_sleep_time = ${stress?{1}:{2}}s
+#{stress_adaptive} smtpd_hard_error_limit = ${stress?{1}:{10}}
+#{stress_adaptive} smtpd_recipient_overshoot_limit = ${stress?{60}:{600}}
+#{stress_adaptive} smtpd_soft_error_limit = ${stress?{2}:{5}}
+#{stress_adaptive} smtpd_timeout = ${stress?{10}:{60}}s
+
diff --git a/install/tpl/postfix_3-3.conf.master b/install/tpl/postfix_3-3.conf.master
new file mode 100644
index 0000000000000000000000000000000000000000..01b3e7f59058a3867d1a093f013e5cbaad1afc2a
--- /dev/null
+++ b/install/tpl/postfix_3-3.conf.master
@@ -0,0 +1,4 @@
+# Postfix configuration for version 3.3 and up
+
+# 3.2 and earlier should not have this set when using reject_unverified_recipient
+enable_original_recipient = no
diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index 873b0e7372be021ad15700b8d8077ce21bb760f1..ec6573d7b156a44a53e798310543adb86d1b8420 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -16,6 +16,7 @@ webmail_url=/webmail
 dkim_path=/var/lib/amavis/dkim
 smtp_enabled=y
 smtp_host=localhost
+enable_welcome_mail=y
 
 [monitor]
 
@@ -34,6 +35,8 @@ client_username_web_check_disabled=n
 backups_include_into_web_quota=n
 reseller_can_use_options=n
 web_php_options=no,fast-cgi,mod,php-fpm
+show_aps_menu=n
+client_protection=y
 
 
 [tools]
diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index be6c15666c0d4facb9acbe2f2ebcfaab54f2ace9..631bd430dafb6cb4a67d2e10d11c383ee4208493 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -49,7 +49,7 @@ class app {
 	private $_loaded_classes = array();
 	private $_conf;
 	private $_security_config;
-	
+
 	public $loaded_plugins = array();
 
 	public function __construct() {
@@ -58,7 +58,7 @@ class app {
 		if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS']) || isset($_REQUEST['s']) || isset($_REQUEST['s_old']) || isset($_REQUEST['conf'])) {
 			die('Internal Error: var override attempt detected');
 		}
-		
+
 		$this->_conf = $conf;
 		if($this->_conf['start_db'] == true) {
 			$this->load('db_'.$this->_conf['db_type']);
@@ -70,21 +70,21 @@ class app {
 		}
 		$this->uses('functions'); // we need this before all others!
 		$this->uses('auth,plugin,ini_parser,getconf');
-		
+
 	}
 
 	public function __get($prop) {
 		if(property_exists($this, $prop)) return $this->{$prop};
-		
+
 		$this->uses($prop);
 		if(property_exists($this, $prop)) return $this->{$prop};
 		else trigger_error('Undefined property ' . $prop . ' of class app', E_USER_WARNING);
 	}
-	
+
 	public function __destruct() {
 		session_write_close();
 	}
-	
+
 	public function initialize_session() {
 		//* Start the session
 		if($this->_conf['start_session'] == true) {
@@ -118,7 +118,7 @@ class app {
 			} else {
 				session_set_cookie_params(0,'/',$cookie_domain,$cookie_secure,true); // until browser is closed
 			}
-			
+
 			session_set_save_handler( array($this->session, 'open'),
 				array($this->session, 'close'),
 				array($this->session, 'read'),
@@ -127,7 +127,7 @@ class app {
 				array($this->session, 'gc'));
 
 			session_start();
-			
+
 			//* Initialize session variables
 			if(!isset($_SESSION['s']['id']) ) $_SESSION['s']['id'] = session_id();
 			if(empty($_SESSION['s']['theme'])) $_SESSION['s']['theme'] = $conf['theme'];
@@ -135,7 +135,7 @@ class app {
 		}
 
 	}
-	
+
 	public function uses($classes) {
 		$cl = explode(',', $classes);
 		if(is_array($cl)) {
@@ -160,7 +160,7 @@ class app {
 			}
 		}
 	}
-	
+
 	public function conf($plugin, $key, $value = null) {
 		if(is_null($value)) {
 			$tmpconf = $this->db->queryOneRecord("SELECT `value` FROM `sys_config` WHERE `group` = ? AND `name` = ?", $plugin, $key);
@@ -284,6 +284,7 @@ class app {
 			$this->tpl->setVar('datalog_changes_end_txt', $this->lng('datalog_changes_end_txt'));
 			$this->tpl->setVar('datalog_changes_count', $datalog['count']);
 			$this->tpl->setLoop('datalog_changes', $datalog['entries']);
+			$this->tpl->setVar('datalog_changes_close_txt', $this->lng('datalog_changes_close_txt'));
 		} else {
 			$this->tpl->setVar('app_version', '');
 		}
@@ -349,7 +350,7 @@ class app {
 
 		return 'y' === $maintenance_mode && !in_array($_SERVER['REMOTE_ADDR'], $maintenance_mode_exclude_ips);
 	}
-	
+
 	private function get_cookie_domain() {
 		$sec_config = $this->getconf->get_security_config('permissions');
 		$proxy_panel_allowed = $sec_config['reverse_proxy_panel_allowed'];
@@ -380,7 +381,7 @@ class app {
 				unset($forwarded_host);
 			}
 		}
-		
+
 		return $cookie_domain;
 	}
 
@@ -389,7 +390,7 @@ class app {
 //** Initialize application (app) object
 //* possible future =  new app($conf);
 $app = new app();
-/* 
+/*
    split session creation out of constructor is IMHO better.
    otherwise we have some circular references to global $app like in
    getconfig property of App - RA
@@ -398,7 +399,7 @@ $app->initialize_session();
 
 // load and enable PHP Intrusion Detection System (PHPIDS)
 $ids_security_config = $app->getconf->get_security_config('ids');
-		
+
 if(is_dir(ISPC_CLASS_PATH.'/IDS') && !defined('REMOTE_API_CALL') && ($ids_security_config['ids_anon_enabled'] == 'yes' || $ids_security_config['ids_user_enabled'] == 'yes' || $ids_security_config['ids_admin_enabled'] == 'yes')) {
 	$app->uses('ids');
 	$app->ids->start();
diff --git a/interface/lib/classes/remoting_lib.inc.php b/interface/lib/classes/remoting_lib.inc.php
index 6f310284dc6ca052f9b86cd5515987f194ad2ff0..6436e6e792a04aba37ccc56864dc55134f459673 100644
--- a/interface/lib/classes/remoting_lib.inc.php
+++ b/interface/lib/classes/remoting_lib.inc.php
@@ -131,7 +131,7 @@ class remoting_lib extends tform_base {
 			$this->sys_userid            = $user['userid'];
 			$this->sys_default_group     = $user['default_group'];
 			$this->sys_groups             = $user['groups'];
-			// we have to force admin priveliges for the remoting API as some function calls might fail otherwise.
+			// we have to force admin privileges for the remoting API as some function calls might fail otherwise.
 			if($client_login == false) $_SESSION["s"]["user"]["typ"] = 'admin';
 		}
 
diff --git a/interface/lib/classes/sites_database_plugin.inc.php b/interface/lib/classes/sites_database_plugin.inc.php
index faf3fa30f7f36904a821c42280c7e52219aaf2be..68421d6083ddd0eafaf56c539bcb040d4917fe2c 100644
--- a/interface/lib/classes/sites_database_plugin.inc.php
+++ b/interface/lib/classes/sites_database_plugin.inc.php
@@ -49,8 +49,8 @@ class sites_database_plugin {
 			$backup_format_db = $web['backup_format_db'];
 			$backup_copies = $app->functions->intval($web['backup_copies']);
 
-			$sql = "UPDATE web_database SET sys_groupid = ?, backup_interval = ?, backup_copies = ?, backup_format_web = ?, backup_format_db = ? WHERE database_id = ?";
-			$app->db->query($sql, $sys_groupid, $backup_interval, $backup_copies, $backup_format_web, $backup_format_db, $form_page->id);
+			$sql = "UPDATE web_database SET sys_groupid = ?, backup_interval = ?, backup_copies = ? WHERE database_id = ?";
+			$app->db->query($sql, $sys_groupid, $backup_interval, $backup_copies, $form_page->id);
 		}
 	}
 
diff --git a/interface/lib/classes/system.inc.php b/interface/lib/classes/system.inc.php
index 484ef2b6658788e04be4d6458a6fb04422517282..d6b0ef149e285dbe3e3c438cff36bbe44daddac8 100644
--- a/interface/lib/classes/system.inc.php
+++ b/interface/lib/classes/system.inc.php
@@ -67,30 +67,42 @@ class system {
 		}
 	}
 
+	public function is_blacklisted_web_path($path) {
+		$blacklist = array('bin', 'cgi-bin', 'dev', 'etc', 'home', 'lib', 'lib64', 'log', 'ssl', 'usr', 'var', 'proc', 'net', 'sys', 'srv', 'sbin', 'run');
+
+		$path = ltrim($path, '/');
+		$parts = explode('/', $path);
+		if(in_array(strtolower($parts[0]), $blacklist, true)) {
+			return true;
+		}
+
+		return false;
+	}
+
 	public function last_exec_out() {
 		return $this->_last_exec_out;
 	}
-	
+
 	public function last_exec_retcode() {
 		return $this->_last_exec_retcode;
 	}
-	
+
 	public function exec_safe($cmd) {
 		$arg_count = func_num_args();
 		$args = func_get_args();
-		
+
 		if($arg_count != substr_count($cmd, '?') + 1) {
 			trigger_error('Placeholder count not matching argument list.', E_USER_WARNING);
 			return false;
 		}
 		if($arg_count > 1) {
 			array_shift($args);
-			
+
 			$pos = 0;
 			$a = 0;
 			foreach($args as $value) {
 				$a++;
-				
+
 				$pos = strpos($cmd, '?', $pos);
 				if($pos === false) {
 					break;
@@ -100,16 +112,16 @@ class system {
 				$pos += strlen($value);
 			}
 		}
-		
+
 		$this->_last_exec_out = null;
 		$this->_last_exec_retcode = null;
 		return exec($cmd, $this->_last_exec_out, $this->_last_exec_retcode);
 	}
-	
+
 	public function system_safe($cmd) {
 		call_user_func_array(array($this, 'exec_safe'), func_get_args());
 		return implode("\n", $this->_last_exec_out);
-	}	
+	}
 
     //* Check if a application is installed
     public function is_installed($appname) {
@@ -122,5 +134,5 @@ class system {
             return false;
         }
     }
-	
+
 } //* End Class
diff --git a/interface/lib/classes/tools_monitor.inc.php b/interface/lib/classes/tools_monitor.inc.php
index ce3ffca1eba13e81ab2565eb6665fb0e4da31201..435ee220a8066070ac0a0801a6f27f4b8361a2b7 100644
--- a/interface/lib/classes/tools_monitor.inc.php
+++ b/interface/lib/classes/tools_monitor.inc.php
@@ -184,9 +184,10 @@ class tools_monitor {
 
 			foreach($data as $key => $value) {
 				if ($key != '') {
+					$memory = $app->functions->formatBytes($value);
 					$html .= '<tr>
                         <td>' . $key . ':</td>
-                        <td>' . $value . '</td>
+                        <td>' . $memory . '</td>
                         </tr>';
 				}
 			}
diff --git a/interface/lib/classes/validate_autoresponder.inc.php b/interface/lib/classes/validate_autoresponder.inc.php
index 25db68bdd97226ea9be48d3e93c1e064b676666f..48ee3778833f90625d2629b7740c04f192da2678 100755
--- a/interface/lib/classes/validate_autoresponder.inc.php
+++ b/interface/lib/classes/validate_autoresponder.inc.php
@@ -31,25 +31,11 @@ include_once 'validate_datetime.inc.php';
 
 class validate_autoresponder extends validate_datetime
 {
-	function start_date($field_name, $field_value, $validator)
-	{
-		global $app;
-		
-		// save field value for later use in end_date()
-		$this->start_date = $field_value;
-
-		if($_POST['autoresponder'] == 'y' && $field_value == '') {
-			// we need a start date when autoresponder is on
-			return $app->tform->lng($validator['errmsg']).'<br />';
-		}
-	}
-
 	function end_date($field_name, $field_value, $validator)
 	{
 		global $app;
 
-		$start_date = $this->start_date;
-		//$start_date = $app->tform_actions->dataRecord['autoresponder_start_date'];
+		$start_date = $app->tform_actions->dataRecord['autoresponder_start_date'];
 		
 		// Parse date
 		$datetimeformat = (isset($app->remoting_lib) ? $app->remoting_lib->datetimeformat : $app->tform->datetimeformat);
@@ -60,8 +46,8 @@ class validate_autoresponder extends validate_datetime
 		$start_date_tstamp = mktime($start_date_array['hour'], $start_date_array['minute'], $start_date_array['second'], $start_date_array['month'], $start_date_array['day'], $start_date_array['year']);
 		$end_date_tstamp = mktime($end_date_array['hour'], $end_date_array['minute'], $end_date_array['second'], $end_date_array['month'], $end_date_array['day'], $end_date_array['year']);
 		
-		// End date has to be > start date
-		if($end_date_tstamp <= $start_date_tstamp && ($start_date || $field_value)) {
+		// If both are set, end date has to be > start date
+		if($start_date && $field_value && $end_date_tstamp <= $start_date_tstamp) {
 			return $app->tform->lng($validator['errmsg']).'<br />';
 		}
 	}
diff --git a/interface/lib/lang/ar.lng b/interface/lib/lang/ar.lng
index f8fd2b5a500479b4dff5741a0ded9410f648db78..8987866af06b677d01ead04d166957cf083b0af4 100644
--- a/interface/lib/lang/ar.lng
+++ b/interface/lib/lang/ar.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/bg.lng b/interface/lib/lang/bg.lng
index 049807e66da3712e215a7b6f62734ebaecdef900..1a288f3b957b3e1fbe3b9cbde8bd926092705227 100644
--- a/interface/lib/lang/bg.lng
+++ b/interface/lib/lang/bg.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Неограничен';
-?>
+$wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
+$wb['datalog_changes_close_txt'] = 'Close';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/br.lng b/interface/lib/lang/br.lng
index 3bab13ab3a40eb40f83e06798bf32d1332f9ffce..c11b825ae7bd8d5ac4a7c6b590abc2150c208dac 100644
--- a/interface/lib/lang/br.lng
+++ b/interface/lib/lang/br.lng
@@ -159,4 +159,6 @@ $wb['security_check2_txt'] = 'falhou.';
 $wb['select_directive_snippet_txt'] = 'Diretiva de trechos de código';
 $wb['select_master_directive_snippet_txt'] = 'Diretiva mestre de trechos de código';
 $wb['unlimited_txt'] = 'Ilimitado';
-?>
+$wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
+$wb['datalog_changes_close_txt'] = 'Close';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/ca.lng b/interface/lib/lang/ca.lng
index 6d48482cfc5f5c97825505de23a7fb80abd07aea..c3a5b340f687528db33177e7943cb653449dc71c 100644
--- a/interface/lib/lang/ca.lng
+++ b/interface/lib/lang/ca.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng
index 93eeb671e5ffc32a0f9e19d647f42cbfcf569ece..058475169b173671f5bbfad3bbd7742c626a7e98 100644
--- a/interface/lib/lang/cz.lng
+++ b/interface/lib/lang/cz.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Vytvořit XMPP uživatele';
 $wb['datalog_status_u_xmpp_user'] = 'Aktualizovat XMPP uživatele';
 $wb['datalog_status_d_xmpp_user'] = 'Smazat XMPP uživatele';
 $wb['unlimited_txt'] = 'neomezeno';
-?>
+$wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
+$wb['datalog_changes_close_txt'] = 'Close';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng
index 54091c14170786b83b4d68c79b801d3dff280c56..80704d3e5bf2114e833ef193d29f2bbac5dce296 100644
--- a/interface/lib/lang/de.lng
+++ b/interface/lib/lang/de.lng
@@ -159,4 +159,6 @@ $wb['security_check2_txt'] = 'fehlgeschlagen.';
 $wb['select_directive_snippet_txt'] = 'Direktiven Schnipsel';
 $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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/dk.lng b/interface/lib/lang/dk.lng
index cbb9fc5efdc46db92761845cca3164f8224c08c1..93c68617cf953dfacd075d6b0c2c29d527f840af 100644
--- a/interface/lib/lang/dk.lng
+++ b/interface/lib/lang/dk.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng
index 3e6c60c90f451a81acfed2b2e904c3df6074d422..3189500b01cf25696c68924defd105fe89f65d51 100644
--- a/interface/lib/lang/el.lng
+++ b/interface/lib/lang/el.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Απεριόριστα';
-?>
+$wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
+$wb['datalog_changes_close_txt'] = 'Close';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/en.lng b/interface/lib/lang/en.lng
index b5b2ebcdae470767a4fe90494fca53fe974236e6..60c389481020fd2a72a0a73f16a124b01bff8716 100644
--- a/interface/lib/lang/en.lng
+++ b/interface/lib/lang/en.lng
@@ -160,4 +160,6 @@ $wb['security_check2_txt'] = 'failed.';
 $wb['select_directive_snippet_txt'] = 'Directive Snippets';
 $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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/es.lng b/interface/lib/lang/es.lng
index b78499f80022dc44300273382d58c10dd86ae090..6d20c7b66522108874fc78fc7a3f067919f61b45 100644
--- a/interface/lib/lang/es.lng
+++ b/interface/lib/lang/es.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Ilimitado';
-?>
+$wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
+$wb['datalog_changes_close_txt'] = 'Close';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/fi.lng b/interface/lib/lang/fi.lng
index 27749510bb0096803b629935fec60b6e23afcd3c..8f3c6bd0a19f2ee670b98fee8a33a4fa11598258 100644
--- a/interface/lib/lang/fi.lng
+++ b/interface/lib/lang/fi.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/fr.lng b/interface/lib/lang/fr.lng
index c302b32faa302e897af10b0aae59e993fbc0af48..728dea1eed74d603bf52ea961b09764b1d817760 100644
--- a/interface/lib/lang/fr.lng
+++ b/interface/lib/lang/fr.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/hr.lng b/interface/lib/lang/hr.lng
index 3be5dc7e16ea3dfbdc161ac8d1196ccb368f87c3..e40f0a4c19162a3396ed24b651260b8bb386b654 100644
--- a/interface/lib/lang/hr.lng
+++ b/interface/lib/lang/hr.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/hu.lng b/interface/lib/lang/hu.lng
index 3fc91bd60095011e8d867cc26b0a963c0e847ce4..d75563e3b9c517e2c1978e01ef5c2f246f3f9d98 100644
--- a/interface/lib/lang/hu.lng
+++ b/interface/lib/lang/hu.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/id.lng b/interface/lib/lang/id.lng
index 13fbff1a0800e7484f367858a26b809409f96916..09ed444103a2e5145c3be8d8f0f2dc81837df30a 100644
--- a/interface/lib/lang/id.lng
+++ b/interface/lib/lang/id.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/it.lng b/interface/lib/lang/it.lng
index 4a85a58e09266d2db52c2aaeff90667b9db77ef3..eb53245c4d8995d87d0a9b4916c25bf4cd12bbf4 100644
--- a/interface/lib/lang/it.lng
+++ b/interface/lib/lang/it.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'illimitati';
-?>
+$wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
+$wb['datalog_changes_close_txt'] = 'Close';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/ja.lng b/interface/lib/lang/ja.lng
index bb1290173c6a83bbcbceba6c2ff00f23442b99b5..723bf2e87adc4737ffc3c4ececd764e89c267a78 100644
--- a/interface/lib/lang/ja.lng
+++ b/interface/lib/lang/ja.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/nl.lng b/interface/lib/lang/nl.lng
index a733142d49100c3b025c69ce20b387f00c74ecb9..0b7e4a0bbe32c958c09ef738b3ca26c2e09018d6 100644
--- a/interface/lib/lang/nl.lng
+++ b/interface/lib/lang/nl.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['unlimited_txt'] = 'Ongelimiteerd';
-?>
+$wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.';
+$wb['datalog_changes_close_txt'] = 'Close';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/pl.lng b/interface/lib/lang/pl.lng
index ffbac09ef4008cf2bbbd0a0456a99ff758d6a9c5..300c8c9d83a6f6138a9b2cb6f3ba7136d18f15e4 100644
--- a/interface/lib/lang/pl.lng
+++ b/interface/lib/lang/pl.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/pt.lng b/interface/lib/lang/pt.lng
index 195da8e61926311839005a8b7bf6be3ad1bd319c..6ea67a9d7056b0683ff01e9a71724f25fd5bbaab 100644
--- a/interface/lib/lang/pt.lng
+++ b/interface/lib/lang/pt.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/ro.lng b/interface/lib/lang/ro.lng
index 1365a54172f3098dc1e8d5eba983730a46bc8c02..d67e4c9a8075059012981202f358dd0d19f1ea1c 100644
--- a/interface/lib/lang/ro.lng
+++ b/interface/lib/lang/ro.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/ru.lng b/interface/lib/lang/ru.lng
index 19cdcf8a047170d3f36b310801ae3a1ffcd40318..fe9fef36440b61599993b48ebe60ccaae1dfc235 100644
--- a/interface/lib/lang/ru.lng
+++ b/interface/lib/lang/ru.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Создать пользователя XMP
 $wb['datalog_status_u_xmpp_user'] = 'Обновить пользователя XMPP';
 $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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng
index 2d3146f03389ae3acae8fd72c36a1f5c1c89b386..f5ad7a4cb590f56087b61cca306e7002acbdbe1d 100644
--- a/interface/lib/lang/se.lng
+++ b/interface/lib/lang/se.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/sk.lng b/interface/lib/lang/sk.lng
index ece15b3a22865520884ac048cd12e0ba679504aa..3ca7f2a2da9ef9765f2a839f11e0dc53dee4b213 100644
--- a/interface/lib/lang/sk.lng
+++ b/interface/lib/lang/sk.lng
@@ -159,4 +159,6 @@ $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user';
 $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user';
 $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user';
 $wb['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';
+?>
\ No newline at end of file
diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng
index 31e5f2fbef4e7c47d45321d8bcc3cd08c1701cee..7721a3c0cbb78e779eeb49d43fb4777ceced215a 100644
--- a/interface/lib/lang/tr.lng
+++ b/interface/lib/lang/tr.lng
@@ -160,4 +160,6 @@ $wb['security_check2_txt'] = 'başarısız.';
 $wb['select_directive_snippet_txt'] = 'Yönerge Kod Parçaları';
 $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';
+?>
\ No newline at end of file
diff --git a/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php b/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
index 3f9b0db5b6b7ef92fcbaf112ca4ea092d22872fb..56dc825fd41b75b6acc03d9e07824f30b5150919 100644
--- a/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
+++ b/interface/lib/plugins/sites_web_vhost_domain_plugin.inc.php
@@ -46,12 +46,20 @@ class sites_web_vhost_domain_plugin {
 		$vhostdomain_type = 'domain';
 		if($page_form->dataRecord['type'] == 'vhostalias') $vhostdomain_type = 'aliasdomain';
 		elseif($page_form->dataRecord['type'] == 'vhostsubdomain') $vhostdomain_type = 'subdomain';
-		
-		// make sure that the record belongs to the clinet group and not the admin group when a dmin inserts it
-		// also make sure that the user can not delete domain created by a admin
+
+		// make sure that the record belongs to the client group and not the admin group when a admin inserts it
+		// also make sure that the user can not delete domain created by a admin if client protection is enabled
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $page_form->id);
+			$app->uses('getconf');
+			$global_config = $app->getconf->get_global_config('sites');
+			if($global_config['client_protection'] == 'y') {
+				$app->db->query("UPDATE web_domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $page_form->id);
+			} else {
+				$sysuser = $app->db->queryOneRecord('SELECT userid FROM sys_user WHERE default_group = ?',$client_group_id);
+				$sysuser_id = (is_array($sysuser) && isset($sysuser['userid']) && $sysuser['userid'] > 0)?$sysuser['userid']:1;
+				$app->db->query("UPDATE web_domain SET sys_userid = ?, sys_groupid = ?, sys_perm_group = 'riud' WHERE domain_id = ?", $sysuser_id, $client_group_id, $page_form->id);
+			}
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($page_form->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]);
@@ -62,7 +70,7 @@ class sites_web_vhost_domain_plugin {
 		$web_config = $app->getconf->get_server_config($app->functions->intval($page_form->dataRecord['server_id']), 'web');
 		if(isset($app->tform) && is_object($app->tform)) $web_rec = $app->tform->getDataRecord($page_form->id);
 		else $web_rec = $app->remoting_lib->getDataRecord($page_form->id);
-		
+
 		if($vhostdomain_type == 'domain') {
 			$document_root = str_replace("[website_id]", $page_form->id, $web_config["website_path"]);
 			$document_root = str_replace("[website_idhash_1]", $this->id_hash($page_form->id, 1), $document_root);
@@ -97,7 +105,7 @@ class sites_web_vhost_domain_plugin {
 			$document_root    = str_replace("[client_idhash_2]", $this->id_hash($client_id, 2), $document_root);
 			$document_root    = str_replace("[client_idhash_3]", $this->id_hash($client_id, 3), $document_root);
 			$document_root    = str_replace("[client_idhash_4]", $this->id_hash($client_id, 4), $document_root);
-			
+
 			if($event_name == 'sites:web_vhost_domain:on_after_update') {
 				if(($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) &&  isset($page_form->dataRecord["client_group_id"]) && $page_form->dataRecord["client_group_id"] != $page_form->oldDataRecord["sys_groupid"]) {
 
@@ -257,7 +265,7 @@ class sites_web_vhost_domain_plugin {
 					$backup_format_db = $page_form->dataRecord['backup_format_db'];
 					$records = $app->db->queryAllRecords("SELECT database_id FROM web_database WHERE parent_domain_id = ".$page_form->id);
 					foreach($records as $rec) {
-						$app->db->datalogUpdate('web_database', array("backup_interval" => $backup_interval, "backup_copies" => $backup_copies, "backup_format_web" => $backup_format_web, "backup_format_db" => $backup_format_db), 'database_id', $rec['database_id']);
+						$app->db->datalogUpdate('web_database', array("backup_interval" => $backup_interval, "backup_copies" => $backup_copies), 'database_id', $rec['database_id']);
 					}
 					unset($records);
 					unset($rec);
@@ -280,7 +288,7 @@ class sites_web_vhost_domain_plugin {
 				$php_open_basedir    = str_replace("[website_path]", $document_root, $web_config["php_open_basedir"]);
 				$php_open_basedir    = str_replace("[website_domain]", $app->functions->idn_encode($page_form->dataRecord['domain']), $php_open_basedir);
 				$htaccess_allow_override  = $web_config["htaccess_allow_override"];
-				
+
 				$sql = "UPDATE web_domain SET system_user = ?, system_group = ?, document_root = ?, allow_override = ?, php_open_basedir = ?  WHERE domain_id = ?";
 				$app->db->query($sql, $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $page_form->id);
 			}
diff --git a/interface/web/admin/directive_snippets_edit.php b/interface/web/admin/directive_snippets_edit.php
index b12da0a79bf28f000b0c11103db13482557608ad..e22a7cf42a2d7903121f6c87873c19a06f93a71f 100644
--- a/interface/web/admin/directive_snippets_edit.php
+++ b/interface/web/admin/directive_snippets_edit.php
@@ -75,6 +75,7 @@ class page_action extends tform_actions {
 				$app->tpl->setVar("snippet", $this->dataRecord['snippet'], true);
 			}
 		}
+
 		$app->tpl->setVar("is_master", $is_master);
 		
 		parent::onShowEnd();
@@ -82,15 +83,41 @@ class page_action extends tform_actions {
 	
 	function onSubmit() {
 		global $app, $conf;
-		
+
 		if($this->id > 0){
 			$record = $app->db->queryOneRecord("SELECT * FROM directive_snippets WHERE directive_snippets_id = ?", $this->id);
 			if($record['master_directive_snippets_id'] > 0){
 				unset($app->tform->formDef["tabs"]['directive_snippets']['fields']['name'], $app->tform->formDef["tabs"]['directive_snippets']['fields']['type'], $app->tform->formDef["tabs"]['directive_snippets']['fields']['snippet'], $app->tform->formDef["tabs"]['directive_snippets']['fields']['required_php_snippets']);
 			}
+	
+			if(isset($this->dataRecord['update_sites'])) {
+				parent::onSubmit();
+			} else {
+				$app->db->query('UPDATE directive_snippets SET name = ?, type = ?, snippet = ?, customer_viewable = ?, required_php_snippets = ?, active = ? WHERE directive_snippets_id = ?', $this->dataRecord['name'], $this->dataRecord['type'], $this->dataRecord['snippet'], $this->dataRecord['customer_viewable'], implode(',', $this->dataRecord['required_php_snippets']), $this->dataRecord['active'], $this->id);
+
+	            if($_REQUEST["next_tab"] == '') {
+    	            $list_name = $_SESSION["s"]["form"]["return_to"];
+                	if($list_name != '' && $_SESSION["s"]["list"][$list_name]["parent_name"] != $app->tform->formDef["name"]) {
+                    	$redirect = "Location: ".$_SESSION["s"]["list"][$list_name]["parent_script"]."?id=".$_SESSION["s"]["list"][$list_name]["parent_id"]."&next_tab=".$_SESSION["s"]["list"][$list_name]["parent_tab"];
+	                    $_SESSION["s"]["form"]["return_to"] = '';
+    	                session_write_close();
+        	            header($redirect);
+                	} elseif (isset($_SESSION["s"]["form"]["return_to_url"]) && $_SESSION["s"]["form"]["return_to_url"] != '') {
+	                    $redirect = $_SESSION["s"]["form"]["return_to_url"];
+    	                $_SESSION["s"]["form"]["return_to_url"] = '';
+        	            session_write_close();
+            	        header("Location: ".$redirect);
+                	    exit;
+                	} else {
+                    	header("Location: ".$app->tform->formDef['list_default']);
+                	}
+                	exit;
+				}
+			}
+
 			unset($record);
 		}
-		
+
 		parent::onSubmit();
 	}
 	
diff --git a/interface/web/admin/form/directive_snippets.tform.php b/interface/web/admin/form/directive_snippets.tform.php
index bd9466c310ca87737154c16b251a8de4ca492398..bf7f2b7fe52d1effbbd810d46ab254104e282fb7 100644
--- a/interface/web/admin/form/directive_snippets.tform.php
+++ b/interface/web/admin/form/directive_snippets.tform.php
@@ -110,6 +110,12 @@ $form["tabs"]['directive_snippets'] = array (
 			'default' => 'y',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'update_sites' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
 		'required_php_snippets' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOXARRAY',
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index de2caf175023ca6718a1ae4c753a7f5980f6b998..bc2f05840bf441d5cd6fab35a2c221e94a665920 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -456,11 +456,13 @@ $form["tabs"]['mail'] = array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '/home/vmail/',
-			'validators' => array(	0 => array('type' => 'NOTEMPTY',
-										'errmsg' => 'homedir_path_error_empty'),
-									1 => array ( 	'type' => 'REGEX',
-										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
-										'errmsg'=> 'homedir_path_error_regex'),
+			'validators' => array(	0 => array ( 'type' => 'NOTEMPTY',
+						           'errmsg' => 'homedir_path_error_empty'
+						    ),
+						1 => array ( 'type' => 'REGEX',
+						            'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+							    'errmsg'=> 'homedir_path_error_regex'
+						    ),
 			),
 			'value' => '',
 			'width' => '40',
@@ -638,6 +640,17 @@ $form["tabs"]['mail'] = array(
 			'default' => 'n',
 			'value' => array(0 => 'n', 1 => 'y')
 		),
+		'reject_unknown' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'default' => 'helo',
+			'value' => array(
+				'helo' => 'reject_unknown_helo_txt',
+				'client' => 'reject_unknown_client_txt',
+				'client_helo' => 'reject_unknown_client_helo_txt',
+				'none' => 'disabled_txt',
+			)
+		),
 		'mailbox_size_limit' => array(
 			'datatype' => 'INTEGER',
 			'formtype' => 'TEXT',
@@ -654,12 +667,6 @@ $form["tabs"]['mail'] = array(
 			'width' => '10',
 			'maxlength' => '15'
 		),
-		'mailbox_quota_stats' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'CHECKBOX',
-			'default' => 'y',
-			'value' => array(0 => 'n', 1 => 'y')
-		),
 		'realtime_blackhole_list' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -672,6 +679,18 @@ $form["tabs"]['mail'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'stress_adaptive' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'mailbox_quota_stats' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
 		'overquota_notify_admin' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
@@ -1814,6 +1833,18 @@ $form["tabs"]['jailkit'] = array(
 			'width' => '40',
 			'maxlength' => '1000'
 		),
+		'jailkit_chroot_authorized_keys_template' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'validators' => array(	0 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]*$/',
+										'errmsg'=> 'jailkit_chroot_authorized_keys_template_error_regex'),
+			),
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '1000'
+		),
 		//#################################
 		// END Datatable fields
 		//#################################
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 4dd069b613a99aa7bc694ceba6d656a785172fcc..0e29902c33ed7a2886e70cb64a6f7551819e5958 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -148,6 +148,12 @@ $form["tabs"]['sites'] = array (
 			'width'  => '30',
 			'maxlength' => '255'
 		),
+		'client_protection' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'y',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
 		'vhost_subdomains' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
@@ -795,4 +801,3 @@ $form['tabs']['dns_ca'] = array (
 		)
 	)
 );
-
diff --git a/interface/web/admin/lib/lang/ar_directive_snippets.lng b/interface/web/admin/lib/lang/ar_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/ar_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ar_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 4123c113d18a4a8d298321fc5610dc805425659b..ed8e236071c42a01934b9a1cfa087901e77fd7c6 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -40,6 +40,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
 $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['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng
index b871fc930c23eb9327f607d14d2d44f702479975..495da61225f79edd9ee37810249121dba7e6d0a7 100644
--- a/interface/web/admin/lib/lang/ar_system_config.lng
+++ b/interface/web/admin/lib/lang/ar_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_directive_snippets.lng b/interface/web/admin/lib/lang/bg_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/bg_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/bg_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index 463d1c7b2a2e0c08b40bbe929412c8794c115869..71e5bfd5c6c5229e6864bd3f0bdca49668aeb46f 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -38,6 +38,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
 $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['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP адрес';
@@ -170,6 +175,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng
index cf8e8c8273fc278b01ec2ef873e60b2445d9b94b..25ad5d2cc5e1e504c65a3be5c355f7c564f61bb2 100644
--- a/interface/web/admin/lib/lang/bg_system_config.lng
+++ b/interface/web/admin/lib/lang/bg_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/br_directive_snippets.lng b/interface/web/admin/lib/lang/br_directive_snippets.lng
index 43c46c69b972189158871e363aed78e153f57121..bc94b85b7d5919bc99d71d746fbb8accbedf4cec 100644
--- a/interface/web/admin/lib/lang/br_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/br_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Já existe uma diretiva com este
 $wb['variables_txt'] = 'Variáveis';
 $wb['customer_viewable_txt'] = 'Visualização personalizada';
 $wb['required_php_snippets_txt'] = 'Trecho de código exige php';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 65a2dc4fd754a3086d8c386b57936931dd5e3d55..e7b59e3cdbb99122565f4e83f4623f8a22b63533 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -51,6 +51,11 @@ $wb['relayhost_txt'] = 'Servidor de retransmissão';
 $wb['relayhost_user_txt'] = 'Usuário de retransmissão';
 $wb['relayhost_password_txt'] = 'Senha do usuário de retransmissão';
 $wb['reject_sender_login_mismatch_txt'] = 'Rejeitar acesso com erro de usuário e/ou senha';
+$wb['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['mailbox_size_limit_txt'] = 'Limite do tamanho da conta de e-mail';
 $wb['message_size_limit_txt'] = 'Limite do tamanho da mensagem';
 $wb['ip_address_txt'] = 'Endereço IP';
@@ -179,6 +184,8 @@ $wb['connect_userid_to_webid_txt'] = 'Conectar o UID do usuário no sistema para
 $wb['connect_userid_to_webid_start_txt'] = 'Conexão do ID inicial do usuário com o webID';
 $wb['realtime_blackhole_list_txt'] = 'Lista RBL em tempo real';
 $wb['realtime_blackhole_list_note_txt'] = '(separar as RBLs com vírgulas)';
+$wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'Configurações SSL';
 $wb['permissions_txt'] = 'Permissões';
 $wb['php_settings_txt'] = 'Configurações php';
@@ -311,3 +318,5 @@ $wb['rspamd_password_txt'] = 'Senha do rspamd';
 $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.';
diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng
index eccac5d178b3e142e60226a0c12d1d580bb7d87e..a6802651161e74c1befae13e99540ef629561c87 100644
--- a/interface/web/admin/lib/lang/br_system_config.lng
+++ b/interface/web/admin/lib/lang/br_system_config.lng
@@ -94,4 +94,5 @@ $wb['active_txt'] = 'Ativo';
 $wb['btn_save_txt'] = 'Salvar';
 $wb['btn_cancel_txt'] = 'Cancelar';
 $wb['web_php_options_txt'] = 'Manipulador do php (Somente apache)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_directive_snippets.lng b/interface/web/admin/lib/lang/ca_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/ca_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ca_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 496df78f77719a6b8f774d4f2ce9e52878ff9585..effc175e85b921e3d654d57212c595b1a5f9af8b 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -51,6 +51,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
 $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['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
@@ -175,6 +180,8 @@ $wb['connect_userid_to_webid_txt'] = 'Connect Linux userid to webid';
 $wb['connect_userid_to_webid_start_txt'] = 'Start ID for userid/webid connect';
 $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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng
index 17e4fd3db8e2c04e465cfea0e620b03a9f6f2457..f40012120f60b186e9503f3680fa5a2102d6f424 100644
--- a/interface/web/admin/lib/lang/ca_system_config.lng
+++ b/interface/web/admin/lib/lang/ca_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_directive_snippets.lng b/interface/web/admin/lib/lang/cz_directive_snippets.lng
index 1fd316583b0720863e5bd30660e01c702e242b20..26d17f64b366e474648be0e14043b477d9ae9a4e 100644
--- a/interface/web/admin/lib/lang/cz_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/cz_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Proměnné';
 $wb['customer_viewable_txt'] = 'Dostupná volba pro klienta';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index fbc1d777c38db51e08644ad60c7aaf92d94f800c..6e4f4c7faafd114ba50560f411acbd6d59286c45 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -163,6 +163,8 @@ $wb['backup_mode_userzip'] = 'Zálohování všech souborů v adresáři web jak
 $wb['backup_mode_rootgz'] = 'Zálohování všech souborů v adresáři web jako uživatel root';
 $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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Nastavení';
 $wb['permissions_txt'] = 'Nastavit oprávnění';
 $wb['php_settings_txt'] = 'PHP Nastavení';
@@ -254,6 +256,11 @@ $wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid cannot be mapped
 $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'] = 'Zakázat  MongoDB monitorování';
 $wb['v6_prefix_txt'] = 'IPv6 Prefix';
 $wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng
index fb9f4cf843a9eb64ac62585d8c0de38103df30ac..b7a7515403ae91f3acd6d7ccccdc43dbba820ce4 100644
--- a/interface/web/admin/lib/lang/cz_system_config.lng
+++ b/interface/web/admin/lib/lang/cz_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktivní';
 $wb['btn_save_txt'] = 'Uložit';
 $wb['btn_cancel_txt'] = 'Zrušit';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/de_directive_snippets.lng b/interface/web/admin/lib/lang/de_directive_snippets.lng
index 9e369f4b514708b62098bd0f4796b338c0b24df6..dbe3aaf8bda98214340064fb398fc6ec540120eb 100644
--- a/interface/web/admin/lib/lang/de_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/de_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Es existiert schon ein Direktiven
 $wb['variables_txt'] = 'Variablen';
 $wb['customer_viewable_txt'] = 'Sichtbar für Kunden';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 1646360a7ad59cca871ffb39a87105b7a81ac0c5..9a236d92e1e8ef3178fcb123926b06e435e1c3c9 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -40,6 +40,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost Benutzer';
 $wb['relayhost_password_txt'] = 'Relayhost Passwort';
 $wb['reject_sender_login_mismatch_txt'] = 'Zurückweisen von Mails, wenn Sender nicht gleich Login';
+$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['mailbox_size_limit_txt'] = 'E-Mailkonto Beschränkung';
 $wb['message_size_limit_txt'] = 'E-Mailgrößen Beschränkung';
 $wb['ip_address_txt'] = 'IP Adresse';
@@ -174,6 +179,8 @@ $wb['connect_userid_to_webid_txt'] = 'Linux Userid mit webid verknüpfen';
 $wb['connect_userid_to_webid_start_txt'] = 'Start ID für userid/webid Verknüpfung';
 $wb['realtime_blackhole_list_txt'] = 'Realtime Blackhole Liste';
 $wb['realtime_blackhole_list_note_txt'] = '(Mehrere Realtime Blackhole Listen mit Kommas trennen)';
+$wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Einstellungen';
 $wb['permissions_txt'] = 'Berechtigungen';
 $wb['php_settings_txt'] = 'PHP Einstellungen';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd-Passwort';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 7e88eccd00ea2e777818a2355a6643bc52202958..58575617ad2a9eadb05eae0edf6c28a9841c2052 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -99,4 +99,5 @@ $wb['active_txt'] = 'Aktiv';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
 $wb['web_php_options_txt'] = 'PHP Handler (Nur Apache)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_directive_snippets.lng b/interface/web/admin/lib/lang/dk_directive_snippets.lng
index 7b43dcd40b8059b344ca2155647296bab1fe13dd..1b158e5c8053714fbee35186f633e46fbc6eb532 100644
--- a/interface/web/admin/lib/lang/dk_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/dk_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Der er allerede et direktiv uddra
 $wb['variables_txt'] = 'Variabler';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index 476e43216105bb5ed402fb7c81d0a689c952f33d..41eaa1fe758ec8a072447278fe1236249538ae58 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -166,6 +166,8 @@ $wb['connect_userid_to_webid_txt'] = 'Forbinde Linux brugerid til webid';
 $wb['connect_userid_to_webid_start_txt'] = 'Start ID for brugerid/webid forbinde';
 $wb['realtime_blackhole_list_txt'] = 'Real-time Blackhole List';
 $wb['realtime_blackhole_list_note_txt'] = '(Adskille RBL\'er med kommaer)';
+$wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Indstillinger';
 $wb['permissions_txt'] = 'Tilladelser';
 $wb['php_settings_txt'] = 'PHP Indstillinger';
@@ -256,6 +258,11 @@ $wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid cannot be mapped
 $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['backup_time_txt'] = 'Backup time';
 $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring';
 $wb['v6_prefix_txt'] = 'IPv6 Prefix';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng
index 2be15ca1a087bd17476a9b4d93e11426aded1dad..6801b566c9aeea8cb574e8cca7d36596831db6f8 100644
--- a/interface/web/admin/lib/lang/dk_system_config.lng
+++ b/interface/web/admin/lib/lang/dk_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/el_directive_snippets.lng b/interface/web/admin/lib/lang/el_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/el_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/el_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index cf215b939e148c2707c55f7b348bb2d0d1cfaba8..491aa69cb6b82cc7800b169a9878de1232c044e9 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -40,6 +40,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Χρήστης Relayhost';
 $wb['relayhost_password_txt'] = 'Συνθηματικό Relayhost';
 $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['mailbox_size_limit_txt'] = 'Όριο χώρου θυρίδας';
 $wb['message_size_limit_txt'] = 'Μήνυμα ορίου χώρου';
 $wb['ip_address_txt'] = 'Διεύθυνση IP';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 045e20d02105bbfbe3adbdec37b5d8d87e6c4280..f324e335b3c1af3e0eaab925683e7ebbdef0100b 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/en_directive_snippets.lng b/interface/web/admin/lib/lang/en_directive_snippets.lng
index 8e8a63afe1e3a8e3d5cd7d60b0c46432db51f2b6..da164a531879a2687cd18d0d427dfa73c34fcdfa 100644
--- a/interface/web/admin/lib/lang/en_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/en_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb["directive_snippets_name_error_unique"] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index e12e1d40426ca203f7579865c791eb1b3235fa96..4858ed2eb8ce1a90b4f8fbccf08643a905e9d1a4 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -14,6 +14,7 @@ $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["jailkit_chroot_cron_programs_txt"] = 'Jailkit cron chrooted applications';
+$wb["jailkit_chroot_authorized_keys_template_txt"] = 'Jailkit authorized_keys template';
 $wb["website_path_txt"] = 'Website path';
 $wb["website_symlinks_txt"] = 'Website symlinks';
 $wb['website_symlinks_rel_txt'] = 'Make relative symlinks';
@@ -51,6 +52,16 @@ $wb["relayhost_txt"] = 'Relayhost';
 $wb["relayhost_user_txt"] = 'Relayhost User';
 $wb["relayhost_password_txt"] = 'Relayhost Password';
 $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_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['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["mailbox_size_limit_txt"] = 'Mailbox Size Limit';
 $wb["message_size_limit_txt"] = 'Message Size Limit';
 $wb["ip_address_txt"] = 'IP Address';
@@ -179,6 +190,8 @@ $wb["connect_userid_to_webid_txt"] = 'Connect Linux userid to webid';
 $wb["connect_userid_to_webid_start_txt"] = 'Start ID for userid/webid connect';
 $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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb["ssl_settings_txt"] = 'SSL Settings';
 $wb["permissions_txt"] = 'Permissions';
 $wb["php_settings_txt"] = 'PHP Settings';
@@ -269,6 +282,7 @@ $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['jailkit_chroot_authorized_keys_template_error_regex'] = 'Invalid jaikit chroot authorized_keys template file.';
 $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.';
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 27a5e58f28ef69c819f72bb93aefac13b9e93011..882e6c21c3220012c626cc14027d9b27d096391f 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -102,4 +102,5 @@ $wb['active_txt'] = 'Active';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/es_directive_snippets.lng b/interface/web/admin/lib/lang/es_directive_snippets.lng
index 8e2a9270791b70c7a2a9d287496dc1645dd3420e..a5bb21b494464ba69e782120057824d53aef0572 100644
--- a/interface/web/admin/lib/lang/es_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/es_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['snippet_txt'] = 'Fragmento';
 $wb['type_txt'] = 'Tipo';
 $wb['variables_txt'] = 'Variables';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index f34393169587445521f160bd3420c5244532bf9f..866871de9a35c0bf62b4f21ea86c6d795e64ca5a 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -230,7 +230,14 @@ $wb['pop3_imap_daemon_txt'] = 'Servicio POP3/IMAP';
 $wb['rbl_error_regex'] = 'Por favor especifique nombres de host RBL válidos.';
 $wb['realtime_blackhole_list_note_txt'] = '(Separe las listas RBL con una coma)';
 $wb['realtime_blackhole_list_txt'] = 'Lista de filtrado en tiempo real';
+$wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['reject_sender_login_mismatch_txt'] = 'Rechazar remitente e inicio de sesión diferentes';
+$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['relayhost_password_txt'] = 'Contraseña del servidor de retransmisión';
 $wb['relayhost_txt'] = 'Servidor de retransmisión';
 $wb['relayhost_user_txt'] = 'Usuario del servidor de retransmisión';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng
index 96e1e4487a549bcd3d14be03d2c07550998da066..4eeaa9abe994ca43dca157d771086938ab041280 100644
--- a/interface/web/admin/lib/lang/es_system_config.lng
+++ b/interface/web/admin/lib/lang/es_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_directive_snippets.lng b/interface/web/admin/lib/lang/fi_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/fi_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/fi_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 6eefadb45f44fbf9d8c69851a1d4fbd0214842e9..61edf1e6020d9aa724ed2e400019730798307720 100644
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -38,6 +38,11 @@ $wb['relayhost_txt'] = 'Edelleenlähetyspalvelin';
 $wb['relayhost_user_txt'] = 'Edelleenlähetyspalvelimen käyttäjätunnus';
 $wb['relayhost_password_txt'] = 'Edelleenlähetyspalvelimen salasana';
 $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['mailbox_size_limit_txt'] = 'Postilaatikon koko';
 $wb['message_size_limit_txt'] = 'Viestien enimmäiskoko';
 $wb['ip_address_txt'] = 'IP-osoite';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng
index b6102f7f62e8e224d96c8a818d0f4abec2d32375..831eee9ff6d9837bf651037b583fdb6091f18b86 100644
--- a/interface/web/admin/lib/lang/fi_system_config.lng
+++ b/interface/web/admin/lib/lang/fi_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_directive_snippets.lng b/interface/web/admin/lib/lang/fr_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/fr_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/fr_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 88717952099a752ca420245a0566b1cf3d508d47..657a4e1b54bb4027661ef8353167711b44f125e8 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -165,6 +165,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -256,6 +258,11 @@ $wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid cannot be mapped
 $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';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 38e2573044b93340c8cb496387d16f0d9f5e6086..a5270b879fa8d5284eb3f3a26db43f40d3f4957d 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_directive_snippets.lng b/interface/web/admin/lib/lang/hr_directive_snippets.lng
index 077896577db3f9b8aec8aad5f33966bd1780ea6c..5709d6075d24c0811c5b51cdc3c04b98a89c3bf1 100644
--- a/interface/web/admin/lib/lang/hr_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/hr_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Već postoji direktiva sa tim ime
 $wb['variables_txt'] = 'Varijable';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index b36fd1348643d5833a2891a007373581e98fb8ac..c7be0b3df01d4d5c8331e2449e8219da984afce8 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -39,6 +39,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost korisnik';
 $wb['relayhost_password_txt'] = 'Relayhost Å¡ifra';
 $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['mailbox_size_limit_txt'] = 'Dozvoljena veličina mailboxa';
 $wb['message_size_limit_txt'] = 'Dozvoljena veličina emaila';
 $wb['ip_address_txt'] = 'IP adresa';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL postavke';
 $wb['permissions_txt'] = 'Dozvole';
 $wb['php_settings_txt'] = 'PHP postavke';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng
index ab8756e95621c3666a91d2c507700938e404f2fa..220ca7e90ca9482831ad458a7ab47deeaac8a712 100644
--- a/interface/web/admin/lib/lang/hr_system_config.lng
+++ b/interface/web/admin/lib/lang/hr_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_directive_snippets.lng b/interface/web/admin/lib/lang/hu_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/hu_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/hu_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 789e86a64989643f0a039e5edc585bd869fd6b08..979eacb0e8d6f5aed08a64340cacdc283edbc5e5 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -38,6 +38,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
 $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['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng
index 4262b892099af4ec5e6d366ec53824b7c5ca7bad..0069f31c07448ed4fcf4e2fb1f277604be3ccff9 100644
--- a/interface/web/admin/lib/lang/hu_system_config.lng
+++ b/interface/web/admin/lib/lang/hu_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/id_directive_snippets.lng b/interface/web/admin/lib/lang/id_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/id_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/id_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index ee197a4d0a9e9154c78b6c09363d8231c66f162e..717948646926f1eae04b9b25fa9701aedd4b47d4 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -40,6 +40,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Pengguna Relayhost';
 $wb['relayhost_password_txt'] = 'Kata Sandi Relayhost';
 $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['mailbox_size_limit_txt'] = 'Batasan Ukuran Mailbox';
 $wb['message_size_limit_txt'] = 'Batasan Ukuran Pesan';
 $wb['ip_address_txt'] = 'Alamat IP';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng
index fe545e7476f06ecc07e8499434024ac4aa853e6d..539699da888897e43fee3bcce3425a3b5ed3a463 100644
--- a/interface/web/admin/lib/lang/id_system_config.lng
+++ b/interface/web/admin/lib/lang/id_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/it_directive_snippets.lng b/interface/web/admin/lib/lang/it_directive_snippets.lng
index 5598aacecc152ca4c07d07a7e9ad5cd0e6af4c28..e9a473f92ecc562a54c57785cb4a2d3046c60f66 100644
--- a/interface/web/admin/lib/lang/it_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/it_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Esiste già una direttiva snippet
 $wb['variables_txt'] = 'Variabili';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index cd71123720fffca2b2ed0f0d35ee11e55bcca809..9aa049a4889fafe0087addb56f6e94006a04a59a 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -165,6 +165,8 @@ $wb['backup_mode_userzip'] = 'Backup files siti web come utente web in formato z
 $wb['backup_mode_rootgz'] = 'Backup di tutti i files nella cartella sito come utente root';
 $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['ssl_settings_txt'] = 'Impostazioni SSL';
 $wb['permissions_txt'] = 'Permessi';
 $wb['php_settings_txt'] = 'Impostazioni PHP';
@@ -256,6 +258,11 @@ $wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid cannot be mapped
 $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';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng
index f261ba3e8127bcfe843a64c32c0d6a9a24bed76c..0c20959df29caa4f411234e58d0cc4b6e8fd6f0e 100644
--- a/interface/web/admin/lib/lang/it_system_config.lng
+++ b/interface/web/admin/lib/lang/it_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_directive_snippets.lng b/interface/web/admin/lib/lang/ja_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/ja_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ja_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 4ef8d13422baef55f4a63c3031bee07294a658a9..3de4d2ca1ab35fec48efad324b23d441c5ed18f5 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -40,6 +40,11 @@ $wb['relayhost_txt'] = 'リレーホスト';
 $wb['relayhost_user_txt'] = 'リレーホストユーザー';
 $wb['relayhost_password_txt'] = 'リレーホストパスワード';
 $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['mailbox_size_limit_txt'] = 'メールボックスのサイズ';
 $wb['message_size_limit_txt'] = 'メッセージの最大サイズ';
 $wb['ip_address_txt'] = 'IPアドレス';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng
index 96ce2d2ad64d66ba0f3fbcb8b5014c382642397c..f6b5c9e1a519ec3ba3f642bb94d5c3e11792ede1 100644
--- a/interface/web/admin/lib/lang/ja_system_config.lng
+++ b/interface/web/admin/lib/lang/ja_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_directive_snippets.lng b/interface/web/admin/lib/lang/nl_directive_snippets.lng
index a4f610634e6008a36d19eea337d61b6f71552219..d216622c6f5c8701361d5b816f9e6811cac90374 100644
--- a/interface/web/admin/lib/lang/nl_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/nl_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Er is al een Directive Snippet me
 $wb['variables_txt'] = 'Variabelen';
 $wb['customer_viewable_txt'] = 'Zichtbaar voor klanten';
 $wb['required_php_snippets_txt'] = 'Vereiste PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 5b5fcf122bf4350700f11285a66eb928b832a16b..7e3edc43982b99105169fe53309561d33cb7094c 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -40,6 +40,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost gebruiker';
 $wb['relayhost_password_txt'] = 'Relayhost wachtwoord';
 $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['mailbox_size_limit_txt'] = 'Mailbox grootte limiet';
 $wb['message_size_limit_txt'] = 'Message grootte limiet';
 $wb['ip_address_txt'] = 'IP adres';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng
index f9f59896bfc226da7d2839d62e28ae6676b632f6..19eae464a354a780c17bdbd273c7241356292ca6 100644
--- a/interface/web/admin/lib/lang/nl_system_config.lng
+++ b/interface/web/admin/lib/lang/nl_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_directive_snippets.lng b/interface/web/admin/lib/lang/pl_directive_snippets.lng
index 4902bf3282ce2e1148d5e5a40c9c73c998c3ccdc..abef1e28faa56c89174aef76e87ad10fa53b7b1d 100644
--- a/interface/web/admin/lib/lang/pl_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/pl_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Istnieje już zestaw dyrektyw o p
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 1d6caa8e5eff0879c14e9dac9e7c42d7e8a47441..294ed44ee7b76bfd5262676502e125cfff9d97a1 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -40,6 +40,11 @@ $wb['relayhost_txt'] = 'Adres Relayhost';
 $wb['relayhost_user_txt'] = 'Użytkownik Relayhost';
 $wb['relayhost_password_txt'] = 'Hasło Relayhost';
 $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['mailbox_size_limit_txt'] = 'Maksymalna wielkość skrzynki pocztowej';
 $wb['message_size_limit_txt'] = 'Maksymalna wielkość wiadomości';
 $wb['ip_address_txt'] = 'Adres IP';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'Ustawienia SSL';
 $wb['permissions_txt'] = 'Uprawnienia';
 $wb['php_settings_txt'] = 'Ustawienia PHP';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng
index 5f49133f561589911d3e9095e7891ab98ca6e628..f44853ccb2b4ecb62bacdc99784592a4b5ff489e 100644
--- a/interface/web/admin/lib/lang/pl_system_config.lng
+++ b/interface/web/admin/lib/lang/pl_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_directive_snippets.lng b/interface/web/admin/lib/lang/pt_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/pt_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/pt_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index fcf7a23e88117d6f58b1cf75950fd5e4947f4944..8b9d78d151f8523a8d8aeeab5870f37335f089bb 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -39,6 +39,11 @@ $wb['relayhost_txt'] = 'Host Relay';
 $wb['relayhost_user_txt'] = 'Utilizador do Host Relay';
 $wb['relayhost_password_txt'] = 'Senha do Host Relay';
 $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['mailbox_size_limit_txt'] = 'Tamanho máximo da Caixa Postal';
 $wb['message_size_limit_txt'] = 'Tamanho máximo de mensagem';
 $wb['ip_address_txt'] = 'Endereço IP';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng
index 10b87a40ae223ca364da96b44c5fad4543913016..bbfedbf3a43f5b931b99ca8b6bea80a03a8afdb6 100644
--- a/interface/web/admin/lib/lang/pt_system_config.lng
+++ b/interface/web/admin/lib/lang/pt_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_directive_snippets.lng b/interface/web/admin/lib/lang/ro_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/ro_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ro_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 2c3b4fdce48d33abc402d4312ba7f338c68e4b1e..a1ce64839ff9e1cf38ecd0442259a6fa150d07ab 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -39,6 +39,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
 $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['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng
index 56c7e40059a858ff89d41c80aed078db9b1a69e9..a7756c737d8361c0147b26179f8fde2a29a06f90 100644
--- a/interface/web/admin/lib/lang/ro_system_config.lng
+++ b/interface/web/admin/lib/lang/ro_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_directive_snippets.lng b/interface/web/admin/lib/lang/ru_directive_snippets.lng
index cfa09a02fcb1ea396c0c8a7257ae673a31e281fa..120a962d7ff5934de3b41c91dd4a41c4a03aa3f6 100644
--- a/interface/web/admin/lib/lang/ru_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/ru_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Уже есть заготовк
 $wb['variables_txt'] = 'Переменные:';
 $wb['customer_viewable_txt'] = 'Видимый клиентам';
 $wb['required_php_snippets_txt'] = 'Обязательная PHP-заготовка';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index f3f5a47c7d907006a4f4f4a80e62b163d4484c16..8583ccd43464be391edbe9d720d72d68a313a666 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -37,6 +37,11 @@ $wb['relayhost_txt'] = 'Relay-хост';
 $wb['relayhost_user_txt'] = 'Логин Relay-хоста';
 $wb['relayhost_password_txt'] = 'Пароль Relay-хоста';
 $wb['reject_sender_login_mismatch_txt'] = 'Отклонить при несовпадении отправителя и логина';
+$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['mailbox_size_limit_txt'] = 'Лимит объема почтового ящика';
 $wb['message_size_limit_txt'] = 'Лимит размера сообщения';
 $wb['ip_address_txt'] = 'IP-адрес';
@@ -172,6 +177,8 @@ $wb['backup_mode_userzip'] = 'Делать резервные копии web ф
 $wb['backup_mode_rootgz'] = 'Делать резервные копии всех файлов в веб-каталог как корневой пользователь';
 $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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'Настройки SSL';
 $wb['permissions_txt'] = 'Разрешения';
 $wb['php_settings_txt'] = 'Параметры PHP';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng
index c0da3d894a8ebcfb8c6121a8011cfb79273dbc67..37d9c263abf8e2ce1ac5e152a73804d0eb05157a 100644
--- a/interface/web/admin/lib/lang/ru_system_config.lng
+++ b/interface/web/admin/lib/lang/ru_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/se_directive_snippets.lng b/interface/web/admin/lib/lang/se_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/se_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/se_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 634c3655a76d2c7a32dac14b8906275d940f4349..ff44861126f5b25bb1b453c5169791a7e6c63bb3 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -38,6 +38,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost User';
 $wb['relayhost_password_txt'] = 'Relayhost Password';
 $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['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 $wb['ip_address_txt'] = 'IP Address';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index bf24b9852b8b275da9a8d8f7b143271bf7d760c8..6768bc411887e561c57362e0eb73370bf7f0cd6a 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_directive_snippets.lng b/interface/web/admin/lib/lang/sk_directive_snippets.lng
index 0616afad8b6c76c9eb284f57a673f6c35d286310..071d6f4fed2e32c912693d79f87e31c2e9879090 100644
--- a/interface/web/admin/lib/lang/sk_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/sk_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'There is already a directive snip
 $wb['variables_txt'] = 'Variables';
 $wb['customer_viewable_txt'] = 'Customer viewable';
 $wb['required_php_snippets_txt'] = 'Requiered PHP Snippet';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 50c8c0b4c9d0bac3c70cc96802c8d430ab0ab2e3..1efac9e6e66db15bfcf572e06e136a3bb52b55e4 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -40,6 +40,11 @@ $wb['relayhost_txt'] = 'Relayhost';
 $wb['relayhost_user_txt'] = 'Relayhost uživateľ';
 $wb['relayhost_password_txt'] = 'Relayhost heslo';
 $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['mailbox_size_limit_txt'] = 'Limit ve?kosti poštovej schránky';
 $wb['message_size_limit_txt'] = 'Limit ve?kosti správy';
 $wb['ip_address_txt'] = 'IP Adresa';
@@ -172,6 +177,8 @@ $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['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';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Settings';
 $wb['permissions_txt'] = 'Permissions';
 $wb['php_settings_txt'] = 'PHP Settings';
@@ -310,4 +317,6 @@ $wb['rspamd_password_txt'] = 'Rspamd Password';
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng
index 2fdce03e691badf87b628a17e21c66ee2d50995d..85a96bf5bf1126e65cccd898d2a7bb2276197934 100644
--- a/interface/web/admin/lib/lang/sk_system_config.lng
+++ b/interface/web/admin/lib/lang/sk_system_config.lng
@@ -95,4 +95,5 @@ $wb['active_txt'] = 'Aktive';
 $wb['btn_save_txt'] = 'Save';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['web_php_options_txt'] = 'PHP Handler (Apache only)';
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_directive_snippets.lng b/interface/web/admin/lib/lang/tr_directive_snippets.lng
index 448d4536723307c96f69f5a704e7b9a889072536..4c1cebea4e503d632e193013817c5004d5fb7685 100644
--- a/interface/web/admin/lib/lang/tr_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/tr_directive_snippets.lng
@@ -9,4 +9,5 @@ $wb['directive_snippets_name_error_unique'] = 'Aynı adlı bir yönerge kod par
 $wb['variables_txt'] = 'DeÄŸiÅŸkenler';
 $wb['customer_viewable_txt'] = 'Müşteri görebilir';
 $wb['required_php_snippets_txt'] = 'Gerekli PHP Parçası';
+$wb['update_sites_txt'] = 'Update sites using this snippet';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 09aa3adf2d9bd484cd242db73f572a3b23230872..25380413fa36a2ad8d269c3642b45e2fd35bb004 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -51,6 +51,11 @@ $wb['relayhost_txt'] = 'Aktarım Sunucusu';
 $wb['relayhost_user_txt'] = 'Aktarım Sunucu Kullanıcı Adı';
 $wb['relayhost_password_txt'] = 'Aktarım Sunucu Parolası';
 $wb['reject_sender_login_mismatch_txt'] = 'Gönderen ile Oturum Açmış Kullanıcı Eşleşmiyorsa Reddedilsin';
+$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['mailbox_size_limit_txt'] = 'E-posta Kutusu Boyutu Sınırı';
 $wb['message_size_limit_txt'] = 'İleti Boyutu Sınırı';
 $wb['ip_address_txt'] = 'IP Adresi';
@@ -179,6 +184,8 @@ $wb['connect_userid_to_webid_txt'] = 'Linux kullanıcıkodu webkoduna bağlansı
 $wb['connect_userid_to_webid_start_txt'] = 'Bağlanacak kullanıcıkodu/webkodu için başlangıç kodu';
 $wb['realtime_blackhole_list_txt'] = 'Gerçek Zamanlı Karadelik Listesi (RBL)';
 $wb['realtime_blackhole_list_note_txt'] = '(RBL adlarını virgül ile ayırarak yazın)';
+$wb['stress_adaptive_txt'] = 'Adapt to temporary load spikes';
+$wb['tooltip_stress_adaptive_txt'] = 'Enables Postfix stress-adaptive behavior.';
 $wb['ssl_settings_txt'] = 'SSL Ayarları';
 $wb['permissions_txt'] = 'Ä°zinler';
 $wb['php_settings_txt'] = 'PHP Ayarları';
@@ -304,4 +311,6 @@ $wb['php_default_name_error_empty'] = 'Varsayılan PHP sürümü açıklaması b
 $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.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng
index afc8a9239f2df64b2b9ca3dabe6d10ca01ba44d7..b4cb7c8d11bc3db4633af003cc31f0ea0595de59 100644
--- a/interface/web/admin/lib/lang/tr_system_config.lng
+++ b/interface/web/admin/lib/lang/tr_system_config.lng
@@ -89,4 +89,5 @@ $wb['custom_login_link_txt'] = 'Oturum Açma Sayfası Bağlantısı';
 $wb['login_link_error_regex'] = 'Oturum Açma Bağlantısı Geçersiz';
 $wb["default_remote_dbserver_txt"] = "Default DB Remote servers";
 $wb["disable_client_remote_dbserver_txt"] = "Disable DB Remote sections for Clients";
+$wb['client_protection_txt'] = 'Client protection';
 ?>
diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index cca5d702d3ba03e6600aa93ac39cff6de80b9847..339ac2f2f5605d9b6ad0ccb2d2d462113aee3b4f 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -79,7 +79,7 @@ class page_action extends tform_actions {
 	function onShowEdit() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 
 		if($app->tform->errorMessage == '') {
 			$app->uses('ini_parser,getconf');
@@ -115,7 +115,7 @@ class page_action extends tform_actions {
 	function onUpdateSave($sql) {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 		$app->uses('ini_parser,getconf');
 
 		if($conf['demo_mode'] != true) {
@@ -192,10 +192,11 @@ class page_action extends tform_actions {
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
 							$mail_user['autoresponder'] = 'y';
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
-						} elseif($mail_user['move_junk'] == 'y') {
+						} elseif($mail_user['move_junk'] != 'n') {
+							$save = $mail_user['move_junk'];
 							$mail_user['move_junk'] = 'n';
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
-							$mail_user['move_junk'] = 'y';
+							$mail_user['move_junk'] = $save;
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
 						} else {
 							$app->db->datalogUpdate('mail_user', $mail_user, 'mailuser_id', $mail_user["mailuser_id"], true);
diff --git a/interface/web/admin/server_php_del.php b/interface/web/admin/server_php_del.php
index f160c1b2d93e89db8899b97cb31364f0811d7cd1..82b4c8a17de3a5233d5b8caedd4449f774d43248 100644
--- a/interface/web/admin/server_php_del.php
+++ b/interface/web/admin/server_php_del.php
@@ -52,28 +52,14 @@ $app->load('tform_actions');
 class page_action extends tform_actions {
 
 	function onBeforeDelete() {
-		global $app; $conf;
+		global $app;
 
-		$check = array();
-
-		// fastcgi
-		if(!empty(trim($this->dataRecord['php_fastcgi_binary']))) $check[] = trim($this->dataRecord['php_fastcgi_binary']);
-		if(!empty(trim($this->dataRecord['php_fastcgi_ini_dir']))) $check[] = trim($this->dataRecord['php_fastcgi_ini_dir']);
-		if(!empty($check)) $fastcgi_check = implode(':', $check);
-		unset($check);
-
-		// fpm
-		if(!empty(trim($this->dataRecord['php_fpm_init_script']))) $check[] = trim($this->dataRecord['php_fpm_init_script']);
-		if(!empty(trim($this->dataRecord['php_fpm_ini_dir']))) $check[] = trim($this->dataRecord['php_fpm_ini_dir']);
-		if(!empty(trim($this->dataRecord['php_fpm_pool_dir']))) $check[] = trim($this->dataRecord['php_fpm_pool_dir']);
-		if(!empty($check)) $fpm_check = implode(':', $check);
-
- 		$sql = 'SELECT domain_id FROM web_domain WHERE server_id = ? AND fastcgi_php_version LIKE ?';
- 		if(isset($fastcgi_check)) $web_domains_fastcgi = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fastcgi_check);
-		if(isset($fpm_check)) $web_domains_fpm = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fpm_check);
-
-		if(!empty($webdomains_fastcgi) || !empty($web_domains_fpm))	$app->error($app->tform->lng('php_in_use_error'));
+ 		$sql = 'SELECT domain_id FROM web_domain WHERE server_id = ? AND server_php_id = ?';
+ 		$web_domains = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], $this->id);
 
+		 if(!empty($web_domains)) {
+			$app->error($app->tform->lng('php_in_use_error'));
+		}
 	}
 
 }
@@ -81,4 +67,3 @@ class page_action extends tform_actions {
 $page = new page_action;
 $page->onDelete();
 
-?>
diff --git a/interface/web/admin/server_php_edit.php b/interface/web/admin/server_php_edit.php
index c200b25bae2a72a7d60a3afe17d425b83b2e5282..a9e7b38bbb5b0d10335bffea920a847dd5347b9f 100644
--- a/interface/web/admin/server_php_edit.php
+++ b/interface/web/admin/server_php_edit.php
@@ -51,36 +51,10 @@ $app->load('tform_actions');
 
 class page_action extends tform_actions {
 	function onSubmit() {
-		global $app;
-
-		if(isset($this->id) && $this->id > 0 && $app->tform->getCurrentTab() == 'php_name') {
-			$rec = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $this->id);
-			if($rec['name'] != $this->dataRecord['name']) {
-				$check = array();
-				// fastcgi
-				if($rec['php_fastcgi_binary'] != '') $check[] = $rec['php_fastcgi_binary'];
-				if($rec['php_fastcgi_ini_dir'] != '') $check[] = $rec['php_fastcgi_ini_dir'];
-				if(!empty($check)) $fastcgi_check = implode(':', $check);
-				unset($check);
-				// fpm
-				if($rec['php_fpm_init_script'] != '') $check[] = $rec['php_fpm_init_script'];
-				if($rec['php_fpm_ini_dir'] != '') $check[] = $rec['php_fpm_ini_dir'];
-				if($rec['php_fpm_pool_dir'] != '') $check[] = $rec['php_fpm_pool_dir'];
-				if(!empty($check)) $fpm_check = implode(':', $check);
-
- 				$sql = 'SELECT domain_id FROM web_domain WHERE server_id = ? AND fastcgi_php_version LIKE ?';
-		 		if(isset($fastcgi_check)) $web_domains_fastcgi = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fastcgi_check);
-				if(isset($fpm_check)) $web_domains_fpm = $app->db->queryAllRecords($sql, $this->dataRecord['server_id'], '%:'.$fpm_check);
-
-				if(!empty($webdomains_fastcgi) || !empty($web_domains_fpm))	$app->error($app->tform->lng('php_in_use_error').' '.$app->tform->lng('php_name_in_use_error'));
-			}
-		}
-
 		parent::onSubmit();
-
 	}
 	function onBeforeUpdate() {
-		global $app, $conf;
+		global $app;
 
 		//* Check if the server has been changed
 		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
@@ -99,5 +73,3 @@ class page_action extends tform_actions {
 
 $page = new page_action;
 $page->onLoad();
-
-?>
diff --git a/interface/web/admin/server_php_list.php b/interface/web/admin/server_php_list.php
index a3c4d6354fe3c7acb38c947410178bbebf0d1099..11ef881792cb76965e3a5aed2dcfce98808127ea 100644
--- a/interface/web/admin/server_php_list.php
+++ b/interface/web/admin/server_php_list.php
@@ -51,7 +51,7 @@ $app->listform_actions->SQLOrderBy = "ORDER BY server_php.server_id, server_php.
 $app->listform_actions->SQLExtSelect = "(SELECT
     COUNT(w.server_id)
     FROM
-    server_php s LEFT JOIN web_domain w ON (w.fastcgi_php_version LIKE CONCAT(s.name, '%') AND s.server_id=w.server_id)
+    server_php s LEFT JOIN web_domain w ON (w.server_php_id = s.server_php_id AND s.server_id=w.server_id)
     WHERE
     server_php.server_php_id=s.server_php_id
     GROUP BY
@@ -60,5 +60,3 @@ $app->listform_actions->SQLExtSelect = "(SELECT
 
 $app->listform_actions->onLoad();
 
-
-?>
diff --git a/interface/web/admin/system_config_edit.php b/interface/web/admin/system_config_edit.php
index 04db6717b0d3eb37aca9ae625d3d1a8154a0c982..941f6e0bbe90adbad455c37b270115477fcb666f 100644
--- a/interface/web/admin/system_config_edit.php
+++ b/interface/web/admin/system_config_edit.php
@@ -56,7 +56,7 @@ class page_action extends tform_actions {
 	function onShowEdit() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 
 		if($app->tform->errorMessage == '') {
 			$app->uses('ini_parser,getconf');
@@ -96,7 +96,7 @@ class page_action extends tform_actions {
 
 		if($available_dashlets_txt == '') $available_dashlets_txt = '------';
 		$app->tpl->setVar("available_dashlets_txt", $available_dashlets_txt);
-		
+
 		// Logo
 		$sys_ini = $app->db->queryOneRecord("SELECT * FROM sys_ini WHERE sysini_id = ?", $this->id);
 		if($sys_ini['custom_logo'] != ''){
@@ -133,7 +133,7 @@ class page_action extends tform_actions {
 	function onUpdateSave($sql) {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 		$app->uses('ini_parser,getconf');
 
 		$section = $app->tform->getCurrentTab();
@@ -156,6 +156,13 @@ class page_action extends tform_actions {
 		*/
 
 		$new_config = $app->tform->encode($this->dataRecord, $section);
+		
+		if($section == 'sites' && $new_config['client_protection'] != 'y' && $server_config_array['sites']['client_protection'] == 'y') {
+		  $app->db->query("UPDATE `web_domain` SET `sys_userid` = (select `userid` FROM `sys_user` WHERE `default_group` = `web_domain`.`sys_groupid`), `sys_perm_group` = 'riud' WHERE `added_by` = 'admin' and sys_groupid > 0");
+		} elseif($section == 'sites' && $new_config['client_protection'] != 'n' && $server_config_array['sites']['client_protection'] == 'n') {
+			$app->db->query("UPDATE `web_domain` SET `sys_userid` = 1, `sys_perm_group` = 'ru' WHERE `added_by` = 'admin'");
+		}
+		
 		if($section == 'sites' && $new_config['vhost_subdomains'] != 'y' && $server_config_array['sites']['vhost_subdomains'] == 'y') {
 			// check for existing vhost subdomains, if found the mode cannot be disabled
 			$check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE `type` = 'vhostsubdomain'");
@@ -198,13 +205,13 @@ class page_action extends tform_actions {
 				"FROM dns_soa";
 			$app->db->query($sql);
 		}
-		
+
 		//die(print_r($_FILES));
 		// Logo
 		/*
 		if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])){
 			//print_r($_FILES);
-			
+
 			$path= $_FILES['file']['tmp_name'];
 			$type = pathinfo($path, PATHINFO_EXTENSION);
 			$data = file_get_contents($path);
diff --git a/interface/web/admin/templates/directive_snippets_edit.htm b/interface/web/admin/templates/directive_snippets_edit.htm
index ee4d2ab3cd84c6ce0a9f75e99d474f65cdfd3e54..4506cafd634189b6be65cf278b1d11fa8909dc6f 100644
--- a/interface/web/admin/templates/directive_snippets_edit.htm
+++ b/interface/web/admin/templates/directive_snippets_edit.htm
@@ -36,7 +36,10 @@
                     {tmpl_var name='active'}
                 </div>
             </div>
-        
+			<div class="form-group">
+				<label for="update_sites" class="col-sm-3 control-label">{tmpl_var name='update_sites_txt'}</label>
+				<div class="col-sm-9">{tmpl_var name='update_sites'}</div>        
+			</div> 
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
             
diff --git a/interface/web/admin/templates/server_config_jailkit_edit.htm b/interface/web/admin/templates/server_config_jailkit_edit.htm
index b7a749147654c6fab6105400cafb7ec691d980c8..4b7028bd3b1449dd7eea31592af54b8234eac230 100644
--- a/interface/web/admin/templates/server_config_jailkit_edit.htm
+++ b/interface/web/admin/templates/server_config_jailkit_edit.htm
@@ -17,6 +17,9 @@
             <div class="form-group">
                 <label for="jailkit_chroot_cron_programs" class="col-sm-3 control-label">{tmpl_var name='jailkit_chroot_cron_programs_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="jailkit_chroot_cron_programs" id="jailkit_chroot_cron_programs" value="{tmpl_var name='jailkit_chroot_cron_programs'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="jailkit_chroot_authorized_keys_template" class="col-sm-3 control-label">{tmpl_var name='jailkit_chroot_authorized_keys_template_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="jailkit_chroot_authorized_keys_template" id="jailkit_chroot_authorized_keys_template" value="{tmpl_var name='jailkit_chroot_authorized_keys_template'}" class="form-control" /></div></div>
         
             
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm
index 6ba37104ef111f91d555c2fd8610e88f7dae6660..1e63cecca8b4a215ccf34e999576d513a3261a4b 100644
--- a/interface/web/admin/templates/server_config_mail_edit.htm
+++ b/interface/web/admin/templates/server_config_mail_edit.htm
@@ -99,6 +99,24 @@
                 <label for="message_size_limit" class="col-sm-3 control-label">{tmpl_var name='message_size_limit_txt'}</label>
                 <div class="col-sm-6"><input type="text" name="message_size_limit" id="message_size_limit" value="{tmpl_var name='message_size_limit'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;MB
             </div></div>
+            <div class="form-group">
+                <label for="realtime_blackhole_list" class="col-sm-3 control-label">{tmpl_var name='realtime_blackhole_list_txt'}</label>
+                <div class="col-sm-6"><input type="text" name="realtime_blackhole_list" id="realtime_blackhole_list" value="{tmpl_var name='realtime_blackhole_list'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='realtime_blackhole_list_note_txt'}
+            </div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='reject_unknown_txt'}</label>
+                <div class="col-sm-9"><a href="#" data-toggle="tooltip" title="{tmpl_var name='tooltip_reject_unknown_txt'}">
+                    <select name="reject_unknown" id="reject_unknown" class="form-control">
+                        {tmpl_var name='reject_unknown'}
+                    </select></a>
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='stress_adaptive_txt'}</label>
+                <div class="col-sm-9">
+                    <a href="#" data-toggle="tooltip" title="{tmpl_var name='tooltip_stress_adaptive_txt'}">{tmpl_var name="stress_adaptive"}</a>
+                </div>
+            </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='mailbox_quota_stats_txt'}</label>
                 <div class="col-sm-9">
@@ -106,10 +124,6 @@
                 </div>
             </div>
             <div class="form-group">
-                <label for="realtime_blackhole_list" class="col-sm-3 control-label">{tmpl_var name='realtime_blackhole_list_txt'}</label>
-                <div class="col-sm-6"><input type="text" name="realtime_blackhole_list" id="realtime_blackhole_list" value="{tmpl_var name='realtime_blackhole_list'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='realtime_blackhole_list_note_txt'}
-            </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">
                     {tmpl_var name='overquota_notify_admin'}
diff --git a/interface/web/admin/templates/system_config_sites_edit.htm b/interface/web/admin/templates/system_config_sites_edit.htm
index 82576d5e53308b0e2bac0e7e89dc5b9c2a481efe..c84b50e6b81ecb3304a4ef68bf8154013545ae89 100644
--- a/interface/web/admin/templates/system_config_sites_edit.htm
+++ b/interface/web/admin/templates/system_config_sites_edit.htm
@@ -26,6 +26,12 @@
             <div class="form-group">
                 <label for="webftp_url" class="col-sm-3 control-label">{tmpl_var name='webftp_url_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="webftp_url" id="webftp_url" value="{tmpl_var name='webftp_url'}" class="form-control" /></div></div>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='client_protection_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='client_protection'}
+                    </div>
+                </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='vhost_subdomains_txt'}</label>
                 <div class="col-sm-9">
@@ -84,10 +90,10 @@
                 <label for="default_remote_dbserver" class="col-sm-3 control-label">{tmpl_var name='default_remote_dbserver_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="default_remote_dbserver" id="default_remote_dbserver" value="{tmpl_var name='default_remote_dbserver'}" class="form-control" /></div>
 	    </div>
- 
-         	
+
+
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
-            
+
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="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>
diff --git a/interface/web/client/domain_edit.php b/interface/web/client/domain_edit.php
index 094e1899be3b8b7eb16f0c1b322d092884d5e851..af7b900b9109a475b20b238c4060f4d5135c635f 100644
--- a/interface/web/client/domain_edit.php
+++ b/interface/web/client/domain_edit.php
@@ -67,7 +67,7 @@ class page_action extends tform_actions {
 
 	function onShowEnd() {
 		global $app, $conf, $wb;
-		
+
 		if($_SESSION["s"]["user"]["typ"] != 'admin' && $this->id == 0) {
 			if(!$app->tform->checkClientLimit('limit_domainmodule')) {
 				$app->uses('ini_parser,getconf');
@@ -100,7 +100,7 @@ class page_action extends tform_actions {
 			$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
 			$client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
 			$client = $app->functions->htmlentities($client);
-			
+
 			// Fill the client select field
 			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
 			//die($sql);
diff --git a/interface/web/dashboard/dashlets/mailquota.php b/interface/web/dashboard/dashlets/mailquota.php
index 4629d6a4630c23bea7fe6d71a3846ca76667da6d..a9434e58eaac846087c77738d9d131ebe4d51abe 100644
--- a/interface/web/dashboard/dashlets/mailquota.php
+++ b/interface/web/dashboard/dashlets/mailquota.php
@@ -21,13 +21,17 @@ class dashlet_mailquota {
 
 		$has_mailquota = false;
 		if(is_array($emails) && !empty($emails)){
+			foreach($emails as &$email) {
+				$email['email'] = $app->functions->idn_decode($email['email']);
+			}
+			unset($email);
 			// email username is quoted in quota.lib already, so no htmlentities here to prevent double encoding
 			//$emails = $app->functions->htmlentities($emails);
 			$tpl->setloop('mailquota', $emails);
 			$has_mailquota = isset($emails[0]['used']);
 		}
 		$tpl->setVar('has_mailquota', $has_mailquota);
-		
+
 		return $tpl->grab();
 	}
 
diff --git a/interface/web/dashboard/dashlets/quota.php b/interface/web/dashboard/dashlets/quota.php
index dfb82d5c242bbe6ad8699e97db26855e1d378829..3fd5adbb85c5843bd51646304cb071f54f1eda33 100644
--- a/interface/web/dashboard/dashlets/quota.php
+++ b/interface/web/dashboard/dashlets/quota.php
@@ -7,9 +7,9 @@ class dashlet_quota {
 
 		//* Loading Template
 		$app->uses('tpl,quota_lib');
-               if (!$app->auth->verify_module_permissions('sites')) {
-                       return;
-               }
+		if (!$app->auth->verify_module_permissions('sites')) {
+				return;
+		}
 
 		$tpl = new tpl;
 		$tpl->newTemplate("dashlets/templates/quota.htm");
@@ -24,6 +24,11 @@ class dashlet_quota {
 
 		$has_quota = false;
 		if(is_array($sites) && !empty($sites)){
+			foreach($sites as &$site) {
+				$site['domain'] = $app->functions->idn_decode($site['domain']);
+			}
+			unset($site);
+
 			$sites = $app->functions->htmlentities($sites);
 			$tpl->setloop('quota', $sites);
 			$has_quota = isset($sites[0]['used']);
diff --git a/interface/web/dns/dns_soa_edit.php b/interface/web/dns/dns_soa_edit.php
index ec5ba67c79de4e675647ab21ea1ba1b823118ce2..e17571e73612e8db511c303479aa3c87aed0ae8c 100644
--- a/interface/web/dns/dns_soa_edit.php
+++ b/interface/web/dns/dns_soa_edit.php
@@ -296,12 +296,17 @@ function onSubmit() {
 
 		$this->dataRecord["xfer"] = preg_replace('/\s+/', '', $this->dataRecord["xfer"]);
 		$this->dataRecord["also_notify"] = preg_replace('/\s+/', '', $this->dataRecord["also_notify"]);
+		
+		if(isset($this->dataRecord['dnssec_wanted']) && $this->dataRecord['dnssec_wanted'] == 'Y' && $this->dataRecord['dnssec_algo'] == '') $this->dataRecord['dnssec_algo'] = 'ECDSAP256SHA256';
 
 		//* Check if a secondary zone with the same name already exists
 		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_slave WHERE origin = ? AND server_id = ?", $this->dataRecord["origin"], $this->dataRecord["server_id"]);
 		if($tmp["number"] > 0) {
 			$app->error($app->tform->wordbook["origin_error_unique"]);
 		}
+		
+		//* 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();
 }
diff --git a/interface/web/dns/dns_wizard.php b/interface/web/dns/dns_wizard.php
index 91b2307dc5126dc3650a1f3a38a754ea135151e9..b2320dc6bf98466d0cb6726870665ffb06a1e41d 100644
--- a/interface/web/dns/dns_wizard.php
+++ b/interface/web/dns/dns_wizard.php
@@ -339,6 +339,7 @@ if($_POST['create'] == 1) {
 	$section = '';
 	$vars = array();
 	$vars['xfer']='';
+	$vars['dnssec_algo']='ECDSAP256SHA256';
 	$dns_rr = array();
 	foreach($tpl_rows as $row) {
 		$row = trim($row);
@@ -398,6 +399,7 @@ if($_POST['create'] == 1) {
 		$xfer = $vars['xfer'];
 		$also_notify = $vars['also_notify'];
 		$update_acl = $vars['update_acl'];
+		$dnssec_algo = $vars['dnssec_algo'];
 		$serial = $app->validate_dns->increase_serial(0);
 
 		$insert_data = array(
@@ -420,7 +422,8 @@ if($_POST['create'] == 1) {
 			"xfer" => $xfer,
 			"also_notify" => $also_notify,
 			"update_acl" => $update_acl,
-			"dnssec_wanted" => $enable_dnssec
+			"dnssec_wanted" => $enable_dnssec,
+			"dnssec_algo" => $dnssec_algo
 		);
 		$dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id');
 		if($dns_soa_id > 0) $app->plugin->raiseEvent('dns:wizard:on_after_insert', $dns_soa_id);
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index cf0d143916c5fe2679777d1756ec96089bac9105..81389c4553f540a2f1ae367fdf7bf5858011bd7f 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -276,6 +276,15 @@ $form["tabs"]['dns_soa'] = array (
 			'default' => 'Y',
 			'value'  => array(0 => 'N', 1 => 'Y')
 		),
+		'dnssec_algo' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOXARRAY',
+			'separator' => ',',
+			'default' => 'ECDSAP256SHA256',
+			'value'  => array('NSEC3RSASHA1' => '7 (NSEC3RSASHA1)','ECDSAP256SHA256' => '13 (ECDSAP256SHA256)'),
+			'width'  => '30',
+			'maxlength' => '255'
+		),
  		'dnssec_info' => array (
  			'datatype' => 'TEXT',
  			'formtype' => 'TEXTAREA',
diff --git a/interface/web/dns/lib/lang/ar_dns_soa.lng b/interface/web/dns/lib/lang/ar_dns_soa.lng
index c9721cebc0e2de6bb770816a544e0b3b8dd3863d..8c13c59e8e67b1fd37768608289f51f01610d997 100644
--- a/interface/web/dns/lib/lang/ar_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_soa.lng b/interface/web/dns/lib/lang/bg_dns_soa.lng
index 151e3ead11483260d8acabf8ac729d7b0a5324c4..9e9e8bf3f50ce64fb5c25ebf642efd6cea336c1f 100644
--- a/interface/web/dns/lib/lang/bg_dns_soa.lng
+++ b/interface/web/dns/lib/lang/bg_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa.lng b/interface/web/dns/lib/lang/br_dns_soa.lng
index f5385c4706b98e51611e803341ac3ea1a4f35ac4..f1cb453e9959cf0b883cad31460a9982bd4d1ebe 100644
--- a/interface/web/dns/lib/lang/br_dns_soa.lng
+++ b/interface/web/dns/lib/lang/br_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['ttl_range_error'] = 'Intervalo mínimo do TTL são 60 segundos.';
 $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido para esta conta.';
 $wb['soa_cannot_be_changed_txt'] = 'A zona (SOA) não pode ser alterada. Por favor, contate o administrador se deseja alterar esta zona.';
 $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO';
+$wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_soa.lng b/interface/web/dns/lib/lang/ca_dns_soa.lng
index 0b6759f07372f84c449c17942f8c4ca849225a53..ee2fdb07b64c3a188cca64d12fe20b6129c21f69 100644
--- a/interface/web/dns/lib/lang/ca_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_soa.lng b/interface/web/dns/lib/lang/cz_dns_soa.lng
index cb35f0ef3bbe946036dd51179d8f5c0ef92ce730..ba6b2d4b52b6ac8d3d0ffa770ee5f02b2f5133fd 100644
--- a/interface/web/dns/lib/lang/cz_dns_soa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'Když deaktivujete DNSSEC klíče nebudou odstraně
 $wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
 $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.';
 $wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
+$wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_soa.lng b/interface/web/dns/lib/lang/de_dns_soa.lng
index 76d139391ddb580830e537c7050f09171d3bc943..14897b24e45fd86dbca1e4ddfc95d3317c6aae4b 100644
--- a/interface/web/dns/lib/lang/de_dns_soa.lng
+++ b/interface/web/dns/lib/lang/de_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['xfer_error_regex'] = 'Zonentransfer: Verwenden Sie eine oder mehrere durch
 $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['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';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_soa.lng b/interface/web/dns/lib/lang/dk_dns_soa.lng
index 6a3d71d973588f748bbda7b7d566a23442ed8a8a..a4ff50f14fa3f705e59b6ba19472bf8bd5f7ad5d 100644
--- a/interface/web/dns/lib/lang/dk_dns_soa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
 $wb['soa_cannot_be_changed_txt'] = 'The Zone (SOA) can not be changed. Please contact your administrator to change the zone.';
 $wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
+$wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_soa.lng b/interface/web/dns/lib/lang/el_dns_soa.lng
index 4d8c876d28aab75d4c6e893dcd1667363f9cf758..aae62bef7618261ef0cb8e116287d33db8a68931 100644
--- a/interface/web/dns/lib/lang/el_dns_soa.lng
+++ b/interface/web/dns/lib/lang/el_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng
index 1729a4d0cbe9b2e3a311462517c1dc811e11460c..7d130b34b03223a5ef82db646e913d652b39bd17 100644
--- a/interface/web/dns/lib/lang/en_dns_soa.lng
+++ b/interface/web/dns/lib/lang/en_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
 $wb['soa_cannot_be_changed_txt'] = 'The Zone (SOA) can not be changed. Please contact your administrator to change the zone.';
 $wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
+$wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
 ?>
diff --git a/interface/web/dns/lib/lang/es_dns_soa.lng b/interface/web/dns/lib/lang/es_dns_soa.lng
index 23f4cc5ffcfb53f784333a43965cfdd740cbac0c..b1484e749a0258b43ed279ca159226a451badb81 100644
--- a/interface/web/dns/lib/lang/es_dns_soa.lng
+++ b/interface/web/dns/lib/lang/es_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['update_acl_txt'] = 'Actualizar ACL';
 $wb['xfer_error_regex'] = 'Notificar también a: Por favor, usa una dirección IP.';
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_soa.lng b/interface/web/dns/lib/lang/fi_dns_soa.lng
index 3e106259677bea687262bb3cc99098c89e901c9c..b34b2893fdf514db92a3da4c8f8692066aaca771 100644
--- a/interface/web/dns/lib/lang/fi_dns_soa.lng
+++ b/interface/web/dns/lib/lang/fi_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_soa.lng b/interface/web/dns/lib/lang/fr_dns_soa.lng
index da63faadbdea9adab67fa598a1331997d941d246..d2449c323e9a95cb966fd7f9497699a7044f51db 100644
--- a/interface/web/dns/lib/lang/fr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_soa.lng b/interface/web/dns/lib/lang/hr_dns_soa.lng
index b4a9f2f9b0ad77b8808ab250735d93de8486d451..d738ff1e184cb52628d8aa105c16cc92503a60bb 100644
--- a/interface/web/dns/lib/lang/hr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/hr_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_soa.lng b/interface/web/dns/lib/lang/hu_dns_soa.lng
index 401961408864d7817ba7e8c5f4b4ecbc3b02d7c8..445de86d69c7c8d8f1d73a0fa49b5dcbe94e97c4 100644
--- a/interface/web/dns/lib/lang/hu_dns_soa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_soa.lng b/interface/web/dns/lib/lang/id_dns_soa.lng
index c42890b71c1ae0cd010a138d54c21fd6e0016403..c9a43ad057a07bc4a12a16b6a90b737f9f58217b 100644
--- a/interface/web/dns/lib/lang/id_dns_soa.lng
+++ b/interface/web/dns/lib/lang/id_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_soa.lng b/interface/web/dns/lib/lang/it_dns_soa.lng
index 7ca3cb1cb13f1f104d5aad6516d522735045182d..714c6c70566c3af03ee5395ccc5790a8b86273c9 100644
--- a/interface/web/dns/lib/lang/it_dns_soa.lng
+++ b/interface/web/dns/lib/lang/it_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_soa.lng b/interface/web/dns/lib/lang/ja_dns_soa.lng
index 3964f3fcdb73888f6c3208043b4cb7adf29e425e..7ab57997508202e5496ae098ccb59a2b0bf4c2b6 100644
--- a/interface/web/dns/lib/lang/ja_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_soa.lng b/interface/web/dns/lib/lang/nl_dns_soa.lng
index 121339c00ca296b5b108516fb406c98edd4e7f4c..1f875df3c9007659806b6e48a22fb3f1497ba89e 100644
--- a/interface/web/dns/lib/lang/nl_dns_soa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_soa.lng b/interface/web/dns/lib/lang/pl_dns_soa.lng
index 1724c4c141c77a15d08c93021ca7ee2d3f189fe0..7502a592372707764358fde63333b8ef0938ee9d 100644
--- a/interface/web/dns/lib/lang/pl_dns_soa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_soa.lng b/interface/web/dns/lib/lang/pt_dns_soa.lng
index bdcc1660ff0e7f4b9a348ce678520aea214d8ed9..7b6ac864a163decd043ef4d35429c532a3df92ee 100644
--- a/interface/web/dns/lib/lang/pt_dns_soa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_soa.lng b/interface/web/dns/lib/lang/ro_dns_soa.lng
index 40607318f713d7a08f4d87dd24425e1b0f60e44e..9ae957f2406129be0f0b27645946c2efe6ab713e 100644
--- a/interface/web/dns/lib/lang/ro_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_soa.lng b/interface/web/dns/lib/lang/ru_dns_soa.lng
index 7bd15cd63858f16b496326756fe8b652902e63b7..f6043010d4e021d4d677e6fca002456e924cb3f3 100644
--- a/interface/web/dns/lib/lang/ru_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'При отключении DNSSEC ключи не
 $wb['error_not_allowed_server_id'] = 'Выбранный сервер не доступен для этой учетной записи.';
 $wb['soa_cannot_be_changed_txt'] = 'Зона (SOA) не может быть изменена. Пожалуйста, обратитесь к администратору, чтобы изменить зону.';
 $wb['configuration_error_txt'] = 'ОШИБКА КОНФИГУРАЦИИ';
+$wb['dnssec_algo_txt'] = 'DNSSEC Algorithm';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_soa.lng b/interface/web/dns/lib/lang/se_dns_soa.lng
index cfeb2f9fde36215601657786424c558134aeb70b..8e380f85a3f79c217c0fc0fb59009e6e197bc64d 100644
--- a/interface/web/dns/lib/lang/se_dns_soa.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_soa.lng b/interface/web/dns/lib/lang/sk_dns_soa.lng
index 79d49eee92d6136f143f0d8a477f66c2b5b3a663..c96399cc4ec4b433264bfa75e111d3b66334d467 100644
--- a/interface/web/dns/lib/lang/sk_dns_soa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be dele
 $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';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa.lng b/interface/web/dns/lib/lang/tr_dns_soa.lng
index fd39de04f5e9742c3717bb77a33e6d25908a1a16..e5d55678cbd42f76353d2923d1c5d252c9c6d81a 100644
--- a/interface/web/dns/lib/lang/tr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_soa.lng
@@ -41,4 +41,5 @@ $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 $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';
 ?>
diff --git a/interface/web/dns/templates/dns_soa_edit.htm b/interface/web/dns/templates/dns_soa_edit.htm
index c34e8a341647dcb0972b7f784be7d3b26c8842a0..e16faac1aa5c4d9ea1641abb9f92ab70f631c5c4 100644
--- a/interface/web/dns/templates/dns_soa_edit.htm
+++ b/interface/web/dns/templates/dns_soa_edit.htm
@@ -136,6 +136,10 @@
                 <div class="col-sm-9">
                     {tmpl_var name='dnssec_wanted'}<br /><small>({tmpl_var name='dnssec_wanted_info'})</small>
                 </div>
+            </div>
+			<div class="form-group">
+                <label for="dnssec_algo" class="col-sm-3 control-label">{tmpl_var name='dnssec_algo_txt'}</label>
+                <div class="col-sm-9">{tmpl_var name='dnssec_algo'}</div>
             </div>
             <div class="form-group">
                 <label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='dnssec_info_txt'}</label>
diff --git a/interface/web/login/lib/lang/ar_login_as.lng b/interface/web/login/lib/lang/ar_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/ar_login_as.lng
+++ b/interface/web/login/lib/lang/ar_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/bg_login_as.lng b/interface/web/login/lib/lang/bg_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/bg_login_as.lng
+++ b/interface/web/login/lib/lang/bg_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/br_login_as.lng b/interface/web/login/lib/lang/br_login_as.lng
index 72c2c97e408f995aedce3bff5c0b461d535f80e8..1dde30d907c295c97daa6fd55264833b9b8c896e 100644
--- a/interface/web/login/lib/lang/br_login_as.lng
+++ b/interface/web/login/lib/lang/br_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Já existe uma regra de firewall idêntica para
 $wb['tcp_ports_error_regex'] = 'Caractere não permitido para porta tcp. Caracteres permitidos são números, ":" e ",".';
 $wb['udp_ports_error_regex'] = 'Caractere não permitido para porta udp. Caracteres permitidos são números, ":" e ",".';
 $wb['login_as_or_logout_txt'] = 'Gostaria de realizar acesso novamente como {UTYPE} ou sair?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/ca_login_as.lng b/interface/web/login/lib/lang/ca_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/ca_login_as.lng
+++ b/interface/web/login/lib/lang/ca_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/cz_login_as.lng b/interface/web/login/lib/lang/cz_login_as.lng
index 53629ac2a5127b46fd872adcec215632b5479dc2..1d99176adb151901e2d9a1e485cd87c15e73034e 100644
--- a/interface/web/login/lib/lang/cz_login_as.lng
+++ b/interface/web/login/lib/lang/cz_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Pro tento server již existuje záznam firewallu
 $wb['tcp_ports_error_regex'] = 'Znak není povole v definici TCP portu. Povolené symboly jsou čísla, : a ,.';
 $wb['udp_ports_error_regex'] = 'Znak není povole v definici UDP portu. Povolené symboly jsou čísla, : a ,.';
 $wb['login_as_or_logout_txt'] = 'Chcete se znovu přihlásit jako uživatel {UTYPE} nebo se chcete odhlásit ?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/de_login_as.lng b/interface/web/login/lib/lang/de_login_as.lng
index 4baa195d3a71735586dba972a96b968d0cbf70da..11fd4101636972a6bb5ec5850e804c350fb9df55 100644
--- a/interface/web/login/lib/lang/de_login_as.lng
+++ b/interface/web/login/lib/lang/de_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Es gibt bereits einen Firewalleintrag für diese
 $wb['tcp_ports_error_regex'] = 'Es sind nur Zahlen in der TCP Port Definition erlaubt. ';
 $wb['udp_ports_error_regex'] = 'Es sind nur Zahlen in der UDP Port Definition erlaubt., ';
 $wb['login_as_or_logout_txt'] = 'Wollen Sie sich wieder als {UTYPE} anmelden oder sich abmelden?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/dk_login_as.lng b/interface/web/login/lib/lang/dk_login_as.lng
index bebcf165a7bf2a78b5ba13d7eb1d47d41c214e4c..b68874abbe4bec425b8577d862b9ce5a79b42950 100644
--- a/interface/web/login/lib/lang/dk_login_as.lng
+++ b/interface/web/login/lib/lang/dk_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Der er allerede en firewall post for denne serve
 $wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i TCP port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
 $wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i UDP port definition. Tilladt tegn er tal, \\":\\" og \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/el_login_as.lng b/interface/web/login/lib/lang/el_login_as.lng
index 435d3e9a69eeb7f79abbc9c30d98ecaf32913529..db16d0d6d31f10a2af1079e06ea637f7e8a61cfd 100644
--- a/interface/web/login/lib/lang/el_login_as.lng
+++ b/interface/web/login/lib/lang/el_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Υπάρχει ήδη μια εγγραφή Fire
 $wb['tcp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας tcp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \\":\\" και οι \\",\\".';
 $wb['udp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας udp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \\":\\" και οι \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/en_login_as.lng b/interface/web/login/lib/lang/en_login_as.lng
index d1f98c8806204e162954107caf753aa174153295..c849db3d04b724f0ae8a65de2dff4b6ca43e38f3 100644
--- a/interface/web/login/lib/lang/en_login_as.lng
+++ b/interface/web/login/lib/lang/en_login_as.lng
@@ -10,4 +10,6 @@ $wb["active_txt"] = 'Active';
 $wb["tcp_ports_error_regex"] = 'Character not allowed in tcp port definition. Allowed characters are numbers, ":" and ",".';
 $wb["udp_ports_error_regex"] = 'Character not allowed in udp port definition. Allowed characters are numbers, ":" and ",".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
\ No newline at end of file
diff --git a/interface/web/login/lib/lang/es_login_as.lng b/interface/web/login/lib/lang/es_login_as.lng
index b7f3e21f987f2ca4016eeaf3834b4e5445983571..d0faac1b8029288c5c7b00659920175882b2a2c8 100644
--- a/interface/web/login/lib/lang/es_login_as.lng
+++ b/interface/web/login/lib/lang/es_login_as.lng
@@ -9,4 +9,6 @@ $wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de pu
 $wb['udp_port_help_txt'] = 'Separado por comas';
 $wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \\":\\" y \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/fi_login_as.lng b/interface/web/login/lib/lang/fi_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/fi_login_as.lng
+++ b/interface/web/login/lib/lang/fi_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/fr_login_as.lng b/interface/web/login/lib/lang/fr_login_as.lng
index 55c9f6df5b6a302d260b83c3e61b0f668d7f5154..0612b4a47f156332b447acea33fc082c3fc0679c 100644
--- a/interface/web/login/lib/lang/fr_login_as.lng
+++ b/interface/web/login/lib/lang/fr_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Caractère non autorisé dans la règle de port TCP. Les caractères autorisés sont : les chiffres, « : » et « , ».';
 $wb['udp_ports_error_regex'] = 'Caractère non autorisé dans la règle de port UDP. Les caractères autorisés sont : les chiffres, « : » et « , ».';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/hr_login_as.lng b/interface/web/login/lib/lang/hr_login_as.lng
index bcd13040d38363cad1bddf8ed3953ad13edbbeb8..a5704bee2d74600a2e8a0b6f425f644b1be868df 100644
--- a/interface/web/login/lib/lang/hr_login_as.lng
+++ b/interface/web/login/lib/lang/hr_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/hu_login_as.lng b/interface/web/login/lib/lang/hu_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/hu_login_as.lng
+++ b/interface/web/login/lib/lang/hu_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/id_login_as.lng b/interface/web/login/lib/lang/id_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/id_login_as.lng
+++ b/interface/web/login/lib/lang/id_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/it_login_as.lng b/interface/web/login/lib/lang/it_login_as.lng
index 3fa23da2741f0911bc933af3a615b675507813b3..9675cd148878d3e60e5e4b5af679c09264a5fce2 100644
--- a/interface/web/login/lib/lang/it_login_as.lng
+++ b/interface/web/login/lib/lang/it_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Esiste già un record firewall per questo server
 $wb['tcp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta tcp. Sono consentiti caratteri numerici, \\":\\" e \\",\\".';
 $wb['udp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta udp. ono consentiti caratteri numerici, \\":\\" e \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/ja_login_as.lng b/interface/web/login/lib/lang/ja_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/ja_login_as.lng
+++ b/interface/web/login/lib/lang/ja_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/nl_login_as.lng b/interface/web/login/lib/lang/nl_login_as.lng
index d4d2715e7a664a3aa0b7b0b2b89503dc3caf546c..1710f0e4f875b070b55e7eb2802087dddb68ad9c 100644
--- a/interface/web/login/lib/lang/nl_login_as.lng
+++ b/interface/web/login/lib/lang/nl_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/pl_login_as.lng b/interface/web/login/lib/lang/pl_login_as.lng
index fd673484d7bfbbc44175d3939d12fb48c5a20593..2f1d818660ed99b3d90ec8085093bf3a90a680c2 100644
--- a/interface/web/login/lib/lang/pl_login_as.lng
+++ b/interface/web/login/lib/lang/pl_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Istnieje już wpis firewalla dla tego serwera.';
 $wb['tcp_ports_error_regex'] = 'Niedozwolony znam w definicji portu TCP. Dozwolone sÄ… liczby, dwukropek i przecinek (: i ,)';
 $wb['udp_ports_error_regex'] = 'Niedozwolony znam w definicji portu UDP. Dozwolone sÄ… liczby, dwukropek i przecinek (: i ,)';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/pt_login_as.lng b/interface/web/login/lib/lang/pt_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/pt_login_as.lng
+++ b/interface/web/login/lib/lang/pt_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/ro_login_as.lng b/interface/web/login/lib/lang/ro_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/ro_login_as.lng
+++ b/interface/web/login/lib/lang/ro_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/ru_login_as.lng b/interface/web/login/lib/lang/ru_login_as.lng
index 63031d4d09acfffe0ab3bc0f64997949a92294cd..b15812dce3ddc681914d0493720838d054743715 100644
--- a/interface/web/login/lib/lang/ru_login_as.lng
+++ b/interface/web/login/lib/lang/ru_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Уже есть такая запись бред
 $wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, \\":\\" и \\",\\"';
 $wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, \\":\\" и \\",\\"';
 $wb['login_as_or_logout_txt'] = 'Вы хотите заново войти как {UTYPE} или выйти?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/se_login_as.lng b/interface/web/login/lib/lang/se_login_as.lng
index 17a82080dc9defec177c24ad06092da45f1a7e07..34b02cb1e9a959bb86c1b2a5df5a32c3ed137dd1 100644
--- a/interface/web/login/lib/lang/se_login_as.lng
+++ b/interface/web/login/lib/lang/se_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/sk_login_as.lng b/interface/web/login/lib/lang/sk_login_as.lng
index cf75b54b47a852400eec51271488e41ea64e69c4..f5bff0745f5d278ab2e73c63efc3009f3947f0bb 100644
--- a/interface/web/login/lib/lang/sk_login_as.lng
+++ b/interface/web/login/lib/lang/sk_login_as.lng
@@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
 $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/lib/lang/tr_login_as.lng b/interface/web/login/lib/lang/tr_login_as.lng
index 8a54a8efd9889f48caeebf2555d79c9ea66782f6..d2a3a4bfb3939d4152dd785d4bc241faaa7211b1 100644
--- a/interface/web/login/lib/lang/tr_login_as.lng
+++ b/interface/web/login/lib/lang/tr_login_as.lng
@@ -10,4 +10,6 @@ $wb['active_txt'] = 'Etkin';
 $wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
 $wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, ":" ve "," karakterleri kullanılabilir.';
 $wb['login_as_or_logout_txt'] = '{UTYPE} olarak oturum açmak ya da oturumunuzu kapatmak ister misiniz?';
+$wb['btn_reloginas_txt'] = 'Yes, re-login as %s';
+$wb['btn_nologout_txt'] = 'No, logout';
 ?>
diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php
index fa60fba63298f271f42036ce82ae34c8c4c6e9f8..cfe405498e495332ec88a92ddf9ff972ddb5b47c 100644
--- a/interface/web/login/logout.php
+++ b/interface/web/login/logout.php
@@ -54,9 +54,9 @@ if ((isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin'
 		<input type="hidden" name="s_pg" value="index" />
 		<input type="hidden" name="login_as" value="1" />
 	    <div class="wf_actions buttons">
-	      <button class="btn btn-default formbutton-success" type="button" value="Yes, re-login as ' . $utype . '" data-submit-form="pageForm" data-form-action="login/index.php"><span>Yes, re-login as ' . $utype . '</span></button>
-	      <button class="btn btn-default formbutton-default" type="button" value="No, logout" data-load-content="login/logout.php?l=1"><span>No, logout</span></button>
-	    </div>
+			  <button class="btn btn-default formbutton-success" type="button" value="' . sprintf($wb['btn_reloginas_txt'], $utype) . '" data-submit-form="pageForm" data-form-action="/login/index.php"><span>' . sprintf($wb['btn_reloginas_txt'], $utype) . '</span></button>
+				<button class="btn btn-default formbutton-default" type="button" value="' . $wb['btn_nologout_txt'] . '" data-load-content="login/logout.php?l=1"><span>' . $wb['btn_nologout_txt'] . '</span></button>
+			</div>
 	';
 	exit;
 }
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 8fb6c4a69227b51a66c7d41cd1b57c0aab9b5a51..67330f465860f0c129ea319c1ee8acdbd1429761 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -199,14 +199,15 @@ $form["tabs"]['mailuser'] = array(
 				2 => array( 'event' => 'SAVE',
 					'type' => 'TOLOWER')
 			),
-			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex'=>'/^(\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,63}){0,1}(,\s*\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\.[a-z\-]{2,63}){0,}$/i',
+			'validators' => array (  0 => array ( 'type' => 'ISEMAILADDRESS',
+					'allowempty' => 'y',
 					'errmsg'=> 'sender_cc_error_isemail'),
 			),
 			'default' => '',
 			'value'  => '',
 			'width'  => '30',
-			'maxlength' => '255'
+			'maxlength' => '255',
+			'searchable' => 2
 		),
 		'maildir' => array (
 			'datatype' => 'VARCHAR',
@@ -292,6 +293,12 @@ $form["tabs"]['mailuser'] = array(
 			'default' => 'n',
 			'value'  => array(1 => 'y', 0 => 'n')
 		),
+		'disabledeliver' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(1 => 'y', 0 => 'n')
+		),
 		'disableimap' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'CHECKBOX',
@@ -364,10 +371,6 @@ if ($global_config['mail']['mailbox_show_autoresponder_tab'] === 'y') {
 					0 => array ( 'type' => 'ISDATETIME',
 						'allowempty' => 'y',
 						'errmsg'=> 'autoresponder_start_date_is_no_date'),
-					1 => array ( 'type' => 'CUSTOM',
-						'class' => 'validate_autoresponder',
-						'function' => 'start_date',
-						'errmsg'=> 'autoresponder_start_date_is_required'),
 				)
 			),
 			'autoresponder_end_date' => array (
@@ -402,9 +405,9 @@ if ($global_config['mail']['mailbox_show_mail_filter_tab'] === 'y') {
 			//#################################
 			'move_junk' => array (
 				'datatype' => 'VARCHAR',
-				'formtype' => 'CHECKBOX',
-				'default' => 'n',
-				'value'  => array(0 => 'n', 1 => 'y')
+				'formtype' => 'SELECT',
+				'default' => 'y',
+				'value' => array('y' => 'move_junk_y_txt', 'a' => 'move_junk_a_txt', 'n' => 'move_junk_n_txt'),
 			),
 			'purge_trash_days' => array (
 				'datatype' => 'VARCHAR',
diff --git a/interface/web/mail/lib/lang/ar_mail_user.lng b/interface/web/mail/lib/lang/ar_mail_user.lng
index 9d4828b55753a597f85fa138386cd7f4ebad0500..829de6a749ee61bdebeb6f6bb27e8e37fea648cf 100644
--- a/interface/web/mail/lib/lang/ar_mail_user.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user.lng
@@ -11,7 +11,7 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['no_domain_perm'] = 'You have no permission for this domain.';
 $wb['error_no_pwd'] = 'Password is empty.';
 $wb['quota_error_isint'] = 'Mailbox size must be a number.';
@@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Aerver_id';
 $wb['password_txt'] = 'Password';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
@@ -31,6 +32,9 @@ $wb['disablepop3_txt'] = 'Disable POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
 $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$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['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
@@ -56,11 +60,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/ar_mail_user_list.lng b/interface/web/mail/lib/lang/ar_mail_user_list.lng
index 0bb531f78596ebc6754618202dd477a7f65aebdd..bf905ed40ac64cd90ebd0ba86e38559c2ed64c8f 100644
--- a/interface/web/mail/lib/lang/ar_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/bg_mail_user.lng b/interface/web/mail/lib/lang/bg_mail_user.lng
index 1b9595da42dc26f845a41b36f24cfa9c73bcd29a..126ec603d22d3d754816487e7881e22ff20ed77d 100644
--- a/interface/web/mail/lib/lang/bg_mail_user.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user.lng
@@ -16,6 +16,7 @@ $wb['server_id_txt'] = 'server_id';
 $wb['password_txt'] = 'парола';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Разреши получаване';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Разреши достъп';
 $wb['policy_txt'] = 'Спам филтър';
@@ -31,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'Датата на старта нем
 $wb['autoresponder_end_date_txt'] = 'Край на';
 $wb['autoresponder_end_date_isgreater'] = 'датата на края неможе да бъде преди датата за старт.';
 $wb['move_junk_txt'] = 'Премести СПАМ пощата в Директорията Боклуци';
+$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['name_txt'] = 'Реално име ';
 $wb['name_optional_txt'] = '(По желание)';
 $wb['autoresponder_active'] = 'Разреши автоматичен отговор';
@@ -50,7 +54,10 @@ $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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';
@@ -60,7 +67,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/bg_mail_user_filter.lng b/interface/web/mail/lib/lang/bg_mail_user_filter.lng
index 9eb3325c72dcc1c433fd6b38c82c0e6f447c48a5..6929752c5afb0a0051fb343bc1946eeedc1dc2d5 100644
--- a/interface/web/mail/lib/lang/bg_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Максималният брой на емайл
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
 $wb['to_txt'] = 'До';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Описание';
 $wb['is_txt'] = 'е';
 $wb['begins_with_txt'] = 'Начало с';
diff --git a/interface/web/mail/lib/lang/bg_mail_user_list.lng b/interface/web/mail/lib/lang/bg_mail_user_list.lng
index 9ccdb51124f5467d79197742c30b2c1036bb4416..f761ea4f2384fe7d77fc487ed46e805acff9b702 100644
--- a/interface/web/mail/lib/lang/bg_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Истинско име';
 $wb['login_txt'] = 'Вход';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/br_mail_user.lng b/interface/web/mail/lib/lang/br_mail_user.lng
index 2abe1931f688ef7c5dd53cc1518f8eab7015bf6e..8e3edd6950c29b2420f8f10d5f4dc54cbbb023f7 100644
--- a/interface/web/mail/lib/lang/br_mail_user.lng
+++ b/interface/web/mail/lib/lang/br_mail_user.lng
@@ -14,7 +14,6 @@ $wb['autoresponder_start_date_txt'] = 'Iniciar em';
 $wb['autoresponder_start_date_ispast'] = 'O campo "Iniciar em" não pode ser menor que a data atual.';
 $wb['autoresponder_end_date_txt'] = 'Terminar em';
 $wb['autoresponder_end_date_isgreater'] = 'O campo "Terminar em" deve ser configurado e não pode ser menor ou igual a data atual.';
-$wb['autoresponder_start_date_is_required'] = 'Data iniciar deve ser configurado quando a opção de auto-resposta estiver habilitada.';
 $wb['no_domain_perm'] = 'Você não tem permissão para este domínio.';
 $wb['error_no_pwd'] = 'A senha está em branco.';
 $wb['quota_error_isint'] = 'O tamanho da conta de e-mail deve ser um número.';
@@ -24,6 +23,7 @@ $wb['password_txt'] = 'Senha';
 $wb['password_click_to_set_txt'] = 'Clique para configurar';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Habilitar recebimento';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Habilitar greylist';
 $wb['access_txt'] = 'Habilitar acesso';
 $wb['policy_txt'] = 'Filtros anti-spam';
@@ -31,11 +31,17 @@ $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'O limite de contas de e-mail para esta conta foi alcançado.';
 $wb['limit_mailquota_txt'] = 'O limite de tamanho para as contas de e-mails foi alcançado. O espaço disponível em MB é';
 $wb['disablesmtp_txt'] = 'Desabilitar SMTP (envio)';
+$wb['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['disableimap_txt'] = 'Desabilitar IMAP';
 $wb['disablepop3_txt'] = 'Desabilitar POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Já existe um alias ou encaminhamento para este endereço de e-mail.';
 $wb['quota_error_value'] = 'Valor da cota é inválido. Valores permitidos são: 0 para ilimitado ou números > 1.';
 $wb['move_junk_txt'] = 'Mover e-mails marcados como spam para o diretório junk.';
+$wb["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['name_txt'] = 'Nome';
 $wb['name_optional_txt'] = '(Opcional)';
 $wb['autoresponder_active'] = 'Habilitar auto-resposta';
@@ -61,7 +67,7 @@ $wb['weekly_backup_txt'] = 'Semanal';
 $wb['monthly_backup_txt'] = 'Mensal';
 $wb['email_error_isascii'] = 'Por favor, não use caracteres especiais para a senha. Isto poderá causar problemas no cliente de e-mail.';
 $wb['cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
-$wb['sender_cc_note_txt'] = '(separar múltiplos endereços de e-mails com vírgulas)';
+$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';
diff --git a/interface/web/mail/lib/lang/br_mail_user_filter.lng b/interface/web/mail/lib/lang/br_mail_user_filter.lng
index 54ae96d6928405c3340ae39329810eee1308092f..226b7e2722db81b3a60be7f29cfe783bde426f68 100644
--- a/interface/web/mail/lib/lang/br_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'O limite de filtros de e-mail foi alcançado.';
 $wb['subject_txt'] = 'Assunto';
 $wb['from_txt'] = 'De';
 $wb['to_txt'] = 'Para';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contêm';
 $wb['is_txt'] = 'é';
 $wb['begins_with_txt'] = 'Iniciando com';
diff --git a/interface/web/mail/lib/lang/br_mail_user_list.lng b/interface/web/mail/lib/lang/br_mail_user_list.lng
index 3cd9c51740c34a920ef77ae282a5241c6e4dd9a6..01db69051535d1874697803d23101253d97e723c 100644
--- a/interface/web/mail/lib/lang/br_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nome real';
 $wb['login_txt'] = 'acesso';
 $wb['postfix_txt'] = 'Recebendo';
 $wb['disablesmtp_txt'] = 'SMTP (envio)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/ca_mail_user.lng b/interface/web/mail/lib/lang/ca_mail_user.lng
index 08c9bc78ecbf568bdc4c6d7757f14606172da1a4..7fd4263e976aaa94d92480bd5c28401c4e977aa5 100644
--- a/interface/web/mail/lib/lang/ca_mail_user.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user.lng
@@ -16,6 +16,7 @@ $wb['server_id_txt'] = 'ID Serveur';
 $wb['password_txt'] = 'Mot de passe';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Activer l\'accès';
 $wb['policy_txt'] = 'Filtre antispam';
 $wb['inherit_policy'] = '- Inherit domain setting -';
@@ -30,6 +31,9 @@ $wb['autoresponder_end_date_txt'] = 'Terminer le';
 $wb['autoresponder_end_date_isgreater'] = 'La date de fin doit être saisie et doit être ultérieure à la date de début.';
 $wb['quota_error_value'] = 'Valeur de quota invalide. Les valeurs de quota autorisées sont : 0 pour illimité ou nombres > 1';
 $wb['move_junk_txt'] = 'Déplacer le spam vers le dossier 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['name_txt'] = 'Nom véritable';
 $wb['name_optional_txt'] = '(Optionnel)';
 $wb['autoresponder_active'] = 'Activer le répondeur automatique';
@@ -48,9 +52,11 @@ $wb['repeat_password_txt'] = 'Retaper le mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
 $wb['disablesmtp_txt'] = 'Désactiver SMTP (envoi)';
+$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['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Séparer chaque adresses par une virgule)';
-$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';
@@ -60,7 +66,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/ca_mail_user_list.lng b/interface/web/mail/lib/lang/ca_mail_user_list.lng
index c3b79e38be69c3449abce2b75051960a6bb4d375..8d6ae9c30e35c2be86956722f61310480eb44937 100644
--- a/interface/web/mail/lib/lang/ca_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nom véritable';
 $wb['login_txt'] = 'Nom d\'utilisateur';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/cz_mail_user.lng b/interface/web/mail/lib/lang/cz_mail_user.lng
index fb09f0c0a029e5b5ca34b39bb3cde771cb8a5da6..835f2918c1dc2589745fe9c8cea89367dd523c53 100644
--- a/interface/web/mail/lib/lang/cz_mail_user.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user.lng
@@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server_id';
 $wb['password_txt'] = 'Heslo';
 $wb['maildir_txt'] = 'E-mailový adresář';
 $wb['postfix_txt'] = 'Povolit příjem';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Povolit přístup';
 $wb['policy_txt'] = 'Spamový filtr';
 $wb['inherit_policy'] = '- Inherit domain setting -';
@@ -30,6 +31,9 @@ $wb['disablepop3_txt'] = 'Zakázat POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Alias nebo přesměrování s touto adresou již existuje.';
 $wb['quota_error_value'] = 'Chybná hodnota kvóty. Povolené hodnoty jsou: 0 pro neomezeno nebo čísla > 1';
 $wb['move_junk_txt'] = 'Přesunout e-maily detekované jako spam do adresáře 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['name_txt'] = 'Skutečné jméno';
 $wb['name_optional_txt'] = '(volitelné)';
 $wb['autoresponder_active'] = 'Povolit automatický odpovídač';
@@ -49,7 +53,9 @@ $wb['password_mismatch_txt'] = 'Hesla se neshodují.';
 $wb['password_match_txt'] = 'Hesla se shodují.';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Při posílání kopií na více e-mailových adres, oddělte čárkami.)';
-$wb['disablesmtp_txt'] = 'Zakázat SMTP (pouze odesílání)';
+$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'] = 'Povolit greylisting';
 $wb['sender_cc_txt'] = 'Odeslat odchozí kopii na';
@@ -60,7 +66,7 @@ $wb['no_backup_txt'] = 'Žádná záloha';
 $wb['daily_backup_txt'] = 'Denní';
 $wb['weekly_backup_txt'] = 'Týdenní';
 $wb['monthly_backup_txt'] = 'Měsíční';
-$wb['sender_cc_note_txt'] = '(Při posílání kopií na více e-mailových adres, oddělte čárkami.) ';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Pro nastavení klikni zde';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/cz_mail_user_filter.lng b/interface/web/mail/lib/lang/cz_mail_user_filter.lng
index 9bd358063506902d11edfd038366492f0cde857f..3f5357f73538dd57536be651102932b17ce7ce21 100644
--- a/interface/web/mail/lib/lang/cz_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Byl dosažen max. počet e-mailový filtrovacích
 $wb['subject_txt'] = 'Předmět';
 $wb['from_txt'] = 'Odesílatel';
 $wb['to_txt'] = 'Příjemce (adresát)';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Obsahuje';
 $wb['is_txt'] = 'Je';
 $wb['begins_with_txt'] = 'Začíná na';
diff --git a/interface/web/mail/lib/lang/cz_mail_user_list.lng b/interface/web/mail/lib/lang/cz_mail_user_list.lng
index e4e224159950bc77f08171e01f271988e71d3857..dcca69d8fe62d5adaf0b20364706005ee25cf55b 100644
--- a/interface/web/mail/lib/lang/cz_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Skutečný název';
 $wb['login_txt'] = 'Přihlášení';
 $wb['postfix_txt'] = 'Příjem';
 $wb['disablesmtp_txt'] = 'SMTP (odesílání)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/de_backup_stats_list.lng b/interface/web/mail/lib/lang/de_backup_stats_list.lng
index 9e14533068b6ba433a9d368d78ceb00fcf7ceff0..9147d3cbd6e03abec15051bd166b7c10ed041c24 100644
--- a/interface/web/mail/lib/lang/de_backup_stats_list.lng
+++ b/interface/web/mail/lib/lang/de_backup_stats_list.lng
@@ -5,5 +5,5 @@ $wb['domain_txt'] = 'Email';
 $wb['backup_count_txt'] = 'Anz. Backups';
 $wb['backup_server_txt'] = 'Server';
 $wb['backup_interval_txt'] = 'Intervall / Anz.';
-$wb['backup_size_txt'] = 'Backupgrösse';
+$wb['backup_size_txt'] = 'Backupgröße';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_alias.lng b/interface/web/mail/lib/lang/de_mail_alias.lng
index 211f0065fa0e44d05f62798fd1f36a9afebba151..4cdcd03a6f9e607366f59e7b5d555c1d08cd9d34 100644
--- a/interface/web/mail/lib/lang/de_mail_alias.lng
+++ b/interface/web/mail/lib/lang/de_mail_alias.lng
@@ -12,6 +12,6 @@ $wb['domain_txt'] = 'Domain';
 $wb['duplicate_email_alias_txt'] = 'Dieser E-Mail Alias existiert bereits.';
 $wb['source_txt'] = 'Alias';
 $wb['send_as_txt'] = 'Senden als';
-$wb['send_as_exp'] = 'Ziel erlauben, den alias als Absender zu benutzen';
+$wb['send_as_exp'] = 'Ziel erlauben, den Alias als Absender zu benutzen';
 $wb['greylisting_txt'] = 'Aktiviere Greylisting';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_backup_list.lng b/interface/web/mail/lib/lang/de_mail_backup_list.lng
index 73286a0737103be7877ad8d6c3f4aaa669042224..3c3ee4d315ac7dc1556949bb60bf2fc9b9028c7c 100644
--- a/interface/web/mail/lib/lang/de_mail_backup_list.lng
+++ b/interface/web/mail/lib/lang/de_mail_backup_list.lng
@@ -1,16 +1,16 @@
 <?php
-$wb['list_head_txt'] = 'Existing backups';
-$wb['date_txt'] = 'Date';
-$wb['backup_type_txt'] = 'Type';
-$wb['filename_txt'] = 'Backup file';
-$wb['restore_backup_txt'] = 'Restore';
-$wb['restore_info_txt'] = 'Restore of the backup has been started. This action takes several minutes to be completed.';
-$wb['restore_confirm_txt'] = 'Restoring may overwrite existing files in your mailbox. Do you really want to restore this backup?';
-$wb['download_pending_txt'] = 'There is already a pending backup download job.';
-$wb['restore_pending_txt'] = 'There is already a pending backup restore job.';
-$wb['delete_backup_txt'] = 'Delete Backup';
-$wb['delete_info_txt'] = 'Delete of the backup has been started. This action takes several minutes to be completed.';
-$wb['delete_confirm_txt'] = 'Really delete this backup?';
-$wb['delete_pending_txt'] = 'There is already a pending backup delete job.';
-$wb['filesize_txt'] = 'Filesize';
+$wb['list_head_txt'] = 'Vorhandene Backups';
+$wb['date_txt'] = 'Datum';
+$wb['backup_type_txt'] = 'Art';
+$wb['filename_txt'] = 'Dateiname';
+$wb['restore_backup_txt'] = 'Wiederherstellen';
+$wb['restore_info_txt'] = 'Wiederherstellung begonnen. Dieser Vorgang kann einige Minuten dauern.';
+$wb['restore_confirm_txt'] = 'Die Wiederherstellung kann bestehende Dateien in Ihrem Postfach überschreiben. Möchten Sie das Backup wiederherstellen?';
+$wb['download_pending_txt'] = 'Es läuft bereits ein Backup-Download.';
+$wb['restore_pending_txt'] = 'Es steht bereits ein Backup zur Wiederherstellung an.';
+$wb['delete_backup_txt'] = 'Backup löschen';
+$wb['delete_info_txt'] = 'Das Backup wird gelöscht. Dieser Vorgang kann einige Minuten dauern.';
+$wb['delete_confirm_txt'] = 'Möchten Sie dieses Backup wirklich löschen?';
+$wb['delete_pending_txt'] = 'Es wird bereits ein Backup gelöscht.';
+$wb['filesize_txt'] = 'Dateigröße';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index e653fbe288762de39f0c0b7b62fdadf6ed67a272..dbbf54d1501fb689b480843c1a05ceba6d0658f5 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -17,6 +17,7 @@ $wb['server_id_txt'] = 'Server ID';
 $wb['password_txt'] = 'Passwort';
 $wb['maildir_txt'] = 'E-Mail Verzeichnis';
 $wb['postfix_txt'] = 'Aktiviere Empfang';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Aktiviere Greylisting';
 $wb['access_txt'] = 'Aktiviere Zugriff';
 $wb['policy_txt'] = 'Spamfilter';
@@ -24,6 +25,9 @@ $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Die maximale Anzahl an E-Mailkonten für Ihr Konto wurde erreicht.';
 $wb['limit_mailquota_txt'] = 'Der maximale Speicherplatz für Ihr E-Mail Konto wurde erreicht. Der maximal verfügbare Speicher in MB ist';
 $wb['disablesmtp_txt'] = 'SMTP (Mailversand) deaktivieren';
+$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['disableimap_txt'] = 'IMAP deaktivieren';
 $wb['disablepop3_txt'] = 'POP3 deaktivieren';
 $wb['password_strength_txt'] = 'Passwortkomplexität';
@@ -34,11 +38,14 @@ $wb['autoresponder_start_date_ispast'] = 'Startdatum kann nicht in der Vergangen
 $wb['autoresponder_end_date_txt'] = 'Endet am';
 $wb['autoresponder_end_date_isgreater'] = 'Enddatum muss angegeben werden und muss später als das Startdatum sein.';
 $wb['move_junk_txt'] = 'Spam E-Mails in das Junk Verzeichnis verschieben';
+$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['name_txt'] = 'Name';
 $wb['name_optional_txt'] = '(optional)';
 $wb['autoresponder_active'] = 'Autoresponder aktivieren';
-$wb['cc_txt'] = 'Kopie senden an';
-$wb['cc_error_isemail'] = 'Das -Kopie senden an- Feld enthält keine gültige E-Mail Adresse';
+$wb['cc_txt'] = 'Eingehende Mails in Kopie senden an';
+$wb['cc_error_isemail'] = 'Das Feld "Kopie senden an" enthält keine gültige E-Mail Adresse';
 $wb['login_error_unique'] = 'Benutzername wird bereits verwendet.';
 $wb['login_error_regex'] = 'Zulässige Zeichen sind A-Z, a-z, 0-9, ., _ und -.';
 $wb['login_txt'] = 'Anmelden';
@@ -50,18 +57,17 @@ $wb['repeat_password_txt'] = 'Passwort wiederholen';
 $wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
 $wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 $wb['email_error_isascii'] = 'Bitte verwenden Sie keine Umlaute im Passwort. Dies kann zu Problemen mit Ihrem E-Mail-Programm führen.';
-$wb['backup_interval_txt'] = 'Backup interval';
+$wb['backup_interval_txt'] = 'Backup-Interval';
 $wb['backup_copies_txt'] = 'Anzahl der Backups';
 $wb['no_backup_txt'] = 'inaktiv';
-$wb['daily_backup_txt'] = 'taeglich';
-$wb['weekly_backup_txt'] = 'woechentlich';
+$wb['daily_backup_txt'] = 'täglich';
+$wb['weekly_backup_txt'] = 'wöchentlich';
 $wb['monthly_backup_txt'] = 'monatlich';
 $wb['cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
-$wb['autoresponder_start_date_is_required'] = 'Startdatum muss angegeben werden.';
 $wb['sender_cc_txt'] = 'Kopie ausgehender Emails senden an (BCC)';
 $wb['sender_cc_error_isemail'] = '-Kopie ausgehender Emails senden an- Feld enthält keine gültige Emailadresse';
 $wb['sender_cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)';
-$wb['password_click_to_set_txt'] = 'Click to set';
+$wb['password_click_to_set_txt'] = 'Passwort erzeugen';
 $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';
diff --git a/interface/web/mail/lib/lang/de_mail_user_filter.lng b/interface/web/mail/lib/lang/de_mail_user_filter.lng
index c9fb78fcee1ff581249ff128bd93c5c8578e0c5b..345b9c4fbb38d3de1c06b7fe074c0f15a9917e2f 100644
--- a/interface/web/mail/lib/lang/de_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/de_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Die maximale Anzahl an E-Mail Filtern für Ihr Ko
 $wb['subject_txt'] = 'Betreff';
 $wb['from_txt'] = 'Von';
 $wb['to_txt'] = 'An';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Enthält';
 $wb['is_txt'] = 'Ist';
 $wb['begins_with_txt'] = 'Beginnt mit';
diff --git a/interface/web/mail/lib/lang/de_mail_user_list.lng b/interface/web/mail/lib/lang/de_mail_user_list.lng
index 5eeff280c2a3365b1e1d4a7a6e5d921a5e3f0e91..b1ebb2fd1dd9afa307f1e4c5ba4a4689caf18098 100644
--- a/interface/web/mail/lib/lang/de_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/de_mail_user_list.lng
@@ -3,10 +3,11 @@ $wb['list_head_txt'] = 'E-Mail Konto';
 $wb['email_txt'] = 'E-Mail Adresse';
 $wb['autoresponder_txt'] = 'Autoresponder';
 $wb['add_new_record_txt'] = 'Neues E-Mail Konto hinzufügen';
-$wb['name_txt'] = 'Realname';
+$wb['name_txt'] = 'Name';
 $wb['login_txt'] = 'Anmelden';
-$wb['postfix_txt'] = 'Receiving';
-$wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['postfix_txt'] = 'Empfang';
+$wb['disablesmtp_txt'] = 'SMTP (Versand)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/dk_mail_user.lng b/interface/web/mail/lib/lang/dk_mail_user.lng
index 34bf0763590ce3f528e9ed6afdb6d896324fe921..04196d6b29011205d481a692024fec4dc4bf8292 100644
--- a/interface/web/mail/lib/lang/dk_mail_user.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user.lng
@@ -22,17 +22,24 @@ $wb['server_id_txt'] = 'Server ID';
 $wb['password_txt'] = 'Adgangskode';
 $wb['maildir_txt'] = 'Mailmappe';
 $wb['postfix_txt'] = 'Aktiver modtagelse';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Aktiver adgang';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Max. antal af mailbokse for din konto er nået.';
 $wb['limit_mailquota_txt'] = 'Max. plads for postkasser er nået. Max. tilgængelig plads i MB er';
 $wb['disablesmtp_txt'] = 'Deaktiver SMTP (afsending)';
+$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['disableimap_txt'] = 'Deaktiver IMAP';
 $wb['disablepop3_txt'] = 'Deaktiver POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Der er allerede et alias eller forward for denne e-mail adresse.';
 $wb['quota_error_value'] = 'Ugyldig kvote værdi. Tilladte værdier er: 0 for ubegrænset eller tal > 1';
 $wb['move_junk_txt'] = 'Flyt Spam E-mails til Junk mappe.';
+$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['name_txt'] = 'Navn';
 $wb['name_optional_txt'] = '(Valgfri)';
 $wb['autoresponder_active'] = 'Aktiver autosvarer';
@@ -50,7 +57,6 @@ $wb['password_mismatch_txt'] = 'Adgangskoderne stemmer ikke overens.';
 $wb['password_match_txt'] = 'Adgangskoderne stemmer overens.';
 $wb['email_error_isascii'] = 'Undlad venligst at bruge specielle Unicode-tegn for din adgangskode Dette kan føre til problemer med din mail-klient.';
 $wb['cc_note_txt'] = '(Adskil flere e-mail adresser med kommaer)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['sender_cc_txt'] = 'Send outgoing BCC to';
@@ -61,7 +67,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(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';
diff --git a/interface/web/mail/lib/lang/dk_mail_user_list.lng b/interface/web/mail/lib/lang/dk_mail_user_list.lng
index ac07bb92b3a426d2e826fc69d16a4db0ea656799..fc3afb7c4629822f7517e5029ec38d290c5d6d90 100644
--- a/interface/web/mail/lib/lang/dk_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Navn';
 $wb['login_txt'] = 'Log ind';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/el_mail_user.lng b/interface/web/mail/lib/lang/el_mail_user.lng
index 76c266d59121a8a1cbec2057576209f2af62f536..b273f6b8145af328adfd6aa6a5d8d3a11181f3ab 100644
--- a/interface/web/mail/lib/lang/el_mail_user.lng
+++ b/interface/web/mail/lib/lang/el_mail_user.lng
@@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Aerver_id';
 $wb['password_txt'] = 'Συνθηματικό';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Ενεργοποίηση Λήψης';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Ενεργοποίηση Πρόσβασης';
 $wb['policy_txt'] = 'Φίλτρο Spam';
@@ -31,6 +32,9 @@ $wb['disablepop3_txt'] = 'Απενεργοποίηση POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Υπάρχει ήδη ένα ψευδωνύμο ή μία προώθηση με αυτή τη διεύθυνση email.';
 $wb['quota_error_value'] = 'Μη έγκυρη τιμή ορίου χώρου. Επιτρεπόμενες τιμές είναι: 0 για απεριόριστο ή αριθμοί > 1';
 $wb['move_junk_txt'] = 'Μετακίνηση των Spam Emails στο φάκελο 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['name_txt'] = 'Πραγματικό Όνομα';
 $wb['name_optional_txt'] = '(Προαιρετικό)';
 $wb['autoresponder_active'] = 'Ενεργοποίηση αυτόματης απάντησης';
@@ -48,10 +52,12 @@ $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['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
 $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';
@@ -60,7 +66,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/el_mail_user_filter.lng b/interface/web/mail/lib/lang/el_mail_user_filter.lng
index f3957144ae0225257bccd6e72dd1c9984e0ed999..72710a9f7e72d3435023a6e73ea554ab7831ec83 100644
--- a/interface/web/mail/lib/lang/el_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/el_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Έχετε φτάσει το μέγιστο πλ
 $wb['subject_txt'] = 'Θέμα';
 $wb['from_txt'] = 'Από';
 $wb['to_txt'] = 'Προς';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Περιλαμβάνει';
 $wb['is_txt'] = 'είναι';
 $wb['begins_with_txt'] = 'Ξεκινά με';
diff --git a/interface/web/mail/lib/lang/el_mail_user_list.lng b/interface/web/mail/lib/lang/el_mail_user_list.lng
index 98cf9c200d20674753cef1e36743669f3952069a..4a532251869e15e54415ac9a63c08e543265f4f1 100644
--- a/interface/web/mail/lib/lang/el_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/el_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Πραγματικό Όνομα';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index 69ac0a00a995ee1fcdf6cdc943a2ae656c359965..ed6b6e3bd326669b25b117563e86a31eefcc89f8 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -13,8 +13,7 @@ $wb["autoresponder_txt"] = 'Active';
 $wb["autoresponder_start_date_txt"] = 'Start on';
 $wb["autoresponder_start_date_ispast"] = 'Start date cannot be in the past.';
 $wb["autoresponder_end_date_txt"] = 'End by';
-$wb["autoresponder_end_date_isgreater"] = 'End date must be set and be later than start date.';
-$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
+$wb["autoresponder_end_date_isgreater"] = 'End date must be later than start date.';
 $wb["no_domain_perm"] = 'You have no permission for this domain.';
 $wb["error_no_pwd"] = 'Password is empty.';
 $wb["quota_error_isint"] = 'Mailbox size must be a number.';
@@ -23,19 +22,26 @@ $wb["server_id_txt"] = 'Aerver_id';
 $wb["password_txt"] = 'Password';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb["maildir_txt"] = 'Maildir';
-$wb["postfix_txt"] = 'Enable receiving';
+$wb['postfix_txt'] = 'Enable receiving';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb["access_txt"] = 'Enable access';
 $wb["policy_txt"] = 'Spamfilter';
 $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb["limit_mailbox_txt"] = 'The max. number of mailboxes for your account is reached.';
 $wb["limit_mailquota_txt"] = 'The max space for mailboxes is reached. The max. available space in MB is';
-$wb["disablesmtp_txt"] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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["disableimap_txt"] = 'Disable IMAP';
 $wb["disablepop3_txt"] = 'Disable POP3';
 $wb["duplicate_alias_or_forward_txt"] = 'There is already an alias or forward with this email address.';
 $wb["quota_error_value"] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
-$wb["move_junk_txt"] = 'Move Spam Emails to Junk directory.';
+$wb["move_junk_txt"] = 'Move Spam Emails to Junk folder.';
+$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["name_txt"] = 'Name';
 $wb["name_optional_txt"] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
@@ -61,7 +67,7 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/en_mail_user_list.lng b/interface/web/mail/lib/lang/en_mail_user_list.lng
index c7b0a43ad20c7b928fe1fd075549e11461d74f99..bf905ed40ac64cd90ebd0ba86e38559c2ed64c8f 100644
--- a/interface/web/mail/lib/lang/en_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/en_mail_user_list.lng
@@ -1,12 +1,13 @@
 <?php
-$wb["list_head_txt"] = 'Mailbox';
-$wb["email_txt"] = 'Email';
-$wb["autoresponder_txt"] = 'Autoresponder';
-$wb["add_new_record_txt"] = 'Add new Mailbox';
-$wb["name_txt"] = 'Realname';
-$wb["login_txt"] = 'Login';
-$wb["postfix_txt"] = 'Receiving';
-$wb["disablesmtp_txt"] = 'SMTP (sending)';
-$wb["disableimap_txt"] = 'IMAP';
-$wb["disablepop3_txt"] = 'POP3';
-?>
\ No newline at end of file
+$wb['list_head_txt'] = 'Mailbox';
+$wb['email_txt'] = 'Email';
+$wb['autoresponder_txt'] = 'Autoresponder';
+$wb['add_new_record_txt'] = 'Add new Mailbox';
+$wb['name_txt'] = 'Realname';
+$wb['login_txt'] = 'Login';
+$wb['postfix_txt'] = 'Receiving';
+$wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
+$wb['disableimap_txt'] = 'IMAP';
+$wb['disablepop3_txt'] = 'POP3';
+?>
diff --git a/interface/web/mail/lib/lang/es_mail_user.lng b/interface/web/mail/lib/lang/es_mail_user.lng
index be329c304aea80d0a0b36022f52716c71dd7081c..6757df0854e68d5f47114734fce062c7130227ed 100644
--- a/interface/web/mail/lib/lang/es_mail_user.lng
+++ b/interface/web/mail/lib/lang/es_mail_user.lng
@@ -4,7 +4,6 @@ $wb['active_txt'] = 'Habilitado';
 $wb['autoresponder_active'] = 'Activar auto respuesta';
 $wb['autoresponder_end_date_isgreater'] = 'Debe indicar la fecha de finalización y esta debe ser mayor a la de inicio.';
 $wb['autoresponder_end_date_txt'] = 'Finaliza el';
-$wb['autoresponder_start_date_is_required'] = 'Cuando se activa la auto respuesta se debe definir una fecha de inicio.';
 $wb['autoresponder_start_date_ispast'] = 'La fecha de inicio no puede estar en el pasado.';
 $wb['autoresponder_start_date_txt'] = 'Comienza el';
 $wb['autoresponder_subject'] = 'Estoy fuera de la oficina';
@@ -22,6 +21,9 @@ $wb['daily_backup_txt'] = 'Diariamente';
 $wb['disableimap_txt'] = 'Deshabilitar IMAP';
 $wb['disablepop3_txt'] = 'Deshabilitar POP3';
 $wb['disablesmtp_txt'] = 'Deshabilitar SMTP (envío)';
+$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['domain_txt'] = 'Dominio';
 $wb['duplicate_alias_or_forward_txt'] = 'Ya existe un alias o reenvío con esta dirección de correo.';
 $wb['email_error_isascii'] = 'Por favor, no use caracteres unicode especiales en su contraseña. Esto puede conllevar a errores en su cliente de correo.';
@@ -40,6 +42,9 @@ $wb['login_txt'] = 'Iniciar Sesión';
 $wb['maildir_txt'] = 'Dirección de correo';
 $wb['monthly_backup_txt'] = 'Mensualmente';
 $wb['move_junk_txt'] = 'Mover correo basura (spam) a la carpeta Basura (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['name_optional_txt'] = '(Opcional)';
 $wb['name_txt'] = 'Nombre';
 $wb['no_backup_txt'] = 'Sin copia de seguridad';
@@ -52,12 +57,13 @@ $wb['password_strength_txt'] = 'Seguridad de la contraseña';
 $wb['password_txt'] = 'Contraseña';
 $wb['policy_txt'] = 'Filtro de spam';
 $wb['postfix_txt'] = 'Habilitar recepción';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['quota_error_isint'] = 'La cuota debe ser un número.';
 $wb['quota_error_value'] = 'La cuota es inválida. Los valores permitidos son: 0 para cuota ilimitada o una cantidad superior a 1';
 $wb['quota_txt'] = 'Cuota (0 para ilimitada)';
 $wb['repeat_password_txt'] = 'Repetir contraseña';
 $wb['sender_cc_error_isemail'] = 'El campo -Enviar copia a- no contiene una dirección de correo válida';
-$wb['sender_cc_note_txt'] = '(Separe múltiples cuentas de correo con comas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['sender_cc_txt'] = 'Enviar copia saliente a';
 $wb['server_id_txt'] = 'id_del_servidor';
 $wb['weekly_backup_txt'] = 'Semanalmente';
diff --git a/interface/web/mail/lib/lang/es_mail_user_list.lng b/interface/web/mail/lib/lang/es_mail_user_list.lng
index 43a09d2808f1b2e2572f579f323bf6d27efa2ef3..19a2129307f9836ef0afa08990f6f057e8080321 100644
--- a/interface/web/mail/lib/lang/es_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/es_mail_user_list.lng
@@ -4,6 +4,7 @@ $wb['autoresponder_txt'] = 'Auto respuesta';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 $wb['disablesmtp_txt'] = 'SMTP (envío)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['email_txt'] = 'Correo';
 $wb['list_head_txt'] = 'Buzón';
 $wb['login_txt'] = 'Entrar';
diff --git a/interface/web/mail/lib/lang/fi_mail_user.lng b/interface/web/mail/lib/lang/fi_mail_user.lng
index 45ea1d9b8b8b61719e8d2c4a81fe05ae64f03547..ed3635c1ae8d7337f189604609e5cab5709e91f8 100644
--- a/interface/web/mail/lib/lang/fi_mail_user.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user.lng
@@ -15,6 +15,7 @@ $wb['server_id_txt'] = 'Palvelimen tunnus';
 $wb['password_txt'] = 'Salasana';
 $wb['maildir_txt'] = 'Postikansio';
 $wb['postfix_txt'] = 'Salli vastaanotto';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Salli yhteys';
 $wb['policy_txt'] = 'Roskapostisuodatin';
@@ -31,6 +32,9 @@ $wb['autoresponder_start_date_ispast'] = 'Aloituspäivä ei voi olla menneisyyde
 $wb['autoresponder_end_date_txt'] = 'Lopetuspäivä';
 $wb['autoresponder_end_date_isgreater'] = 'Lopetuspäivän pitää olla myöhempi kuin aloituspäivä.';
 $wb['move_junk_txt'] = 'Siirrä roskapostit Junk-kansioon';
+$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['name_txt'] = 'Oikea nimi';
 $wb['name_optional_txt'] = '(Valinnainen)';
 $wb['autoresponder_active'] = 'Ota lomavastaaja käyttöön';
@@ -56,11 +60,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/fi_mail_user_list.lng b/interface/web/mail/lib/lang/fi_mail_user_list.lng
index ee3f2cec4599f0a3cd03681a6e676b594c78336b..fefb8b0b79a1691af9bb13ad984cb8f2c4b91d0e 100644
--- a/interface/web/mail/lib/lang/fi_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Oikea nimi';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng
index 8df58233a3b06112246faaef12e297bd4632954e..cce8f0a8a16c1dfac899912fd074e08966bc26f6 100644
--- a/interface/web/mail/lib/lang/fr_mail_user.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user.lng
@@ -16,6 +16,7 @@ $wb['server_id_txt'] = 'ID Serveur';
 $wb['password_txt'] = 'Mot de passe';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Activer la réception';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['access_txt'] = 'Activer l’accès';
 $wb['policy_txt'] = 'Filtre antispam';
 $wb['inherit_policy'] = '- Inherit domain setting -';
@@ -30,6 +31,9 @@ $wb['autoresponder_end_date_txt'] = 'Terminer le';
 $wb['autoresponder_end_date_isgreater'] = 'La date de fin doit être saisie et doit être ultérieure à la date de début.';
 $wb['quota_error_value'] = 'Valeur de quota invalide. Les valeurs de quota autorisées sont : 0 pour illimité ou nombres > 1';
 $wb['move_junk_txt'] = 'Déplacer le spam vers le dossier 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['name_txt'] = 'Nom véritable';
 $wb['name_optional_txt'] = '(Optionnel)';
 $wb['autoresponder_active'] = 'Activer le répondeur automatique';
@@ -48,9 +52,11 @@ $wb['repeat_password_txt'] = 'Répéter le mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
 $wb['disablesmtp_txt'] = 'Désactiver SMTP (envoi)';
+$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['email_error_isascii'] = 'Merci de ne pas utiliser de caractères spéciaux Unicode dans votre mot de passe. Ceci pourrait engendrer des problèmes avec votre client mail.';
 $wb['cc_note_txt'] = '(Séparer les adresses e-mail multiples par des virgules)';
-$wb['autoresponder_start_date_is_required'] = 'Une date de démarrage doit être renseignée quand le répondeur automatique est activé.';
 $wb['greylisting_txt'] = 'Activer le greylisting';
 $wb['sender_cc_txt'] = 'Envoyer une copie des mails sortants à';
 $wb['sender_cc_error_isemail'] = 'Le champ -Envoyer une copie des mails sortants à- no contiens pas une adresse e-mail valide';
@@ -60,7 +66,7 @@ $wb['no_backup_txt'] = 'Pas de backup';
 $wb['daily_backup_txt'] = 'Journalier';
 $wb['weekly_backup_txt'] = 'Hebdomadaire';
 $wb['monthly_backup_txt'] = 'Mensuel';
-$wb['sender_cc_note_txt'] = '(Séparer les adresses e-mail multiples par des virgules)';
+$wb['sender_cc_note_txt'] = '(One email address only)';
 $wb['password_click_to_set_txt'] = 'Cliquez pour définir';
 $wb['purge_trash_days_txt'] = 'Purge Trash automatically after X days';
 $wb['tooltip_purge_trash_days_txt'] = '0 = disabled';
diff --git a/interface/web/mail/lib/lang/fr_mail_user_list.lng b/interface/web/mail/lib/lang/fr_mail_user_list.lng
index 0d4152913afd3a5fdc046fde44af994bb46f3002..79e999b6396c9366044d90465d9f7f6f6e27b9cd 100644
--- a/interface/web/mail/lib/lang/fr_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nom véritable';
 $wb['login_txt'] = 'Nom d’utilisateur';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng
index 170aaa6b61e5f8c1565c8974deb430c3526feccf..0cb1b91849c50d752b0d3a3ddd9da442d0dc0cea 100644
--- a/interface/web/mail/lib/lang/hr_mail_user.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user.lng
@@ -10,7 +10,7 @@ $wb['autoresponder_text_txt'] = 'Text';
 $wb['autoresponder_txt'] = 'Aktivno';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['no_domain_perm'] = 'You have no permission for this domain.';
 $wb['error_no_pwd'] = 'Password is empty.';
 $wb['quota_error_isint'] = 'Mailbox size must be a number.';
@@ -20,6 +20,7 @@ $wb['password_txt'] = 'Å ifra';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
@@ -31,6 +32,9 @@ $wb['disablepop3_txt'] = 'Disable POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forward with this email address.';
 $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$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['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
@@ -53,7 +57,10 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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';
@@ -61,7 +68,7 @@ $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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/hr_mail_user_filter.lng b/interface/web/mail/lib/lang/hr_mail_user_filter.lng
index 4441ecf5e452a04ba0b909f08cae19c545f10077..33fd0106a8df7502e0c0b4fdb92c7a0f3b1b319b 100644
--- a/interface/web/mail/lib/lang/hr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Iskorišten je maksimalni broj mail filtera.';
 $wb['subject_txt'] = 'Naslov';
 $wb['from_txt'] = 'Pošiljatelj';
 $wb['to_txt'] = 'Primatelj';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Sadrži';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Počinje sa';
diff --git a/interface/web/mail/lib/lang/hr_mail_user_list.lng b/interface/web/mail/lib/lang/hr_mail_user_list.lng
index 498570c344a4a38e6fe37b2c305b2f82455d441e..1c27b725d3aa161d1d74c60bd6e668a493bf4db2 100644
--- a/interface/web/mail/lib/lang/hr_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Ime';
 $wb['login_txt'] = 'Prijava';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng
index 65962cd21c27eca9138d460d27e8fdb495692281..610f40b4ba8b0342590967991a9512ae97d19d55 100644
--- a/interface/web/mail/lib/lang/hu_mail_user.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user.lng
@@ -16,6 +16,7 @@ $wb['password_txt'] = 'Jelszó';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'levelezőláda';
 $wb['postfix_txt'] = 'Bejövő engedélyezés';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Hozzáférés engelyezés';
 $wb['policy_txt'] = 'Spam szűrő';
@@ -30,8 +31,11 @@ $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlim
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$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['name_txt'] = 'Név';
 $wb['name_optional_txt'] = '(Opcionális)';
 $wb['autoresponder_active'] = 'Automatikus válasz engedélyezése';
@@ -57,11 +61,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/hu_mail_user_filter.lng b/interface/web/mail/lib/lang/hu_mail_user_filter.lng
index 750f3c1ae54f04cd67f345c913f771788407ebf1..a3db584920c97c0a95b53a8b05bc10fdb11c4489 100644
--- a/interface/web/mail/lib/lang/hu_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user_filter.lng
@@ -9,6 +9,7 @@ $wb['source_txt'] = 'Forrás';
 $wb['subject_txt'] = 'Tárgy';
 $wb['from_txt'] = 'From';
 $wb['to_txt'] = 'To';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Tartalmazza';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
diff --git a/interface/web/mail/lib/lang/hu_mail_user_list.lng b/interface/web/mail/lib/lang/hu_mail_user_list.lng
index 8bf44e936cee9af091a9fce8c6546b8f84220357..7f1ec6265bc918a376356799e5515aeba5b185cb 100644
--- a/interface/web/mail/lib/lang/hu_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Név';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng
index 3bedbd9b9362c3a21cfbd7f0a239c268a493920c..e4daf311f334f71992a3d9a3d2040c1197c1c61b 100644
--- a/interface/web/mail/lib/lang/id_mail_user.lng
+++ b/interface/web/mail/lib/lang/id_mail_user.lng
@@ -21,6 +21,7 @@ $wb['password_txt'] = 'Kata Sandi';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Dapat Menerima';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Dapat Mengakses';
 $wb['policy_txt'] = 'Spamfilter';
@@ -32,6 +33,9 @@ $wb['disablepop3_txt'] = 'Nonaktifkan POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Sudah ada alias atau forward untuk alamat email ini.';
 $wb['quota_error_value'] = 'Nilai kuota tidak valid. Nilai yang diperbolehkan adalah: 0 untuk tak terbatas atau angka > 1';
 $wb['move_junk_txt'] = 'Pindahkan Email Spam ke direktori 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['name_txt'] = 'Nama Lengkap';
 $wb['name_optional_txt'] = '(Opsional)';
 $wb['autoresponder_active'] = 'Aktifkan Penjawab Otomatis';
@@ -57,11 +61,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/id_mail_user_list.lng b/interface/web/mail/lib/lang/id_mail_user_list.lng
index 49a2afe94372b918bd8a95206bd979e2241ec89b..3127853a0ee41958e728425603b6a7ffe93b37f2 100644
--- a/interface/web/mail/lib/lang/id_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/id_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nama Lengkap';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng
index a1a0f8cfd5d0b8d6e9667afec7b51121f77da6e0..34b523f5519cc5f2dd6222d9be95123ed0513fb0 100644
--- a/interface/web/mail/lib/lang/it_mail_user.lng
+++ b/interface/web/mail/lib/lang/it_mail_user.lng
@@ -17,6 +17,7 @@ $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['access_txt'] = 'Abilita indirizzo';
 $wb['policy_txt'] = 'Spamfilter';
 $wb['inherit_policy'] = '- Inherit domain setting -';
@@ -31,6 +32,9 @@ $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['name_txt'] = 'Nome vero';
 $wb['name_optional_txt'] = '(Opzionale)';
 $wb['autoresponder_active'] = 'Abilita autorisponditore';
@@ -51,6 +55,9 @@ $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';
@@ -61,7 +68,7 @@ $wb['no_backup_txt'] = 'No backup';
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
-$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$wb['sender_cc_note_txt'] = '(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';
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 bad797d6d5c8ef195cc5da3d89913c40a6bedd77..827f906345186d111bb3af2b77e2d494f7f0fb2c 100644
--- a/interface/web/mail/lib/lang/it_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/it_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['subject_txt'] = 'Oggetto';
 $wb['from_txt'] = 'Da';
 $wb['to_txt'] = 'A';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Contiene';
 $wb['is_txt'] = 'è';
 $wb['begins_with_txt'] = 'Inizia con';
diff --git a/interface/web/mail/lib/lang/it_mail_user_list.lng b/interface/web/mail/lib/lang/it_mail_user_list.lng
index 098cb1a1626ecbc0bdd1dbe1983818ad52eea332..87038b875e6ea048cbafe81a0ad6f18b8035ead6 100644
--- a/interface/web/mail/lib/lang/it_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/it_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nome reale';
 $wb['login_txt'] = 'Accedi';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng
index b58b9d13dde21f0e92a85c820c85595b4c064351..7b6b48dca49915804de56b50f85551a43d09a65d 100644
--- a/interface/web/mail/lib/lang/ja_mail_user.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'パスワード';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'メールディレクトリ';
 $wb['postfix_txt'] = 'メールを受信する';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'アクセスを許可する';
 $wb['policy_txt'] = 'スパムフィルター';
@@ -30,8 +31,11 @@ $wb['quota_error_value'] = '容量の値が不正です。 無制限にする場
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$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['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
@@ -57,11 +61,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/ja_mail_user_list.lng b/interface/web/mail/lib/lang/ja_mail_user_list.lng
index 0bb531f78596ebc6754618202dd477a7f65aebdd..bf905ed40ac64cd90ebd0ba86e38559c2ed64c8f 100644
--- a/interface/web/mail/lib/lang/ja_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng
index 9a644a129b1cc0e4f1d1ed6b349f9c55dc2c6e1b..83002f79aaef705f59ffdc9b0c210799339d451a 100644
--- a/interface/web/mail/lib/lang/nl_mail_user.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user.lng
@@ -20,6 +20,7 @@ $wb['password_txt'] = 'Wachtwoord';
 $wb['password_click_to_set_txt'] = 'Klik om in te stellen';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Ontvangen inschakelen';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Greylisting inschakelen';
 $wb['access_txt'] = 'Toegang inschakelen';
 $wb['policy_txt'] = 'Spamfilter';
@@ -31,6 +32,9 @@ $wb['disablepop3_txt'] = 'Uitschakelen POP3';
 $wb['duplicate_alias_or_forward_txt'] = 'Er is al een alias of forward met dir e-mailadres.';
 $wb['quota_error_value'] = 'Ongeldige quota waarde. Toegestane waarden zijn: 0 = ongelimiteerd of nummerieke waarde > 1';
 $wb['move_junk_txt'] = 'Verplaats SPAM e-mails naar junk folder';
+$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['name_txt'] = 'Echte naam';
 $wb['name_optional_txt'] = '(Optioneel)';
 $wb['autoresponder_active'] = 'Inschakelen autobeantwoorden';
@@ -57,10 +61,13 @@ $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
 $wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)';
+$wb['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'] = 'Een startdatun is vereist voor het inschakelen van Autobeantwoorden.';
 $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
 $wb['sender_cc_error_isemail'] = 'Het \\"Stuur uitgaande kopie aan\\" veld bevat geen geldig e-mail adres';
-$wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
+$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';
diff --git a/interface/web/mail/lib/lang/nl_mail_user_filter.lng b/interface/web/mail/lib/lang/nl_mail_user_filter.lng
index 95af45d96e51577b7f1c5fd1db3f3fe43889cf27..050d64aaf98fa3edbb6cc64fa473be7ab5aa16fd 100644
--- a/interface/web/mail/lib/lang/nl_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Het max. aantal e-mail filters voor uw account is
 $wb['subject_txt'] = 'Onderwerp';
 $wb['from_txt'] = 'Afzender';
 $wb['to_txt'] = 'Bestemming';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Bevat';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begint met';
@@ -18,7 +19,7 @@ $wb['ends_with_txt'] = 'Eindigt in';
 $wb['delete_txt'] = 'Verwijderen';
 $wb['move_stop_txt'] = 'Verplaatsen naar';
 $wb['header_txt'] = 'Header';
-$wb['size_over_txt'] = 'Email grootte bove (KB)';
+$wb['size_over_txt'] = 'Email grootte boven (KB)';
 $wb['size_under_txt'] = 'Email grootte onder (KB)';
 $wb['localpart_txt'] = 'Localpart';
 $wb['domain_txt'] = 'Domein';
diff --git a/interface/web/mail/lib/lang/nl_mail_user_list.lng b/interface/web/mail/lib/lang/nl_mail_user_list.lng
index 39125af2e0b544140587ca56ab95376a837351d5..da872b2c28aa690602ff2106f4137892ee2177a2 100644
--- a/interface/web/mail/lib/lang/nl_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Echte naam';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Ontvangen';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng
index 593f83531ef599e8397fd753a1cd8c7441d57033..15ddeca66f883c3d5a8ab11ef518e24cbf199947 100644
--- a/interface/web/mail/lib/lang/pl_mail_user.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'Hasło';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Zezwól na odbiór poczty';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Możliwy dostęp';
 $wb['policy_txt'] = 'Filtr spamu';
@@ -32,6 +33,9 @@ $wb['autoresponder_start_date_ispast'] = 'Data uruchomienia nie może być w prz
 $wb['autoresponder_end_date_txt'] = 'Zakończ do';
 $wb['autoresponder_end_date_isgreater'] = 'Data zakończenia musi być późniejsza od daty rozpoczęcia';
 $wb['move_junk_txt'] = 'PrzenoÅ› SPAM do folderu 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['name_txt'] = 'Nazwa rzeczywista';
 $wb['name_optional_txt'] = '(Opcjonalnie)';
 $wb['autoresponder_active'] = 'Uruchom autorespondera';
@@ -57,11 +61,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/pl_mail_user_filter.lng b/interface/web/mail/lib/lang/pl_mail_user_filter.lng
index 1f0b071f193ccddfef0d00a1b8a15b46d365e8d9..d0bc6d6a288d921b8c79b35dd2467b1fb0e951a5 100644
--- a/interface/web/mail/lib/lang/pl_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Maks. ilość filtrów email jest przekroczona.';
 $wb['subject_txt'] = 'Temat';
 $wb['from_txt'] = 'Od';
 $wb['to_txt'] = 'Do';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Zawiera';
 $wb['is_txt'] = 'Jest';
 $wb['begins_with_txt'] = 'Zaczyna siÄ™ od';
diff --git a/interface/web/mail/lib/lang/pl_mail_user_list.lng b/interface/web/mail/lib/lang/pl_mail_user_list.lng
index 74ca840e3096f43af809941605be29fbf821fe68..f839a56720d4f1c2cb21b7229db4ffaaca35576d 100644
--- a/interface/web/mail/lib/lang/pl_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Nazwa rzeczywista';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng
index 0b7ffe3d374e86a8ebff455e0dea4a8fd17d608a..9f6227e268ccd7031d32304aecab61c6e134b16f 100644
--- a/interface/web/mail/lib/lang/pt_mail_user.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'Senha';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Permitir Recepção';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Permitir Acesso';
 $wb['policy_txt'] = 'Spamfilter';
@@ -32,6 +33,9 @@ $wb['autoresponder_start_date_ispast'] = 'A data de ínicio não pode estar no p
 $wb['autoresponder_end_date_txt'] = 'Termino:';
 $wb['autoresponder_end_date_isgreater'] = 'A data de início deve ser menor que a data de termino.';
 $wb['move_junk_txt'] = 'Mover Spam para a pasta 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['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
@@ -57,11 +61,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/pt_mail_user_list.lng b/interface/web/mail/lib/lang/pt_mail_user_list.lng
index fe89939e2b57a707751e3ee4a03862c843866b35..9f19168fba870fdbbcd0069bac75c18cf00a1502 100644
--- a/interface/web/mail/lib/lang/pt_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng
index 97dfdafd88758015cdb4f261c8c533f68521d380..b358960525f11a11af19a916c605706c90a08205 100644
--- a/interface/web/mail/lib/lang/ro_mail_user.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'Password';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Maildir';
 $wb['postfix_txt'] = 'Enable Receiving';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Enable Access';
 $wb['policy_txt'] = 'Spamfilter';
@@ -28,10 +29,13 @@ $wb['disablepop3_txt'] = 'Blocheaza POP3';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
 $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlimited or numbers > 1';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$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['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
@@ -57,11 +61,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/ro_mail_user_list.lng b/interface/web/mail/lib/lang/ro_mail_user_list.lng
index f55f8647a8222a282d7c6ce6412bfa7a8546fa53..3eda064b75528849f49a29e7856bbe7245aba864 100644
--- a/interface/web/mail/lib/lang/ro_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng
index 07bab6fd4fb66739f4ee1fb8bd2af53a51765731..a6f8a9fb7e9fb2bdf5afacc03682201d5ffd1be6 100644
--- a/interface/web/mail/lib/lang/ru_mail_user.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user.lng
@@ -16,6 +16,7 @@ $wb['password_txt'] = 'Пароль';
 $wb['password_click_to_set_txt'] = 'Клик для установки';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Разрешить получение';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Включить серый список (Greylisting)';
 $wb['access_txt'] = 'Включить доступ';
 $wb['policy_txt'] = 'Спам-фильтр';
@@ -32,6 +33,9 @@ $wb['autoresponder_start_date_ispast'] = 'Дата запуска не може
 $wb['autoresponder_end_date_txt'] = 'Останавливать';
 $wb['autoresponder_end_date_isgreater'] = 'Дата окончания должна быть позже даты запуска.';
 $wb['move_junk_txt'] = 'Перемещать спам в каталог 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['name_txt'] = 'Реальное имя';
 $wb['name_optional_txt'] = '(Опционально)';
 $wb['autoresponder_active'] = 'Включить автоответчик';
@@ -58,10 +62,13 @@ $wb['monthly_backup_txt'] = 'Ежемесячно';
 $wb['email_error_isascii'] = 'Пожалуйста, не используйте специальные символы Юникода для вашего пароля. Это может привести к проблемам с вашим почтовым клиентом.';
 $wb['cc_note_txt'] = '(Разделите несколько адресов электронной почты запятыми)';
 $wb['disablesmtp_txt'] = 'Отключить SMTP (отправка)';
+$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'] = 'Дата начала должна быть установлена когда автоответчик включен.';
 $wb['sender_cc_txt'] = 'Отправка исходящей копии на';
 $wb['sender_cc_error_isemail'] = 'Поле -Отправка исходящей копии на- не содержит действительный адрес электронной почты';
-$wb['sender_cc_note_txt'] = '(Разделите несколько адресов электронной почты запятыми)';
+$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';
diff --git a/interface/web/mail/lib/lang/ru_mail_user_filter.lng b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
index c8306f9838ece9c91db26e241b3ae531bbe04464..78fac01aee482c71c9f1b4b5c19a272fc22e5475 100644
--- a/interface/web/mail/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Максимальное число почтов
 $wb['subject_txt'] = 'Тема';
 $wb['from_txt'] = 'От';
 $wb['to_txt'] = 'Кому';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Содержит';
 $wb['is_txt'] = 'Равно';
 $wb['begins_with_txt'] = 'Начинается с';
diff --git a/interface/web/mail/lib/lang/ru_mail_user_list.lng b/interface/web/mail/lib/lang/ru_mail_user_list.lng
index 7dad47a416729dd2d16b501d0cd0486169ef46c1..d323d347505ac7f3068a30eef62aabbd5a981b14 100644
--- a/interface/web/mail/lib/lang/ru_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Реальное имя';
 $wb['login_txt'] = 'Логин';
 $wb['postfix_txt'] = 'Получатель';
 $wb['disablesmtp_txt'] = 'SMTP (отправка)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index da0282e118d620a9b6c40b433cddc3783e9b11a3..f528bb3ef4659c4b8be6028af6f5f9d8e7c678f5 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'lösenord';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'maildir';
 $wb['postfix_txt'] = 'Aktivera mottagning';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Aktivera åtkomst';
 $wb['policy_txt'] = 'Spamfilter';
@@ -30,8 +31,11 @@ $wb['quota_error_value'] = 'Invalid quota value. Allowed values are: 0 for unlim
 $wb['autoresponder_start_date_txt'] = 'Starta den';
 $wb['autoresponder_start_date_ispast'] = 'Startdatum kan inte vara i det förflutna.';
 $wb['autoresponder_end_date_txt'] = 'Sluta den';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['move_junk_txt'] = 'FLytta spamepost till spammappen';
+$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['name_txt'] = 'Riktigt namn';
 $wb['name_optional_txt'] = '(Frivilligt)';
 $wb['autoresponder_active'] = 'Aktivera autosvaret';
@@ -57,11 +61,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/se_mail_user_filter.lng b/interface/web/mail/lib/lang/se_mail_user_filter.lng
index 0cd888b2e543a6497ea56a6866fee48f7ef2cfac..9830059195a097af027fe3310186350ec891395c 100644
--- a/interface/web/mail/lib/lang/se_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Det maximala antalet epostfilter är uppnått.';
 $wb['subject_txt'] = 'Ämne';
 $wb['from_txt'] = 'Från';
 $wb['to_txt'] = 'Till';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Innehåller';
 $wb['is_txt'] = 'Är';
 $wb['begins_with_txt'] = 'Börjar med';
diff --git a/interface/web/mail/lib/lang/se_mail_user_list.lng b/interface/web/mail/lib/lang/se_mail_user_list.lng
index 65c724c292e92f89f8a89201a8e6768deda8d8bd..4f6a7305d65a86feffd6a223c489a8b1dfc32208 100644
--- a/interface/web/mail/lib/lang/se_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Riktigt namn';
 $wb['login_txt'] = 'Logga in';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng
index d9a68404aece6d691dd71ac166ebe606ded32b34..207be539474755db980d61a9cce7b09d6ccb604a 100644
--- a/interface/web/mail/lib/lang/sk_mail_user.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user.lng
@@ -17,6 +17,7 @@ $wb['password_txt'] = 'Heslo';
 $wb['password_click_to_set_txt'] = 'Click to set';
 $wb['maildir_txt'] = 'Mailová záložka';
 $wb['postfix_txt'] = 'Povoliť príjem';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Enable greylisting';
 $wb['access_txt'] = 'Povoliť Prístup';
 $wb['policy_txt'] = 'Spamfilter';
@@ -30,8 +31,11 @@ $wb['quota_error_value'] = 'Neplatná hodnota kvóty. Povolené hodnoty sú: 0 p
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_ispast'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['move_junk_txt'] = 'Move Spam Emails to Junk directory';
+$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['name_txt'] = 'Realname';
 $wb['name_optional_txt'] = '(Optional)';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
@@ -57,11 +61,14 @@ $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
 $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
-$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
+$wb['disablesmtp_txt'] = 'Disable sending';
+$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['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['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
+$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';
diff --git a/interface/web/mail/lib/lang/sk_mail_user_list.lng b/interface/web/mail/lib/lang/sk_mail_user_list.lng
index 3d18ad41f6294d25eb1ef526d65f66229ddc037f..3a341f0967ae2c6f45fd4a2ce61b815a7cba005d 100644
--- a/interface/web/mail/lib/lang/sk_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Realname';
 $wb['login_txt'] = 'Login';
 $wb['postfix_txt'] = 'Receiving';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng
index 9e964e5e8a9532c4b963e5cdb16d4e50c63e6bb7..203338047a225c8e594cd4ff1bfd3397ebc6fa4b 100644
--- a/interface/web/mail/lib/lang/tr_mail_user.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user.lng
@@ -14,7 +14,6 @@ $wb['autoresponder_start_date_txt'] = 'Başlangıç';
 $wb['autoresponder_start_date_ispast'] = 'Başlangıç zamanı geçmişte olamaz.';
 $wb['autoresponder_end_date_txt'] = 'BitiÅŸ';
 $wb['autoresponder_end_date_isgreater'] = 'Bitiş zamanı başlangıç zamanından sonra olmalıdır.';
-$wb['autoresponder_start_date_is_required'] = 'Otoyanıtlayıcı kullanıldığında başlangıç tarihi belirtilmelidir.';
 $wb['no_domain_perm'] = 'Bu etki alanı için izniniz yok.';
 $wb['error_no_pwd'] = 'Parola boÅŸ olamaz.';
 $wb['quota_error_isint'] = 'E-posta kutusunun boyutu bir sayı olmalıdır.';
@@ -24,6 +23,7 @@ $wb['password_txt'] = 'Parola';
 $wb['password_click_to_set_txt'] = 'Ayarlamak için tıklayın';
 $wb['maildir_txt'] = 'E-posta Klasörü';
 $wb['postfix_txt'] = 'Alım Etkin';
+$wb['tooltip_postfix_txt'] = 'Allows incoming mail to this address.';
 $wb['greylisting_txt'] = 'Gri Liste Kullanılsın';
 $wb['access_txt'] = 'EriÅŸim Etkin';
 $wb['policy_txt'] = 'Önemsiz İleti Süzgeci';
@@ -31,11 +31,17 @@ $wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['limit_mailbox_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta kutusu sayısına ulaştınız.';
 $wb['limit_mailquota_txt'] = 'E-posta kutularınız için kullanabileceğiniz en fazla boyuta ulaştınız. Kullanılabilecek alan MB:';
 $wb['disablesmtp_txt'] = 'SMTP Kullanılmasın (gönderim)';
+$wb['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['disableimap_txt'] = 'IMAP Kullanılmasın';
 $wb['disablepop3_txt'] = 'POP3 Kullanılmasın';
 $wb['duplicate_alias_or_forward_txt'] = 'Bu e-posta adresi zaten takma ya da yönlendirilmiş.';
 $wb['quota_error_value'] = 'Kota değeri geçersiz. Değer sınırsız için 0 ya da 1 değerinden büyük olmalı';
 $wb['move_junk_txt'] = 'Önemsiz İletiler Junk Klasörüne Taşınsın';
+$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['name_txt'] = 'Ad';
 $wb['name_optional_txt'] = '(İsteğe bağlı)';
 $wb['autoresponder_active'] = 'Otoyanıtlayıcı kullanılsın';
@@ -61,7 +67,7 @@ $wb['weekly_backup_txt'] = 'Haftalık';
 $wb['monthly_backup_txt'] = 'Aylık';
 $wb['email_error_isascii'] = 'E-posta istemcinizde sorun yaşamamak için lütfen parolanızda dile özel unikod karakterler kullanmayın.';
 $wb['cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
-$wb['sender_cc_note_txt'] = '(Birden çok e-posta adresini virgül ile ayırarak yazın)';
+$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';
diff --git a/interface/web/mail/lib/lang/tr_mail_user_filter.lng b/interface/web/mail/lib/lang/tr_mail_user_filter.lng
index ba55be63dcb89295da8d59729da755fad6bd1e02..6d4e0b8868c128e6a834d7bcd397c49dd0629bd9 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_filter.lng
@@ -11,6 +11,7 @@ $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta
 $wb['subject_txt'] = 'Konu';
 $wb['from_txt'] = 'Kimden';
 $wb['to_txt'] = 'Kime';
+$wb['list_id_txt'] = 'List ID';
 $wb['contains_txt'] = 'Şunu içeren';
 $wb['is_txt'] = 'Şununla aynı';
 $wb['begins_with_txt'] = 'Åžununla baÅŸlayan';
diff --git a/interface/web/mail/lib/lang/tr_mail_user_list.lng b/interface/web/mail/lib/lang/tr_mail_user_list.lng
index 66d33becae6743af9de7d590b72237b97af9851b..3137af8928a14502773a295e15049d2a13f46133 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_list.lng
@@ -7,6 +7,7 @@ $wb['name_txt'] = 'Gerçek Ad';
 $wb['login_txt'] = 'Oturum Aç';
 $wb['postfix_txt'] = 'Alınıyor';
 $wb['disablesmtp_txt'] = 'SMTP (sending)';
+$wb['disabledeliver_txt'] = 'INBOX';
 $wb['disableimap_txt'] = 'IMAP';
 $wb['disablepop3_txt'] = 'POP3';
 ?>
diff --git a/interface/web/mail/list/mail_user.list.php b/interface/web/mail/list/mail_user.list.php
index 4513a516c910cb05cdc6bb7d36388240e7afe818..3e020ea603a9db377dbfacf1d467043db96a62a9 100644
--- a/interface/web/mail/list/mail_user.list.php
+++ b/interface/web/mail/list/mail_user.list.php
@@ -107,6 +107,15 @@ $liste["item"][] = array( 'field'  => "disablesmtp",
 	'width'  => "",
 	'value'  => array('n' => $app->lng('yes_txt'), 'y' => $app->lng('no_txt')));
 
+$liste["item"][] = array( 'field'  => "disabledeliver",
+	'datatype' => "VARCHAR",
+	'formtype' => "SELECT",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
+	'width'  => "",
+	'value'  => array('n' => $app->lng('yes_txt'), 'y' => $app->lng('no_txt')));
+
 $liste["item"][] = array( 'field'  => "disableimap",
 	'datatype' => "VARCHAR",
 	'formtype' => "SELECT",
diff --git a/interface/web/mail/mail_blacklist_del.php b/interface/web/mail/mail_blacklist_del.php
index d3bbc5d5d581991078d44997aa583d1550243181..aa671c488714f0f76af47e45aafad673ecb32eca 100644
--- a/interface/web/mail/mail_blacklist_del.php
+++ b/interface/web/mail/mail_blacklist_del.php
@@ -43,7 +43,7 @@ require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
 
 
-if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin priveliges');
+if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin privileges');
 
 //* Check permissions for module
 $app->auth->check_module_permissions('mail');
diff --git a/interface/web/mail/mail_blacklist_edit.php b/interface/web/mail/mail_blacklist_edit.php
index e2f284a34ed84df3a0c397aee67107eeabb15468..b86729b919e9d08a8855d972d8c447e48a36bc3b 100644
--- a/interface/web/mail/mail_blacklist_edit.php
+++ b/interface/web/mail/mail_blacklist_edit.php
@@ -53,7 +53,7 @@ class page_action extends tform_actions {
 	function onShowNew() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 		parent::onShowNew();
 	}
 
@@ -61,7 +61,7 @@ class page_action extends tform_actions {
 	function onBeforeUpdate() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 
 		//* Check if the server has been changed
 		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
@@ -79,7 +79,7 @@ class page_action extends tform_actions {
 	function onSubmit() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 		
 		if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1);
 		
diff --git a/interface/web/mail/mail_blacklist_list.php b/interface/web/mail/mail_blacklist_list.php
index 2bdc1e93b8270148285eb4d705dfa7b47cadcfce..ecb24d867c740f2f7853fd46d4d7f52ed1a5bf6b 100644
--- a/interface/web/mail/mail_blacklist_list.php
+++ b/interface/web/mail/mail_blacklist_list.php
@@ -12,7 +12,7 @@ $list_def_file = "list/mail_blacklist.list.php";
 * End Form configuration
 ******************************************/
 
-if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin priveliges');
+if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin privileges');
 
 //* Check permissions for module
 $app->auth->check_module_permissions('mail');
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index 19aa4f91e61b5600904b40c88118dad8f5287f73..77e15b68fc59a0f76ea69afad73de830ff6543c0 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -283,7 +283,9 @@ class page_action extends tform_actions {
 			$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();
 	}
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 83a02e0ed212242345894ad7b0f017cd2a8939a4..1dca1db848b93ff78ce9f8c2a9c143579bdf98f7 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -310,8 +310,8 @@ class page_action extends tform_actions {
 		if(isset($this->dataRecord["email"])) {
 			$disableimap = ($this->dataRecord["disableimap"])?'y':'n';
 			$disablepop3 = ($this->dataRecord["disablepop3"])?'y':'n';
-			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = ($this->dataRecord["disablesmtp"])?'y':'n';
+			$disabledeliver = ($this->dataRecord["disabledeliver"])?'y':'n';
 
 			$app->db->query($sql, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $this->id);
 			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disablelmtp = ? WHERE mailuser_id = ?";
@@ -363,8 +363,8 @@ class page_action extends tform_actions {
 		if(isset($this->dataRecord["email"])) {
 			$disableimap = (isset($this->dataRecord["disableimap"]) && $this->dataRecord["disableimap"])?'y':'n';
 			$disablepop3 = (isset($this->dataRecord["disablepop3"]) && $this->dataRecord["disablepop3"])?'y':'n';
-			$disabledeliver = ($this->dataRecord["postfix"] == 'y')?'n':'y';
 			$disablesmtp = (isset($this->dataRecord["disablesmtp"]) && $this->dataRecord["disablesmtp"])?'y':'n';
+			$disabledeliver = (isset($this->dataRecord["disabledeliver"]) && $this->dataRecord["disabledeliver"])?'y':'n';
 
 			$sql = "UPDATE mail_user SET disableimap = ?, disablesieve = ?, `disablesieve-filter` = ?, disablepop3 = ?, disablesmtp = ?, disabledeliver = ?, disablelda = ?, disablelmtp = ? WHERE mailuser_id = ?";
 			$app->db->query($sql, $disableimap, $disableimap, $disableimap, $disablepop3, $disablesmtp, $disabledeliver, $disabledeliver, $disabledeliver, $this->id);
diff --git a/interface/web/mail/mail_whitelist_del.php b/interface/web/mail/mail_whitelist_del.php
index 2294f4486806d41ffc7777d5bec207ae9c519c48..06ce88550bcef2a2e00d674759ddf310842bba3a 100644
--- a/interface/web/mail/mail_whitelist_del.php
+++ b/interface/web/mail/mail_whitelist_del.php
@@ -42,7 +42,7 @@ $tform_def_file = "form/mail_whitelist.tform.php";
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
 
-if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin priveliges');
+if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin privileges');
 
 //* Check permissions for module
 $app->auth->check_module_permissions('mail');
diff --git a/interface/web/mail/mail_whitelist_edit.php b/interface/web/mail/mail_whitelist_edit.php
index 2cf56b1ec451626491830f41acb54196341d6505..35fa825ec78cbdb8d237594cd276ae94ce9199b2 100644
--- a/interface/web/mail/mail_whitelist_edit.php
+++ b/interface/web/mail/mail_whitelist_edit.php
@@ -53,7 +53,7 @@ class page_action extends tform_actions {
 	function onShowNew() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 		
 		parent::onShowNew();
 	}
@@ -61,7 +61,7 @@ class page_action extends tform_actions {
 	function onBeforeUpdate() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 		
 		//* Check if the server has been changed
 		// We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
@@ -77,7 +77,7 @@ class page_action extends tform_actions {
 	function onSubmit() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 
 		if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1);
 
diff --git a/interface/web/mail/mail_whitelist_list.php b/interface/web/mail/mail_whitelist_list.php
index 1a09b6b16578dd81455536a425d110597ed99168..73877797b4c97e40a333427c4e606793d70e2651 100644
--- a/interface/web/mail/mail_whitelist_list.php
+++ b/interface/web/mail/mail_whitelist_list.php
@@ -12,7 +12,7 @@ $list_def_file = "list/mail_whitelist.list.php";
 * End Form configuration
 ******************************************/
 
-if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin priveliges');
+if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin privileges');
 
 //* Check permissions for module
 $app->auth->check_module_permissions('mail');
diff --git a/interface/web/mail/spamfilter_config_edit.php b/interface/web/mail/spamfilter_config_edit.php
index 5b3062ab771341d8214ca589d628621f55d53da8..9314feeccc95411b8e05b6eaaec7119af0d369a8 100644
--- a/interface/web/mail/spamfilter_config_edit.php
+++ b/interface/web/mail/spamfilter_config_edit.php
@@ -53,7 +53,7 @@ class page_action extends tform_actions {
 	function onShowEdit() {
 		global $app, $conf;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 
 		if($app->tform->errorMessage == '') {
 			$app->uses('ini_parser,getconf');
@@ -73,7 +73,7 @@ class page_action extends tform_actions {
 	function onUpdateSave($sql) {
 		global $app;
 
-		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin priveliges');
+		if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges');
 		$app->uses('ini_parser,getconf');
 
 		$section = $app->tform->getCurrentTab();
diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm
index 69291f4be81b4933ebbd824c7972116b893819b1..12659260acf399c891acb726c32b0fbc28a8f7bc 100644
--- a/interface/web/mail/templates/mail_user_list.htm
+++ b/interface/web/mail/templates/mail_user_list.htm
@@ -38,6 +38,7 @@
                         <th class="tiny-col" data-column="autoresponder"><tmpl_var name="autoresponder_txt"></th>
                         <th class="tiny-col" data-column="postfix"><tmpl_var name="postfix_txt"></th>
                         <th class="tiny-col" data-column="disablesmtp"><tmpl_var name="disablesmtp_txt"></th>
+                        <th class="tiny-col" data-column="disabledeliver"><tmpl_var name="disabledeliver_txt"></th>
                         <th class="tiny-col" data-column="disableimap"><tmpl_var name="disableimap_txt"></th>
                         <th class="tiny-col" data-column="disablepop3"><tmpl_var name="disablepop3_txt"></th>
                         <th class="small-col text-right">{tmpl_var name='search_limit'}</th>
@@ -49,6 +50,7 @@
                         <td><select class="form-control" name="search_autoresponder">{tmpl_var name='search_autoresponder'}</select></td>
                         <td><select class="form-control" name="search_postfix">{tmpl_var name='search_postfix'}</select></td>
                         <td><select class="form-control" name="search_disablesmtp">{tmpl_var name='search_disablesmtp'}</select></td>
+                        <td><select class="form-control" name="search_disabledeliver">{tmpl_var name='search_disabledeliver'}</select></td>
                         <td><select class="form-control" name="search_disableimap">{tmpl_var name='search_disableimap'}</select></td>
                         <td><select class="form-control" name="search_disablepop3">{tmpl_var name='search_disablepop3'}</select></td>
                         <td class="text-right">
@@ -65,6 +67,7 @@
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="autoresponder"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="postfix"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disablesmtp"}</a></td>
+                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disabledeliver"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disableimap"}</a></td>
                         <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="disablepop3"}</a></td>
                         <td class="text-right">
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm
index a90799cf11d7b7f777d110c0f7f06d5824f3652c..c53bc8529241ea3b57b923f18936f3af26511c2e 100644
--- a/interface/web/mail/templates/mail_user_mailbox_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm
@@ -67,13 +67,19 @@
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='postfix_txt'}</label>
                 <div class="col-sm-9">
-                    {tmpl_var name='postfix'}
+                    <a href="#" data-toggle="tooltip" title="{tmpl_var name='tooltip_postfix_txt'}">{tmpl_var name='postfix'}</a>
                 </div>
             </div>
             <div class="form-group">
                 <label class="col-sm-3 control-label">{tmpl_var name='disablesmtp_txt'}</label>
                 <div class="col-sm-9">
-                    {tmpl_var name='disablesmtp'}
+                    <a href="#" data-toggle="tooltip" title="{tmpl_var name='tooltip_disablesmtp_txt'}">{tmpl_var name='disablesmtp'}</a>
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='disabledeliver_txt'}</label>
+                <div class="col-sm-9">
+                    <a href="#" data-toggle="tooltip" title="{tmpl_var name='tooltip_disabledeliver_txt'}">{tmpl_var name='disabledeliver'}</a>
                 </div>
             </div>
             <div class="form-group">
diff --git a/interface/web/mail/templates/mail_user_mailfilter_edit.htm b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
index 4c7058292ea5d3ce31c95acc3f93898d280bf832..8d14eb4ee6fb73f5b515972c07c6a778278bcc8d 100644
--- a/interface/web/mail/templates/mail_user_mailfilter_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailfilter_edit.htm
@@ -1,6 +1,9 @@
 <div class="form-group">
 	<label class="col-sm-3 control-label">{tmpl_var name='move_junk_txt'}</label>
-	<div class="col-sm-9">{tmpl_var name='move_junk'}</div>
+	<div class="col-sm-9"><select name="move_junk" id="move_junk" class="form-control">
+	    {tmpl_var name='move_junk'}
+	</select></div>
+
 </div>
 
 <div class="form-group">
diff --git a/interface/web/mailuser/form/mail_user_autoresponder.tform.php b/interface/web/mailuser/form/mail_user_autoresponder.tform.php
index e642534c13fbf34250aedf51ba88173395857f93..fa4025b532f89f004f02fbb94059a1fe74fd8cf4 100644
--- a/interface/web/mailuser/form/mail_user_autoresponder.tform.php
+++ b/interface/web/mailuser/form/mail_user_autoresponder.tform.php
@@ -94,16 +94,20 @@ $form["tabs"]['autoresponder'] = array (
 		'autoresponder_start_date' => array (
 			'datatype' => 'DATETIME',
 			'formtype' => 'DATETIME',
-			'validators'=> array (  0 => array ( 'type' => 'CUSTOM',
-					'class' => 'validate_autoresponder',
-					'function' => 'start_date',
-					'errmsg'=> 'autoresponder_start_date_isfuture'),
-			),
+			'validators'=> array (
+				0 => array ( 'type' => 'ISDATETIME',
+					'allowempty' => 'y',
+					'errmsg'=> 'autoresponder_start_date_is_no_date'),
+			)
 		),
 		'autoresponder_end_date' => array (
 			'datatype' => 'DATETIME',
 			'formtype' => 'DATETIME',
-			'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
+			'validators'=> array (
+				0 => array ( 'type' => 'ISDATETIME',
+					'allowempty' => 'y',
+					'errmsg'=> 'autoresponder_end_date_is_no_date'),
+				1 => array ( 'type' => 'CUSTOM',
 					'class' => 'validate_autoresponder',
 					'function' => 'end_date',
 					'errmsg'=> 'autoresponder_end_date_isgreater'),
diff --git a/interface/web/mailuser/form/mail_user_filter.tform.php b/interface/web/mailuser/form/mail_user_filter.tform.php
index 9fdd8bdfc0ef45c9168a4c5c0d7a6cae694fa651..0f454fa6f751d3439188ac3053eb7f6858f4f720 100644
--- a/interface/web/mailuser/form/mail_user_filter.tform.php
+++ b/interface/web/mailuser/form/mail_user_filter.tform.php
@@ -32,18 +32,17 @@
 
 
 */
-
 global $app;
 
 $form["title"]    = "mailbox_filter_txt";
-$form["description"]            = "";
+$form["description"]  = "";
 $form["name"]    = "mail_user_filter";
 $form["action"]   = "mail_user_filter_edit.php";
 $form["db_table"]  = "mail_user_filter";
-$form["db_table_idx"]           = "filter_id";
+$form["db_table_idx"] = "filter_id";
 $form["db_history"]  = "no";
-$form["tab_default"]            = "filter";
-$form["list_default"]           = "mail_user_filter_list.php";
+$form["tab_default"] = "filter";
+$form["list_default"] = "mail_user_filter_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
@@ -74,6 +73,12 @@ $form["tabs"]['filter'] = array (
 			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
 					'errmsg'=> 'rulename_error_empty'),
 			),
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPTAGS'),
+					1 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
 			'default' => '',
 			'value'  => '',
 			'width'  => '30',
@@ -83,14 +88,14 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'List-Id'=>'list_id_txt')
+			'value'  => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'List-Id'=>'list_id_txt', 'Header' => 'header_txt', 'Size' => 'size_over_txt')
 		),
 		'op' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
 			//'value'  => array('contains'=>'contains_txt','is' => 'Is','begins'=>'Begins with','ends'=>'Ends with')
-			'value'  => array('contains'=>'contains_txt', 'is' => 'is_txt', 'begins'=>'begins_with_txt', 'ends'=>'ends_with_txt')
+			'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 (
 			'datatype' => 'VARCHAR',
@@ -98,6 +103,10 @@ $form["tabs"]['filter'] = array (
 			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
 					'errmsg'=> 'searchterm_is_empty'),
 			),
+			'filters'   => array(
+					0 => array( 'event' => 'SAVE',
+					'type' => 'STRIPNL')
+			),
 			'default' => '',
 			'value'  => '',
 			'width'  => '30',
@@ -107,13 +116,13 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('move' => 'move_to_txt', 'delete'=>'delete_txt')
+			'value'  => array('move' => 'move_to_txt', 'delete'=>'delete_txt', 'keep' => 'keep_txt', 'reject' => 'reject_txt')
 		),
 		'target' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\.\-\_\ ]{0,100}$/',
+					'regex' => '/^[\p{Latin}0-9\.\-\_\ \&]{0,100}$/u',
 					'errmsg'=> 'target_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/mailuser/lib/lang/ar_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/ar_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/ar_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/ar_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ar_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ar_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/ar_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/ar_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/ar_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/bg_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/bg_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/bg_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/bg_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng b/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/bg_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/bg_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/bg_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/bg_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/bg_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
index 9de387d7988c1b3910083be4afd3d9e73ddb5981..3783bbcb7368e96d2d6b1dca99a67ec23f42064a 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_autoresponder.lng
@@ -6,7 +6,7 @@ $wb['autoresponder_txt'] = 'Ativo';
 $wb['autoresponder_start_date_txt'] = 'Iniciar em';
 $wb['autoresponder_start_date_isfuture'] = 'O campo "Iniciar em" não pode ser menor que data atual.';
 $wb['autoresponder_end_date_txt'] = 'Terminar em';
-$wb['autoresponder_end_date_isgreater'] = 'O campo "Terminar em" não pode ser menor que "Iniciar em".';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Habilitar auto-resposta';
 $wb['now_txt'] = 'Agora';
 $wb['autoresponder_subject_txt'] = 'Assunto';
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_filter.lng b/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
index acefe8be6eeff36105556b42011eefd2fb2f67c1..88a727139136839d0e79ca7e3b3bbffb37efc396 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_filter.lng
@@ -17,5 +17,9 @@ $wb['is_txt'] = 'é';
 $wb['begins_with_txt'] = 'Iniciando com';
 $wb['ends_with_txt'] = 'Finalizando com';
 $wb['move_to_txt'] = 'Mover para';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Remover';
+$wb['header_txt'] = 'Header';
+$wb['size_over_txt'] = 'Email size over (KB)';
+$wb['size_under_txt'] = 'Email size under (KB)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
index eb369220412e340952738ed60bffcd81f943c356..360d47d9cc9855f876a078b2d7b8c2756fe920b4 100644
--- a/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/br_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Filtros anti-spam';
 $wb['spamfilter_txt'] = 'Filtro anti-spam';
 $wb['email_txt'] = 'e-Mail';
-$wb['no_policy'] = '-desabilitado-';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Política';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ca_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/ca_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/ca_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/ca_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ca_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ca_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/ca_mail_user_spamfilter.lng
index 2b29913e5f50b9a91e43a10666b8ae2b0aa9add2..00ed8174f494712ea61ddedf8c60ce994849ddfb 100644
--- a/interface/web/mailuser/lib/lang/ca_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/ca_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Courriel';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/cz_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/cz_mail_user_autoresponder.lng
index ef3aeb42da522378dbd954257bc39bd9b13f3c34..20134a87b5bafc1c1291da2f8e34863bbd18b4be 100644
--- a/interface/web/mailuser/lib/lang/cz_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/cz_mail_user_autoresponder.lng
@@ -6,7 +6,7 @@ $wb['autoresponder_txt'] = 'Aktivní';
 $wb['autoresponder_start_date_txt'] = 'Začít od';
 $wb['autoresponder_start_date_isfuture'] = 'Datum zahájení nesmí být v minulosti.';
 $wb['autoresponder_end_date_txt'] = 'Skončit';
-$wb['autoresponder_end_date_isgreater'] = 'Datum ukončení musí být nastaven a musí být pozdější než datum zahájení.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Povolit automatický odpovídač';
 $wb['now_txt'] = 'Nyní';
 $wb['autoresponder_subject_txt'] = 'Předmět e-mailu';
diff --git a/interface/web/mailuser/lib/lang/cz_mail_user_filter.lng b/interface/web/mailuser/lib/lang/cz_mail_user_filter.lng
index 27b54c1bc7724861e10999d50b093593e8e7757b..010427341ed27597ab4bbe9f3192f65b4939fa92 100644
--- a/interface/web/mailuser/lib/lang/cz_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/cz_mail_user_filter.lng
@@ -16,6 +16,10 @@ $wb['is_txt'] = 'Je';
 $wb['begins_with_txt'] = 'Začíná na';
 $wb['ends_with_txt'] = 'Končí na';
 $wb['move_to_txt'] = 'Přesunout do';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Smazat';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/cz_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/cz_mail_user_spamfilter.lng
index 2a53036be6267f69d2f15db97ab7b2087e026eb2..e6a50b96f8c3f1b9c45dc557c95eee25baddff41 100644
--- a/interface/web/mailuser/lib/lang/cz_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/cz_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamový filtr';
 $wb['spamfilter_txt'] = 'Spamový filtr';
 $wb['email_txt'] = 'E-mail';
-$wb['no_policy'] = '- nepovoleno -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Politika';
 ?>
diff --git a/interface/web/mailuser/lib/lang/de_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/de_mail_user_autoresponder.lng
index f8d4e46b12109005789a7d61fd8720d44ac508d9..af164c475d2ce2f35195a211b8ea001f1a3a4d7a 100644
--- a/interface/web/mailuser/lib/lang/de_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/de_mail_user_autoresponder.lng
@@ -6,7 +6,7 @@ $wb['autoresponder_txt'] = 'Aktiv';
 $wb['autoresponder_start_date_txt'] = 'Start am';
 $wb['autoresponder_start_date_isfuture'] = 'Start Datum kann nicht in der Vergangenheit sein.';
 $wb['autoresponder_end_date_txt'] = 'Ende am';
-$wb['autoresponder_end_date_isgreater'] = 'End Datum muss gesetzt werden und nach dem Start Datum sein.';
+$wb['autoresponder_end_date_isgreater'] = 'End Datum muss nach dem Start Datum sein.';
 $wb['autoresponder_active'] = 'Autoresponder aktivieren';
 $wb['now_txt'] = 'Jetzt';
 $wb['autoresponder_subject_txt'] = 'Betreff';
diff --git a/interface/web/mailuser/lib/lang/de_mail_user_filter.lng b/interface/web/mailuser/lib/lang/de_mail_user_filter.lng
index 1665ba14d22763412387e00b009f445090e78d4b..5c7d5c20d0bbd42993711cee5a3c92781a10af13 100644
--- a/interface/web/mailuser/lib/lang/de_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/de_mail_user_filter.lng
@@ -17,5 +17,9 @@ $wb['is_txt'] = 'Ist';
 $wb['begins_with_txt'] = 'Startet mit';
 $wb['ends_with_txt'] = 'Endet mit';
 $wb['move_to_txt'] = 'Verschieben nach';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Löschen';
+$wb['header_txt'] = 'Header';
+$wb['size_over_txt'] = 'Email size over (KB)';
+$wb['size_under_txt'] = 'Email size under (KB)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/de_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/de_mail_user_spamfilter.lng
index 47ac53a006c373ca32e297350a4cc7929639f6db..d444899a8f8a86013861a657aa28e7628013be3a 100644
--- a/interface/web/mailuser/lib/lang/de_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/de_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'E-Mail';
-$wb['no_policy'] = '- nicht aktiviert -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Richtlinie';
 ?>
diff --git a/interface/web/mailuser/lib/lang/dk_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/dk_mail_user_autoresponder.lng
index 81bee87afb6a1a4f98d8e2c304d8174a01298d5a..e9cf7ba82a58a53eab81f4c19f5a70199744ad33 100644
--- a/interface/web/mailuser/lib/lang/dk_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/dk_mail_user_autoresponder.lng
@@ -6,7 +6,7 @@ $wb['autoresponder_txt'] = 'Aktiv';
 $wb['autoresponder_start_date_txt'] = 'Start d.';
 $wb['autoresponder_start_date_isfuture'] = 'Start dato kan ikke være i fortid.';
 $wb['autoresponder_end_date_txt'] = 'Slut d.';
-$wb['autoresponder_end_date_isgreater'] = 'Slut dato skal indtastes og være senere end start dato.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Aktiver autosvarer';
 $wb['now_txt'] = 'Nu';
 $wb['autoresponder_subject_txt'] = 'Emne';
diff --git a/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng b/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
index 0a92f580a10ab1548c4a3426f73e1a8cc8fece9b..e2325c6902c8117f2e777929cebe7323407a13c3 100644
--- a/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/dk_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Er';
 $wb['begins_with_txt'] = 'Begynder med';
 $wb['ends_with_txt'] = 'Slutter med';
 $wb['move_to_txt'] = 'Flyt til';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Slet';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/dk_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/dk_mail_user_spamfilter.lng
index f43190d492abf9b7f0a4d3ea87da4c30cfd98620..fb05b7565ce21b5dd5dfba2e7203f5ffe08e1294 100644
--- a/interface/web/mailuser/lib/lang/dk_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/dk_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'E-mail';
-$wb['no_policy'] = '- ikke aktiveret -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Politik';
 ?>
diff --git a/interface/web/mailuser/lib/lang/el_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/el_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/el_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/el_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/el_mail_user_filter.lng b/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/el_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/el_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/el_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/el_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/el_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/en_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/en_mail_user_autoresponder.lng
index a736abf69082154b13322b64dba298c66a1927c3..e0028159433081752c19a822a3d2954b71f5b9ec 100644
--- a/interface/web/mailuser/lib/lang/en_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/en_mail_user_autoresponder.lng
@@ -9,5 +9,5 @@ $wb["autoresponder_end_date_txt"] = 'End by';
 $wb["autoresponder_end_date_isgreater"] = 'End date must be set and be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt']='Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
index c26150ba1d183e8cea68c1aa9e3d0d3fc246664d..fb587d43805d11f0367cdcfc795af9582e31eb60 100644
--- a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng
@@ -18,5 +18,9 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
+$wb['header_txt'] = 'Header';
+$wb['size_over_txt'] = 'Email size over (KB)';
+$wb['size_under_txt'] = 'Email size under (KB)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/en_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/en_mail_user_spamfilter.lng
index 8f95dd37a7f189f860cfaf8bf81a7b809272b3c4..030e4fce593a656d5d953ee6a8d55a1f1df79754 100644
--- a/interface/web/mailuser/lib/lang/en_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/en_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb["mailbox_spamfilter_txt"] = 'Spamfilter';
 $wb["spamfilter_txt"] = 'Spamfilter';
 $wb["email_txt"] = 'Email';
-$wb["no_policy"] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb["policy_txt"] = 'Policy';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/es_mail_user_autoresponder.lng
index 577951ea2b3e48d743ff96b83fed676c4f8afc45..04e55b28b9a688a0b38168f315e6dbf9b846f2f2 100644
--- a/interface/web/mailuser/lib/lang/es_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/es_mail_user_autoresponder.lng
@@ -1,6 +1,6 @@
 <?php
 $wb['autoresponder_active'] = 'Activar auto respuesta';
-$wb['autoresponder_end_date_isgreater'] = 'Debe indicar la fecha de finalización y esta debe ser mayor a la de inicio.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_end_date_txt'] = 'Finaliza el';
 $wb['autoresponder_start_date_txt'] = 'Comienza el';
 $wb['autoresponder_subject'] = 'Estoy fuera de la oficina';
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_filter.lng b/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
index b8a19359f538c8da7ff662b0310b29eb3c95e96a..3485ea46014c3bf3c747159346fc234675d56ad6 100644
--- a/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/es_mail_user_filter.lng
@@ -3,6 +3,7 @@ $wb['action_txt'] = 'Acción';
 $wb['active_txt'] = 'Habilitado';
 $wb['begins_with_txt'] = 'Comienza con';
 $wb['contains_txt'] = 'Contiene';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Borrar';
 $wb['ends_with_txt'] = 'Termina con';
 $wb['from_txt'] = 'De';
@@ -19,4 +20,7 @@ $wb['target_txt'] = 'Carpeta';
 $wb['to_txt'] = 'Para';
 $wb['list_id_txt'] = 'List ID';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/es_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/es_mail_user_spamfilter.lng
index 31d7ba7c745979e7d380a11c91ff286e4b086ef1..2496d26f9343554b37b4bfe65f784fdbd7e51db5 100644
--- a/interface/web/mailuser/lib/lang/es_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/es_mail_user_spamfilter.lng
@@ -1,7 +1,7 @@
 <?php
 $wb['email_txt'] = 'Correo';
 $wb['mailbox_spamfilter_txt'] = 'Filtro de spam';
-$wb['no_policy'] = '- no habilitado -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Directiva';
 $wb['spamfilter_txt'] = 'Filtro de spam';
 ?>
diff --git a/interface/web/mailuser/lib/lang/fi_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/fi_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/fi_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/fi_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng b/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/fi_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/fi_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/fi_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/fi_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/fi_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/fr_mail_user_filter.lng b/interface/web/mailuser/lib/lang/fr_mail_user_filter.lng
index b630b05a796f592e64d7722dffef06db7bf8376b..d2b513b1556b933502763224c3b2ef0ec7c9a267 100644
--- a/interface/web/mailuser/lib/lang/fr_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/fr_mail_user_filter.lng
@@ -16,6 +16,10 @@ $wb['is_txt'] = 'est';
 $wb['begins_with_txt'] = 'Commence par';
 $wb['ends_with_txt'] = 'Fini par';
 $wb['move_to_txt'] = 'Déplacer vers';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Supprimer';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/fr_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/fr_mail_user_spamfilter.lng
index f6bcd5d32d56d5e23febc29484310978311cf27d..1574f45f3f1f33650325d8688daa2b2ae2d9fa8f 100644
--- a/interface/web/mailuser/lib/lang/fr_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/fr_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Filtre anti-spam';
 $wb['spamfilter_txt'] = 'Filtre anti-spam';
 $wb['email_txt'] = 'E-mail';
-$wb['no_policy'] = '- non activé -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Stratégie';
 ?>
diff --git a/interface/web/mailuser/lib/lang/hr_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/hr_mail_user_autoresponder.lng
index bbb3b79bc4f1bb311b5a0bd6fff0c22d353d31e2..711cfde14f935cf63a83956e05e6cb11d6a21a10 100644
--- a/interface/web/mailuser/lib/lang/hr_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/hr_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Sada';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/hr_mail_user_filter.lng b/interface/web/mailuser/lib/lang/hr_mail_user_filter.lng
index b2793c38051161f8abb79e740d889c3bdf142ff1..dfb58bd3d2ed2f0c4deeb08204854a9d8f697666 100644
--- a/interface/web/mailuser/lib/lang/hr_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/hr_mail_user_filter.lng
@@ -16,6 +16,10 @@ $wb['is_txt'] = 'je';
 $wb['begins_with_txt'] = 'Počinje sa';
 $wb['ends_with_txt'] = 'Završava sa';
 $wb['move_to_txt'] = 'Prebaci u ';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Obriši';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/hr_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/hr_mail_user_spamfilter.lng
index 7d7130e816f07ff0e613203d47b8877069f37a36..b2d208a09884a3808d04c06cebd129dceb6bf8b7 100644
--- a/interface/web/mailuser/lib/lang/hr_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/hr_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spam filter';
 $wb['spamfilter_txt'] = 'Spam filter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- isključeno -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Pravila';
 ?>
diff --git a/interface/web/mailuser/lib/lang/hu_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/hu_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/hu_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/hu_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng b/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/hu_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/hu_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/hu_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/hu_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/hu_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/id_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/id_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/id_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/id_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/id_mail_user_filter.lng b/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/id_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/id_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/id_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/id_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/id_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/it_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/it_mail_user_autoresponder.lng
index caaac2e7c4d116ec1da199d82a8e9831fa60c8fa..0bc9b162f0f93e99ee468f432ab01d362774d7ec 100644
--- a/interface/web/mailuser/lib/lang/it_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/it_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Attivo';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
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 49c335860182218e8edcfb036e935e647f5a7958..a0b9e360c2875f47f9846ea00a77436949d4d8ed 100644
--- a/interface/web/mailuser/lib/lang/it_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/it_mail_user_filter.lng
@@ -16,6 +16,10 @@ $wb['is_txt'] = 'è';
 $wb['begins_with_txt'] = 'Inizia con';
 $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)';
 ?>
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 9d4c5496ea57b829cbbcc4e00b1ef1f6994c3d9e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 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'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- non abilitato -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ja_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/ja_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/ja_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/ja_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ja_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ja_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/ja_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/ja_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/ja_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng b/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
index 0092c288a06a1845afa038f398c497dd2129e7b1..91dfd85373130da5060cdb0bad5ff159bde4d5c1 100644
--- a/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/nl_mail_user_filter.lng
@@ -16,6 +16,10 @@ $wb['is_txt'] = "Is";
 $wb['begins_with_txt'] = "Begint met";
 $wb['ends_with_txt'] = "Endigt in";
 $wb['move_to_txt'] = "Verplaatsen naar";
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = "Verwijderen";
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/nl_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/nl_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/nl_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/nl_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/pl_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/pl_mail_user_autoresponder.lng
index 7a28409e5f440ea40a35f110191fc5d5f105aff4..79019190c66137724e818d10c861fce8e1303f84 100644
--- a/interface/web/mailuser/lib/lang/pl_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/pl_mail_user_autoresponder.lng
@@ -6,7 +6,7 @@ $wb['autoresponder_txt'] = 'Aktywny';
 $wb['autoresponder_start_date_txt'] = 'Start';
 $wb['autoresponder_start_date_isfuture'] = 'Data startu nie może być z przeszłości';
 $wb['autoresponder_end_date_txt'] = 'Koniec';
-$wb['autoresponder_end_date_isgreater'] = 'Data końcowa musi być ustawiona i być późniejsza niż startu.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'WÅ‚Ä…cz autoresponder';
 $wb['now_txt'] = 'Teraz';
 $wb['autoresponder_subject_txt'] = 'Temat';
diff --git a/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng b/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/pl_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/pl_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/pl_mail_user_spamfilter.lng
index b371f3ea75110524e3387db7708d06df87426121..5a530c0c5edd1720770bb5e12afe77a2b91ef694 100644
--- a/interface/web/mailuser/lib/lang/pl_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/pl_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Ustawienia filtra spamu';
 $wb['spamfilter_txt'] = 'Filtr spamu';
 $wb['email_txt'] = 'E-mail';
-$wb['no_policy'] = '- nie włączony -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Polityka';
 ?>
diff --git a/interface/web/mailuser/lib/lang/pt_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/pt_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/pt_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/pt_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng b/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/pt_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/pt_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/pt_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/pt_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/pt_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ro_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/ro_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/ro_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/ro_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ro_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ro_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/ro_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/ro_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/ro_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ru_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/ru_mail_user_autoresponder.lng
index c7c864c5a513902aca615fe9e293d5ff09aaa668..0e5ec20601006535ba92bb1126e3af7d1f742042 100644
--- a/interface/web/mailuser/lib/lang/ru_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/ru_mail_user_autoresponder.lng
@@ -6,7 +6,7 @@ $wb['autoresponder_txt'] = 'Активно';
 $wb['autoresponder_start_date_txt'] = 'Запускать';
 $wb['autoresponder_start_date_isfuture'] = 'Дата запуска не может быть в прошлом.';
 $wb['autoresponder_end_date_txt'] = 'Останавливать';
-$wb['autoresponder_end_date_isgreater'] = 'Дата окончания должна быть позже даты запуска.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Включить автоответчик';
 $wb['now_txt'] = 'Сейчас';
 $wb['autoresponder_subject_txt'] = 'Тема';
diff --git a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
index d834e4057a0688ee6c2302933a9edf07d1aa0d43..590763ed43fa656a5b61a81793d842c205fa47da 100644
--- a/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/ru_mail_user_filter.lng
@@ -16,6 +16,10 @@ $wb['is_txt'] = 'Равно';
 $wb['begins_with_txt'] = 'Начинается с';
 $wb['ends_with_txt'] = 'Заканчивается на';
 $wb['move_to_txt'] = 'Переместить в';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Удалить';
 $wb['mailbox_filter_txt'] = 'Фильтр почтового ящика';
+$wb['header_txt'] = 'Header';
+$wb['size_over_txt'] = 'Email size over (KB)';
+$wb['size_under_txt'] = 'Email size under (KB)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/ru_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/ru_mail_user_spamfilter.lng
index a4b7a48b7f8c5a80732a4ae7289a66a5aaa4509f..1a168b76107066136450eae9fe166925148d8a98 100644
--- a/interface/web/mailuser/lib/lang/ru_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/ru_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Спам-фильтр';
 $wb['spamfilter_txt'] = 'СПАМ-фильтр';
 $wb['email_txt'] = 'Адрес эл. почты';
-$wb['no_policy'] = '- Отсутствует -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Правило';
 ?>
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_filter.lng b/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
index da15d6f73b2e6e55713574c621590d632ee6416d..4f7e093d773f1fa72975e86856fd27d9f6c95d27 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
@@ -16,6 +16,10 @@ $wb['is_txt'] = 'Är';
 $wb['begins_with_txt'] = 'Börjar med';
 $wb['ends_with_txt'] = 'Slutar med';
 $wb['move_to_txt'] = 'Flytta till';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Radera';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
index 7ec5f2a7d8671cc2ca146de36ed9918c2d4ca9bd..8cc318e71c6e38040a48b8e73fb67ba76ac92e80 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Epost';
-$wb['no_policy'] = '- ej aktiverat -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/sk_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/sk_mail_user_autoresponder.lng
index 79f386a7dc9da88380ae34d006d729d79894b549..b913b5cfa13d256c5e55b7978669d18e56b6a3b4 100644
--- a/interface/web/mailuser/lib/lang/sk_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/sk_mail_user_autoresponder.lng
@@ -6,8 +6,8 @@ $wb['autoresponder_txt'] = 'Active';
 $wb['autoresponder_start_date_txt'] = 'Start on';
 $wb['autoresponder_start_date_isfuture'] = 'Start date cannot be in the past.';
 $wb['autoresponder_end_date_txt'] = 'End by';
-$wb['autoresponder_end_date_isgreater'] = 'End date must be set and be later than start date.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'Enable the autoresponder';
 $wb['now_txt'] = 'Now';
-$wb['autoresponder_subject_txt'] = 'Betreff';
+$wb['autoresponder_subject_txt'] = 'Subject';
 ?>
diff --git a/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng b/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
index 9ac4be357efcb3ce2912c717d9e6f341e9f2941e..0df6e0b75bf88fda9af78ceecd9bb7d07e2ad87d 100644
--- a/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/sk_mail_user_filter.lng
@@ -17,6 +17,10 @@ $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
 $wb['move_to_txt'] = 'Move to';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $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)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/sk_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/sk_mail_user_spamfilter.lng
index be4bad90504b47914b13a01b95158a862024839e..fc355eb9200d2793eb6e3af79e1dc7d18c8bcd84 100644
--- a/interface/web/mailuser/lib/lang/sk_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/sk_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Spamfilter';
 $wb['spamfilter_txt'] = 'Spamfilter';
 $wb['email_txt'] = 'Email';
-$wb['no_policy'] = '- not enabled -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Policy';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/tr_mail_user_autoresponder.lng
index ab776ef9454e0a14e33387e9e4c9d3219fe411ff..06fbddd0bc227a3f45db566f552c2cc5d992a93b 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_autoresponder.lng
@@ -6,7 +6,7 @@ $wb['autoresponder_txt'] = 'Etkin';
 $wb['autoresponder_start_date_txt'] = 'Başlangıç';
 $wb['autoresponder_start_date_isfuture'] = 'Başlangıç tarihi geçmiş zamanda olamaz.';
 $wb['autoresponder_end_date_txt'] = 'BitiÅŸ';
-$wb['autoresponder_end_date_isgreater'] = 'Bitiş tarihi başlangıç tarihinden sonra olmalıdır.';
+$wb['autoresponder_end_date_isgreater'] = 'End date must be later than start date.';
 $wb['autoresponder_active'] = 'EtkinleÅŸtir';
 $wb['now_txt'] = 'Åžimdi';
 $wb['autoresponder_subject_txt'] = 'Otoyanıt';
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng b/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
index 57db1979013af74c8877a86dda4283395f99ceee..b59a4afbab720cec2ca2098eee46bc88031ca9d1 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_filter.lng
@@ -16,6 +16,10 @@ $wb['is_txt'] = 'Şununla aynı';
 $wb['begins_with_txt'] = 'Åžununla baÅŸlayan';
 $wb['ends_with_txt'] = 'Åžununla biten';
 $wb['move_to_txt'] = 'Şuraya taşı';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Sil';
 $wb['mailbox_filter_txt'] = 'E-posta kutusu süzgeci';
+$wb['header_txt'] = 'Header';
+$wb['size_over_txt'] = 'Email size over (KB)';
+$wb['size_under_txt'] = 'Email size under (KB)';
 ?>
diff --git a/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
index 3426385a2effcb7bb7a449896f768a4e03b772b2..25bd43520a4c75e28369eff8599e3ecab65a5bdd 100644
--- a/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/tr_mail_user_spamfilter.lng
@@ -2,6 +2,6 @@
 $wb['mailbox_spamfilter_txt'] = 'Önemsiz İleti Süzgeci';
 $wb['spamfilter_txt'] = 'Önemsiz ileti süzgeci';
 $wb['email_txt'] = 'E-posta';
-$wb['no_policy'] = '- devre dışı -';
+$wb['inherit_policy'] = '- Inherit domain setting -';
 $wb['policy_txt'] = 'Kural';
 ?>
diff --git a/interface/web/mailuser/mail_user_spamfilter_edit.php b/interface/web/mailuser/mail_user_spamfilter_edit.php
index abbea219376204ce922762129849da67122a4738..75649b5a707f3b89e5c4606d7019bc84c967bf0f 100644
--- a/interface/web/mailuser/mail_user_spamfilter_edit.php
+++ b/interface/web/mailuser/mail_user_spamfilter_edit.php
@@ -52,7 +52,7 @@ class page_action extends tform_actions {
 
 	function onShow() {
 		global $app;
-		
+
 		$this->id = $app->functions->intval($_SESSION['s']['user']['mailuser_id']);
 
 		parent::onShow();
@@ -118,7 +118,7 @@ class page_action extends tform_actions {
 		$tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = ?", $rec['email']);
 		$sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r');
 		$policys = $app->db->queryAllRecords($sql);
-		$policy_select = "<option value='0'>".$app->tform->lng("no_policy")."</option>";
+		$policy_select = "<option value='0'>".$app->tform->lng("inherit_policy")."</option>";
 		if(is_array($policys)) {
 			foreach( $policys as $p) {
 				$selected = ($p["id"] == $tmp_user["policy_id"])?'SELECTED':'';
diff --git a/interface/web/monitor/lib/lang/ar.lng b/interface/web/monitor/lib/lang/ar.lng
index 9d54ea1f5db7fbb85cff83b20b0065728efa5e13..6a63ea9ab572a4399fcbe56ad052be0fb1609b16 100644
--- a/interface/web/monitor/lib/lang/ar.lng
+++ b/interface/web/monitor/lib/lang/ar.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/bg.lng b/interface/web/monitor/lib/lang/bg.lng
index a8b7f491aca6e00f622fe0863bc3cc9aa14159e0..ec2896958159bc9059dcaf1f0196d06babe6b172 100644
--- a/interface/web/monitor/lib/lang/bg.lng
+++ b/interface/web/monitor/lib/lang/bg.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/br.lng b/interface/web/monitor/lib/lang/br.lng
index 172891cfd9bcf6c489b4f120917f621db3e9108b..781dd1e7e1d565bcf9f204d432b48fce7aedbc7d 100644
--- a/interface/web/monitor/lib/lang/br.lng
+++ b/interface/web/monitor/lib/lang/br.lng
@@ -163,4 +163,6 @@ $wb['no_permissions_to_view_monit_txt'] = 'Você não tem permissão para acessa
 $wb['Show Munin'] = 'Exibir Munin';
 $wb['no_munin_url_defined_txt'] = 'Nenhuma URL do Munin definida.';
 $wb['no_permissions_to_view_munin_txt'] = 'Você não tem permissão para acessar o Munin.';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/ca.lng b/interface/web/monitor/lib/lang/ca.lng
index b57b255a745abbd3252f91709843843d2198219b..ebceac346791643255b2e9b768bd74b5dcb53a4b 100644
--- a/interface/web/monitor/lib/lang/ca.lng
+++ b/interface/web/monitor/lib/lang/ca.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/cz.lng b/interface/web/monitor/lib/lang/cz.lng
index be2d9eadbb410a52ead1e3b0907d6c91fda03afa..604fbd5ceba54d48e0022f93d19c25bc10292c3a 100644
--- a/interface/web/monitor/lib/lang/cz.lng
+++ b/interface/web/monitor/lib/lang/cz.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Doména';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Zobrazit historii datového logu';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/de.lng b/interface/web/monitor/lib/lang/de.lng
index f8fabe7990633066917d01872f7ece90b2e72869..63cb5b9848b191074c7302c9e4fdca25ea09df0b 100644
--- a/interface/web/monitor/lib/lang/de.lng
+++ b/interface/web/monitor/lib/lang/de.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_name_txt'] = 'Database';
 $wb['monitor_database_size_txt'] = 'Size';
 $wb['monitor_database_client_txt'] = 'Client';
 $wb['monitor_database_domain_txt'] = 'Domain';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/dk.lng b/interface/web/monitor/lib/lang/dk.lng
index 4c7bfab1e750e91a1da8bf0bf4567b718c9414d9..0a7f8bc19e289bc3cd883b1fb0e52fb75287c49d 100644
--- a/interface/web/monitor/lib/lang/dk.lng
+++ b/interface/web/monitor/lib/lang/dk.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/el.lng b/interface/web/monitor/lib/lang/el.lng
index 245c80c6666b36b19050e298e1d05c3108e618a9..1d783f3da7edb9c02290bf6cfb76f6d925b65fc4 100644
--- a/interface/web/monitor/lib/lang/el.lng
+++ b/interface/web/monitor/lib/lang/el.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/en.lng b/interface/web/monitor/lib/lang/en.lng
index 194bbc5030fcfddd210f4ce9cf23f1e5039d367d..f507f54229b3685ef62dd100ec2cf3236457749d 100644
--- a/interface/web/monitor/lib/lang/en.lng
+++ b/interface/web/monitor/lib/lang/en.lng
@@ -162,4 +162,6 @@ $wb['no_permissions_to_view_monit_txt'] = 'You are not allowed to access Monit.'
 $wb['Show Munin'] = 'Show Munin';
 $wb['no_munin_url_defined_txt'] = 'No Munin URL defined.';
 $wb['no_permissions_to_view_munin_txt'] = 'You are not allowed to access Munin.';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/es.lng b/interface/web/monitor/lib/lang/es.lng
index f4acb3c45c0c9e80162986cce5d112c37f1e7180..56ce9a4222d73d78067090740ab275bf131a98be 100644
--- a/interface/web/monitor/lib/lang/es.lng
+++ b/interface/web/monitor/lib/lang/es.lng
@@ -162,4 +162,6 @@ $wb['System load 5 minutes'] = 'Carga del sistema hace 5 minutos';
 $wb['System State (All Servers)'] = 'Estado de los sistemas';
 $wb['Users online'] = 'Usuarios en línea';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/fi.lng b/interface/web/monitor/lib/lang/fi.lng
index 911aae9bd12fc4374ca4070a910dad087a7908cf..f825f6e20bc0d9768d3149e95bdabece11878505 100644
--- a/interface/web/monitor/lib/lang/fi.lng
+++ b/interface/web/monitor/lib/lang/fi.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/fr.lng b/interface/web/monitor/lib/lang/fr.lng
index c08fe749482b2731e68cb93226ebec2b554e7b61..8bf754cb9b76572b8e51f70e7a028f84238328f3 100644
--- a/interface/web/monitor/lib/lang/fr.lng
+++ b/interface/web/monitor/lib/lang/fr.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/hr.lng b/interface/web/monitor/lib/lang/hr.lng
index 17899ff3f0b30b8dfb4f589e151c9fcdd2d6e756..4c8037604a929d101deb3ccc232a168525f12773 100644
--- a/interface/web/monitor/lib/lang/hr.lng
+++ b/interface/web/monitor/lib/lang/hr.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/hu.lng b/interface/web/monitor/lib/lang/hu.lng
index 9a5c41654ff351cd5652a405bb2c7c40ee03691d..e9ac7009f07f70f35905faecf2d731b1fb9d9e70 100644
--- a/interface/web/monitor/lib/lang/hu.lng
+++ b/interface/web/monitor/lib/lang/hu.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/id.lng b/interface/web/monitor/lib/lang/id.lng
index 4cdbf5d8ba3e03cdccf1768a7f008613c90ce6b0..8a1bba91d8a43895ee5dc1a55ce5054269434803 100644
--- a/interface/web/monitor/lib/lang/id.lng
+++ b/interface/web/monitor/lib/lang/id.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/it.lng b/interface/web/monitor/lib/lang/it.lng
index e6feadf01f9e68d9429be17e13e0dddc896d97fc..675f27494b8c5a343e01221e2e2f3a4db74cfd12 100644
--- a/interface/web/monitor/lib/lang/it.lng
+++ b/interface/web/monitor/lib/lang/it.lng
@@ -162,4 +162,6 @@ $wb['monitor_database_domain_txt'] = 'Domain';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/ja.lng b/interface/web/monitor/lib/lang/ja.lng
index cccd678cb7b9ba2351ba1518f04c7d7a7051d866..3ea8fb1dfd888fe37561f9360dc7002d678d5048 100644
--- a/interface/web/monitor/lib/lang/ja.lng
+++ b/interface/web/monitor/lib/lang/ja.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/nl.lng b/interface/web/monitor/lib/lang/nl.lng
index a534b9afb36a6a5038211a54f3008755da7cb690..bef9eb80a26ad8fbf297d8792c64f02405724d05 100644
--- a/interface/web/monitor/lib/lang/nl.lng
+++ b/interface/web/monitor/lib/lang/nl.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/pl.lng b/interface/web/monitor/lib/lang/pl.lng
index a8e1b3e53c2086a8b4d1dee058c2e40562f88899..6900d31b9236c998eaeaf77a5c763052afc9cbd1 100644
--- a/interface/web/monitor/lib/lang/pl.lng
+++ b/interface/web/monitor/lib/lang/pl.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/pt.lng b/interface/web/monitor/lib/lang/pt.lng
index 7930febda22cb515d5e6462f0b809037fffc2878..f48c41e9fea25e64c9ab6ea003216f784f0ad772 100644
--- a/interface/web/monitor/lib/lang/pt.lng
+++ b/interface/web/monitor/lib/lang/pt.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/ro.lng b/interface/web/monitor/lib/lang/ro.lng
index 96a2ce10e69d4dc9e7f5d1fe83130c427cc4b7c4..2a2423927fcc51495ffdccd70bfdbba8ad8a5b1d 100644
--- a/interface/web/monitor/lib/lang/ro.lng
+++ b/interface/web/monitor/lib/lang/ro.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/ru.lng b/interface/web/monitor/lib/lang/ru.lng
index 823174b71665e3d318652d22f3252ba480398c2b..c256c2faafdd47c343f0eebac9dfd0fa0b9f71d7 100644
--- a/interface/web/monitor/lib/lang/ru.lng
+++ b/interface/web/monitor/lib/lang/ru.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Показать журнал MongoDB';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-сервер:';
 $wb['monitor_title_mongodb_txt'] = 'Журнал MongoDB';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/se.lng b/interface/web/monitor/lib/lang/se.lng
index 78dd5ed1be944dc9ca00ddf4c3d86acb3ee6703e..54b504c9bbd1eb837946dd630c5aa78972a886ed 100644
--- a/interface/web/monitor/lib/lang/se.lng
+++ b/interface/web/monitor/lib/lang/se.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/sk.lng b/interface/web/monitor/lib/lang/sk.lng
index 36af834eaf26eeda4a3806896d327c91ee804f45..59af60685618eb45ce5ce5c390ef0f8ff2f1b8ae 100644
--- a/interface/web/monitor/lib/lang/sk.lng
+++ b/interface/web/monitor/lib/lang/sk.lng
@@ -162,4 +162,6 @@ $wb['Show MongoDB-Log'] = 'Show MongoDB-Log';
 $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:';
 $wb['monitor_title_mongodb_txt'] = 'MongoDB Log';
 $wb['Show Data Log History'] = 'Show Data Log History';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/monitor/lib/lang/tr.lng b/interface/web/monitor/lib/lang/tr.lng
index 20a9e8e140167eb5b56b989256986ea53b237f31..836f38ce9715cb34cde5d22252736ef884484efc 100644
--- a/interface/web/monitor/lib/lang/tr.lng
+++ b/interface/web/monitor/lib/lang/tr.lng
@@ -161,4 +161,6 @@ $wb['no_permissions_to_view_monit_txt'] = 'Monit eriÅŸimi izniniz yok.';
 $wb['Show Munin'] = 'Munin Durumu';
 $wb['no_munin_url_defined_txt'] = 'Munin adresi belirtilmemiÅŸ.';
 $wb['no_permissions_to_view_munin_txt'] = 'Munin eriÅŸimi izniniz yok.';
+$wb['Database size'] = 'Database size';
+$wb['Show MySQL Database size'] = 'Show MySQL Database size';
 ?>
diff --git a/interface/web/sites/ajax_get_json.php b/interface/web/sites/ajax_get_json.php
index 298fbdb0190b16e20b0a1f282236bf11095f29b0..8ca9cae31d620bd22bf205d1c045d99a58647aea 100644
--- a/interface/web/sites/ajax_get_json.php
+++ b/interface/web/sites/ajax_get_json.php
@@ -63,7 +63,7 @@ if($type == 'getserverid'){
 	$json .= '"}';
 }
 
-if($type == 'getphpfastcgi'){
+if($type == 'getserverphp'){
 	$json = '{';
 
 	$server_type = 'apache';
@@ -105,14 +105,14 @@ if($type == 'getphpfastcgi'){
 	if(is_array($php_records) && !empty($php_records)) {
 		foreach( $php_records as $php_record) {
 			if($php_type == 'php-fpm' || ($php_type == 'hhvm' && $server_type == 'nginx')){
-				$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
+				$php_version = $php_record['server_php_id'];
 			} else {
-				$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
+				$php_version = $php_record['server_php_id'];
 			}
 			if($php_record['name'] != $web_config['php_default_name']) {
 				$json .= '"'.$php_version.'": "'.$php_record['name'].'",';
 			} else {
-				$json .= '"": "'.$php_record['name'].'",';
+				$json .= '"0": "'.$php_record['name'].'",';
 			}
 		}
 	}
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 7da71281cfb2b041ca88d7403689357ec0812359..eecb634c989be6e610e56784a9cb0b1afa4b7178 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -254,10 +254,10 @@ $form["tabs"]['domain'] = array (
 			'value'  => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'),
 			'searchable' => 2
 		),
-		'fastcgi_php_version' => array (
-			'datatype' => 'VARCHAR',
+		'server_php_id' => array (
+			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
-			'default' => '',
+			'default' => '0',
 			/*'datasource'	=> array ( 	'type'	=> 'SQL',
 										'querystring' => "SELECT ip_address,ip_address FROM server_ip WHERE ip_type = 'IPv4' AND {AUTHSQL} ORDER BY ip_address",
 										'keyfield'=> 'ip_address',
@@ -629,7 +629,7 @@ $form["tabs"]['stats'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => 'awstats',
-			'value'  => array('webalizer' => 'Webalizer', 'awstats' => 'AWStats', '' => 'None')
+			'value'  => array('awstats' => 'AWStats', 'goaccess' => 'GoAccess', 'webalizer' => 'Webalizer','' => 'None')
 		),
 		//#################################
 		// END Datatable fields
diff --git a/interface/web/sites/lib/lang/ar_web_aliasdomain.lng b/interface/web/sites/lib/lang/ar_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/ar_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ar_web_childdomain.lng b/interface/web/sites/lib/lang/ar_web_childdomain.lng
index 636505f2487e4367810b7e453616ff82d29c30f1..95c9944f124ac962747005782b28dd4848613006 100644
--- a/interface/web/sites/lib/lang/ar_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ar_web_domain.lng b/interface/web/sites/lib/lang/ar_web_domain.lng
index 1ab9c55d3d9f88099cdfb79a0166d46d39189308..11247be982e25fc479e038e4e11cfe9022997020 100644
--- a/interface/web/sites/lib/lang/ar_web_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
index 136829a7b276cbd1b689d04dca3afa8818055f3d..93bc26badc5f476a52077ee2d0cb2d69655ceac5 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_aliasdomain.lng b/interface/web/sites/lib/lang/bg_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/bg_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_childdomain.lng b/interface/web/sites/lib/lang/bg_web_childdomain.lng
index c7549b76f7ef95a2ce18cae7301a826f375c4029..e62b0af4d5a2d212c38412e41f100cd95626d258 100644
--- a/interface/web/sites/lib/lang/bg_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_domain.lng b/interface/web/sites/lib/lang/bg_web_domain.lng
index 901c34a6ec85fd026c53c08f3e79b88d2c11d37b..2146229cd01cf02b3da2ba7fe845176c009ac727 100644
--- a/interface/web/sites/lib/lang/bg_web_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_domain.lng
@@ -91,7 +91,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'квотата за дисковото пространство е грешна.';
 $wb['traffic_quota_error_regex'] = 'Трафик квота е грешна.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
index 8c48f035fe4c577273a0e0bc4d7359426b3fa48a..384c6de545d0d47a459a98d99d433ed1212603e6 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -93,9 +93,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'квотата за дисковото пространство е грешна.';
 $wb['traffic_quota_error_regex'] = 'Трафик квота е грешна.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_aliasdomain.lng b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
index d6142fd3746ff05f90251f95afce755fdec1b7da..779d2c2383dd64795a4fbe77e707e6f69c9a37aa 100644
--- a/interface/web/sites/lib/lang/br_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['server_php_id_txt'] = 'Versão do php';
 $wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_childdomain.lng b/interface/web/sites/lib/lang/br_web_childdomain.lng
index fbbb40635e040b52992c0059ab56709f035e6301..fc5f31a2ec26c0743f7cce2e54c9fbf7abba64b1 100644
--- a/interface/web/sites/lib/lang/br_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['server_php_id_txt'] = 'Versão do php';
 $wb['pm_txt'] = 'Gerenciador de processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_domain.lng b/interface/web/sites/lib/lang/br_web_domain.lng
index 1a2a2b301b9a18d1067daa89699e540f344f3681..31b39974f19d11b7137866aca6aea10b2a378780 100644
--- a/interface/web/sites/lib/lang/br_web_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_domain.lng
@@ -94,7 +94,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['server_php_id_txt'] = 'Versão do php';
 $wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
index a3a14e335b971636585325f8637563460b9ca4ab..acd10622fec1898e7bcedbe6d08506478406922f 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'Versão do php';
+$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['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
@@ -162,10 +162,9 @@ $wb['limit_web_quota_not_0_txt'] = 'Cota de disco não pode ser configurada para
 $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -187,4 +186,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
index 390b7402e7059332b1a766442ebc26c1454e0f2c..03526d049b00b294c6dba728d85944e1ee8c87c5 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ter
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter um valor inteiro positivo.';
 $wb['hd_quota_error_regex'] = 'Cota do disco é inválida.';
 $wb['traffic_quota_error_regex'] = 'Cota de tráfego é inválida.';
-$wb['fastcgi_php_version_txt'] = 'Versão do php';
+$wb['server_php_id_txt'] = 'Versão do php';
 $wb['pm_txt'] = 'Gerenciador de Processos do php-fpm';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_aliasdomain.lng b/interface/web/sites/lib/lang/ca_web_aliasdomain.lng
index 92c9c3553872723e7520f8e13a0eb05468f61b88..990a5342ccaefe08ff10312f532989909a2e06b4 100644
--- a/interface/web/sites/lib/lang/ca_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'La valeur de PHP-FPM pm.min_spare_ser
 $wb['pm_max_spare_servers_error_regex'] = 'La valeur de PHP-FPM pm.max_spare_servers doit être un entier positif.';
 $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['server_php_id_txt'] = 'Version de PHP';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_childdomain.lng b/interface/web/sites/lib/lang/ca_web_childdomain.lng
index 762acfe244fe2f8c158625c679821afe56d7740d..c766bae8818d3b1c3583a72f0c85cf8a6bd261b0 100644
--- a/interface/web/sites/lib/lang/ca_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_domain.lng b/interface/web/sites/lib/lang/ca_web_domain.lng
index a3475c43c2d58dd7b3e2232032926af144882c71..c240d5c349f1eba4fce560515d81c0c19bceac11 100644
--- a/interface/web/sites/lib/lang/ca_web_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
 $wb['ssl_key_txt'] = 'Clé SSL';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['server_php_id_txt'] = 'Version de PHP';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
index cf25d81260bbce5d74fda473550f4ef15023687f..f1b755827dd49d9a42b6764fdf4b9ec2f5aff227 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng
index c9a46866089adc1e4bc6c1d21d3560087f9d215e..faae8ba2b0f89f3d777366f7d8d75db1bdf5e356 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_aliasdomain.lng b/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
index 0f8d3e5dec8edfb1a86dd2908a36ec9a7541b04e..9861b62046170895e441dc45bd17a6d8a5de641a 100644
--- a/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Verze';
+$wb['server_php_id_txt'] = 'PHP Verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_childdomain.lng b/interface/web/sites/lib/lang/cz_web_childdomain.lng
index b159976b29e044529665f4ceeabdce18fc7f3b0b..6838d351ee658c75f6c8f97af11c47cff8eaf6a2 100644
--- a/interface/web/sites/lib/lang/cz_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Verze';
+$wb['server_php_id_txt'] = 'PHP Verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_domain.lng b/interface/web/sites/lib/lang/cz_web_domain.lng
index 0998cb1264a385b11957d85915ae7ea184bbc154..b61ca0741ae2f6ce1a29573f2cb97fab966d8f2e 100644
--- a/interface/web/sites/lib/lang/cz_web_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Kvóta pevného disku je neplatná.';
 $wb['traffic_quota_error_regex'] = 'Traffik kvóta je neplatná.';
 $wb['ssl_key_txt'] = 'SSL klíč';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Výběr PHP verze';
+$wb['server_php_id_txt'] = 'Výběr PHP verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
index ea814b0cb9b3a59adc0557461266e87a82199b4a..88b3cb3e5a25343b608a1d6f270509dbef413753 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -99,9 +99,9 @@ $wb['hd_quota_error_regex'] = 'Kvóta pevného disku je neplatná.';
 $wb['traffic_quota_error_regex'] = 'Traffik kvóta je neplatná.';
 $wb['ssl_key_txt'] = 'SSL klíč';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Výběr PHP verze';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'Výběr PHP verze';
+$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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
index 268368c139b6192ddf3c9dcc1b7580d4cad86572..e15b9c58633661206e08400f01b728c08e600045 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Kvóta pevného disku je neplatná.';
 $wb['traffic_quota_error_regex'] = 'Traffik kvóta je neplatná.';
-$wb['fastcgi_php_version_txt'] = 'Výběr PHP verze';
+$wb['server_php_id_txt'] = 'Výběr PHP verze';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de.lng b/interface/web/sites/lib/lang/de.lng
index 48e0a9a9a77432462558a73e0e1b1f5cf5be2c09..f5cf2e2052f88c852180c9d4d9ddeb4987f0641f 100644
--- a/interface/web/sites/lib/lang/de.lng
+++ b/interface/web/sites/lib/lang/de.lng
@@ -14,7 +14,7 @@ $wb['Command Line'] = 'Kommandozeile';
 $wb['Shell-User'] = 'Shell Benutzer';
 $wb['Cron Jobs'] = 'Cronjobs';
 $wb['Statistics'] = 'Statistik';
-$wb['Web traffic'] = 'Datentransfer';
+$wb['Web traffic'] = 'Web-Datentransfer';
 $wb['Website quota (Harddisk)'] = 'Speicherplatzbeschränkung';
 $wb['Cron'] = 'Cron';
 $wb['Stats'] = 'Statistiken';
@@ -32,4 +32,7 @@ $wb['Installed packages'] = 'Installierte Pakete';
 $wb['Update Packagelist'] = 'Paketliste aktualisieren';
 $wb['error_proxy_requires_url'] = 'Weiterleitungstyp ';
 $wb['Subdomain (Vhost)'] = 'Subdomain (vHost)';
+$wb['Database quota'] = 'Datenbank-Quota';
+$wb['FTP traffic'] = 'FTP-Datentransfer';
+$wb['Backup Stats'] = 'Backup-Statistiken';
 ?>
diff --git a/interface/web/sites/lib/lang/de_backup_stats_list.lng b/interface/web/sites/lib/lang/de_backup_stats_list.lng
index 01797ea9c42ee4109e753d0062643007264d9ba9..763e3db27524bf93021170db3094e1a6946457db 100644
--- a/interface/web/sites/lib/lang/de_backup_stats_list.lng
+++ b/interface/web/sites/lib/lang/de_backup_stats_list.lng
@@ -6,5 +6,5 @@ $wb['domain_txt'] = 'Domain';
 $wb['backup_count_txt'] = 'Anz. Backups';
 $wb['backup_server_txt'] = 'Server';
 $wb['backup_interval_txt'] = 'Intervall / Anz.';
-$wb['backup_size_txt'] = 'Backupgrösse';
+$wb['backup_size_txt'] = 'Backupgröße';
 ?>
diff --git a/interface/web/sites/lib/lang/de_database_quota_stats_list.lng b/interface/web/sites/lib/lang/de_database_quota_stats_list.lng
index 3bc9874bf105333a5ae9d0a6517f909b075d4772..087756104a3cdcd706ae4de1805193a403083851 100644
--- a/interface/web/sites/lib/lang/de_database_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/de_database_quota_stats_list.lng
@@ -5,5 +5,5 @@ $wb['client_txt'] = 'Kunde';
 $wb['used_txt'] = 'Verwendeter Speicherplatz';
 $wb['quota_txt'] = 'Quota';
 $wb['percentage_txt'] = 'Verbraucht in %';
-$wb['list_head_txt'] = 'Database Quota';
+$wb['list_head_txt'] = 'Datenbank-Quota';
 ?>
diff --git a/interface/web/sites/lib/lang/de_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/de_ftp_sites_stats_list.lng
index e44025a715dbf435bdca9faee0b109ba25bf611d..c2df2b397c58bdbde1366ee1bbd6135b6671b298 100644
--- a/interface/web/sites/lib/lang/de_ftp_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/de_ftp_sites_stats_list.lng
@@ -1,10 +1,10 @@
 <?php
-$wb['list_head_txt'] = 'FTP traffic';
+$wb['list_head_txt'] = 'FTP-Transfer';
 $wb['domain_txt'] = 'Domain';
-$wb['this_month_txt'] = 'This month';
-$wb['last_month_txt'] = 'Last month';
-$wb['this_year_txt'] = 'This year';
-$wb['last_year_txt'] = 'Last year';
-$wb['sum_txt'] = 'Sum (Download + Upload)';
+$wb['this_month_txt'] = 'Dieser Month';
+$wb['last_month_txt'] = 'Letzter Monat';
+$wb['this_year_txt'] = 'Dieses Jahr';
+$wb['last_year_txt'] = 'Letztes Jahr';
+$wb['sum_txt'] = 'Gesamt (Download + Upload)';
 $wb['in_out_txt'] = 'DL/UL';
 ?>
diff --git a/interface/web/sites/lib/lang/de_shell_user.lng b/interface/web/sites/lib/lang/de_shell_user.lng
index 9130b456e345e32b661ff72b78b8d39d7a217a49..6b5dac53c3a5a1ed6558e733ed9572eb695154d4 100644
--- a/interface/web/sites/lib/lang/de_shell_user.lng
+++ b/interface/web/sites/lib/lang/de_shell_user.lng
@@ -28,9 +28,9 @@ $wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
 $wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'Der Benutzername darf 32 Zeichen nicht überschreiten.';
 $wb['username_not_allowed_txt'] = 'Dieser Benutzername ist nicht erlaubt.';
-$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
-$wb['directory_error_regex'] = 'Invalid directory';
-$wb['shell_error_regex'] = 'Invalid shell';
-$wb['invalid_username_txt'] = 'Invalid Username';
-$wb['directory_error_notinweb'] = 'The directory has to be inside the web root.';
+$wb['invalid_system_user_or_group_txt'] = 'Ungültiger Web Benutzername oder Gruppe';
+$wb['directory_error_regex'] = 'Ungültiges Verzeichnis';
+$wb['shell_error_regex'] = 'Ungültige Shell';
+$wb['invalid_username_txt'] = 'Ungültiger Benutzername';
+$wb['directory_error_notinweb'] = 'Das Verzeichnis muss innerhalb des Web-Verzeichnisses liegen.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_aliasdomain.lng b/interface/web/sites/lib/lang/de_web_aliasdomain.lng
index 5889b17d5745a6082ee2ea40693551600c938941..14e4c79d25ac03856dcb51a99b63fdcb67ea759d 100644
--- a/interface/web/sites/lib/lang/de_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muss ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muss ein positiver integer Wert sein.';
 $wb['hd_quota_error_regex'] = 'Speicherplatz-Beschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Datentransfer-Beschränkung ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP-Version';
+$wb['server_php_id_txt'] = 'PHP-Version';
 $wb['pm_txt'] = 'PHP-FPM Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_childdomain.lng b/interface/web/sites/lib/lang/de_web_childdomain.lng
index 05b1f1d51d902ff0b4cdb1699b5740b28187137a..2f1248740ddf543942903d656b20f3b409f096af 100644
--- a/interface/web/sites/lib/lang/de_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muss ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muss ein positiver integer Wert sein.';
 $wb['hd_quota_error_regex'] = 'Speicherplatz-Beschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Datentransfer-Beschränkung ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP-Version';
+$wb['server_php_id_txt'] = 'PHP-Version';
 $wb['pm_txt'] = 'PHP-FPM Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng
index 7232d8fa5f79141cb420ec53768617c132a60f55..b9c77a8b7bd98483c62f1fef9060b39d3c77fa1e 100644
--- a/interface/web/sites/lib/lang/de_web_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_domain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muß ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muß eine positive ganze Zahl sein.';
 $wb['hd_quota_error_regex'] = 'Speicherplatzbeschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Transfervolumenbeschränkung ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM FastCGI Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/de_web_subdomain.lng b/interface/web/sites/lib/lang/de_web_subdomain.lng
index 586c90adc38f69190b75a1723f6641b92ed4558f..4f34874a11f1d7490f6c8536c502faabea09492a 100644
--- a/interface/web/sites/lib/lang/de_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_subdomain.lng
@@ -45,6 +45,6 @@ $wb['available_proxy_directive_snippets_txt'] = 'Verfügbare Proxy Direktiven Sc
 $wb['error_proxy_requires_url'] = 'Weiterleitungstyp \\"proxy\\" erfordert eine URL als Weiterleitungspfad.';
 $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_error_regex'] = 'HTTP Port ungültig.';
+$wb['https_port_error_regex'] = 'HTTPS Port ungültig.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index 449bcb588a546a85a349e77bb5495516ff2747d1..4fab6000843113b1d02396bc7d356bd98a0628a5 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -98,9 +98,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muß ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muß eine positive ganze Zahl sein.';
 $wb['hd_quota_error_regex'] = 'Speicherplatzbeschränkung ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Transfervolumenbeschränkung ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'PHP Version';
+$wb['server_php_id_invalid_txt'] = 'PHP Version is ungültig.';
+$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['pm_txt'] = 'PHP-FPM FastCGI Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
@@ -141,15 +141,15 @@ $wb['btn_cancel_txt'] = 'Abbrechen';
 $wb['load_client_data_txt'] = 'Kundendaten übernehmen';
 $wb['load_my_data_txt'] = 'Meine Kontaktdaten laden';
 $wb['reset_client_data_txt'] = 'Daten verwerfen';
-$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['rewrite_to_https_txt'] = 'Rewrite HTTP to HTTPS';
-$wb['password_strength_txt'] = 'Password strength';
+$wb['server_chosen_not_ok'] = 'Der ausgewählte Server ist nicht zulässig für diesen Account.';
+$wb['subdomain_error_empty'] = 'Die Subdomain ist leer oder ungültig.';
+$wb['rewrite_to_https_txt'] = 'HTTP zu HTTPS weiterleiten';
+$wb['password_strength_txt'] = 'Passwortstärke';
 $wb['directive_snippets_id_txt'] = 'Webserver-Konfiguration';
 $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_error_regex'] = 'HTTP Port ungültig.';
+$wb['https_port_error_regex'] = 'HTTPS Port ungültig.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Log-Dateien Aufbewahrungszeit';
 $wb['log_retention_error_regex'] = 'Aufbewahrungszeit in Tagen (Erlaubte Werte: min. 0 - max. 9999)';
@@ -157,10 +157,9 @@ $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota kann nicht 0 sein.';
 $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
index 89e50f2df4c027deb6ab46e200f9e47ea22f3d20..b2211e314bd94da3c5aaf6e19a1007597fe7ec2e 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers muß ein
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muß eine positive ganze Zahl sein.';
 $wb['hd_quota_error_regex'] = 'Harddisk-Quota ist ungültig.';
 $wb['traffic_quota_error_regex'] = 'Traffic-Quota ist ungültig.';
-$wb['fastcgi_php_version_txt'] = 'PHP-Version';
+$wb['server_php_id_txt'] = 'PHP-Version';
 $wb['pm_txt'] = 'PHP-FPM Prozess Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_aliasdomain.lng b/interface/web/sites/lib/lang/dk_web_aliasdomain.lng
index 98b7e4d898b4640e2e904dfddaf82ce0b602767c..6a324cca90843da819ed87294c0a462ad7788f0b 100644
--- a/interface/web/sites/lib/lang/dk_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk kvote is ugyldigt.';
 $wb['traffic_quota_error_regex'] = 'Trafik kvote is ugyldigt.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_childdomain.lng b/interface/web/sites/lib/lang/dk_web_childdomain.lng
index 762acfe244fe2f8c158625c679821afe56d7740d..c766bae8818d3b1c3583a72f0c85cf8a6bd261b0 100644
--- a/interface/web/sites/lib/lang/dk_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_domain.lng b/interface/web/sites/lib/lang/dk_web_domain.lng
index 7b6183554314151740697ca33197f37a6bcfca78..05920d39d228c475c1814d77b14b457dc0b1fcba 100644
--- a/interface/web/sites/lib/lang/dk_web_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_domain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk kvote is ugyldigt.';
 $wb['traffic_quota_error_regex'] = 'Trafik kvote is ugyldigt.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
index cf25d81260bbce5d74fda473550f4ef15023687f..f1b755827dd49d9a42b6764fdf4b9ec2f5aff227 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng
index ba7aad0403c23669b9ea793cb7a522448f8e035c..18eebc266565947fe8ad41dba38b48b1936c8a34 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk kvote is ugyldigt.';
 $wb['traffic_quota_error_regex'] = 'Trafik kvote is ugyldigt.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_aliasdomain.lng b/interface/web/sites/lib/lang/el_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/el_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_childdomain.lng b/interface/web/sites/lib/lang/el_web_childdomain.lng
index 3c5cb7a9368eb9dc7e1e1c7452917906db572fe5..f6c2c743bff9d4b561f474ffc3e2e93d484e93d6 100644
--- a/interface/web/sites/lib/lang/el_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_domain.lng b/interface/web/sites/lib/lang/el_web_domain.lng
index 1787aa0e33fbeedff7b8d897bcf2a683501143d3..1d067f9f8cb9a9646c0086757736867022b84fe0 100644
--- a/interface/web/sites/lib/lang/el_web_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
index f39ce19a9bb431e26f95a7c7641c317a7d5afea0..15d51f3a5a0f3612399f2e300bdb71b9b2cd33b7 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_aliasdomain.lng b/interface/web/sites/lib/lang/en_web_aliasdomain.lng
index eeae6770c6a516930c14d6ec6f67a10efc138b4a..5499768e06060d98e5a4503ccb8c036f9f9ffff9 100644
--- a/interface/web/sites/lib/lang/en_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/en_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers must be
 $wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb["hd_quota_error_regex"] = 'Harddisk quota is invalid.';
 $wb["traffic_quota_error_regex"] = 'Traffic quota is invalid.';
-$wb["fastcgi_php_version_txt"] = 'PHP Version';
+$wb["server_php_id_txt"] = 'PHP Version';
 $wb["pm_txt"] = 'PHP-FPM Process Manager';
 $wb["pm_process_idle_timeout_txt"] = 'PHP-FPM pm.process_idle_timeout';
 $wb["pm_max_requests_txt"] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_childdomain.lng b/interface/web/sites/lib/lang/en_web_childdomain.lng
index 54def692147f0da11aa51d3d490741d422f04040..b4dd9e9326fb6f6e8c4e68befc6def717ddedcd0 100644
--- a/interface/web/sites/lib/lang/en_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/en_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng
index 28c7c3e4e1b52483e56b8c63149179a1040b192c..1785358209ba995c208cc490a547263f99dc37ee 100644
--- a/interface/web/sites/lib/lang/en_web_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_domain.lng
@@ -95,7 +95,7 @@ $wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers must be
 $wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb["hd_quota_error_regex"] = 'Harddisk quota is invalid.';
 $wb["traffic_quota_error_regex"] = 'Traffic quota is invalid.';
-$wb["fastcgi_php_version_txt"] = 'PHP Version';
+$wb["server_php_id_txt"] = 'PHP Version';
 $wb["pm_txt"] = 'PHP-FPM Process Manager';
 $wb["pm_process_idle_timeout_txt"] = 'PHP-FPM pm.process_idle_timeout';
 $wb["pm_max_requests_txt"] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
index 497fcd1993f98f4c58eaf5f3d5dd0221475f5fb9..b31f157718fa70a5c0a3c780d4b4196036038057 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -162,10 +162,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -187,4 +186,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
index 0c7ac92c61bde8ad4755a9485a3e6e71ca104722..f8acd2d26b5ef25294b4aa23dd9adf88a5a3a8dc 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
@@ -100,7 +100,7 @@ $wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers must be
 $wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb["hd_quota_error_regex"] = 'Harddisk quota is invalid.';
 $wb["traffic_quota_error_regex"] = 'Traffic quota is invalid.';
-$wb["fastcgi_php_version_txt"] = 'PHP Version';
+$wb["server_php_id_txt"] = 'PHP Version';
 $wb["pm_txt"] = 'PHP-FPM Process Manager';
 $wb["pm_process_idle_timeout_txt"] = 'PHP-FPM pm.process_idle_timeout';
 $wb["pm_max_requests_txt"] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_aliasdomain.lng b/interface/web/sites/lib/lang/es_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/es_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_childdomain.lng b/interface/web/sites/lib/lang/es_web_childdomain.lng
index 25843a0e21f0f9f854d74b07633315a33777c305..6cf662c2ffcc7ea9e6a767620c8659ed0795ceb6 100644
--- a/interface/web/sites/lib/lang/es_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_childdomain.lng
@@ -98,7 +98,7 @@ $wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children debe ser un valor
 $wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers debe ser un valor entero positivo.';
 $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers debe ser un valor entero positivo.';
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers debe ser un valor entero positivo.';
-$wb['fastcgi_php_version_txt'] = 'Versión de PHP';
+$wb['server_php_id_txt'] = 'Versión de PHP';
 $wb['pm_txt'] = 'PHP-FPM Gestor de Procesos';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_domain.lng b/interface/web/sites/lib/lang/es_web_domain.lng
index 889d29bd9536cbffa55b01f413bf48b6577692cd..2dfe3d6cac3805813c97c6936d7ae26c9ce7d42d 100644
--- a/interface/web/sites/lib/lang/es_web_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_domain.lng
@@ -95,7 +95,7 @@ $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.
 $wb['perl_txt'] = 'Perl';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
index 3f60826008e06eaef91a0330f73b1dbfcb729f7e..f49636a9ad8e53860e2fdd86bfcdc4154f40a42b 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['domain_error_autosub'] = 'Ya hay un subdominio con estas configuraciones.';
 $wb['perl_txt'] = 'Perl';
 $wb['hd_quota_error_regex'] = 'Cuota de disco no es válida.';
 $wb['traffic_quota_error_regex'] = 'Cuota de tráfico no es válida.';
-$wb['fastcgi_php_version_txt'] = 'Versión de PHP';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'Versión de PHP';
+$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['pm_txt'] = 'PHP-FPM Gestor de Procesos';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_aliasdomain.lng b/interface/web/sites/lib/lang/fi_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/fi_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_childdomain.lng b/interface/web/sites/lib/lang/fi_web_childdomain.lng
index 5105ba3f2e63dfae2a652b24d331f4f550ed91f7..bbc12a35fd1a99a88399d7e450ffe0ccaf5a8dab 100644
--- a/interface/web/sites/lib/lang/fi_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_domain.lng b/interface/web/sites/lib/lang/fi_web_domain.lng
index 1cc2a2024d93b2d268622cf6a7f9bb25e30ce75c..38434653ef32eb37b981c740b61c784f016c307d 100644
--- a/interface/web/sites/lib/lang/fi_web_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
index 82fd44a56ac09c51a5bab207ef7acc2cb6a2196f..e85b33e9cce39e7b201f58d49a51a88c7ae6cee9 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_aliasdomain.lng b/interface/web/sites/lib/lang/fr_web_aliasdomain.lng
index 59a69d4f23e7cb7687b5ac85b5ae4dbb72d62bfe..5ce638002b17efb91bdd67913dbfd039207f7897 100644
--- a/interface/web/sites/lib/lang/fr_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'La valeur de PHP-FPM pm.min_spare_ser
 $wb['pm_max_spare_servers_error_regex'] = 'La valeur de PHP-FPM pm.max_spare_servers doit être un entier positif.';
 $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['server_php_id_txt'] = 'Version de PHP';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_childdomain.lng b/interface/web/sites/lib/lang/fr_web_childdomain.lng
index 1be206e1222358a13af16980c93dc0e766bb9fce..d636dc2d487a27c175e4644a1b4fa4eb91f7575b 100644
--- a/interface/web/sites/lib/lang/fr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_domain.lng b/interface/web/sites/lib/lang/fr_web_domain.lng
index 421693a0e64cb0cbdcb92578911115fd12704e5b..a0e6ff9847b919bd8101f0c76006cb929145538e 100644
--- a/interface/web/sites/lib/lang/fr_web_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
 $wb['ssl_key_txt'] = 'Clé SSL';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
+$wb['server_php_id_txt'] = 'Version de PHP';
 $wb['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
index 5d817c611b9748e723658833de0875eaef2f0b47..30963cd01c935e2ea7ac2d5b4d17519b62e4d0de 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Le quota de disque dur est invalide.';
 $wb['traffic_quota_error_regex'] = 'Le quota de trafic est invalide.';
 $wb['ssl_key_txt'] = 'Clé SSL';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Version de PHP';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'Version de PHP';
+$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['pm_txt'] = 'Manager de process PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng
index a97883fe46afcaadde1b6b4658db562a0f28c5c2..bdd704f93be621b43936c71c224d5478d1010589 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_aliasdomain.lng b/interface/web/sites/lib/lang/hr_web_aliasdomain.lng
index 67eb8363f503f6d26442fe58b3a7bc8724b27511..7a2df148e160932870394aeb0a5935b72bfa2716 100644
--- a/interface/web/sites/lib/lang/hr_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP verzija';
+$wb['server_php_id_txt'] = 'PHP verzija';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_childdomain.lng b/interface/web/sites/lib/lang/hr_web_childdomain.lng
index 99df0d2fdf5bb7ca009d376df5913203dc4b0857..b0f7a1f2db595d8efbd2dcffe4d7bcafb55064ca 100644
--- a/interface/web/sites/lib/lang/hr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_domain.lng b/interface/web/sites/lib/lang/hr_web_domain.lng
index 8a089e6ba5f365147feb61e20d0de0de4e9ed9cf..0b27cc5e65dee1d260b3bd78a51f98531317452b 100644
--- a/interface/web/sites/lib/lang/hr_web_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
index 4d70565928c0e8addfd0cdc3c8df101e61d34525..5ef073a0931ff40e965b75119710f0aa77d1d839 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng
index 82fa901c1f93c14598500da95fe59b7429139dea..5f5f74062fa3af954ac9a1415f78e0ce20cedd77 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP verzija';
+$wb['server_php_id_txt'] = 'PHP verzija';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_aliasdomain.lng b/interface/web/sites/lib/lang/hu_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/hu_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_childdomain.lng b/interface/web/sites/lib/lang/hu_web_childdomain.lng
index 5ac19c3bbc25194eff853e3eb75463ff3bbd218e..a05534c4f70e3557376707b392abb053004b5ebf 100644
--- a/interface/web/sites/lib/lang/hu_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_domain.lng b/interface/web/sites/lib/lang/hu_web_domain.lng
index 5ddf06593ded5ab4740f467055c1c63e46d53176..711f0abee28d80fafdc3e70184ad7fc779699ee0 100644
--- a/interface/web/sites/lib/lang/hu_web_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
index d8bb15537ba42884153bb82674a88fde3c091b91..92f6a0d8b713a4f9978a1d33e33ecee7eef81a27 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_aliasdomain.lng b/interface/web/sites/lib/lang/id_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/id_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_childdomain.lng b/interface/web/sites/lib/lang/id_web_childdomain.lng
index d5fd9711a4f08c985d682a09125106caf8d23780..d839094ff93e1b4998f49e6f1e547a38f7490e6e 100644
--- a/interface/web/sites/lib/lang/id_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_domain.lng b/interface/web/sites/lib/lang/id_web_domain.lng
index 785d7fc0daa9655cc0d4cbebf704ca89a95223b8..1dbdae9059af86604cda6e5318e8846e7ac0c551 100644
--- a/interface/web/sites/lib/lang/id_web_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
index 39df360c89fb1b0a7af3ea3d1fe57b71b0f41dd6..765081669f5f8f16cea630182d45caa43194a2f2 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_aliasdomain.lng b/interface/web/sites/lib/lang/it_web_aliasdomain.lng
index 472378320131037312ad5d1b5fb43c4c564f023e..0dc91e1371076bd976c7af459a5627d9db83391d 100644
--- a/interface/web/sites/lib/lang/it_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_aliasdomain.lng
@@ -94,7 +94,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deve ess
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve essere un valore intero postivo.';
 $wb['hd_quota_error_regex'] = 'Quota Spazio Disco non valido.';
 $wb['traffic_quota_error_regex'] = 'Quota Traffico non valido.';
-$wb['fastcgi_php_version_txt'] = 'Versione PHP';
+$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';
diff --git a/interface/web/sites/lib/lang/it_web_childdomain.lng b/interface/web/sites/lib/lang/it_web_childdomain.lng
index 3a214e298ed8bdcf56e1c7979760a986a7a20b13..e10211cdf75969d2c3fde546538c0b2869196e20 100644
--- a/interface/web/sites/lib/lang/it_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_domain.lng b/interface/web/sites/lib/lang/it_web_domain.lng
index 68eae554fc16b20070359dd0f29e051d334ae9bf..497f41d74c514770f243b5d0a3ee262f81b420fb 100644
--- a/interface/web/sites/lib/lang/it_web_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Versione';
+$wb['server_php_id_txt'] = 'PHP Versione';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
index 807039ca6c2113e9bf76e86892af3a1839bb6aad..40a2e5117b593af69a39c994c2e933345ea7e008 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
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 259d1c820c02a2308a3062df4ce55e166d74d66d..d1bb71c625fd72d2ce0703eb76c39f8221beabe6 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers  deve es
 $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['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_aliasdomain.lng b/interface/web/sites/lib/lang/ja_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/ja_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_childdomain.lng b/interface/web/sites/lib/lang/ja_web_childdomain.lng
index d59d7bbda5f8b0e1ba839103ea6ed36b1d460d00..fb705f1af54611d0eb197604ed1212f9dac3c54a 100644
--- a/interface/web/sites/lib/lang/ja_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_domain.lng b/interface/web/sites/lib/lang/ja_web_domain.lng
index 2dbf65d2e5a162fb94e1bcc6726bc916f778f197..5582ad82a545dc34f14d228e6576e42d6aec870f 100644
--- a/interface/web/sites/lib/lang/ja_web_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
index 288b9fab1107bbb25191209d2ca58160f8c7001b..fefa3b277ef7eb73bae4e9a5edf883c883460caa 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_aliasdomain.lng b/interface/web/sites/lib/lang/nl_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/nl_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_childdomain.lng b/interface/web/sites/lib/lang/nl_web_childdomain.lng
index e99616ce11c4b607c2eb8f8c1a66211b26f35b6f..9b73b148a2d3e8588f007c54d0caf221aaac38b3 100644
--- a/interface/web/sites/lib/lang/nl_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_domain.lng b/interface/web/sites/lib/lang/nl_web_domain.lng
index aa57c6e012a65b8029489878bb90e582bb3a1b9f..f50539ae7cf079f85b493ede8fab555130f999d9 100644
--- a/interface/web/sites/lib/lang/nl_web_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is ongeldig.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is ongeldig.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Versie';
+$wb['server_php_id_txt'] = 'PHP Versie';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
index 27371eee355d897d3c1372bb487f4a40dfb47d49..34f43d1e67a56cbf11c2cedaa04e071aedf64654 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is niet correct.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is niet correct.';
 $wb['ssl_key_txt'] = 'SSL Key';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Versie';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'PHP Versie';
+$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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pl_web_aliasdomain.lng b/interface/web/sites/lib/lang/pl_web_aliasdomain.lng
index 19cd691bebf7ae8790e13ac6c382abda472de6fb..618ae50e8426820c84a74adff93a8b6310fc7697 100644
--- a/interface/web/sites/lib/lang/pl_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/pl_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers musi by
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers musi być dodatnią wartością całkowitą.';
 $wb['hd_quota_error_regex'] = 'Limit dysku jest nieprawidłowy';
 $wb['traffic_quota_error_regex'] = 'Limit transferu jest nieprawidłowy';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['server_php_id_txt'] = 'Wersja 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';
diff --git a/interface/web/sites/lib/lang/pl_web_childdomain.lng b/interface/web/sites/lib/lang/pl_web_childdomain.lng
index 9b8a2b56ba56c8c0433b313ea0db921217eeae6b..ab3a61582a9797f860edf883fc477c8328f65ca6 100644
--- a/interface/web/sites/lib/lang/pl_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/pl_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers musi by
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers musi być dodatnią wartością całkowitą.';
 $wb['hd_quota_error_regex'] = 'Limit dysku jest nieprawidłowy';
 $wb['traffic_quota_error_regex'] = 'Limit transferu jest nieprawidłowy';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['server_php_id_txt'] = 'Wersja 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';
diff --git a/interface/web/sites/lib/lang/pl_web_domain.lng b/interface/web/sites/lib/lang/pl_web_domain.lng
index 2521f174069e5ee125e76df6eb7a2e44c5302e37..e615f70303f4540f5750346d06f7095671ec90c4 100644
--- a/interface/web/sites/lib/lang/pl_web_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_domain.lng
@@ -95,7 +95,7 @@ $wb['ssl_key_txt'] = 'Klucz SSL';
 $wb['web_folder_error_regex'] = 'Wprowadzono nieprawidłowy katalog. Proszę nie wpisywać znaku slash [ / ]';
 $wb['domain_error_autosub'] = 'Istnieje już subdomena z tymi ustawieniami.';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['server_php_id_txt'] = 'Wersja 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';
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
index f1e945df6f12dd92acd5fb82af5863d0dbfa3dd6..faa5dd0e627c5cfe11452ff7259fb4c47c352c3c 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -97,9 +97,9 @@ $wb['ssl_key_txt'] = 'Klucz SSL';
 $wb['web_folder_error_regex'] = 'Wprowadzono nieprawidłowy katalog. Proszę nie wpisywać znaku slash [ / ]';
 $wb['domain_error_autosub'] = 'Istnieje już subdomena z tymi ustawieniami.';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'Wersja PHP';
+$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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng
index cc2431dbeccf7bcc34b839c1520e39986bfe4f9b..884210be39dfcc488d6e55f100d2879482de195e 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers musi by
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers musi być dodatnią wartością całkowitą.';
 $wb['hd_quota_error_regex'] = 'Limit dyski jest nieprawidłowy';
 $wb['traffic_quota_error_regex'] = 'Limit transferu jest nieprawidłowy';
-$wb['fastcgi_php_version_txt'] = 'Wersja PHP';
+$wb['server_php_id_txt'] = 'Wersja 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';
diff --git a/interface/web/sites/lib/lang/pt_web_aliasdomain.lng b/interface/web/sites/lib/lang/pt_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/pt_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_childdomain.lng b/interface/web/sites/lib/lang/pt_web_childdomain.lng
index 4cbc032c198098cf07e042df3b1bf7d87216066d..48ee53c85681c54bf5efd42a016a96ccfa92e4ea 100644
--- a/interface/web/sites/lib/lang/pt_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_domain.lng b/interface/web/sites/lib/lang/pt_web_domain.lng
index fc7add5d896a6299f65ef0c96fa60a3cec2310a1..5ed2112e1ecf19145bd474819818cc081ec5ed8a 100644
--- a/interface/web/sites/lib/lang/pt_web_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
index 9eb927f000346acfa3aae49b0b4744ad48972497..d5e554463c8f1f52460f45ad1d153551474c61a9 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_aliasdomain.lng b/interface/web/sites/lib/lang/ro_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/ro_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_childdomain.lng b/interface/web/sites/lib/lang/ro_web_childdomain.lng
index 30f83e72832e3ea2731b52d04a9253adeae2a843..c172b3d70f9b9d152fc898d5b3f67908b17d9991 100644
--- a/interface/web/sites/lib/lang/ro_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_domain.lng b/interface/web/sites/lib/lang/ro_web_domain.lng
index 7e98b45d02221301f5257938c6dcbf9336d075cd..3b3e8b339acbac459cc646d08c87a4563808e243 100644
--- a/interface/web/sites/lib/lang/ro_web_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
index 0127c4ee8058580ec56ed24d9545d8ee8f8d8ce1..7906eb8f9943d1c980ab5923106c9f06c2ed6e89 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_aliasdomain.lng b/interface/web/sites/lib/lang/ru_web_aliasdomain.lng
index 7555b823b0bbb7b75a994da598e26c46611a5980..e63d9b039fa62f1d85aabb319b42bf302f18f681 100644
--- a/interface/web/sites/lib/lang/ru_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers долж
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers должен быть положительным целым числом.';
 $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['server_php_id_txt'] = 'Версия PHP';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_childdomain.lng b/interface/web/sites/lib/lang/ru_web_childdomain.lng
index af71669a474529a1078bb9504eb062bf8e6d2532..ffe19805ab6749d8b7d1f9e6f79de5063686bde9 100644
--- a/interface/web/sites/lib/lang/ru_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers долж
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers должен быть положительным целым числом.';
 $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['server_php_id_txt'] = 'Версия PHP';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_domain.lng b/interface/web/sites/lib/lang/ru_web_domain.lng
index 6cba45f1b7e065079da9d7bf900c41c09c9900c9..bc47bfff7ec282a0f9c82acb231436f39a06d6cd 100644
--- a/interface/web/sites/lib/lang/ru_web_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_domain.lng
@@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
 $wb['ssl_key_txt'] = 'SSL-ключ';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['server_php_id_txt'] = 'Версия PHP';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
index 827f149dd856797e6161c5d28df64ce5a59010aa..afb9d72fab01fae11c183d9bf63d94e3972faf84 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
 $wb['ssl_key_txt'] = 'SSL-ключ';
 $wb['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'Версия PHP';
+$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['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng
index d548c2abe24f48b5c444d7fff73f9a28a7569314..e504af3dad5e31a2fcabc99e581c8079a96c758b 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers долж
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers должен быть положительным целым числом.';
 $wb['hd_quota_error_regex'] = 'Некорректная квота HDD.';
 $wb['traffic_quota_error_regex'] = 'Некорректная квота трафика.';
-$wb['fastcgi_php_version_txt'] = 'Версия PHP';
+$wb['server_php_id_txt'] = 'Версия PHP';
 $wb['pm_txt'] = 'Менеджер процессов PHP-FPM';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_aliasdomain.lng b/interface/web/sites/lib/lang/se_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/se_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_childdomain.lng b/interface/web/sites/lib/lang/se_web_childdomain.lng
index eff6791c65ae3f4baca3b5f282e81100af8c802c..42e459183578819ff03f8317ce2b85255b0beaed 100644
--- a/interface/web/sites/lib/lang/se_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_domain.lng b/interface/web/sites/lib/lang/se_web_domain.lng
index 91fa8c4db56627639c7a3519cad7bea8913bf62a..a293af77ea902036b48b5778c87855f102dea261 100644
--- a/interface/web/sites/lib/lang/se_web_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
index 1bac2468c15530a921633801befef70c2dbb1038..91c126b69a815bc109a509877f98c7032ba9df61 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_aliasdomain.lng b/interface/web/sites/lib/lang/sk_web_aliasdomain.lng
index 4149c711493e6b6f06d0e99656a1c65744d4ec46..74697bdb33298e0eada396548274aebeacda4022 100644
--- a/interface/web/sites/lib/lang/sk_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_childdomain.lng b/interface/web/sites/lib/lang/sk_web_childdomain.lng
index e0d26667bc7252103db05d4e90deb8daf4985c4a..d14f9815f6d0be5083924da7b73f49b5ebafee72 100644
--- a/interface/web/sites/lib/lang/sk_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_childdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_domain.lng b/interface/web/sites/lib/lang/sk_web_domain.lng
index f8f2f79b965f20526db9faf7d8e551d0892b6cf2..2b18602008778a02f07802b1fa491691fd4cee4d 100644
--- a/interface/web/sites/lib/lang/sk_web_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_domain.lng
@@ -93,7 +93,7 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
index c3b680b2b480c0be42b08f5c10a4b4f0affa0547..d61f814f57bce259a3ca0a7b74a40d917acd1d55 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -95,9 +95,9 @@ $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['perl_txt'] = 'Perl';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = '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['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';
@@ -157,10 +157,9 @@ $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_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -182,4 +181,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng
index 35c9298e710d663f63a4269e06dd1db22c1e644b..4ded131f4a7164181c1786bd1071c891cec2f252 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng
@@ -99,7 +99,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
 $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
 $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
-$wb['fastcgi_php_version_txt'] = 'PHP Version';
+$wb['server_php_id_txt'] = 'PHP Version';
 $wb['pm_txt'] = 'PHP-FPM Process Manager';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_aliasdomain.lng b/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
index d7ded7849a834ba048cac2e9017c527bbe3adc84..108f1d9a67d7e3e4c66c8d831a3b0e06652c7a88 100644
--- a/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_aliasdomain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_childdomain.lng b/interface/web/sites/lib/lang/tr_web_childdomain.lng
index 235e870117f6223af6c7e4a299f19a8d44326a16..55a82167d6dae5580bc87cd64c5bd32fd30fe9f0 100644
--- a/interface/web/sites/lib/lang/tr_web_childdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_childdomain.lng
@@ -101,7 +101,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Sabit disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yönetimi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_domain.lng b/interface/web/sites/lib/lang/tr_web_domain.lng
index 65db621f5692d5379411ed5a5fbc9fa50b868ceb..4d20d3efad7eb5f88dbedac41ef6b7bfec71e815 100644
--- a/interface/web/sites/lib/lang/tr_web_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_domain.lng
@@ -95,7 +95,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
index 2e004d87ef4049f5e644b53202e90f374cfc0d72..6b81451fdd591d73624b229396f9ec123e1caf2c 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -96,9 +96,9 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
-$wb['fastcgi_php_version_invalid_txt'] = 'PHP Version is invalid.';
-$wb['fastcgi_php_version_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'] = 'PHP Sürümü';
+$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['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
@@ -159,10 +159,9 @@ $wb['log_retention_txt'] = 'Günlük Dosyalarının Silinme Sıklığı';
 $wb['log_retention_error_regex'] = 'Gün cinsinden günlük dosyalarının silinme sıklığı (En küçük: 0 - En büyük: 9999)';
 $wb["backup_format_web_txt"] = 'Backup format for web files';
 $wb["backup_format_db_txt"] = 'Backup format for database';
-$wb["backup_format_web_note_txt"] = 'In "default" mode ISPConfig has the following behaviour: if backup mode is set as web user, then "zip" format is used for web files, otherwise backup mode is set as root user and "tar (gzip)" format is used; database is compressed in "gzip" format. Only "tar" based formats and "rar" preserve file ownership and permissions of web files and guarantee correct restore.';
-$wb["backup_missing_utils_txt"] = 'Note: some utils are missing in the system that may prevent you from using some compression formats. Please, install the following utils to avoid possible backup problems: ';
+$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 available only for the following backup formats: \"7z\", \"RAR\", \"zip\" (not secure). If any other format is used then encryption can't be applied and encryption settings are ignored. You can safely change the password at anytime: the \"Restore\" button will still work for old backups encrypted with a previous password. You don't need to type a password to restore backups using the \"Restore\" button. Password is required when you extract the archives manually. Please, don't forget your password, because it's impossible to restore it.";
+$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["backup_password_txt"] = 'Password';
@@ -184,4 +183,8 @@ $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['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.';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
index a24883881f1667c12e8f46483322ebc714d4e999..7cdf15947a5935773654b863c7f506ebd5acb26a 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng
@@ -100,7 +100,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers deÄŸeri
 $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers değeri pozitif bir tamsayı olmalıdır.';
 $wb['hd_quota_error_regex'] = 'Disk kotası geçersiz.';
 $wb['traffic_quota_error_regex'] = 'Trafik kotası geçersiz.';
-$wb['fastcgi_php_version_txt'] = 'PHP Sürümü';
+$wb['server_php_id_txt'] = 'PHP Sürümü';
 $wb['pm_txt'] = 'PHP-FPM İşlem Yöneticisi';
 $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
 $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
diff --git a/interface/web/sites/lib/module.conf.php b/interface/web/sites/lib/module.conf.php
index a9aefad9675cc3a8b52f6e45b569e1149b796384..775a704873ef4b2239f6c4e5f06b2cd691c269d8 100644
--- a/interface/web/sites/lib/module.conf.php
+++ b/interface/web/sites/lib/module.conf.php
@@ -157,33 +157,37 @@ if($app->auth->get_client_limit($userid, 'shell_user') != 0 or $app->auth->get_c
 }
 
 // APS menu
-if($app->auth->get_client_limit($userid, 'aps') != 0)
-{
-	$items = array();
-
-	$items[] = array(   'title'   => 'Available packages',
-		'target'  => 'content',
-		'link'    => 'sites/aps_availablepackages_list.php',
-		'html_id' => 'aps_availablepackages_list');
-
-	$items[] = array(   'title'   => 'Installed packages',
-		'target'  => 'content',
-		'link'    => 'sites/aps_installedpackages_list.php',
-		'html_id' => 'aps_installedpackages_list');
-
-
-	// Second menu group, available only for admins
-	if($_SESSION['s']['user']['typ'] == 'admin')
-	{
-		$items[] = array(   'title'   => 'Update Packagelist',
-			'target'  => 'content',
-			'link'    => 'sites/aps_update_packagelist.php',
-			'html_id' => 'aps_packagedetails_show');
-	}
-
-	$module['nav'][] = array(   'title' => 'APS Installer',
-		'open'  => 1,
-		'items' => $items);
+if($app->auth->get_client_limit($userid, 'aps') != 0) {
+	// read web config
+	$app->uses('getconf');
+	$global_config = $app->getconf->get_global_config('sites');
+	if($global_config['show_aps_menu'] == 'y') {
+	  $items = array();
+
+  	$items[] = array(   'title'   => 'Available packages',
+  		'target'  => 'content',
+  		'link'    => 'sites/aps_availablepackages_list.php',
+  		'html_id' => 'aps_availablepackages_list');
+
+  	$items[] = array(   'title'   => 'Installed packages',
+  		'target'  => 'content',
+  		'link'    => 'sites/aps_installedpackages_list.php',
+  		'html_id' => 'aps_installedpackages_list');
+
+
+  	// Second menu group, available only for admins
+  	if($_SESSION['s']['user']['typ'] == 'admin')
+  	{
+  		$items[] = array(   'title'   => 'Update Packagelist',
+  			'target'  => 'content',
+  			'link'    => 'sites/aps_update_packagelist.php',
+  			'html_id' => 'aps_packagedetails_show');
+  	}
+
+  	$module['nav'][] = array(   'title' => 'APS Installer',
+  		'open'  => 1,
+  		'items' => $items);
+  }
 }
 
 // Statistics menu
diff --git a/interface/web/sites/templates/web_backup_list.htm b/interface/web/sites/templates/web_backup_list.htm
index 95c51d0c15e9ebd885b1fbaa71ec472133874ce5..47c08d4413d8e7153045974467630618f10640c8 100644
--- a/interface/web/sites/templates/web_backup_list.htm
+++ b/interface/web/sites/templates/web_backup_list.htm
@@ -3,13 +3,15 @@
 <button class="btn btn-default formbutton-default" type="button" onclick="ISPConfig.confirm_action('sites/web_vhost_domain_edit.php?id={tmpl_var name='parent_id'}&next_tab=backup&make_backup=web&','{tmpl_var name='make_backup_confirm_txt'}');">{tmpl_var name="make_backup_web_txt"}</button>
 
 <tmpl_if name="msg">
-    <div id="OKMsg" class="tab-content bg-success text-success text-center"><p><tmpl_var name="msg"></p></div>
+  <br><br>
+  <div id="OKMsg" class="tab-content alert alert-success text-center"><p><tmpl_var name="msg"></p></div>
 </tmpl_if>
 <tmpl_if name="error">
-    <div id="errorMsg" class="tab-content bg-danger text-danger text-center">
-        <h4><tmpl_var name="error_txt"></h4>
-        <p><tmpl_var name="error"></p>
-    </div>
+  <br><br>
+  <div id="errorMsg" class="tab-content alert alert-danger text-center">
+    <h4><tmpl_var name="error_txt"></h4>
+    <p><tmpl_var name="error"></p>
+  </div>
 </tmpl_if>
 <h3><tmpl_var name="list_head_txt"></h3>
 
@@ -57,5 +59,5 @@
                 </tbody>
             </table>
 </div>
-        
+
     </div>
diff --git a/interface/web/sites/templates/web_vhost_domain_backup.htm b/interface/web/sites/templates/web_vhost_domain_backup.htm
index 0228ae76bbc4ce80830038c714807697910b1b8f..222ae1e3c365af5463e556bbc6b552abf25d49a6 100644
--- a/interface/web/sites/templates/web_vhost_domain_backup.htm
+++ b/interface/web/sites/templates/web_vhost_domain_backup.htm
@@ -1,81 +1,104 @@
 <tmpl_if name="config_error_msg">
-<div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
-                <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
-				<div>
-				<div style="float:left;width:150px;">{tmpl_var name='config_error_tstamp'} :&nbsp;</div><div style="padding-left:150px;">{tmpl_var name='config_error_msg'}</div>
-				</div>
-</div>
+  <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
+    <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
+    <div>
+      <div style="float:left;width:150px;">{tmpl_var name='config_error_tstamp'} :&nbsp;</div>
+      <div style="padding-left:150px;">{tmpl_var name='config_error_msg'}</div>
+    </div>
+  </div>
 </tmpl_if>
 
-            <div class="form-group">
-                <label for="backup_interval" class="col-sm-3 control-label">{tmpl_var name='backup_interval_txt'}</label>
-                <div class="col-sm-9"><select name="backup_interval" id="backup_interval" class="form-control">
-                    {tmpl_var name='backup_interval'}
-                </select></div>
-            </div>
-            <div class="form-group">
-                <label for="backup_copies" class="col-sm-3 control-label">{tmpl_var name='backup_copies_txt'}</label>
-                <div class="col-sm-9"><select name="backup_copies" id="backup_copies" class="form-control">
-                    {tmpl_var name='backup_copies'}
-                </select></div>
-            </div>
-			<div class="form-group">
-                <label for="backup_excludes" class="col-sm-3 control-label">{tmpl_var name='backup_excludes_txt'}</label>
-                <div class="col-sm-6"><input type="text" name="backup_excludes" id="backup_excludes" value="{tmpl_var name='backup_excludes'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='backup_excludes_note_txt'}
-            </div></div>
-
-            <legend>{tmpl_var name='backup_compression_options_txt'}</legend>
-            <div class="tab-content">
-                {tmpl_var name='backup_format_web_note_txt'}
-            </div>
-            <tmpl_if name="missing_utils">
-                <div class="tab-content bg-warning text-warning">
-                    {tmpl_var name='backup_missing_utils_txt'} {tmpl_var name='missing_utils'}
-                </div>
-            </tmpl_if>
-            <div class="form-group">
-                <label for="backup_format_web" class="col-sm-3 control-label">{tmpl_var name='backup_format_web_txt'}</label>
-                <div class="col-sm-9">
-                    <select name="backup_format_web" id="backup_format_web" class="form-control">
-                        {tmpl_var name='backup_format_web'}
-                    </select>
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="backup_format_db" class="col-sm-3 control-label">{tmpl_var name='backup_format_db_txt'}</label>
-                <div class="col-sm-9">
-                    <select name="backup_format_db" id="backup_format_db" class="form-control">
-                        {tmpl_var name='backup_format_db'}
-                    </select>
-                </div>
-            </div>
-
-            <legend>{tmpl_var name='backup_encryption_options_txt'}</legend>
-            <div class="tab-content">
-                {tmpl_var name='backup_encryption_note_txt'}
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">
-                    {tmpl_var name='backup_enable_encryption_txt'}
-                </label>
-                <div class="col-sm-9">
-                    {tmpl_var name="backup_encrypt"}
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="backup_password" class="col-sm-3 control-label">
-                    {tmpl_var name='backup_password_txt'}
-                </label>
-                <div class="col-sm-9">
-                    <input type="text" name="backup_password" id="backup_password" value="{tmpl_var name='backup_password'}" class="form-control" />
-                </div>
-            </div>
-
-        {tmpl_var name='backup_records'}
-
-        <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="sites/web_vhost_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="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
+<div class="form-group">
+  <label for="backup_interval" class="col-sm-3 control-label">{tmpl_var name='backup_interval_txt'}</label>
+  <div class="col-sm-9"><select name="backup_interval" id="backup_interval" class="form-control">
+    {tmpl_var name='backup_interval'}
+    </select>
+  </div>
+</div>
+<div class="form-group">
+  <label for="backup_copies" class="col-sm-3 control-label">{tmpl_var name='backup_copies_txt'}</label>
+  <div class="col-sm-9"><select name="backup_copies" id="backup_copies" class="form-control">
+    {tmpl_var name='backup_copies'}
+    </select>
+  </div>
+</div>
+<div class="form-group">
+  <label for="backup_excludes" class="col-sm-3 control-label">{tmpl_var name='backup_excludes_txt'}</label>
+  <div class="col-sm-6"><input type="text" name="backup_excludes" id="backup_excludes" value="{tmpl_var name='backup_excludes'}" class="form-control" /></div>
+  <div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='backup_excludes_note_txt'}
+  </div>
+</div>
+<br>
+<div class="panel panel-default">
+  <div class="panel-heading" role="tab" id="headingCompression">
+    <h4 class="panel-title">
+      <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseCompression" aria-expanded="false" aria-controls="collapseCompression">
+      {tmpl_var name='backup_compression_options_txt'}
+      </a>
+    </h4>
+  </div>
+  <div id="collapseCompression" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingCompression">
+    <div class="panel-body">
+      <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>
+      <div class="form-group">
+        <label for="backup_format_web" class="col-sm-3 control-label">{tmpl_var name='backup_format_web_txt'}</label>
+        <div class="col-sm-9">
+          <select name="backup_format_web" id="backup_format_web" class="form-control">
+          {tmpl_var name='backup_format_web'}
+          </select>
+        </div>
+      </div>
+      <div class="form-group">
+        <label for="backup_format_db" class="col-sm-3 control-label">{tmpl_var name='backup_format_db_txt'}</label>
+        <div class="col-sm-9">
+          <select name="backup_format_db" id="backup_format_db" class="form-control">
+          {tmpl_var name='backup_format_db'}
+          </select>
+        </div>
+      </div>
+    </div>
+  </div>
+  <div class="panel-heading" role="tab" id="headingEncryption">
+    <h4 class="panel-title">
+      <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseEncryption" aria-expanded="false" aria-controls="collapseEncryption">
+      {tmpl_var name='backup_encryption_options_txt'}
+      </a>
+    </h4>
+  </div>
+  <div id="collapseEncryption" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingEncryption">
+    <div class="panel-body">
+      <div class="alert alert-info">
+        {tmpl_var name='backup_encryption_note_txt'}
+      </div>
+      <div class="form-group">
+        <label class="col-sm-3 control-label">
+        {tmpl_var name='backup_enable_encryption_txt'}
+        </label>
+        <div class="col-sm-9">
+          {tmpl_var name="backup_encrypt"}
+        </div>
+      </div>
+      <div class="form-group">
+        <label for="backup_password" class="col-sm-3 control-label">
+        {tmpl_var name='backup_password_txt'}
+        </label>
+        <div class="col-sm-9">
+          <input type="text" name="backup_password" id="backup_password" value="{tmpl_var name='backup_password'}" class="form-control" />
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+{tmpl_var name='backup_records'}
+<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="sites/web_vhost_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="sites/web_vhost_domain_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+  </div>
+</div>
diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index e39b889d4ce9abbcebf10b60b5c9592c7815844f..8728d9c571b038f7201363c00c20adbfef19859e 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -221,14 +221,14 @@
                     {tmpl_var name='php'}
                 </select></div>
             </div>
-            {tmpl_hook name="field_fastcgi_php_version"}
-            <div class="form-group fastcgi_php_version">
-                <label for="fastcgi_php_version" class="col-sm-3 control-label">{tmpl_var name='fastcgi_php_version_txt'}</label>
-                <div class="col-sm-9"><select name="fastcgi_php_version" id="fastcgi_php_version" class="form-control">
-                    {tmpl_var name='fastcgi_php_version'}
+            {tmpl_hook name="field_server_php_id"}
+            <div class="form-group server_php_id">
+                <label for="server_php_id" class="col-sm-3 control-label">{tmpl_var name='server_php_id_txt'}</label>
+                <div class="col-sm-9"><select name="server_php_id" id="server_php_id" class="form-control">
+                    {tmpl_var name='server_php_id'}
                 </select></div>
-                <tmpl_if name="fastcgi_php_version_default_hidden_warning_confirmed">
-                    <input type="hidden" id="fastcgi_php_version_default_hidden_warning_confirmed" name="fastcgi_php_version_default_hidden_warning_confirmed" value="{tmpl_var name='fastcgi_php_version_default_hidden_warning_confirmed'}" />
+                <tmpl_if name="server_php_id_default_hidden_warning_confirmed">
+                    <input type="hidden" id="server_php_id_default_hidden_warning_confirmed" name="server_php_id_default_hidden_warning_confirmed" value="{tmpl_var name='server_php_id_default_hidden_warning_confirmed'}" />
                 </tmpl_if>
             </div>
             <tmpl_if name="limit_directive_snippets" op="==" value="y"><div class="form-group">
@@ -280,46 +280,56 @@
             serverId = $(this).val();
             adjustForm();
             reloadWebIP();
-            reloadFastcgiPHPVersions();
+            reloadServerPHPVersions();
 			reloadDirectiveSnippets();
         });
     }
     adjustForm(true);
-    reloadFastcgiPHPVersions(true);
+    reloadServerPHPVersions(true);
 
     jQuery('#client_group_id').change(function(){
         clientGroupId = $(this).val();
         reloadWebIP();
-		reloadFastcgiPHPVersions();
+		reloadServerPHPVersions();
     });
 
     if(jQuery('#php').val() == 'fast-cgi' || jQuery('#php').val() == 'php-fpm' || (jQuery('#php').val() == 'hhvm' && serverType == 'nginx')){
-        jQuery('.fastcgi_php_version:hidden').show();
+        jQuery('.server_php_id:hidden').show();
+		// This block can be removed?
 		if(jQuery('#php').val() == 'hhvm'){
-			jQuery('#fastcgi_php_version_txt').hide();
+			// There is no element with id="server_php_id_txt"
+			jQuery('#server_php_id_txt').hide();
+			// There is no element with id="#fastcgi_php_fallback_version_txt"
 			jQuery('#fastcgi_php_fallback_version_txt').show();
 		} else {
-			jQuery('#fastcgi_php_version_txt').show();
+			// There is no element with id="server_php_id_txt"
+			jQuery('#server_php_id_txt').show();
+			// There is no element with id="#fastcgi_php_fallback_version_txt"
 			jQuery('#fastcgi_php_fallback_version_txt').hide();
 		}
     } else {
-        jQuery('.fastcgi_php_version:visible').hide();
+        jQuery('.server_php_id:visible').hide();
     }
     //ISPConfig.resetFormChanged();
 
     jQuery('#php').change(function(){
-        reloadFastcgiPHPVersions();
+        reloadServerPHPVersions();
         if(jQuery(this).val() == 'fast-cgi' || jQuery(this).val() == 'php-fpm' || (jQuery(this).val() == 'hhvm' && serverType == 'nginx')){
-            jQuery('.fastcgi_php_version:hidden').show();
+            jQuery('.server_php_id:hidden').show();
+			// This block can be removed?
 			if(jQuery(this).val() == 'hhvm'){
-				jQuery('#fastcgi_php_version_txt').hide();
+				// There is no element with id="server_php_id_txt"
+				jQuery('#server_php_id_txt').hide();
+				// There is no element with id="#fastcgi_php_fallback_version_txt"
 				jQuery('#fastcgi_php_fallback_version_txt').show();
 			} else {
-				jQuery('#fastcgi_php_version_txt').show();
+				// There is no element with id="server_php_id_txt"
+				jQuery('#server_php_id_txt').show();
+				// There is no element with id="#fastcgi_php_fallback_version_txt"
 				jQuery('#fastcgi_php_fallback_version_txt').hide();
 			}
         } else {
-            jQuery('.fastcgi_php_version:visible').hide();
+            jQuery('.server_php_id:visible').hide();
         }
     });
     jQuery('#parent_domain_id').change(function() {
@@ -348,7 +358,7 @@
         jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {web_id : parentWebId, type : "getserverid"}, function(data) {
             if(data.serverid) serverId = data.serverid;
             adjustForm(noFormChange);
-            if(noFormChange) reloadFastcgiPHPVersions(noFormChange);
+            if(noFormChange) reloadServerPHPVersions(noFormChange);
         });
     }
 
@@ -438,34 +448,34 @@
 		$('#'+elem).select2();
 	}
 
-    function reloadFastcgiPHPVersions(noFormChange) {
-        jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, php_type : jQuery('#php').val(), type : "getphpfastcgi", client_group_id : clientGroupId}, function(data) {
+    function reloadServerPHPVersions(noFormChange) {
+        jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, php_type : jQuery('#php').val(), type : "getserverphp", client_group_id : clientGroupId}, function(data) {
             //var options = '<option value="">Default</option>';
 			var options = '';
-            var phpfastcgiselected = '';
+            var serverphpidselected = '';
             $.each(data, function(key, val) {
 				<tmpl_if name="id">
-                if($('#fastcgi_php_version').val() == key){
-                    phpfastcgiselected = ' selected="selected"';
+                if($('#server_php_id').val() == key){
+                    serverphpidselected = ' selected="selected"';
                 } else {
-                    phpfastcgiselected = '';
+                    serverphpidselected = '';
                 }
 				</tmpl_else>
-					phpfastcgiselected = '';
+					serverphpidselected = '';
 				</tmpl_if>
-                options += '<option value="'+key+'"'+phpfastcgiselected+'>'+val+'</option>';
+                options += '<option value="'+key+'"'+serverphpidselected+'>'+val+'</option>';
             });
 			<tmpl_if name="id">
-			if($('#fastcgi_php_version').val() == ''){
-                phpfastcgiselected = ' selected="selected"';
+			if($('#server_php_id').val() == '0'){
+                serverphpidselected = ' selected="selected"';
             } else {
-                phpfastcgiselected = '';
+                serverphpidselected = '';
             }
 			</tmpl_else>
-				phpfastcgiselected = '';
+				serverphpidselected = '';
 			</tmpl_if>
-			//options += '<option value=""'+phpfastcgiselected+'>{tmpl_var name="default_php_txt"}</option>';
-            $('#fastcgi_php_version').html(options).change();
+			//options += '<option value=""'+serverphpidselected+'>{tmpl_var name="default_php_txt"}</option>';
+            $('#server_php_id').html(options).change();
             if(noFormChange) ISPConfig.resetFormChanged();
         });
     }
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 0d770476d12bdea9b93a8f3b27aafde60fcf35d5..b6f2ac5fa822400471d177a2a4f4b7060f38df1a 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -258,20 +258,15 @@ class page_action extends tform_actions {
 				}
 			}
 			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
-				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+				$php_select = "<option value='0'>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
 			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
-						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
-					} else {
-						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
-					}
-					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
-					$php_select .= "<option value='" . $app->functions->htmlentities($php_version) . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
+					$selected = ($php_record['server_php_id'] == $this->dataRecord["server_php_id"])?'SELECTED':'';
+					$php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
 				}
 			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
+			$app->tpl->setVar("server_php_id", $php_select);
 			unset($php_records);
 
 			// add limits to template to be able to hide settings
@@ -406,20 +401,15 @@ class page_action extends tform_actions {
 				}
 			}
 			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
-				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+				$php_select = "<option value='0'>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
 			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
-						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
-					} else {
-						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
-					}
-					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
-					$php_select .= "<option value='" . $app->functions->htmlentities($php_version) . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
+					$selected = ($php_record['server_php_id'] == $this->dataRecord["server_php_id"])?'SELECTED':'';
+					$php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
 				}
 			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
+			$app->tpl->setVar("server_php_id", $php_select);
 			unset($php_records);
 
 			// add limits to template to be able to hide settings
@@ -628,20 +618,15 @@ class page_action extends tform_actions {
 				}
 			}
 			if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
-				$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+				$php_select = "<option value='0'>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
 			}
 			if(is_array($php_records) && !empty($php_records)) {
 				foreach( $php_records as $php_record) {
-					if($this->dataRecord['php'] == 'php-fpm' || ($this->dataRecord['php'] == 'hhvm' && $server_type == 'nginx')){
-						$php_version = $php_record['name'].':'.$php_record['php_fpm_init_script'].':'.$php_record['php_fpm_ini_dir'].':'.$php_record['php_fpm_pool_dir'];
-					} else {
-						$php_version = $php_record['name'].':'.$php_record['php_fastcgi_binary'].':'.$php_record['php_fastcgi_ini_dir'];
-					}
-					$selected = ($php_version == $this->dataRecord["fastcgi_php_version"])?'SELECTED':'';
-					$php_select .= "<option value='" . $app->functions->htmlentities($php_version) . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
+					$selected = ($php_record['server_php_id'] == $this->dataRecord["server_php_id"])?'SELECTED':'';
+					$php_select .= "<option value='" . $php_record['server_php_id'] . "' $selected>".$app->functions->htmlentities($php_record['name'])."</option>\r\n";
 				}
 			}
-			$app->tpl->setVar("fastcgi_php_version", $php_select);
+			$app->tpl->setVar("server_php_id", $php_select);
 			unset($php_records);
 
 			foreach($read_limits as $limit) $app->tpl->setVar($limit, ($limit == 'force_suexec' ? 'n' : 'y'));
@@ -1030,11 +1015,7 @@ class page_action extends tform_actions {
 				$this->dataRecord['web_folder'] = strtolower($this->dataRecord['web_folder']);
 				if(substr($this->dataRecord['web_folder'], 0, 1) === '/') $this->dataRecord['web_folder'] = substr($this->dataRecord['web_folder'], 1);
 				if(substr($this->dataRecord['web_folder'], -1) === '/') $this->dataRecord['web_folder'] = substr($this->dataRecord['web_folder'], 0, -1);
-				$forbidden_folders = array('', 'cgi-bin', 'log', 'private', 'ssl', 'tmp', 'webdav');
-				$check_folder = strtolower($this->dataRecord['web_folder']);
-				if(substr($check_folder, 0, 1) === '/') $check_folder = substr($check_folder, 1); // strip / at beginning to check against forbidden entries
-				if(strpos($check_folder, '/') !== false) $check_folder = substr($check_folder, 0, strpos($check_folder, '/')); // get the first part of the path to check it
-				if(in_array($check_folder, $forbidden_folders)) {
+				if($app->system->is_blacklisted_web_path($this->dataRecord['web_folder'])) {
 					$app->tform->errorMessage .= $app->tform->lng("web_folder_invalid_txt")."<br>";
 				}
 
@@ -1208,6 +1189,9 @@ class page_action extends tform_actions {
 		//* make sure that the domain is lowercase
 		if(isset($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");
+
 		//* get the server config for this server
 		$app->uses("getconf");
 		if($this->id > 0){
@@ -1349,28 +1333,24 @@ class page_action extends tform_actions {
 		}
 
 		// Check custom PHP version
-		if(isset($this->dataRecord['fastcgi_php_version']) && $this->dataRecord['fastcgi_php_version'] != '') {
+		if(isset($this->dataRecord['server_php_id']) && $this->dataRecord['server_php_id'] != 0) {
 			// Check php-fpm mode
 			if($this->dataRecord['php'] == 'php-fpm'){
-				$tmp = $app->db->queryOneRecord("SELECT * FROM server_php WHERE active = 'y' AND CONCAT(name,':',php_fpm_init_script,':',php_fpm_ini_dir,':',php_fpm_pool_dir) = '".$app->db->quote($this->dataRecord['fastcgi_php_version'])."'");
-				if(is_array($tmp)) {
-					$this->dataRecord['fastcgi_php_version'] = $tmp['name'].':'.$tmp['php_fpm_init_script'].':'.$tmp['php_fpm_ini_dir'].':'.$tmp['php_fpm_pool_dir'];
-				} else {
-					$this->dataRecord['fastcgi_php_version'] = '';
+				$tmp = $app->db->queryOneRecord("SELECT * FROM server_php WHERE active = 'y' AND server_php_id = ?", $this->dataRecord['server_php_id']);
+				if(!is_array($tmp) || !$tmp['php_fpm_init_script']) {
+					$this->dataRecord['server_php_id'] = 0;
 				}
 				unset($tmp);
 			// Check fast-cgi mode
 			} elseif($this->dataRecord['php'] == 'fast-cgi') {
-				$tmp = $app->db->queryOneRecord("SELECT * FROM server_php WHERE active = 'y' AND CONCAT(name,':',php_fastcgi_binary,':',php_fastcgi_ini_dir) = '".$app->db->quote($this->dataRecord['fastcgi_php_version'])."'");
-				if(is_array($tmp)) {
-					$this->dataRecord['fastcgi_php_version'] = $tmp['name'].':'.$tmp['php_fastcgi_binary'].':'.$tmp['php_fastcgi_ini_dir'];
-				} else {
-					$this->dataRecord['fastcgi_php_version'] = '';
+				$tmp = $app->db->queryOneRecord("SELECT * FROM server_php WHERE active = 'y' AND server_php_id = ?", $this->dataRecord['server_php_id']);
+				if(!is_array($tmp) || !$tmp['php_fastcgi_binary']) {
+					$this->dataRecord['server_php_id'] = 0;
 				}
 				unset($tmp);
 			} else {
-				// Other PHP modes do not have custom versions, so we force the value to be empty
-				$this->dataRecord['fastcgi_php_version'] = '';
+				// Other PHP modes do not have custom versions, so we force the value to be zero
+				$this->dataRecord['server_php_id'] = 0;
 			}
 		}
 
@@ -1399,11 +1379,19 @@ class page_action extends tform_actions {
 	function onAfterInsert() {
 		global $app, $conf;
 
-		// make sure that the record belongs to the clinet group and not the admin group when admin inserts it
-		// also make sure that the user can not delete domain created by a admin
+		// make sure that the record belongs to the client group and not the admin group when admin inserts it
+		// also make sure that the user can not delete domain created by a admin if client protection is enabled
 		if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
-			$app->db->query("UPDATE web_domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $this->id);
+			$app->uses('getconf');
+			$global_config = $app->getconf->get_global_config('sites');
+			if($global_config['client_protection'] == 'y') {
+				$app->db->query("UPDATE web_domain SET sys_groupid = ?, sys_perm_group = 'ru' WHERE domain_id = ?", $client_group_id, $this->id);
+			} else {
+				$sysuser = $app->db->queryOneRecord('SELECT userid FROM sys_user WHERE default_group = ?',$client_group_id);
+				$sysuser_id = (is_array($sysuser) && isset($sysuser['userid']) && $sysuser['userid'] > 0)?$sysuser['userid']:1;
+				$app->db->query("UPDATE web_domain SET sys_userid = ?, sys_groupid = ?, sys_perm_group = 'riud' WHERE domain_id = ?", $sysuser_id, $client_group_id, $this->id);
+			}
 		}
 		if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) {
 			$client_group_id = $app->functions->intval($this->dataRecord["client_group_id"]);
@@ -1502,7 +1490,7 @@ class page_action extends tform_actions {
 					$rec = $app->db->queryOneRecord("SELECT server_id from web_domain WHERE domain_id = ?", $this->id);
 					if($rec['server_id'] != $this->dataRecord["server_id"]) {
 						//* Add a error message and switch back to old server
-						$app->tform->errorMessage .= $app->lng('The Server can not be changed.');
+						$app->tform->errorMessage .= $app->lng('error_server_change_not_possible');
 						$this->dataRecord["server_id"] = $rec['server_id'];
 					}
 					unset($rec);
@@ -1513,17 +1501,17 @@ class page_action extends tform_actions {
 				$rec = $app->db->queryOneRecord("SELECT sys_perm_group, domain, ip_address, ipv6_address from web_domain WHERE domain_id = ?", $this->id);
 				if(isset($this->dataRecord["domain"]) && $rec['domain'] != $this->dataRecord["domain"] && !$app->tform->checkPerm($this->id, 'u')) {
 					//* Add a error message and switch back to old server
-					$app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
+					$app->tform->errorMessage .= $app->lng('error_domain_change_forbidden');
 					$this->dataRecord["domain"] = $rec['domain'];
 				}
 				if(isset($this->dataRecord["ip_address"]) && $rec['ip_address'] != $this->dataRecord["ip_address"] && $rec['sys_perm_group'] != 'riud') {
 					//* Add a error message and switch back to old server
-					$app->tform->errorMessage .= $app->lng('The IP can not be changed. Please ask your Administrator if you want to change the IPv4-Address.');
+					$app->tform->errorMessage .= $app->lng('error_ipv4_change_forbidden');
 					$this->dataRecord["ip_address"] = $rec['ip_address'];
 				}
 				if(isset($this->dataRecord["ipv6_address"]) && $rec['ipv6_address'] != $this->dataRecord["ipv6_address"] && $rec['sys_perm_group'] != 'riud') {
 					//* Add a error message and switch back to old server
-					$app->tform->errorMessage .= $app->lng('The IP can not be changed. Please ask your Administrator if you want to change the IPv6-Address.');
+					$app->tform->errorMessage .= $app->lng('error_ipv6_change_forbidden');
 					$this->dataRecord["ipv6_address"] = $rec['ipv6_address'];
 				}
 				unset($rec);
@@ -1564,27 +1552,27 @@ class page_action extends tform_actions {
 
 		// The default PHP version is indicated by an empty string, so if the default PHP version is hidden
 		// then an empty string is not a valid PHP version.
-		if (empty($this->dataRecord['fastcgi_php_version'])) {
-			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('fastcgi_php_version_invalid_txt'));
+		if (empty($this->dataRecord['server_php_id'])) {
+			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('server_php_id_invalid_txt'));
 			return;
 		}
 
 		// If the default PHP version is now hidden but this vhost was using it, we don't want to implicitly
 		// switch the user to some random Additional PHP version. So we show a warning instead.
-		$old_fastcgi_php_version = null;
+		$old_server_php_id = null;
 		if ($this->id > 0) {
-			$existing = $app->db->queryOneRecord('SELECT fastcgi_php_version FROM web_domain WHERE domain_id = ?', $this->id);
-			$old_fastcgi_php_version = $existing['fastcgi_php_version'];
+			$existing = $app->db->queryOneRecord('SELECT server_php_id FROM web_domain WHERE domain_id = ?', $this->id);
+			$old_server_php_id = $existing['server_php_id'];
 		}
 
-		if ('' === $old_fastcgi_php_version) {
+		if ('' === $old_server_php_id) {
 			// Warning was already shown, user confirmed the new PHP version
-			if (!empty($_POST['fastcgi_php_version_default_hidden_warning_confirmed'])) {
+			if (!empty($_POST['server_php_id_default_hidden_warning_confirmed'])) {
 				return;
 			}
 
-			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('fastcgi_php_version_default_hidden_warning_txt'));
-			$app->tpl->setVar('fastcgi_php_version_default_hidden_warning_confirmed', 1);
+			$app->tform->errorMessage .= sprintf('%s<br>', $app->tform->lng('server_php_id_default_hidden_warning_txt'));
+			$app->tpl->setVar('server_php_id_default_hidden_warning_confirmed', 1);
 		}
 	}
 }
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js
index 70e3a903a65dbf44576868151101c19015858bfd..e3a2bee3688d9144d82421c1464529ec0a973211 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -9,30 +9,30 @@ var ISPConfig = {
 	registeredHooks: new Array(),
 	new_tpl_add_id: 0,
 	dataLogTimer: 0,
-	
+
 	options: {
 		useLoadIndicator: false,
 		useComboBox: false
 	},
-	
+
 	setOption: function(key, value) {
 		ISPConfig.options[key] = value;
 	},
-	
+
 	setOptions: function(opts) {
 		$.extend(ISPConfig.options, opts);
 	},
-	
+
 	reportError: function(request) {
-		
+
 	},
-	
+
 	registerHook: function(name, callback) {
 		if(!ISPConfig.registeredHooks[name]) ISPConfig.registeredHooks[name] = new Array();
 		var newindex = ISPConfig.registeredHooks[name].length;
 		ISPConfig.registeredHooks[name][newindex] = callback;
 	},
-	
+
 	callHook: function(name, params) {
 		if(!ISPConfig.registeredHooks[name]) return;
 		for(var i = 0; i < ISPConfig.registeredHooks[name].length; i++) {
@@ -40,14 +40,14 @@ var ISPConfig = {
 			callback(name, params);
 		}
 	},
-	
+
 	resetFormChanged: function() {
 		ISPConfig.pageFormChanged = false;
 	},
 
 	showLoadIndicator: function() {
 		document.body.style.cursor = 'wait';
-		
+
 		if(ISPConfig.options.useLoadIndicator == true) {
 			ISPConfig.requestsRunning += 1;
 
@@ -96,7 +96,7 @@ var ISPConfig = {
 	onAfterContentLoad: function(url, data) {
 		if(!data) data = '';
 		else data = '&' + data;
-		
+
 		if(ISPConfig.options.useComboBox == true) {
 			$('#pageContent').find("select:not(.chosen-select)").select2({
 				placeholder: '',
@@ -119,7 +119,7 @@ var ISPConfig = {
 				}
 			});
 		}
-		
+
 		$('input[data-input-element="date"]').datetimepicker({
 			'language': 'en', // TODO
 			'todayHighlight': true,
@@ -144,18 +144,18 @@ var ISPConfig = {
 			$(this).prop('readonly', true)
 			.tooltip({title: "Click to set", placement: "left"});
 		});
-		$('input[type="password"]').on('click focus', function() { 
+		$('input[type="password"]').on('click focus', function() {
 			$(this).prop('readonly', false);
 			$(this).tooltip('destroy');
 		});
-		
+
 		ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data });
 	},
 
 	submitForm: function(formname, target, confirmation) {
 		var successMessage = arguments[3];
 		if(!confirmation) confirmation = false;
-		
+
 		if(!confirmation || window.confirm(confirmation)) {
 			var submitFormObj = $.ajax({
 				type: "POST",
@@ -210,12 +210,12 @@ var ISPConfig = {
 			if(errormsg){
 				msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
 			}
-			
+
 			var csrf_key = $response.find('input[name="_csrf_key"]').val();
 			var csrf_id = $response.find('input[name="_csrf_id"]').val();
-			
+
 			msg = msg + '<input type="hidden" name="_csrf_id" value="' + csrf_id + '" /><input type="hidden" name="_csrf_key" value="' + csrf_key + '" />';
-			
+
 			return msg;
 
 		};
@@ -264,7 +264,7 @@ var ISPConfig = {
 			}
 		});
 	},
-	
+
 	loadContent: function(pagename) {
 		var params = arguments[1];
 		var pageContentObject2 = $.ajax({
@@ -350,7 +350,7 @@ var ISPConfig = {
 				ISPConfig.reportError('Ajax Request was not successful. 114');
 			}
 		});
-		
+
 		ISPConfig.loadMenus();
 		ISPConfig.keepalive();
 		ISPConfig.dataLogNotification();
@@ -358,11 +358,11 @@ var ISPConfig = {
 			try {
 				$('form#pageForm').find('input[name="username"]').focus();
 			} catch (e) {
-			
+
 			}
 		}, 1000);
 	},
-	
+
 	loadMenus: function() {
 		var sideNavObject = $.ajax({
 			type: "GET",
@@ -409,7 +409,7 @@ var ISPConfig = {
 			console.log('tab change interrupted, request still running.');
 			return false;
 		}
-	
+
 		document.pageForm.next_tab.value = tab;
 
 		var idel = $('form#pageForm').find('[name="id"]');
@@ -487,7 +487,7 @@ var ISPConfig = {
 			}
 		});
 	},
-	
+
 	keepalive: function() {
 		var pageContentObject3 = $.ajax({
 			type: "GET",
@@ -618,13 +618,13 @@ $(document).on('click', 'a[data-load-content],button[data-load-content]', functi
 		console.log('preventing click because there is still a request running.');
 		return;
 	}
-	
+
 	$page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
 	$page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
-	
+
 	var content_to_load = $(this).attr('data-load-content');
 	if(!content_to_load) return this;
-	
+
 	ISPConfig.loadContent(content_to_load);
 });
 
@@ -634,13 +634,13 @@ $(document).on('click', 'a[data-capp],button[data-capp]', function(e) {
 		console.log('preventing click because there is still a request running.');
 		return;
 	}
-	
+
 	$page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
 	$page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
-	
+
 	var content_to_load = $(this).attr('data-capp');
 	if(!content_to_load) return this;
-	
+
 	ISPConfig.capp(content_to_load);
 });
 
@@ -650,14 +650,14 @@ $(document).on('click', 'a[data-submit-form],button[data-submit-form]', function
 		console.log('preventing click because there is still a request running.');
 		return;
 	}
-	
+
 	$page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
 	$page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
-	
+
 	var $el = $(this);
 	var act = $el.attr('data-form-action');
 	var form = $el.attr('data-submit-form');
-	
+
 	if($el.attr('data-form-upload') == 'true') ISPConfig.submitUploadForm(form, act);
 	else ISPConfig.submitForm(form, act);
 });
@@ -679,28 +679,28 @@ $(document).on('click', 'th[data-column]', function(e) {
 	var $self = $(this);
 	var column = $self.attr('data-column');
 	if(!column) return this;
-	
+
 	if($("#pageForm .table #Filter").length > 0 && $self.attr('data-sortable') != 'false') {
 		var $el = $('#Filter');
 		var act = $el.attr('data-form-action');
 		var form = $el.attr('data-submit-form');
-		
+
 		var dir = $self.attr('data-ordered');
-		
+
 		var separator = '?';
 		if(act.indexOf("?") >= 0){
 			separator = '&';
 		}
 		act = act + separator + 'orderby=' + column;
 		ISPConfig.submitForm(form, act);
-		
+
 		$(document).ajaxComplete(function() {
 			var $self = $('#pageForm .table th[data-column="' + column + '"]');
 			$self.parent().children('th[data-column]').removeAttr('data-ordered');
 			if(dir && dir == 'asc') $self.attr('data-ordered', 'desc');
 			else $self.attr('data-ordered', 'asc');
 		});
-		
+
 	}
 });
 
@@ -765,25 +765,23 @@ $(document).on('ready', function () {
 			})
 		}
 	});
-	
+
 	// Animierter Ladefortschritt
 	$('.progress .progress-bar').css('width', function () {
 		return $(this).attr('aria-valuenow') + '%';
 	});
-	
-	ISPConfig.loadInitContent();
 
 	$('#searchform').submit(function(e) {
 		e.preventDefault();
 	});
-	
+
 	$("#pageForm").submit(function(e){
 		//Prevent form submit: e.preventDefault() in lists
 		if ($("#pageForm .table #Filter").length > 0) {
 			e.preventDefault();
 		}
 	});
-	
+
 	$.fn.setCursorPosition = function(pos) {
 		var self = $(this).get(0);
 		if(self.setSelectionRange) {
@@ -799,11 +797,11 @@ $(document).on('ready', function () {
 			range.select();
 		}
 	};
-	
+
 	$.fn.getCursorPosition = function() {
 		var iCaretPos = 0;
 		var self = $(this).get(0);
-		
+
 		if(typeof self.selectionStart === 'number') {
 			iCaretPos = self.selectionDirection == 'backward' ? self.selectionStart : self.selectionEnd;
 		} else if(document.selection) {
@@ -815,4 +813,3 @@ $(document).on('ready', function () {
 		return iCaretPos;
 	};
 });
-
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 4cc88760bb33f3f4db9de9a5daf6b7a43b3a0eb7..39622548aa70e6a33e9b40c6713e4e5393a9c213 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -58,9 +58,9 @@
 					  <div>
 						<div>
 						  <div class='input-group'>
-							<input id='globalsearch' type='text' class='form-control' placeholder='Search' />
+							<input id='globalsearch' type='text' class='form-control' placeholder='{tmpl_var name="globalsearch_searchfield_watermark_txt"}' />
 							<span class='input-group-btn'>
-							  <button class='btn btn-default' title='Search…'>
+                <button class='btn btn-default' title='{tmpl_var name="globalsearch_searchfield_watermark_txt"}'>
 								<span class='icon icon-lens'></span>
 							  </button>
 							</span>
@@ -90,7 +90,7 @@
 				    </ul>
 			      </div>
 			      <div class="modal-footer">
-			        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+			        <button type="button" class="btn btn-default" data-dismiss="modal">{tmpl_var name="datalog_changes_close_txt"}</button>
 			      </div>
 			    </div>
 			  </div>
@@ -153,6 +153,8 @@
 			resultBoxPosition: ''
 		});
 
+    ISPConfig.loadInitContent();
+
 	});
   //-->
   </script>
diff --git a/interface/web/tools/form/interface_settings.tform.php b/interface/web/tools/form/interface_settings.tform.php
deleted file mode 100644
index 05eaba941655e0bbb4adac4e4c6e87188ec84694..0000000000000000000000000000000000000000
--- a/interface/web/tools/form/interface_settings.tform.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-
-/*
-Copyright (c) 2005, 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.
-*/
-
-/*
-	Form Definition
-
-	Tabellendefinition
-
-	Datentypen:
-	- INTEGER (Wandelt Ausdr�cke in Int um)
-	- DOUBLE
-	- CURRENCY (Formatiert Zahlen nach W�hrungsnotation)
-	- VARCHAR (kein weiterer Format Check)
-	- TEXT (kein weiterer Format Check)
-	- DATE (Datumsformat, Timestamp Umwandlung)
-
-	Formtype:
-	- TEXT (normales Textfeld)
-	- TEXTAREA (normales Textfeld)
-	- PASSWORD (Feldinhalt wird nicht angezeigt)
-	- SELECT (Gibt Werte als option Feld aus)
-	- RADIO
-	- CHECKBOX
-	- CHECKBOXARRAY
-	- FILE
-
-	VALUE:
-	- Wert oder Array
-
-	Hinweis:
-	Das ID-Feld ist nicht bei den Table Values einzuf�gen.
-
-
-*/
-
-$form['title']   = 'interface_head_txt';
-//*$form['description']  = 'interface_desc_txt';
-$form['name']   = 'interface';
-$form['action']  = 'interface_settings.php';
-$form['db_table'] = 'sys_user';
-$form['db_table_idx'] = 'userid';
-$form["db_history"] = "no";
-$form['tab_default'] = 'main';
-$form['list_default'] = 'index.php';
-$form['auth']  = 'no'; //??
-
-//* 0 = id of the user, > 0 id must match with id of current user
-$form['auth_preset']['userid']  = 0;
-//* 0 = default groupid of the user, > 0 id must match with groupid of current user
-$form['auth_preset']['groupid'] = 0;
-
-//** Permissions are: r = read, i = insert, u = update, d = delete
-$form['auth_preset']['perm_user']  = 'riud';
-$form['auth_preset']['perm_group'] = 'riud';
-$form['auth_preset']['perm_other'] = '';
-
-//* Pick out modules
-//* TODO: limit to activated modules of the user
-$modules_list = array();
-if($_SESSION["s"]["user"]["typ"] == 'admin') {
-	$handle = @opendir(ISPC_WEB_PATH);
-	while ($file = @readdir($handle)) {
-		if ($file != '.' && $file != '..') {
-			if(@is_dir(ISPC_WEB_PATH."/$file")) {
-				if(is_file(ISPC_WEB_PATH."/$file/lib/module.conf.php") and $file != 'login' && $file != 'designer' && $file != 'mailuser') {
-					$modules_list[$file] = $file;
-				}
-			}
-		}
-	}
-} else {
-	$tmp = $app->db->queryOneRecord("SELECT * FROM sys_user where username = ?", $_SESSION["s"]["user"]['username']);
-	$modules = $tmp['modules'];
-	//$modules = $conf['interface_modules_enabled'];
-	if($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
-		$modules .= ',client';
-	}
-	$tmp = explode(',', $modules);
-	foreach($tmp as $m) {
-		$modules_list[$m] = $m;
-	}
-}
-
-//* Languages
-$language_list = array();
-$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
-while ($file = @readdir($handle)) {
-	if ($file != '.' && $file != '..') {
-		if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file, -4, 4) == '.lng') {
-			$tmp = substr($file, 0, 2);
-			$language_list[$tmp] = $tmp;
-		}
-	}
-}
-
-//* Load themes
-$themes_list = array();
-$handle = @opendir(ISPC_THEMES_PATH);
-while ($file = @readdir($handle)) {
-	if (substr($file, 0, 1) != '.') {
-		if(@is_dir(ISPC_THEMES_PATH."/$file")) {
-			if(!file_exists(ISPC_THEMES_PATH."/$file/ispconfig_version") || (@file_exists(ISPC_THEMES_PATH."/$file/ispconfig_version") && trim(@file_get_contents(ISPC_THEMES_PATH."/$file/ispconfig_version")) == ISPC_APP_VERSION)) {
-				$themes_list[$file] = $file;
-			}
-		}
-	}
-}
-
-$form['tabs']['main'] = array (
-	'title'  => 'Settings',
-	'width'  => 80,
-	'template'  => 'templates/interface_settings.htm',
-	'fields'  => array (
-		//#################################
-		// Beginn Datenbankfelder
-		//#################################
-		'startmodule' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
-					'errmsg'=> 'startmodule_empty'),
-				1 => array (    'type' => 'REGEX',
-					'regex' => '/^[a-z0-9\_]{0,64}$/',
-					'errmsg'=> 'startmodule_regex'),
-			),
-			'regex'  => '',
-			'errmsg' => '',
-			'default' => '',
-			'value'  => $modules_list,
-			'separator' => '',
-			'width'  => '30',
-			'maxlength' => '255',
-			'rows'  => '',
-			'cols'  => ''
-		),
-		'app_theme' => array (
-			'datatype' => 'VARCHAR',
-			'formtype' => 'SELECT',
-			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
-					'errmsg'=> 'app_theme_empty'),
-				1 => array (    'type' => 'REGEX',
-					'regex' => '/^[a-z0-9\_]{0,64}$/',
-					'errmsg'=> 'app_theme_regex'),
-			),
-			'regex' => '',
-			'errmsg' => '',
-			'default' => 'default',
-			'value' => $themes_list,
-			'separator' => '',
-			'width' => '30',
-			'maxlength' => '255',
-			'rows' => '',
-			'cols' => ''
-		)
-		//#################################
-		// ENDE Datenbankfelder
-		//#################################
-	)
-);
-
-
-?>
diff --git a/interface/web/tools/form/user_settings.tform.php b/interface/web/tools/form/user_settings.tform.php
index 7daa1a7b84989713bc00186430b18c798e02ee04..f063634b0ccf96ed6222acb33274c81b7dbd9ea2 100644
--- a/interface/web/tools/form/user_settings.tform.php
+++ b/interface/web/tools/form/user_settings.tform.php
@@ -68,7 +68,7 @@ $form['db_table']  = 'sys_user';
 $form['db_table_idx'] = 'userid';
 $form["db_history"]  = "no";
 $form['tab_default'] = 'users';
-$form['list_default'] = 'index.php';
+$form['list_default'] = 'user_settings.php';
 $form['auth']   = 'no';
 
 //* 0 = id of the user, > 0 id must match with id of current user
@@ -92,6 +92,46 @@ while ($file = @readdir($handle)) {
 		}
 	}
 }
+//* Pick out modules
+//* TODO: limit to activated modules of the user
+$modules_list = array();
+if($_SESSION["s"]["user"]["typ"] == 'admin') {
+	$handle = @opendir(ISPC_WEB_PATH);
+	while ($file = @readdir($handle)) {
+		if ($file != '.' && $file != '..') {
+			if(@is_dir(ISPC_WEB_PATH."/$file")) {
+				if(is_file(ISPC_WEB_PATH."/$file/lib/module.conf.php") and $file != 'login' && $file != 'designer' && $file != 'mailuser') {
+					$modules_list[$file] = $file;
+				}
+			}
+		}
+	}
+} else {
+	$tmp = $app->db->queryOneRecord("SELECT * FROM sys_user where username = ?", $_SESSION["s"]["user"]['username']);
+	$modules = $tmp['modules'];
+	//$modules = $conf['interface_modules_enabled'];
+	if($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+		$modules .= ',client';
+	}
+	$tmp = explode(',', $modules);
+	foreach($tmp as $m) {
+		$modules_list[$m] = $m;
+	}
+}
+
+//* Load themes
+$themes_list = array();
+$handle = @opendir(ISPC_THEMES_PATH);
+while ($file = @readdir($handle)) {
+	if (substr($file, 0, 1) != '.') {
+		if(@is_dir(ISPC_THEMES_PATH."/$file")) {
+			if(!file_exists(ISPC_THEMES_PATH."/$file/ispconfig_version") || (@file_exists(ISPC_THEMES_PATH."/$file/ispconfig_version") && trim(@file_get_contents(ISPC_THEMES_PATH."/$file/ispconfig_version")) == ISPC_APP_VERSION)) {
+				$themes_list[$file] = $file;
+			}
+		}
+	}
+}
+
 
 $form['tabs']['users'] = array (
 	'title'  => 'Settings',
@@ -141,6 +181,44 @@ $form['tabs']['users'] = array (
 			'maxlength' => '2',
 			'rows'  => '',
 			'cols'  => ''
+		),
+		'startmodule' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'startmodule_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'startmodule_regex'),
+			),
+			'regex'  => '',
+			'errmsg' => '',
+			'default' => '',
+			'value'  => $modules_list,
+			'separator' => '',
+			'width'  => '30',
+			'maxlength' => '255',
+			'rows'  => '',
+			'cols'  => ''
+		),
+		'app_theme' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'SELECT',
+			'validators' => array (  0 => array (    'type' => 'NOTEMPTY',
+					'errmsg'=> 'app_theme_empty'),
+				1 => array (    'type' => 'REGEX',
+					'regex' => '/^[a-z0-9\_]{0,64}$/',
+					'errmsg'=> 'app_theme_regex'),
+			),
+			'regex' => '',
+			'errmsg' => '',
+			'default' => 'default',
+			'value' => $themes_list,
+			'separator' => '',
+			'width' => '30',
+			'maxlength' => '255',
+			'rows' => '',
+			'cols' => ''
 		)
 		//#################################
 		// ENDE Datenbankfelder
diff --git a/interface/web/tools/interface_settings.php b/interface/web/tools/interface_settings.php
deleted file mode 100644
index b14b63737541699b49eebb567b7a7bfe6a93d847..0000000000000000000000000000000000000000
--- a/interface/web/tools/interface_settings.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-/*
-Copyright (c) 2008, 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.
-*/
-
-
-/******************************************
-* Begin Form configuration
-******************************************/
-
-$tform_def_file = "form/interface_settings.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('tools');
-
-// Loading classes
-$app->uses('tpl,tform,tform_actions');
-$app->load('tform_actions');
-
-class page_action extends tform_actions {
-	var $_theme_changed = false;
-
-	function onLoad() {
-		global $app, $conf, $tform_def_file;
-
-		// Loading template classes and initialize template
-		if(!is_object($app->tpl)) $app->uses('tpl');
-		if(!is_object($app->tform)) $app->uses('tform');
-
-		$app->tpl->newTemplate("tabbed_form.tpl.htm");
-
-		// Load table definition from file
-		$app->tform->loadFormDef($tform_def_file);
-
-		// Importing ID
-		$this->id = $_SESSION['s']['user']['userid'];
-		$_POST['id'] = $_SESSION['s']['user']['userid'];
-
-		if(count($_POST) > 1) {
-			$this->dataRecord = $_POST;
-			$this->onSubmit();
-		} else {
-			$this->onShow();
-		}
-	}
-
-	function onBeforeInsert() {
-		global $app, $conf;
-
-		if(!in_array($this->dataRecord['startmodule'], $this->dataRecord['modules'])) {
-			$app->tform->errorMessage .= $app->tform->wordbook['startmodule_err'];
-		}
-	}
-
-	function onInsert() {
-		die('No inserts allowed.');
-	}
-
-	function onBeforeUpdate() {
-		global $app, $conf;
-
-		if($conf['demo_mode'] == true && $this->id <= 3) $app->tform->errorMessage .= 'This function is disabled in demo mode.';
-
-		if(@is_array($this->dataRecord['modules']) && !in_array($this->dataRecord['startmodule'], $this->dataRecord['modules'])) {
-			$app->tform->errorMessage .= $app->tform->wordbook['startmodule_err'];
-		}
-	}
-
-	function updateSessionTheme() {
-		global $app, $conf;
-
-		if($this->dataRecord['app_theme'] != 'default') {
-			$tmp_path = ISPC_THEMES_PATH."/".$this->dataRecord['app_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
-				$this->dataRecord['app_theme'] = 'default';
-			}
-		}
-		if($this->dataRecord['app_theme'] != $_SESSION['s']['user']['theme']) $this->_theme_changed = true;
-		$_SESSION['s']['theme'] = $this->dataRecord['app_theme'];
-		$_SESSION['s']['user']['theme'] = $_SESSION['s']['theme'];
-		$_SESSION['s']['user']['app_theme'] = $_SESSION['s']['theme'];
-	}
-
-	function onAfterInsert() {
-		$this->onAfterUpdate();
-	}
-
-	function onAfterUpdate() {
-		
-		$this->updateSessionTheme();
-		
-		if($this->_theme_changed == true) {
-			// not the best way, but it works
-			header('Content-Type: text/html');
-			print '<script type="text/javascript">document.location.reload();</script>';
-			exit;
-		}
-		//else parent::onShow();
-	}
-
-
-}
-
-$page = new page_action;
-$page->onLoad();
-
-?>
diff --git a/interface/web/tools/lib/lang/ar_interface.lng b/interface/web/tools/lib/lang/ar_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/ar_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/ar_usersettings.lng b/interface/web/tools/lib/lang/ar_usersettings.lng
index 4ac506ab77c1d084eb975ff864fabc0ffb2ddfd7..c05b94e76e77b6f2c2548b8f3dc9607ba91d228f 100644
--- a/interface/web/tools/lib/lang/ar_usersettings.lng
+++ b/interface/web/tools/lib/lang/ar_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/bg_interface.lng b/interface/web/tools/lib/lang/bg_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/bg_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/bg_usersettings.lng b/interface/web/tools/lib/lang/bg_usersettings.lng
index 838053f5637682cf67fa9987a58e896ac325c5f4..c30dcf37019f205569a250bd4addd21cf6961e6a 100644
--- a/interface/web/tools/lib/lang/bg_usersettings.lng
+++ b/interface/web/tools/lib/lang/bg_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/br_interface.lng b/interface/web/tools/lib/lang/br_interface.lng
deleted file mode 100644
index 95677c4b591df5b53fef1108c767881885b68288..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/br_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Configurações da Interface';
-$wb['interface_desc_txt'] = 'Alterar a interface';
-$wb['language_txt'] = 'Idioma';
-$wb['startmodule_txt'] = 'Módulo Inicial';
-$wb['app_theme_txt'] = 'Tema';
-?>
diff --git a/interface/web/tools/lib/lang/br_usersettings.lng b/interface/web/tools/lib/lang/br_usersettings.lng
index cb3ae2dc4f82eed3915a33c5e4a10d53ba5d423d..e254e81a4f3005f3de39a18410d6af66b72f169e 100644
--- a/interface/web/tools/lib/lang/br_usersettings.lng
+++ b/interface/web/tools/lib/lang/br_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Gerar Senha';
 $wb['repeat_password_txt'] = 'Repetir Senha';
 $wb['password_mismatch_txt'] = 'As senhas não coincidem.';
 $wb['password_match_txt'] = 'As senhas coincidem.';
+$wb['language_txt'] = 'Idioma';
+$wb['startmodule_txt'] = 'Módulo Inicial';
+$wb['app_theme_txt'] = 'Tema';
 ?>
diff --git a/interface/web/tools/lib/lang/ca_interface.lng b/interface/web/tools/lib/lang/ca_interface.lng
deleted file mode 100644
index b252103fd908f4022a457e2faca119739c96dc90..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/ca_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Paramètres d\'interface';
-$wb['interface_desc_txt'] = 'Modifier votre interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Page d\'accueil';
-$wb['app_theme_txt'] = 'Interface';
-?>
diff --git a/interface/web/tools/lib/lang/ca_usersettings.lng b/interface/web/tools/lib/lang/ca_usersettings.lng
index fa40272aa08c094150913e5a3194e2cda2356128..4705660b9e1489cdd8fdcdaadd22561a4892d410 100644
--- a/interface/web/tools/lib/lang/ca_usersettings.lng
+++ b/interface/web/tools/lib/lang/ca_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Générer mot de passe';
 $wb['repeat_password_txt'] = 'Retaper le mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Page d\'accueil';
+$wb['app_theme_txt'] = 'Interface';
 ?>
diff --git a/interface/web/tools/lib/lang/cz_interface.lng b/interface/web/tools/lib/lang/cz_interface.lng
deleted file mode 100644
index 507b7c3cbeda904058d89d4929dfed78d349fa87..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/cz_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Nastavení rozhraní';
-$wb['interface_desc_txt'] = 'Možnost úpravy rozhraní';
-$wb['language_txt'] = 'Jazyk';
-$wb['startmodule_txt'] = 'Výchozí modul po přihlášení';
-$wb['app_theme_txt'] = 'Výchozí grafické téma';
-?>
diff --git a/interface/web/tools/lib/lang/cz_usersettings.lng b/interface/web/tools/lib/lang/cz_usersettings.lng
index ab76b2261ddba6e3de82efe75c06f8472e4c07fb..f447299e0883850364fd41fd65f986f55ab5cf20 100644
--- a/interface/web/tools/lib/lang/cz_usersettings.lng
+++ b/interface/web/tools/lib/lang/cz_usersettings.lng
@@ -9,4 +9,7 @@ $wb['repeat_password_txt'] = 'Opakujte heslo';
 $wb['password_mismatch_txt'] = 'Hesla se neshodují.';
 $wb['password_match_txt'] = 'Hesla se shodují.';
 $wb['password_txt'] = 'Heslo';
+$wb['language_txt'] = 'Jazyk';
+$wb['startmodule_txt'] = 'Výchozí modul po přihlášení';
+$wb['app_theme_txt'] = 'Výchozí grafické téma';
 ?>
diff --git a/interface/web/tools/lib/lang/de_interface.lng b/interface/web/tools/lib/lang/de_interface.lng
deleted file mode 100644
index 2af008f7639d2806c904323588c719ba096c8605..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/de_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Benutzeroberflächen Einstellungen';
-$wb['interface_desc_txt'] = 'Passen Sie die Benutzeroberfläche für sich an';
-$wb['language_txt'] = 'Sprache';
-$wb['startmodule_txt'] = 'Startmodul';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/de_usersettings.lng b/interface/web/tools/lib/lang/de_usersettings.lng
index c643d38ff4e49bd5ba909380cf4af702715de985..dd5fefffae16a756fc596ae7566cedefe27d495f 100644
--- a/interface/web/tools/lib/lang/de_usersettings.lng
+++ b/interface/web/tools/lib/lang/de_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Passwort erzeugen';
 $wb['repeat_password_txt'] = 'Passwort wiederholen';
 $wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
 $wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
+$wb['language_txt'] = 'Sprache';
+$wb['startmodule_txt'] = 'Startmodul';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/dk_interface.lng b/interface/web/tools/lib/lang/dk_interface.lng
deleted file mode 100644
index cc17dd2f5c5c9e04c67f11a66d8d04de0c6c5f58..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/dk_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Indstillinger';
-$wb['interface_desc_txt'] = 'Ændre din grænseflade';
-$wb['language_txt'] = 'Sprog';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/dk_usersettings.lng b/interface/web/tools/lib/lang/dk_usersettings.lng
index 9398f2626ade1697b6ce74f5c4db00421a8c1c1f..341d9db757b08e847b3d0aa5b7ece8781959764a 100644
--- a/interface/web/tools/lib/lang/dk_usersettings.lng
+++ b/interface/web/tools/lib/lang/dk_usersettings.lng
@@ -9,4 +9,7 @@ $wb['repeat_password_txt'] = 'Gentage Adgangskode';
 $wb['password_mismatch_txt'] = 'Adgangskoderne stemmer ikke overens.';
 $wb['password_match_txt'] = 'Adgangskoderne stemmer overens.';
 $wb['password_txt'] = 'Password';
+$wb['language_txt'] = 'Sprog';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/el_interface.lng b/interface/web/tools/lib/lang/el_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/el_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/el_usersettings.lng b/interface/web/tools/lib/lang/el_usersettings.lng
index 57e8bcb17a2b7dfc6677e58efbda065b480fd12a..68ddcd657c44dac297d32edcc570ceb6bd06b10c 100644
--- a/interface/web/tools/lib/lang/el_usersettings.lng
+++ b/interface/web/tools/lib/lang/el_usersettings.lng
@@ -9,4 +9,6 @@ $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['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/en_interface.lng b/interface/web/tools/lib/lang/en_interface.lng
deleted file mode 100644
index 7cb0e2d8bc6b9b88da4863cc9d41234622956853..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/en_interface.lng
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-$wb["interface_head_txt"] = 'Interface Settings';
-$wb["interface_desc_txt"] = 'Modify your interface';
-$wb["language_txt"] = 'Language';
-$wb["startmodule_txt"] = 'Startmodule';
-$wb["app_theme_txt"] = 'Design';
-$wb['startmodule_empty'] = 'Startmodule empty.';
-$wb['startmodule_regex'] = 'Invalid chars in Startmodule.';
-$wb['app_theme_empty'] = 'App theme empty.';
-$wb['app_theme_regex'] = 'Invalid chars in App theme.';
-?>
\ No newline at end of file
diff --git a/interface/web/tools/lib/lang/en_usersettings.lng b/interface/web/tools/lib/lang/en_usersettings.lng
index 79c7437cb1b8882a75b3b3fc8ade2aeebcf4043f..601ae420ffb4120572a670e778a1887328a43fa4 100644
--- a/interface/web/tools/lib/lang/en_usersettings.lng
+++ b/interface/web/tools/lib/lang/en_usersettings.lng
@@ -9,4 +9,11 @@ $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['startmodule_empty'] = 'Startmodule empty.';
+$wb['startmodule_regex'] = 'Invalid chars in Startmodule.';
+$wb['app_theme_empty'] = 'App theme empty.';
+$wb['app_theme_regex'] = 'Invalid chars in App theme.';
 ?>
diff --git a/interface/web/tools/lib/lang/es_interface.lng b/interface/web/tools/lib/lang/es_interface.lng
deleted file mode 100644
index 87b94e4c4a7b6e3876b3429c299eaaaa83a5876d..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/es_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Configuración de la interfaz';
-$wb['interface_desc_txt'] = 'Modifique su interfaz';
-$wb['language_txt'] = 'Idioma';
-$wb['startmodule_txt'] = 'Módulo de inicio';
-$wb['app_theme_txt'] = 'Diseño';
-?>
diff --git a/interface/web/tools/lib/lang/es_usersettings.lng b/interface/web/tools/lib/lang/es_usersettings.lng
index 9b2de57bfbd3bcf118bddf3f7113d9f57a47812b..43a181a11c7337042c0faada5357b30b53aae228 100644
--- a/interface/web/tools/lib/lang/es_usersettings.lng
+++ b/interface/web/tools/lib/lang/es_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generar contraseña';
 $wb['repeat_password_txt'] = 'Repetir contraseña';
 $wb['password_mismatch_txt'] = 'Las contraseñas no coinciden.';
 $wb['password_match_txt'] = 'Las contraseñas coinciden.';
+$wb['language_txt'] = 'Idioma';
+$wb['startmodule_txt'] = 'Módulo de inicio';
+$wb['app_theme_txt'] = 'Diseño';
 ?>
diff --git a/interface/web/tools/lib/lang/fi_interface.lng b/interface/web/tools/lib/lang/fi_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/fi_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/fi_usersettings.lng b/interface/web/tools/lib/lang/fi_usersettings.lng
index 8267c8117a57f1969b107d87d015a5c53bd6773d..91d71739537e6d663f4a6e9fc043ab5f73af5fed 100644
--- a/interface/web/tools/lib/lang/fi_usersettings.lng
+++ b/interface/web/tools/lib/lang/fi_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/fr_interface.lng b/interface/web/tools/lib/lang/fr_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/fr_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/fr_usersettings.lng b/interface/web/tools/lib/lang/fr_usersettings.lng
index bafccd3b97ba4a51252e6ab9a8932d07ff1856f0..b398e76e352ccb6b168473b29f74bcbf6c5b932f 100644
--- a/interface/web/tools/lib/lang/fr_usersettings.lng
+++ b/interface/web/tools/lib/lang/fr_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Générer un mot de passe';
 $wb['repeat_password_txt'] = 'Répéter le mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
+$wb['language_txt'] = 'Language';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/hr_interface.lng b/interface/web/tools/lib/lang/hr_interface.lng
deleted file mode 100644
index 5cc9815a10c76d57884aa2056a06b2f765fc86e4..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/hr_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Postavke teme';
-$wb['interface_desc_txt'] = 'Podesi temu';
-$wb['language_txt'] = 'Jezik';
-$wb['startmodule_txt'] = 'Početna stranica';
-$wb['app_theme_txt'] = 'Tema';
-?>
diff --git a/interface/web/tools/lib/lang/hr_usersettings.lng b/interface/web/tools/lib/lang/hr_usersettings.lng
index 50759d4883abbc64344f6b8bc4afa9e73fff949a..b707cce4da55bf35f0c771408c92f95fd0464457 100644
--- a/interface/web/tools/lib/lang/hr_usersettings.lng
+++ b/interface/web/tools/lib/lang/hr_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generiraj Å¡ifru';
 $wb['repeat_password_txt'] = 'Ponovi Å¡ifru';
 $wb['password_mismatch_txt'] = 'Šifre nisu identične.';
 $wb['password_match_txt'] = 'Šifre su identične.';
+$wb['language_txt'] = 'Jezik';
+$wb['startmodule_txt'] = 'Početna stranica';
+$wb['app_theme_txt'] = 'Tema';
 ?>
diff --git a/interface/web/tools/lib/lang/hu_interface.lng b/interface/web/tools/lib/lang/hu_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/hu_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/hu_usersettings.lng b/interface/web/tools/lib/lang/hu_usersettings.lng
index 49aa75537fc06fa9fd9aaef184b5e16aa5408efd..2a89acf5b5f926929859300cc3e573566b55fc1c 100644
--- a/interface/web/tools/lib/lang/hu_usersettings.lng
+++ b/interface/web/tools/lib/lang/hu_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/id_interface.lng b/interface/web/tools/lib/lang/id_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/id_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/id_usersettings.lng b/interface/web/tools/lib/lang/id_usersettings.lng
index 7b1bc225cad5a6e8d3631332e983cd88e92f5179..760cfe75f244d893433fc863f683093816a11c00 100644
--- a/interface/web/tools/lib/lang/id_usersettings.lng
+++ b/interface/web/tools/lib/lang/id_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/it_interface.lng b/interface/web/tools/lib/lang/it_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/it_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/it_usersettings.lng b/interface/web/tools/lib/lang/it_usersettings.lng
index e75e8d28d2cf550d1893d81053c910d87584e7a3..a1ad8eba871125a2cf17c29a4e70b39f2f2f995d 100644
--- a/interface/web/tools/lib/lang/it_usersettings.lng
+++ b/interface/web/tools/lib/lang/it_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/ja_interface.lng b/interface/web/tools/lib/lang/ja_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/ja_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/ja_usersettings.lng b/interface/web/tools/lib/lang/ja_usersettings.lng
index 443a4510543f83ab235d1e0dcf57a1f4770f5576..291aa94537208f694c4b6e49eabe059d7ac8f085 100644
--- a/interface/web/tools/lib/lang/ja_usersettings.lng
+++ b/interface/web/tools/lib/lang/ja_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/nl_interface.lng b/interface/web/tools/lib/lang/nl_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/nl_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/nl_usersettings.lng b/interface/web/tools/lib/lang/nl_usersettings.lng
index 0a95f7ffa9024dfff4d9db8168f76769a6df4792..909df9dbecf4bcadca6266477ec37b276581f1ee 100644
--- a/interface/web/tools/lib/lang/nl_usersettings.lng
+++ b/interface/web/tools/lib/lang/nl_usersettings.lng
@@ -9,4 +9,7 @@ $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'] = 'Taal';
+$wb['startmodule_txt'] = 'Startmodule';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/pl_interface.lng b/interface/web/tools/lib/lang/pl_interface.lng
deleted file mode 100644
index 0256fab376397535594b29404ab1b4d5cadb7a3e..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/pl_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Ustawienia interfejsu';
-$wb['interface_desc_txt'] = 'Zmień temat interfejsu';
-$wb['language_txt'] = 'Język';
-$wb['startmodule_txt'] = 'Moduł startowy';
-$wb['app_theme_txt'] = 'Temat';
-?>
diff --git a/interface/web/tools/lib/lang/pl_usersettings.lng b/interface/web/tools/lib/lang/pl_usersettings.lng
index 45081f681b6fce1de43062dd7602f154a15a5821..64396df2409dbb08ea741cd5d7ea7551ce5769c1 100644
--- a/interface/web/tools/lib/lang/pl_usersettings.lng
+++ b/interface/web/tools/lib/lang/pl_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Wygeneruj hasło';
 $wb['repeat_password_txt'] = 'Powtórz hasło';
 $wb['password_mismatch_txt'] = 'Hasła się nie zgadzają';
 $wb['password_match_txt'] = 'Hasła się zgadzają';
+$wb['language_txt'] = 'Język';
+$wb['startmodule_txt'] = 'Moduł startowy';
+$wb['app_theme_txt'] = 'Temat';
 ?>
diff --git a/interface/web/tools/lib/lang/pt_interface.lng b/interface/web/tools/lib/lang/pt_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/pt_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/pt_usersettings.lng b/interface/web/tools/lib/lang/pt_usersettings.lng
index 81fd824d303c8845fbe31e5110d226738fbcaad8..4925a3f7286da3e7a1fc9c74205d7dcd4217ccfe 100644
--- a/interface/web/tools/lib/lang/pt_usersettings.lng
+++ b/interface/web/tools/lib/lang/pt_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/ro_interface.lng b/interface/web/tools/lib/lang/ro_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/ro_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/ro_usersettings.lng b/interface/web/tools/lib/lang/ro_usersettings.lng
index fae890fab609e6801b5e57f2de2e5059b37b1f50..8c43550f33cc56729cd5902089e60d21b5732e25 100644
--- a/interface/web/tools/lib/lang/ro_usersettings.lng
+++ b/interface/web/tools/lib/lang/ro_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/ru_interface.lng b/interface/web/tools/lib/lang/ru_interface.lng
deleted file mode 100644
index 91644d5c2b71fcbf9d4bbeb13e3b510d956af1b5..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/ru_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Настройки интерфейса';
-$wb['interface_desc_txt'] = 'Измените свой интерфейс';
-$wb['language_txt'] = 'Язык';
-$wb['startmodule_txt'] = 'Стартовый модуль';
-$wb['app_theme_txt'] = 'Тема';
-?>
diff --git a/interface/web/tools/lib/lang/ru_usersettings.lng b/interface/web/tools/lib/lang/ru_usersettings.lng
index 609b69fdb0ae28b498da62f2050c15caed902e4d..ffa3f3bf03116cf1d8b3cd4b97c38114e4762b28 100644
--- a/interface/web/tools/lib/lang/ru_usersettings.lng
+++ b/interface/web/tools/lib/lang/ru_usersettings.lng
@@ -9,4 +9,9 @@ $wb['generate_password_txt'] = 'Создать пароль';
 $wb['repeat_password_txt'] = 'Повторить пароль';
 $wb['password_mismatch_txt'] = 'Пароли не совпадают.';
 $wb['password_match_txt'] = 'Эти пароли совпадают.';
+$wb['interface_head_txt'] = 'Настройки интерфейса';
+$wb['interface_desc_txt'] = 'Измените свой интерфейс';
+$wb['language_txt'] = 'Язык';
+$wb['startmodule_txt'] = 'Стартовый модуль';
+$wb['app_theme_txt'] = 'Тема';
 ?>
diff --git a/interface/web/tools/lib/lang/se_interface.lng b/interface/web/tools/lib/lang/se_interface.lng
deleted file mode 100644
index 9a66f59e00d79e4940c7c3e50ebda5e7adcfc7a6..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/se_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Gränssnittsinställnignar';
-$wb['interface_desc_txt'] = 'Ändra ditt gränssnitt';
-$wb['language_txt'] = 'Språk';
-$wb['startmodule_txt'] = 'Startmodul';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/se_usersettings.lng b/interface/web/tools/lib/lang/se_usersettings.lng
index 4461fff4968b7df639c080a81b5e9ddf6cb4113d..f6de2dc4eebe227af1be4cfe0e5de3bd5ee7eff1 100644
--- a/interface/web/tools/lib/lang/se_usersettings.lng
+++ b/interface/web/tools/lib/lang/se_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Generera lösenord';
 $wb['repeat_password_txt'] = 'Upprepa lösenord';
 $wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
 $wb['password_match_txt'] = 'Lösenorden matchar';
+$wb['language_txt'] = 'Språk';
+$wb['startmodule_txt'] = 'Startmodul';
+$wb['app_theme_txt'] = 'Design';
 ?>
diff --git a/interface/web/tools/lib/lang/sk_interface.lng b/interface/web/tools/lib/lang/sk_interface.lng
deleted file mode 100644
index aab4fc89ffe72aab7529d850c4e1dc3bbd92dc77..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/sk_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Interface Settings';
-$wb['interface_desc_txt'] = 'Modify your interface';
-$wb['language_txt'] = 'Language';
-$wb['startmodule_txt'] = 'Startmodule';
-$wb['app_theme_txt'] = 'Design';
-?>
diff --git a/interface/web/tools/lib/lang/sk_usersettings.lng b/interface/web/tools/lib/lang/sk_usersettings.lng
index 4c8bcb900e742c83a7b65aa4c29293be8f866f1a..e00f5e664b1bb4bcb71a6614446dec2530c1aa21 100644
--- a/interface/web/tools/lib/lang/sk_usersettings.lng
+++ b/interface/web/tools/lib/lang/sk_usersettings.lng
@@ -9,4 +9,7 @@ $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';
 ?>
diff --git a/interface/web/tools/lib/lang/tr_interface.lng b/interface/web/tools/lib/lang/tr_interface.lng
deleted file mode 100644
index 2384c71107a76610744f471cb5f78bf290e6947c..0000000000000000000000000000000000000000
--- a/interface/web/tools/lib/lang/tr_interface.lng
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$wb['interface_head_txt'] = 'Arayüz Ayarları';
-$wb['interface_desc_txt'] = 'Arayüzü Düzenle';
-$wb['language_txt'] = 'Dil';
-$wb['startmodule_txt'] = 'Başlangıç modülü';
-$wb['app_theme_txt'] = 'Tasarım';
-?>
diff --git a/interface/web/tools/lib/lang/tr_usersettings.lng b/interface/web/tools/lib/lang/tr_usersettings.lng
index fa2eff63d7419c17c4272505934e530214eae709..a1fd7c56d4cddc2fd47065819f46c37917369bfb 100644
--- a/interface/web/tools/lib/lang/tr_usersettings.lng
+++ b/interface/web/tools/lib/lang/tr_usersettings.lng
@@ -9,4 +9,7 @@ $wb['generate_password_txt'] = 'Parola Ãœret';
 $wb['repeat_password_txt'] = 'Parola Onayı';
 $wb['password_mismatch_txt'] = 'Parola ile onayı aynı değil.';
 $wb['password_match_txt'] = 'Parola ile onayı aynı.';
+$wb['language_txt'] = 'Dil';
+$wb['startmodule_txt'] = 'Başlangıç modülü';
+$wb['app_theme_txt'] = 'Tasarım';
 ?>
diff --git a/interface/web/tools/lib/module.conf.php b/interface/web/tools/lib/module.conf.php
index 617ab0b6cd6d354e96499bfecbf90b8700b86d0c..5911cdbebfe822898c5968bfe663bdb2746886d8 100644
--- a/interface/web/tools/lib/module.conf.php
+++ b/interface/web/tools/lib/module.conf.php
@@ -5,7 +5,7 @@ global $conf;
 $module['name']  = 'tools';
 $module['title']  = 'top_menu_tools';
 $module['template']  = 'module.tpl.htm';
-$module['startpage']  = 'tools/index.php';
+$module['startpage']  = 'tools/user_settings.php';
 $module['tab_width']    = '60';
 $module['order']    = '80';
 
@@ -13,7 +13,7 @@ $module['order']    = '80';
 //**** Change User password
 $items = array();
 
-$items[] = array(   'title'  => 'Password and Language',
+$items[] = array(   'title'  => 'User Settings',
 	'target'  => 'content',
 	'link' => 'tools/user_settings.php',
 	'html_id'   => 'user_settings');
@@ -24,23 +24,4 @@ $module['nav'][] = array(   'title' => 'User Settings',
 	'items' => $items);
 
 unset($items);
-
-//**** Change interface settings + load settings page of the activated theme
-$items = array();
-
-$items[] = array(   'title'     => 'Interface',
-	'target'  => 'content',
-	'link' => 'tools/interface_settings.php',
-	'html_id'   => 'interface_settings');
-
-if(file_exists(ISPC_WEB_PATH.'/tools/lib/interface.d/tpl_' . $_SESSION['s']['user']['app_theme'] . '.menu.php')) include_once ISPC_WEB_PATH.'/tools/lib/interface.d/tpl_' . $_SESSION['s']['user']['app_theme'] . '.menu.php';
-
-$module['nav'][] = array( 'title' => 'Interface',
-	'open'  => 1,
-	'items' => $items);
-
-unset($items);
-
-
-
 ?>
diff --git a/interface/web/tools/templates/interface_settings.htm b/interface/web/tools/templates/interface_settings.htm
deleted file mode 100644
index 6767287206140bca39b52268de0d75be409fa621..0000000000000000000000000000000000000000
--- a/interface/web/tools/templates/interface_settings.htm
+++ /dev/null
@@ -1,22 +0,0 @@
-            <!-- TODO: If user theme change is activated -->
-            <div class="form-group">
-                <label for="app_theme" class="col-sm-3 control-label">{tmpl_var name='app_theme_txt'}</label>
-                <div class="col-sm-9"><select name="app_theme" id="app_theme" class="form-control">
-                    {tmpl_var name='app_theme'}
-                </select></div>
-            </div>
-            <!-- TODO: Limit to activated modules -->
-            <div class="form-group">
-                <label for="startmodule" class="col-sm-3 control-label">{tmpl_var name='startmodule_txt'}</label>
-                <div class="col-sm-9"><select name="startmodule" id="startmodule" class="form-control">
-                    {tmpl_var name='startmodule'}
-                </select></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="tools/interface_settings.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="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
diff --git a/interface/web/tools/templates/user_settings.htm b/interface/web/tools/templates/user_settings.htm
index 4fa1c9de34d0b2007d6923f32f4f147f2957e8ad..a620f419c54d58ed5ad4e3b044c8410b10d46160 100644
--- a/interface/web/tools/templates/user_settings.htm
+++ b/interface/web/tools/templates/user_settings.htm
@@ -1,41 +1,58 @@
-			<div class="form-group">
-                <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
-                <div class="col-sm-9">
-				<div class="input-group">
-					<input type="password" name="passwort" id="passwort" value="{tmpl_var name='passwort'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');" />
-					<span class="input-group-btn">
-						<button class="btn btn-default" type="button" onclick="generatePassword('passwort','repeat_password');">{tmpl_var name='generate_password_txt'}</button>
-					</span>
-				</div>
-				</div>
-            </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
-                <div class="col-sm-9 checkbox">
-                <div id="passBar"></div>
-                <span id="passText">&nbsp;</span>
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
-                <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off"  onkeyup="checkPassMatch('passwort','repeat_password');" /></div></div>
-            <div class="form-group">
-				<div class="col-sm-offset-3 col-sm-9">
-					<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
-					<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
-				</div>
-			</div>
-            <div class="form-group">
-                <label for="language" class="col-sm-3 control-label">{tmpl_var name='language_txt'}</label>
-                <div class="col-sm-9"><select name="language" id="language" class="form-control flags">
-                    {tmpl_var name='language'}
-                </select></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="tools/user_settings.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="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
+<div class="form-group">
+  <label for="passwort" class="col-sm-3 control-label">{tmpl_var name='password_txt'}</label>
+  <div class="col-sm-9">
+    <div class="input-group">
+      <input type="password" name="passwort" id="passwort" value="{tmpl_var name='passwort'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');" />
+      <span class="input-group-btn">
+      <button class="btn btn-default" type="button" onclick="generatePassword('passwort','repeat_password');">{tmpl_var name='generate_password_txt'}</button>
+      </span>
+    </div>
+  </div>
+</div>
+<div class="form-group">
+  <label class="col-sm-3 control-label">{tmpl_var name='password_strength_txt'}</label>
+  <div class="col-sm-9 checkbox">
+    <div id="passBar"></div>
+    <span id="passText">&nbsp;</span>
+  </div>
+</div>
+<div class="form-group">
+  <label for="repeat_password" class="col-sm-3 control-label">{tmpl_var name='repeat_password_txt'}</label>
+  <div class="col-sm-9"><input type="password" name="repeat_password" id="repeat_password" value="" class="form-control" autocomplete="off"  onkeyup="checkPassMatch('passwort','repeat_password');" /></div>
+</div>
+<div class="form-group">
+  <div class="col-sm-offset-3 col-sm-9">
+    <div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+    <div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
+  </div>
+</div>
+<div class="form-group">
+  <label for="language" class="col-sm-3 control-label">{tmpl_var name='language_txt'}</label>
+  <div class="col-sm-9"><select name="language" id="language" class="form-control flags">
+    {tmpl_var name='language'}
+    </select>
+  </div>
+</div>
+<!-- TODO: If user theme change is activated -->
+<div class="form-group">
+  <label for="app_theme" class="col-sm-3 control-label">{tmpl_var name='app_theme_txt'}</label>
+  <div class="col-sm-9"><select name="app_theme" id="app_theme" class="form-control">
+    {tmpl_var name='app_theme'}
+    </select>
+  </div>
+</div>
+<!-- TODO: Limit to activated modules -->
+<div class="form-group">
+  <label for="startmodule" class="col-sm-3 control-label">{tmpl_var name='startmodule_txt'}</label>
+  <div class="col-sm-9"><select name="startmodule" id="startmodule" class="form-control">
+    {tmpl_var name='startmodule'}
+    </select>
+  </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="tools/user_settings.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="tools/index.php">{tmpl_var name='btn_cancel_txt'}</button>
+  </div>
+</div>
diff --git a/interface/web/tools/user_settings.php b/interface/web/tools/user_settings.php
index 5c3876fb864d8036338dda594437adcf0208d765..03c0b6a7e2ce23cd7ea9a24d7d8396d2f6aa4d5d 100644
--- a/interface/web/tools/user_settings.php
+++ b/interface/web/tools/user_settings.php
@@ -86,22 +86,50 @@ class page_action extends tform_actions {
 		if($_POST['passwort'] != $_POST['repeat_password']) {
 			$app->tform->errorMessage = $app->tform->lng('password_mismatch');
 		}
-		
+
 		$language = $app->functions->check_language($_POST['language']);
 		$_SESSION['s']['user']['language'] = $language;
 		$_SESSION['s']['language'] = $language;
 	}
-	
+
 	function onAfterUpdate() {
 		global $app;
-		
+
 		if($_POST['passwort'] != '') {
 			$tmp_user = $app->db->queryOneRecord("SELECT passwort FROM sys_user WHERE userid = ?", $_SESSION['s']['user']['userid']);
 			$_SESSION['s']['user']['passwort'] = $tmp_user['passwort'];
 			unset($tmp_user);
 		}
+		$this->updateSessionTheme();
+
+		if($this->_theme_changed == true) {
+			// not the best way, but it works
+			header('Content-Type: text/html');
+			print '<script type="text/javascript">document.location.reload();</script>';
+			exit;
+		}
 	}
+	var $_theme_changed = false;
 
+	function updateSessionTheme() {
+		global $app, $conf;
+
+		if($this->dataRecord['app_theme'] != 'default') {
+			$tmp_path = ISPC_THEMES_PATH."/".$this->dataRecord['app_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
+				$this->dataRecord['app_theme'] = 'default';
+			}
+		}
+		if($this->dataRecord['app_theme'] != $_SESSION['s']['user']['theme']) $this->_theme_changed = true;
+		$_SESSION['s']['theme'] = $this->dataRecord['app_theme'];
+		$_SESSION['s']['user']['theme'] = $_SESSION['s']['theme'];
+		$_SESSION['s']['user']['app_theme'] = $_SESSION['s']['theme'];
+	}
+
+	function onAfterInsert() {
+		$this->onAfterUpdate();
+	}
 
 }
 
diff --git a/remoting_client/API-docs/content.html b/remoting_client/API-docs/content.html
index c8eb8151641e2e921e813b5751516b7b77ff53f4..00590071d584d34c9c1205e276f6a44d9165579d 100644
--- a/remoting_client/API-docs/content.html
+++ b/remoting_client/API-docs/content.html
@@ -1,44 +1,159 @@
 <!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">
-
-  
-  <style type="text/css">
-<!--
-.command {
-    padding: 1em;
-    border: 1px dashed #2f6fab;
-    color: black;
-    background-color: #f9f9f9;
-    line-height: 1.1em;
-        font-family: Courier New, Courier, mono;
-        font-size: 12px;
-        font-style: italic;
-}
-
-.system {
-    color: black;
-        font-family: Courier New, Courier, mono;
-        font-size: 12px;
-        font-style: italic;
-}
-
-.highlight {
-    color: #FF0000;
-	font-family: Georgia, "Times New Roman", Times, serif;
-	font-size: 12px;
-	text-decoration: underline;
-}
--->
- </style></head><body style="color: rgb(0, 0, 0); background-color:#FFFFFF;;" alink="#804080" link="#804080" vlink="#603060">
-<div style="padding:40px">
-<h2>Home</h2>
-<br>
-ISPConfig 3 remote API documentation.
-</div>
-
-</body></html>
+<html>
+
+<head>
+    <title>ISPCOnfig 3 remote API documentation</title>
+
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+
+    <style type="text/css">
+        <!--
+        .command {
+            padding: 1em;
+            border: 1px dashed #2f6fab;
+            color: black;
+            background-color: #f9f9f9;
+            line-height: 1.1em;
+            font-family: Courier New, Courier, mono;
+            font-size: 12px;
+            font-style: italic;
+        }
+
+        .notes {
+            color: #17075c;
+            font-family: Georgia, "Times New Roman", Times, serif;
+            font-size: 14px;
+
+        }
+
+        .preface {
+            color: black;
+            font-family: Georgia, "Times New Roman", Times, serif;
+            font-size: 14px;
+        }
+
+        a:link,
+        a:visited {
+            text-decoration: none;
+        }
+
+
+        a:hover,
+        a:active {
+            text-decoration: underline;
+        }
+
+        .question {
+            font-size: 14px;
+            padding: 0em 0em 0em 1em;
+        }
+
+        .answer {
+            padding: 0em 0em 0em 2em;
+        }
+        -->
+    </style>
+</head>
+
+<body>
+    <div style="padding:40px">
+        <h2>ISPConfig 3 Remote API Documentation</h2>
+        <div class="notes">
+            <h3>Notes</h3>
+
+            <p class="preface">These notes are new for v3.2 and the content will change.<br />
+                This is currently in FAQ format, because the topics seem to be Frequently Asked Questions.<br />
+                Over time, notes will also be added to individual function pages.<br />
+                If you would like to help with this process, please visit the forum, and add your comments to <a
+                    href="https://www.howtoforge.com/community/threads/api-doc-you-can-help.84944/">this thread</a>
+                which has been created for this purpose.<br />
+                Thank you for your patience and collaboration.
+            </p>
+
+            <h4 class="question">What do we do to get started with API calls?</h4>
+            <div class="answer">
+                <p>Create a "Remote" User in the ISPConfig UI. Check boxes there to assign permissions for
+                    the kinds of queries that can be processed by that user.</p>
+                <p>Almost all API queries require a session_id. To get that, call the login function, sending the remote
+                    username and password. The response will be a single value which will be used as your session ID for
+                    a limited time period for all other requests.</p>
+                <p>Finishing with a logout request is recommended, but optional since the session IDs expire.</p>
+            </div>
+
+            <h4 class="question">How do I get all records with a _get request?</h4>
+            <div class="answer">Rather than using a single integer ID as a primary key selector (domain_id, group_id,
+                etc), use -1. Where the primary key for a _get request is a string, use an empty array ' [] '. Do not
+                use an empty string ' "" ', which is itself a valid string and will/should return an empty array result.
+            </div>
+
+            <h4 class="question">Are defaults used if we only send some of the defined parameters?</h4>
+            <div class="answer">No, there are no default values except where explicitly noted. For example, in the
+                system_config_get function, the key element is optional because it is documented as defaulting to an
+                empty string. For all requests, except where documented otherwise, send all documented parameters.</div>
+
+            <h4 class="question">Examples are provided for SOAP, why not for REST?</h4>
+            <div class="answer">The REST API supports all functions and can be exactly substituted for SOAP examples.
+                For all functions, the request and response parameters are the same for SOAP and REST.</div>
+
+            <h4 class="question">Are there examples for cURL? Python? C#? JavaScript? (anything else...)</h4>
+            <div class="answer">The documentation details request and response parameters which can be passed using any
+                language or toolchain. The URL always includes the function name. Queries are always sent via POST. The
+                result is always in the same JSON format. Use Postman or another tool to generate code in your preferred
+                languages.</div>
+
+            <h4 class="question">I created a new record (domain, mail user, etc). Why isn't it showing in the UI?</h4>
+            <div class="answer">If a parent ID is invalid, a transaction may be accepted, with a record created under a
+                different parent entity.
+            </div>
+
+            <h4 class="question">Why does a response show a successful result when there is no data?</h4>
+            <div class="answer">Carefully check the names and values being sent. Invalid name/value pairs are ignored. A
+                request that does not include a valid request paramenter is requesting nothing, so the return value is
+                nothing. The query was successful, and returned no data.</div>
+
+            <h4 class="question">Why are parameters $session_id and others being ignored?</h4>
+            <div class="answer">The documentation shows PHP function syntax. SOAP and REST parameters do not include the
+                leading $dollar-sign</div>
+
+            <h4 class="question">Key Concept:</h4>
+            <div class="answer">Based on the above you may be thinking there is very little error checking with this
+                API. That is correct. As noted by Jesse Norell: <blockquote>"The api is largely just an interface to the
+                    database tables, and will usually accept what you send, whether that's consistent/correct or not. It
+                    can be a feature, eg. you can create a mail alias first before creating the mailbox to which it
+                    forwards, but it does mean you have a lot more testing to do on your side because you can't just
+                    rely on an error to be thrown if you send inconsistent data."</blockquote>
+            </div>
+
+            <h4 class="question">What is sys_userid and sys_groupid?</h4>
+            <div class="answer">
+                <p>These fields are referenced often in the developer forum and in code, usually with some confusion.
+                    These internal database fields are used in SQL queries to determine parent/child client
+                    relationships. The fields are not passed to API calls, with the exception of one function,
+                    client_get_id which is a convenience function to return the client_id for a sys_userid. In the past
+                    other functions included these keys in the request. Now, when a function request includes a
+                    client_id, at query time a lookup is done to get the internal sys_userid for that client.</p>
+                <p>The sys_userid can identify the creator of a record. This may be the ID of the local/UI user or the
+                    remote/API user that is logging in to create records. If a client record is created without a
+                    reseller, both the sys_userid and the sys_groupid are the same user ID.</p>
+                <p>If a client record is created with a reseller, the meaning of the fields is completely different. The
+                    sys_userid is not a logged-in user ID. It is a new ID that represents the client under the reseller.
+                    The sys_groupid for a client under a reseller is (a foreign-key to) the sys_userid of the client
+                    record for the reseller. In this scenario, the sys_groupid establishes a child-to-parent
+                    relationship.</p>
+            </div>
+
+            <h4 class="question">What domains are the 'domains_' functions operating on?</h4>
+            <div class="answer">The 'domains_' functions update the 'domains' table, which is used by the domain limit
+                module. Clients and resellers are restricted to the domains in this table. To activate domain limits, go
+                to System > Interface > Main Config, then to the Domains tab. Logout/in. Then go to Sites, Add or Edit a
+                site, the "Domain" dropdown list uses this table.</div>
+
+            <h4 class="question">What will be here next?</h4>
+            <div class="answer">Maybe something you write... </div>
+
+        </div>
+    </div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/remoting_client/API-docs/mail_user_add.html b/remoting_client/API-docs/mail_user_add.html
index a893e24e3f72724372f32a968b5a66d8840604ee..dab28350577e0a3197dd54019d1608ddaf8590f8 100644
--- a/remoting_client/API-docs/mail_user_add.html
+++ b/remoting_client/API-docs/mail_user_add.html
@@ -38,7 +38,7 @@
 <p class="margin"> autoresponder_end_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_text&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> autoresponder_subject&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
-<p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('y','a','n')</span>)</p>
 <p class="margin"> custom_mailfilter&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> postfix&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> access&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
diff --git a/remoting_client/API-docs/mail_user_update.html b/remoting_client/API-docs/mail_user_update.html
index 8cb900fb40ccd88d3e5c45a9c7c01faf2e405a23..d30b9323934e31125d50495a4d0b4ca6299fc7c6 100644
--- a/remoting_client/API-docs/mail_user_update.html
+++ b/remoting_client/API-docs/mail_user_update.html
@@ -36,7 +36,7 @@
 <p class="margin"> autoresponder_start_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_end_date&nbsp;&nbsp;(<span class="paratype">datetime</span>)</p>
 <p class="margin"> autoresponder_text&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
-<p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> move_junk&nbsp;&nbsp;(<span class="paratype">enum('y','a','n')</span>)</p>
 <p class="margin"> custom_mailfilter&nbsp;&nbsp;(<span class="paratype">mediumtext</span>)</p>
 <p class="margin"> postfix&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="margin"> access&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
diff --git a/remoting_client/examples/client_change_password.php b/remoting_client/examples/client_change_password.php
index 5e20b11bc49773daa09ea29d8a27197be0e1f414..9782cc95690cda5126847dce24d375b2bfbb0e93 100644
--- a/remoting_client/examples/client_change_password.php
+++ b/remoting_client/examples/client_change_password.php
@@ -15,11 +15,21 @@ try {
 	}
 
 	//* Set the function parameters.
-	$domain = 'test.int';
 
-	$record_record = $client->mail_domain_get_by_domain($session_id, $domain);
+    $client_id = 1;
+	$new_password = 'YourNewPassword';
+
+    $success = $client->client_change_password($session_id, $client_id, $new_password);
+
+	if ($success == 1)
+	{
+        echo "Password has been changed successfully";
+	}
+	else
+	{
+		echo "Error";
+	}
 
-	print_r($record_record);
 	echo "<br>";
 
 	if($client->logout($session_id)) {
diff --git a/security/apache_directives.blacklist b/security/apache_directives.blacklist
index 6dd376d643cac4d52f2885b9da68d043b08821f2..1c6d41f21091faf37c591704a21f339bae8d1869 100644
--- a/security/apache_directives.blacklist
+++ b/security/apache_directives.blacklist
@@ -1,3 +1,4 @@
 /^\s*(LoadModule|LoadFile|Include|IncludeOptional)(\s+|[\\\\])/mi
 /^\s*(SuexecUserGroup|suPHP_UserGroup|suPHP_PHPPath|suPHP_ConfigPath)(\s+|[\\\\])/mi
-/^\s*(FCGIWrapper|FastCgiExternalServer)(\s+|[\\\\])/mi
\ No newline at end of file
+/^\s*(FCGIWrapper|FastCgiExternalServer)(\s+|[\\\\])/mi
+/^\s*(CustomLog|ErrorLog)(\s+|[\\\\])/mi
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index fe73487fa05c569612ddbe5f3530b3c47d9636b1..f65f47df90cf5df9868aecd50cb1d2a593f3fade 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -1,4 +1,3 @@
-
 ######################################################
 # This virtual host contains the configuration
 # for the ISPConfig apps vhost
@@ -15,6 +14,56 @@
     SetHandler None
   </FilesMatch>
 
+  # SSL Configuration
+  <tmpl_var name="ssl_comment">SSLEngine On
+  <tmpl_if name='apache_version' op='>=' value='2.3.16' format='version'>
+  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv3 -TLSv1 -TLSv1.1
+  <tmpl_else>
+  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv2 -SSLv3
+  </tmpl_if>
+  <tmpl_var name="ssl_comment">SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt
+  <tmpl_var name="ssl_comment">SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
+  <tmpl_var name="ssl_bundle_comment">SSLCACertificateFile /usr/local/ispconfig/interface/ssl/ispserver.bundle
+
+  <tmpl_var name="ssl_comment">SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+  <tmpl_var name="ssl_comment">SSLHonorCipherOrder On
+  <tmpl_if name='apache_version' op='>=' value='2.4.3' format='version'>
+  <tmpl_var name="ssl_comment">SSLCompression Off
+  </tmpl_if>
+  <tmpl_if name='apache_version' op='>=' value='2.4.11' format='version'>
+  <tmpl_var name="ssl_comment">SSLSessionTickets Off
+  </tmpl_if>
+
+  <IfModule mod_headers.c>
+    # ISPConfig 3.1 currently requires unsafe-line for both scripts and styles, as well as unsafe-eval
+    Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'"
+    <tmpl_var name="ssl_comment">Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'; upgrade-insecure-requests"
+    Header set X-Content-Type-Options: nosniff
+    Header set X-Frame-Options: SAMEORIGIN
+    Header set X-XSS-Protection: "1; mode=block"
+    Header always edit Set-Cookie (.*) "$1; HTTPOnly"
+    <tmpl_var name="ssl_comment">Header always edit Set-Cookie (.*) "$1; Secure"
+    <IfVersion >= 2.4.7>
+        Header setifempty Strict-Transport-Security "max-age=15768000"
+    </IfVersion>
+    <IfVersion < 2.4.7>
+        Header set Strict-Transport-Security "max-age=15768000"
+    </IfVersion>
+    RequestHeader unset Proxy early
+  </IfModule>
+
+  <tmpl_if name='apache_version' op='>=' value='2.3.3' format='version'>
+  <tmpl_var name="ssl_comment">SSLUseStapling On
+  <tmpl_var name="ssl_comment">SSLStaplingResponderTimeout 5
+  <tmpl_var name="ssl_comment">SSLStaplingReturnResponderErrors Off
+  </tmpl_if>
+
+<tmpl_if name='apache_version' op='>=' value='2.3.3' format='version'>
+<IfModule mod_ssl.c>
+  <tmpl_var name="ssl_comment">SSLStaplingCache shmcb:/var/run/ocsp(128000)
+</IfModule>
+</tmpl_if>
+
   <IfModule mod_headers.c>
 	RequestHeader unset Proxy early
   </IfModule>
@@ -55,9 +104,9 @@
     <Directory {tmpl_var name='apps_vhost_dir'}>
 		Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
 		AllowOverride AuthConfig Indexes Limit Options FileInfo
-		<FilesMatch "\.php$">
-			SetHandler fcgid-script
-		</FilesMatch>
+	    <FilesMatch "\.php$">
+		  SetHandler fcgid-script
+	    </FilesMatch>
 		FCGIWrapper {tmpl_var name='apps_vhost_basedir'}/php-fcgi-scripts/apps/.php-fcgi-starter .php
 		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
@@ -78,4 +127,6 @@
   RewriteRule ^/rspamd/(.*) http://127.0.0.1:11334/$1 [P]
 {/tmpl_if}
 
+
+
 </VirtualHost>
diff --git a/server/conf/apache_ispconfig.conf.master b/server/conf/apache_ispconfig.conf.master
index e30ccd6d3bc6235d79902b0472ccb4d13bb8d1b1..040de236257467644fa4c644eb422bb4f2eee7ac 100644
--- a/server/conf/apache_ispconfig.conf.master
+++ b/server/conf/apache_ispconfig.conf.master
@@ -35,6 +35,10 @@ CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m
   </tmpl_if>
 </Directory>
 
+<Directory /var/www>
+  Options -Indexes
+</Directory>
+
 <Directory /var/www/conf>
     AllowOverride None
   <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
diff --git a/server/conf/awstats_index.php.master b/server/conf/awstats_index.php.master
index f7222c968721c87da286dc0ec937e25346bd58cc..b3e694ebbf3441038b45508f8e1e1624c3a0f481 100644
--- a/server/conf/awstats_index.php.master
+++ b/server/conf/awstats_index.php.master
@@ -45,10 +45,21 @@ arsort($awprev);
 $options = "";
 foreach ($awprev as $key => $value)
 {
+
+	if(file_exists($value.'/awsindex.html') && file_exists($value.'/goaindex.html')) {
+		$awstatsindex = 'awsindex.html';
+	} elseif(file_exists($value.'/awsindex.html') && !file_exists($value.'/goaindex.html')) {
+                $awstatsindex = 'awsindex.html';
+	} else {
+		$awstatsindex = 'goaindex.html';
+	}
+
 	if($key == $current) $options .= "<option selected=\"selected\" value=\"{$awstatsindex}\">{$value}</option>\n";
 	else $options .= "<option value=\"{$value}/{$awstatsindex}\">{$value}</option>\n";
 }
 
+$awstatsindex = 'awsindex.html';
+
 $html = "<!DOCTYPE html>\n<html>\n<head>\n<title>Stats</title>\n";
 $html .= "<style>\nhtml,body {margin:0px;padding:0px;width:100%;height:100%;background-color: #ccc;}\n";
 $html .= "#header\n{\nwidth:100%;margin:0px auto;\nheight:20px;\nposition:fixed;\npadding:4px;\ntext-align:center;\n}\n";
@@ -60,4 +71,4 @@ $html .= $options;
 $html .= "</select>\n</div>\n<iframe src=\"{$awstatsindex}\" id=\"content\"></iframe>\n";
 $html .= "</body></html>";
 echo $html;
-?>
\ No newline at end of file
+?>
diff --git a/server/conf/goaccess_index.php.master b/server/conf/goaccess_index.php.master
new file mode 100644
index 0000000000000000000000000000000000000000..d0a8bf3c84a39a3e1cab901fef8f64f674a37315
--- /dev/null
+++ b/server/conf/goaccess_index.php.master
@@ -0,0 +1,73 @@
+<?php
+$yearmonth_text = "Jump to previous stats: ";
+$script = "<script>function load_content(url){var iframe = document.getElementById(\"content\");iframe.src = url;}</script>\n";
+
+if ($handle = opendir('.'))
+{
+        while(false !== ($file = readdir($handle)))
+        {
+                if (substr($file,0,1) != "." && is_dir($file))
+                {
+                        $orderkey = substr($file,0,4).substr($file,5,2);
+                        if (substr($file,5,2) < 10 )
+                        {
+                                $orderkey = substr($file,0,4)."0".substr($file,5,2);
+                        }
+                        $goaprev[$orderkey] = $file;
+                }
+        }
+
+        $month = date("n");
+        $year = date("Y");
+		
+        if (date("d") == 1)
+        {
+                $month = date("m")-1;
+                if (date("m") == 1)
+                {
+                        $year = date("Y")-1;
+                        $month = "12";
+                }
+        }
+
+        $current = $year.$month;
+		if ( $month < 10 ) {
+			$current = $year."0".$month;
+		}
+		$goaprev[$current] = $year."-".$month;
+
+		closedir($handle);
+}
+
+arsort($goaprev);
+
+$options = "";
+foreach ($goaprev as $key => $value)
+{
+
+	if(file_exists($value.'/awsindex.html') && file_exists($value.'/goaindex.html')) {
+		$goaccessindex = 'goaindex.html';
+	} elseif(file_exists($value.'/awsindex.html') && !file_exists($value.'/goaindex.html')) {
+                $goaccessindex = 'awsindex.html';
+	} else {
+		$goaccessindex = 'goaindex.html';
+	}
+	
+	if($key == $current) $options .= "<option selected=\"selected\" value=\"{$goaccessindex}\">{$value}</option>\n";
+	else $options .= "<option value=\"{$value}/{$goaccessindex}\">{$value}</option>\n";
+
+}
+$goaccessindex = 'goaindex.html';
+
+$html = "<!DOCTYPE html>\n<html>\n<head>\n<title>Stats</title>\n";
+$html .= "<style>\nhtml,body {margin:0px;padding:0px;width:100%;height:100%;background-color: #ccc;}\n";
+$html .= "#header\n{\nwidth:100%;margin:0px auto;\nheight:20px;\nposition:fixed;\npadding:4px;\ntext-align:center;\n}\n";
+$html .= "iframe {width:100%;height:95%;margin:0px;margin-top:40px;border:0px;padding:0px;}\n</style>\n</head>\n<body>\n";
+$html .= $script;
+$html .= "<div id=\"header\">{$yearmonth_text}\n";
+$html .= "<select name=\"goadate\" onchange=\"load_content(this.value)\">\n";
+$html .= $options;
+$html .= "</select>\n</div>\n<iframe src=\"{$goaccessindex}\" id=\"content\"></iframe>\n";
+$html .= "</body></html>";
+echo $html;
+?>
diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master
index 8a97f82a439cd596d341cf91b313ad4a52625a6b..0c82c4631e0a41d0888a811b9f3097db63fd326a 100644
--- a/server/conf/nginx_apps.vhost.master
+++ b/server/conf/nginx_apps.vhost.master
@@ -191,7 +191,7 @@ server {
                fastcgi_pass unix:{cgi_socket};
         }
 
-        location /images/mailman {
+        location ^~ /images/mailman {
                alias /usr/share/images/mailman;
         }
 
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index ce245787a5ce02dcd14d745b87fb1fc780647f1e..3fc50cc10805845b7e6656234d683ddd88698505 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -168,6 +168,7 @@ server {
             index index.html index.php;
             auth_basic "Members Only";
             auth_basic_user_file <tmpl_var name='stats_auth_passwd_file'>;
+            add_header Content-Security-Policy "default-src * 'self' 'unsafe-inline';";
         }
 
         location ^~ /awstats-icon {
diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master
index f72cd11d1f68539269e262e727db68bfb79fd1f9..b5dedebf293706ea67fd7a2aff107186663ccbb4 100644
--- a/server/conf/sieve_filter.master
+++ b/server/conf/sieve_filter.master
@@ -1,7 +1,18 @@
+<tmpl_if name="sieve_script" op="==" value="before">
 # This sieve script is generated by ISPConfig, any changes made will be overwritten.
 # You can create and activate a per-user sieve script (manually or via managesieve),
-# which will execute before this.
-require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
+# which will execute after this.
+
+require ["fileinto", "mailbox", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
+
+<tmpl_if name="move_junk" op="==" value="y">
+# Move spam to spam folder
+if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
+  fileinto :create "Junk";
+  # Stop here so that we do not reply on spams
+  stop;
+}
+</tmpl_if>
 
 <tmpl_if name="cc">
 # Send a copy of email to
@@ -10,19 +21,23 @@ redirect "<tmpl_var name='address'>";
 </tmpl_loop>
 </tmpl_if>
 
-<tmpl_if name="move_junk" op="==" value="y">
+<tmpl_var name='custom_mailfilter'>
+
+</tmpl_if>
+<tmpl_if name="sieve_script" op="==" value="after">
+# This sieve script is generated by ISPConfig, any changes made will be overwritten.
+# You can create and activate a per-user sieve script (manually or via managesieve),
+# which will execute before this.
+
+<tmpl_if name="move_junk" op="==" value="a">
 # Move spam to spam folder
 if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
-  fileinto "Junk";
+  fileinto :create "Junk";
   # Stop here so that we do not reply on spams
   stop;
 }
 </tmpl_if>
 
-<tmpl_var name='custom_mailfilter'>
-
-keep;
-
 <tmpl_if name="autoresponder" op="==" value="y">
 #################################################################
 # Autoreply
@@ -30,13 +45,28 @@ keep;
 
 # Move spam to spam folder
 if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
-  fileinto "Junk";
   # Stop here so that we do not reply on spams
   stop;
 }
+
+<tmpl_if name="start_date">
+if currentdate :value "ge" "iso8601" "<tmpl_var name='start_date'>" {
+</tmpl_if>
+<tmpl_if name="end_date">
+if currentdate :value "le" "iso8601" "<tmpl_var name='end_date'>" {
+</tmpl_if>
+
 vacation  :days 1
   :subject "<tmpl_var name='autoresponder_subject'>"
-  # :addresses ["test@test.int", "till@test.int"]
   <tmpl_var name='addresses'>
   "<tmpl_var name='autoresponder_text'>";
+
+<tmpl_if name="end_date">
+}
+</tmpl_if>
+<tmpl_if name="start_date">
+}
+</tmpl_if>
+</tmpl_if>
+
 </tmpl_if>
diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master
deleted file mode 100644
index edd4060b9f8012ad874a6e0aafcdac30187cba59..0000000000000000000000000000000000000000
--- a/server/conf/sieve_filter_1.2.master
+++ /dev/null
@@ -1,50 +0,0 @@
-# This sieve script is generated by ISPConfig, any changes made will be overwritten.
-# You can create and activate a per-user sieve script (manually or via managesieve),
-# which will execute before this.
-require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress", "copy", "reject"];
-
-<tmpl_if name="move_junk" op="==" value="y">
-# Move spam to spam folder
-if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
-  fileinto "Junk";
-  # Stop here so that we do not reply on spams
-  stop;
-}
-</tmpl_if>
-
-<tmpl_if name="cc">
-# Send a copy of email to
-<tmpl_loop name="ccloop">
-redirect "<tmpl_var name='address'>";
-</tmpl_loop>
-</tmpl_if>
-
-<tmpl_var name='custom_mailfilter'>
-
-keep;
-
-<tmpl_if name="autoresponder" op="==" value="y">
-#################################################################
-# Autoreply
-#################################################################
-
-# Move spam to spam folder
-if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") {
-  # Stop here so that we do not reply on spams
-  stop;
-}
-
-<tmpl_if name="autoresponder_date_limit">
-if allof(currentdate :value "ge" "iso8601" "<tmpl_var name='start_date'>", currentdate :value "le" "iso8601" "<tmpl_var name='end_date'>") {
-</tmpl_if>
-
-vacation  :days 1
-  :subject "<tmpl_var name='autoresponder_subject'>"
-  <tmpl_var name='addresses'>
-  "<tmpl_var name='autoresponder_text'>";
-
-<tmpl_if name="autoresponder_date_limit">
-}
-</tmpl_if>
-</tmpl_if>
-
diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php
index ba28cd4c90559b0a2f323517eb929cfe4ea554c9..485bd996d3b2059401e61dc1a1360d71a69f0b81 100644
--- a/server/lib/classes/backup.inc.php
+++ b/server/lib/classes/backup.inc.php
@@ -1147,7 +1147,7 @@ class backup
 
         $records = $app->db->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ?", $server_id, $domain_id);
         if (empty($records)){
-            $app->log('Skipping database backup for domain ' . $web_domain['domain_id'] . ', because no related databases found.', LOGLEVEL_ERROR);
+            $app->log('Skipping database backup for domain ' . $web_domain['domain_id'] . ', because no related databases found.', LOGLEVEL_DEBUG);
             return true;
         }
 
@@ -1450,4 +1450,3 @@ class backup
 }
 
 ?>
-
diff --git a/server/lib/classes/cron.d/150-goaccess.inc.php b/server/lib/classes/cron.d/150-goaccess.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..8f397c819a2bde230d49314a8e861fd385749165
--- /dev/null
+++ b/server/lib/classes/cron.d/150-goaccess.inc.php
@@ -0,0 +1,257 @@
+<?php
+
+/*
+Copyright (c) 2013, Marius Cramer, pixcept KG
+Copyright (c) 2020, Michael Seevogel
+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 cronjob_goaccess extends cronjob {
+
+	// job schedule
+	protected $_schedule = '0 0 * * *';
+
+	/* this function is optional if it contains no custom code */
+	public function onPrepare() {
+		global $app;
+
+		parent::onPrepare();
+	}
+
+	/* this function is optional if it contains no custom code */
+	public function onBeforeRun() {
+		global $app;
+
+		return parent::onBeforeRun();
+	}
+
+	public function onRunJob() {
+		global $app, $conf;
+
+
+		//######################################################################################################
+		// Create goaccess statistics
+		//######################################################################################################
+
+		$sql = "SELECT domain_id, domain, document_root, web_folder, type, system_user, system_group, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') and stats_type = 'goaccess' AND server_id = ?";
+		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
+
+		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
+
+		if(is_array($records) && !empty($records)) {
+
+	                /* Check if goaccess binary is in path/installed */
+			if($app->system->is_installed('goaccess')) {
+
+		                $goaccess_conf_locs = array('/etc/goaccess.conf', '/etc/goaccess/goaccess.conf');
+		                $count = 0;
+
+		                foreach($goaccess_conf_locs as $goa_loc) {
+		                        if(is_file($goa_loc) && (filesize($goa_loc) > 0)) {
+		                                $goaccess_conf_main = $goa_loc;
+		                                break;
+		                        } else {
+		                                $count++;
+	        	                        if($count == 2) {
+		                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_ERROR);
+		                                }
+		                        }
+		                }
+
+
+				foreach($records as $rec) {
+					$yesterday = date('Ymd', strtotime("-1 day", time()));
+	
+					$log_folder = 'log';
+	
+					if($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') {
+						$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $rec['parent_domain_id']);
+						$subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $rec['domain']);
+						if($subdomain_host == '') $subdomain_host = 'web'.$rec['domain_id'];
+						$log_folder .= '/' . $subdomain_host;
+						unset($tmp);
+					}
+
+					$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log';
+
+					if(!@is_file($logfile)) {
+						$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log.gz';
+						if(!@is_file($logfile)) {
+							continue;
+						}
+					}
+
+					$web_folder = (($rec['type'] == 'vhostsubdomain' || $rec['type'] == 'vhostalias') ? $rec['web_folder'] : 'web');
+					$domain = $rec['domain'];
+					$statsdir = $rec['document_root'].'/'.$web_folder.'/stats';
+					$goaccess_conf = $rec['document_root'].'/log/goaccess.conf';
+
+					/*
+					 In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
+					 By default the originally, with GoAccess shipped goaccess.conf from /etc/ or /etc/goaccess will be used along with the log-format value COMBINED. 
+					*/
+
+					if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master") && (!file_exists($goaccess_conf))) {
+						$app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master", $goaccess_conf);
+					} elseif(!file_exists($goaccess_conf)) {
+
+						/*
+						 By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
+						 Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf or /etc/goaccess/goaccess.conf as the base conf.
+						*/
+
+						$app->system->copy($goaccess_conf_main, $goaccess_conf);
+						$content = $app->system->file_get_contents($goaccess_conf, true);
+						$content = preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", $content);
+						$app->system->file_put_contents($goaccess_conf, $content, true);
+						unset($content);
+					}
+
+					/* Update the primary domain name in the title, it could occasionally change */
+					if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
+						$content = $app->system->file_get_contents($goaccess_conf, true);
+						$content = preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", $content);
+						$app->system->file_put_contents($goaccess_conf, $content, true);
+						unset($content);
+					}
+
+	                                $username = $rec['system_user'];
+	                                $groupname = $rec['system_group'];
+	                                $docroot = $rec['document_root'];
+
+					if(!@is_dir($statsdir)) $app->system->mkdirpath($statsdir, 0755, $username, $groupname);
+
+					$goa_db_dir = $docroot.'/'.$web_folder.'/stats/.db/';
+					$output_html = $docroot.'/'.$web_folder.'/stats/goaindex.html';
+		                        if(!@is_dir($goa_db_dir)) $app->system->mkdirpath($goa_db_dir);
+	
+		                        if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) $app->system->unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
+
+					symlink($logfile, '/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
+					$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
+	
+					$goamonth = date("n");
+					$goayear = date("Y");
+
+					if (date("d") == 1) {
+						$goamonth = date("m")-1;
+						if (date("m") == 1) {
+							$goayear = date("Y")-1;
+							$goamonth = "12";
+						}
+					}
+
+					if (date("d") == 2) {
+						$goamonth = date("m")-1;
+						if (date("m") == 1) {
+							$goayear = date("Y")-1;
+							$goamonth = "12";
+						}
+	
+						$statsdirold = $statsdir."/".$goayear."-".$goamonth."/";
+	
+						if(!is_dir($statsdirold)) {
+							 $app->system->mkdirpath($statsdirold, 0755, $username, $groupname);
+						}
+
+						// don't rotate db files per month
+						//rename($goa_db_dir, $statsdirold.'db');
+						//mkdir($goa_db_dir);
+
+
+						$files = scandir($statsdir);
+
+						foreach ($files as $file) {
+							if (substr($file, 0, 1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file, 0, 1) != "w" && substr($file, 0, 1) != "i") $app->system->copy("$statsdir"."/"."$file", "$statsdirold"."$file");
+						}
+					}
+
+					// Get the GoAccess version
+					$match = array();
+	
+					$goaccess_version = $app->system->system_safe('goaccess --version 2>&1');
+
+					if(preg_match('/[0-9]\.[0-9]{1,2}/', $goaccess_version, $match)) {
+						$goaccess_version = $match[0];
+					}
+
+
+					/*
+					 * GoAccess removed with 1.4 btree support and supports from this version on only "In-Memory with On-Disk Persitance Storage".
+					 * For versions prior 1.4 you need GoAccess with btree support compiled!
+					 */
+				
+					$cust_lang = $conf['language']."_".strtoupper($conf['language']);
+
+					if(version_compare($goaccess_version,1.4) >= 0) {
+						$app->system->exec_safe("LANG=? goaccess -f ? --config-file ? --restore --persist --db-path=? --output=?", $cust_lang, $logfile, $goaccess_conf, $goa_db_dir, $output_html);
+					} else {
+						$output = $app->system->system_safe('goaccess --help 2>&1');
+						preg_match('/keep-db-files/', $output, $match);
+						if($match[0] == "keep-db-files") {
+							$app->system->exec_safe("LANG=? goaccess -f ? --config-file ? --load-from-disk --keep-db-files --db-path=? --output=?", $cust_lang, $logfile, $goaccess_conf, $goa_db_dir, $output_html);
+						} else {
+		                                        $app->log("Stats not generated. The GoAccess binary was not compiled with btree support. Please recompile/reinstall GoAccess with btree support, or install GoAccess version >= 1.4!", LOGLEVEL_ERROR);
+						}
+		                                unset($output);
+					}
+					unset($cust_lang);
+	
+					if(!is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+						if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+							$app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+						} else {
+							$app->system->copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $rec['document_root']."/".$web_folder."/stats/index.php");
+						}
+					}
+
+		                        $app->log('Created GoAccess statistics for ' . $domain, LOGLEVEL_DEBUG);
+		                        if(is_file($rec['document_root']."/".$web_folder."/stats/index.php")) {
+		                                $app->system->chown($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_user']);
+		                                $app->system->chgrp($rec['document_root']."/".$web_folder."/stats/index.php", $rec['system_group']);
+		                        }
+
+					$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
+				}
+			} else {
+				$app->log("Stats not generated. The GoAccess binary couldn't be found. Make sure that GoAccess is installed and that it is in \$PATH", LOGLEVEL_ERROR);
+			}
+
+		} 
+
+		parent::onRunJob();
+	}
+
+	/* this function is optional if it contains no custom code */
+	public function onAfterRun() {
+		global $app;
+
+		parent::onAfterRun();
+	}
+
+}
+
+?>
diff --git a/server/lib/classes/cron.d/150-webalizer.inc.php b/server/lib/classes/cron.d/150-webalizer.inc.php
index 42aa125e0f9b427883196bf2d511e25a3ad6d182..6c68cef183a6bcad8532bc5cbb13edcf01201800 100644
--- a/server/lib/classes/cron.d/150-webalizer.inc.php
+++ b/server/lib/classes/cron.d/150-webalizer.inc.php
@@ -127,8 +127,8 @@ class cronjob_webalizer extends cronjob {
 			chown($statsdir, $username);
 			chgrp($statsdir, $groupname);
 			$app->system->exec_safe("$webalizer -c ? -n ? -s ? -r ? -q -T -p -o ? ?", $webalizer_conf, $domain, $domain, $domain, $statsdir, $logfile);
-			
-			exec('chown -R ?:? ?', $username, $groupname, $statsdir);
+
+			$app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $statsdir);
 		}
 
 
diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index b0470b2ec76c539c89dc811716e2359a71145183..ef0bbb1201b0bf35a67d77e96fc6b3d4c1e1a408 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -124,7 +124,7 @@ class cronjob_logfiles extends cronjob {
 
 			$cron_logfiles = array('cron.log', 'cron_error.log', 'cron_wget.log');
 			foreach($cron_logfiles as $cron_logfile) {
-				$cron_logfile = $rec['document_root'].'/' . $log_folder . '/' . $cron_logfile;
+				$cron_logfile = $rec['document_root'].'/private/' . $cron_logfile;
 
 				// rename older files (move up by one)
 				$num = $log_retention;
@@ -193,7 +193,7 @@ class cronjob_logfiles extends cronjob {
 				if(is_file($ispconfig_logfile . '.' . $num . '.gz')) rename($ispconfig_logfile . '.' . $num . '.gz', $ispconfig_logfile . '.' . ($num + 1) . '.gz');
 				$num--;
 			}
-			// compress current logfile
+			//* compress current logfile
 			if(is_file($ispconfig_logfile)) {
 				$app->system->exec_safe("gzip -c ? > ?", $ispconfig_logfile, $ispconfig_logfile . '.1.gz');
 				$app->system->exec_safe("cat /dev/null > ?", $ispconfig_logfile);
diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 734663811921d799674fcc9e0cbe3b5e1b28bf60..3ce63b48b48d0a86f420c5b6a1fbc4415fa33644 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -30,7 +30,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 class letsencrypt {
 
-	/**
+	/** 
 	 * Construct for this class
 	 *
 	 * @return system
@@ -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 ; 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 || $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;
 	}
@@ -542,4 +542,4 @@ class letsencrypt {
 			return false;
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 0556578a963ad217dff169d260d176f469a2e4d3..ba86d1f11597c5f770fe332936dc1dc3ec1354c8 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -1787,6 +1787,18 @@ class system{
 		}
 	}
 
+	public function is_blacklisted_web_path($path) {
+		$blacklist = array('bin', 'cgi-bin', 'dev', 'etc', 'home', 'lib', 'lib64', 'log', 'ssl', 'usr', 'var', 'proc', 'net', 'sys', 'srv', 'sbin', 'run');
+
+		$path = ltrim($path, '/');
+		$parts = explode('/', $path);
+		if(in_array(strtolower($parts[0]), $blacklist, true)) {
+			return true;
+		}
+
+		return false;
+	}
+
 	function web_folder_protection($document_root, $protect) {
 		global $app, $conf;
 
@@ -2215,7 +2227,7 @@ class system{
 			$program_args .= ' ' . escapeshellarg($prog);
 		}
 
-		$cmd = 'jk_cp -k ?' . $program_args;
+		$cmd = 'jk_cp -j ?' . $program_args;
 		$this->exec_safe($cmd, $home_dir);
 
 		return true;
@@ -2238,7 +2250,7 @@ class system{
 		}
 
 		// Initialize the chroot into the specified directory with the specified applications
-		$cmd = 'jk_init -f -k -c /etc/jailkit/jk_init.ini -j ?' . $app_args;
+		$cmd = 'jk_init -f -c /etc/jailkit/jk_init.ini -j ?' . $app_args;
 		$this->exec_safe($cmd, $home_dir);
 
 		// Create the temp directory
diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php
index 3b6bb9fb497366c4e2d05d2324777a6eb0273620..a32f99f87f007b0926b5c21df54e0558fb9015a8 100644
--- a/server/mods-available/remoteaction_core_module.inc.php
+++ b/server/mods-available/remoteaction_core_module.inc.php
@@ -172,16 +172,17 @@ class remoteaction_core_module {
 		/*
 		 * Do the update
 		 */
-		exec("aptitude update");
-		exec("aptitude safe-upgrade -y");
+		 //Guess this is not wanted here?
+		 //exec("aptitude update");
+		 //exec("aptitude safe-upgrade -y");
 
 		//TODO : change this when distribution information has been integrated into server record
 		if(file_exists('/etc/gentoo-release')) {
 			exec("glsa-check -f --nocolor affected");
 		}
 		else {
-			exec("aptitude update");
-			exec("aptitude safe-upgrade -y");
+			exec("apt-get update");
+			exec("apt-get -y upgrade");
 		}
 
 		/*
@@ -192,7 +193,7 @@ class remoteaction_core_module {
 
 	private function _doIspCUpdate($action) {
 		global $app;
-		
+
 		// Ensure that this code is not executed twice as this would cause a loop in case of a failure
 		$this->_actionDone($action['action_id'], 'ok');
 
diff --git a/server/mods-available/web_module.inc.php b/server/mods-available/web_module.inc.php
index 02f31510c2a2001c3c2ef4cada45cfa3c1a76377..609e9212dc3a6fd6b6a74c2fcb3b9622039a915c 100644
--- a/server/mods-available/web_module.inc.php
+++ b/server/mods-available/web_module.inc.php
@@ -32,7 +32,8 @@ class web_module {
 
 	var $module_name = 'web_module';
 	var $class_name = 'web_module';
-	var $actions_available = array( 'web_domain_insert',
+	var $actions_available = array(
+		'web_domain_insert',
 		'web_domain_update',
 		'web_domain_delete',
 		'ftp_user_insert',
@@ -64,7 +65,9 @@ class web_module {
 		'aps_package_delete',
 		'aps_setting_insert',
 		'aps_setting_update',
-		'aps_setting_delete');
+		'aps_setting_delete',
+		'directive_snippets_update'
+	);
 
 	//* This function is called during ispconfig installation to determine
 	//  if a symlink shall be created for this plugin.
@@ -114,6 +117,7 @@ class web_module {
 		$app->modules->registerTableHook('aps_instances_settings', 'web_module', 'process');
 		$app->modules->registerTableHook('aps_packages', 'web_module', 'process');
 		$app->modules->registerTableHook('aps_settings', 'web_module', 'process');
+		$app->modules->registerTableHook('directive_snippets', 'web_module', 'process');
 
 		// Register service
 		$app->services->registerService('httpd', 'web_module', 'restartHttpd');
@@ -185,6 +189,11 @@ class web_module {
 			if($action == 'u') $app->plugins->raiseEvent('aps_setting_update', $data);
 			if($action == 'd') $app->plugins->raiseEvent('aps_setting_delete', $data);
 			break;
+		case 'directive_snippets':
+			if($action == 'i') $app->plugins->raiseEvent('directive_snippets_insert', $data);
+			if($action == 'u') $app->plugins->raiseEvent('directive_snippets_update', $data);
+			if($action == 'd') $app->plugins->raiseEvent('directive_snippets_delete', $data);
+			break;
 		} // end switch
 	} // end function
 
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 61116d00411fcc97e4ea76936991b61e8abdc71e..f11476b4021f3a224d763b646433e66347b4066d 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -93,6 +93,34 @@ class apache2_plugin {
 		$app->plugins->registerEvent('ftp_user_delete', $this->plugin_name, 'ftp_user_delete');
 
 		$app->plugins->registerAction('php_ini_changed', $this->plugin_name, 'php_ini_changed');
+
+		$app->plugins->registerEvent('directive_snippets_update', $this->plugin_name, 'directive_snippets');
+	}
+
+	function directive_snippets($event_name, $data) {
+		global $app, $conf;
+
+		$snippet = $data['new'];
+		if($snippet['active'] == 'y' && $snippet['update_sites'] == 'y') {
+			if($snippet['type'] == 'php') {
+				$rlike = $snippet['directive_snippets_id'].'|,'.$snippet['directive_snippets_id'].'|'.$snippet['directive_snippets_id'].',';
+				$affected_snippets = $app->db->queryAllRecords('SELECT directive_snippets_id FROM directive_snippets WHERE required_php_snippets RLIKE(?) AND type = ?', $rlike, 'apache');
+				if(is_array($affected_snippets) && !empty($affected_snippets)) {
+					foreach($affected_snippets as $snippet) $sql_in[] = $snippet['directive_snippets_id'];
+					$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN ?', $conf['server_id'], $sql_in);
+				}
+			}
+			if($snippet['type'] == 'apache') $affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id = ?', $conf['server_id'], $snippet['directive_snippets_id']);
+
+			if(is_array($affected_sites) && !empty($affected_sites)) {
+				foreach($affected_sites as $site) {
+					$website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ?', $site['domain_id']);
+					$new_data['old'] = $website;
+					$new_data['new'] = $website;
+					$this->update('web_domain_update', $new_data);
+				}
+			}
+		}
 	}
 
 	private function get_master_php_ini_content($web_data) {
@@ -109,10 +137,14 @@ class apache2_plugin {
 			$master_php_ini_path = $web_config['php_ini_path_apache'];
 		} else {
 			// check for custom php
-			if($web_data['fastcgi_php_version'] != '') {
-				$tmp = explode(':', $web_data['fastcgi_php_version']);
-				if(isset($tmp[2])) {
-					$tmppath = $tmp[2];
+			if($web_data['server_php_id'] != 0) {
+				$tmp = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $web_data['server_php_id']);
+				$ini_key = 'php_fastcgi_ini_dir';
+				if($web_data['php'] === 'php-fpm') {
+					$ini_key = 'php_fpm_ini_dir';
+				}
+				if($tmp && $tmp[$ini_key]) {
+					$tmppath = $tmp[$ini_key];
 					if(substr($tmppath, -7) != 'php.ini') {
 						if(substr($tmppath, -1) != '/') $tmppath .= '/';
 						$tmppath .= 'php.ini';
@@ -169,21 +201,21 @@ class apache2_plugin {
 			$qrystr .= " AND php = 'mod'";
 		} elseif($data['mode'] == 'fast-cgi') {
 			$qrystr .= " AND php = 'fast-cgi'";
-			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE ?";
-				$param = '%:' . $data['php_version'];
+			if(isset($data['php_version'])) {
+				$qrystr .= " AND server_php_id = ?";
+				$param = $data['php_version'];
 			}
 		} elseif($data['mode'] == 'php-fpm') {
 			$qrystr .= " AND php = 'php-fpm'";
-			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE ?";
-				$param = '%:' . $data['php_version'] . ':%';
+			if(isset($data['php_version'])) {
+				$qrystr .= " AND server_php_id = ?";
+				$param = $data['php_version'];
 			}
 		} elseif($data['mode'] == 'hhvm') {
 			$qrystr .= " AND php = 'hhvm'";
-			if($data['php_version']) {
-				$qrystr .= " AND fastcgi_php_version LIKE ?";
-				$param = '%:' . $data['php_version'] . ':%';
+			if(isset($data['php_version'])) {
+				$qrystr .= " AND server_php_id = ?";
+				$param = $data['php_version'];
 			}
 		} else {
 			$qrystr .= " AND php != 'mod' AND php != 'fast-cgi'";
@@ -580,6 +612,11 @@ class apache2_plugin {
 			$log_folder .= '/' . $subdomain_host;
 			unset($tmp);
 
+			if($app->system->is_blacklisted_web_path($web_folder)) {
+				$app->log('Vhost ' . $subdomain_host . ' is using a blacklisted web folder: ' . $web_folder, LOGLEVEL_ERROR);
+				return 0;
+			}
+
 			if(isset($data['old']['parent_domain_id'])) {
 				// old one
 				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
@@ -731,7 +768,13 @@ class apache2_plugin {
 		// Check if the directories are there and create them if necessary.
 		$app->system->web_folder_protection($data['new']['document_root'], false);
 
-		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
+		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) {
+			if($web_folder !== 'web') { //vhost sub/alias
+				$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder, 0755, $username, $groupname);
+			} else {
+				$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
+			}
+		}
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/error') and $data['new']['errordocs']) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/error');
 		if($data['new']['stats_type'] != '' && !is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/stats');
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
@@ -1113,11 +1156,21 @@ class apache2_plugin {
 		}
 
 		$fastcgi_config = $app->getconf->get_server_config($conf['server_id'], 'fastcgi');
-
-		if(trim($data['new']['fastcgi_php_version']) != ''){
-			list($custom_fastcgi_php_name, $custom_fastcgi_php_executable, $custom_fastcgi_php_ini_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-			if(is_file($custom_fastcgi_php_ini_dir)) $custom_fastcgi_php_ini_dir = dirname($custom_fastcgi_php_ini_dir);
-			if(substr($custom_fastcgi_php_ini_dir, -1) == '/') $custom_fastcgi_php_ini_dir = substr($custom_fastcgi_php_ini_dir, 0, -1);
+		$custom_fastcgi_php_executable = '';
+
+		if($data['new']['server_php_id'] != 0){
+			$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+			if($tmp_php) {
+				if($data['new']['php'] === 'php-fpm') {
+					$custom_fastcgi_php_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_fastcgi_php_executable = $tmp_php['php_fpm_init_script'];
+				} else {
+					$custom_fastcgi_php_ini_dir = $tmp_php['php_fastcgi_ini_dir'];
+					$custom_fastcgi_php_executable = $tmp_php['php_fastcgi_binary'];
+				}
+				if(is_file($custom_fastcgi_php_ini_dir)) $custom_fastcgi_php_ini_dir = dirname($custom_fastcgi_php_ini_dir);
+				if(substr($custom_fastcgi_php_ini_dir, -1) == '/') $custom_fastcgi_php_ini_dir = substr($custom_fastcgi_php_ini_dir, 0, -1);
+			}
 		}
 
 		//* Create custom php.ini
@@ -1180,6 +1233,11 @@ class apache2_plugin {
 				$vhost_data['apache_directives'] = $snippet['snippet'];
 			}
 		}
+
+		if(!$vhost_data['apache_directives']) {
+			$vhost_data['apache_directives'] = ''; // ensure it is not null
+		}
+
 		// Make sure we only have Unix linebreaks
 		$vhost_data['apache_directives'] = str_replace("\r\n", "\n", $vhost_data['apache_directives']);
 		$vhost_data['apache_directives'] = str_replace("\r", "\n", $vhost_data['apache_directives']);
@@ -1466,7 +1524,7 @@ class apache2_plugin {
 			$fcgi_tpl->setVar('apache_version', $app->system->getapacheversion());
 
 			// Support for multiple PHP versions (FastCGI)
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_fastcgi_php = false;
 				if(substr($custom_fastcgi_php_ini_dir, -1) != '/') $custom_fastcgi_php_ini_dir .= '/';
 			} else {
@@ -1541,18 +1599,28 @@ class apache2_plugin {
 		 */
 		// Support for multiple PHP versions
 		if($data['new']['php'] == 'php-fpm'){
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
 		} else {
-			if(trim($data['old']['fastcgi_php_version']) != '' && ($data['old']['php'] == 'php-fpm' || $data['old']['php'] == 'hhvm')){
+			if($data['old']['server_php_id'] != 0 && ($data['old']['php'] == 'php-fpm' || $data['old']['php'] == 'hhvm')){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
@@ -1825,7 +1893,7 @@ class apache2_plugin {
 
 		if($data['new']['stats_type'] != '') {
 			if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdir($data['new']['document_root'].'/' . $web_folder . '/stats');
-			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user";
+			$ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data['new']['document_root']."/web/stats/.htpasswd_stats\nrequire valid-user\nDirectoryIndex index.html index.php\nHeader unset Content-Security-Policy";
 			$app->system->file_put_contents($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', $ht_file);
 			$app->system->chmod($data['new']['document_root'].'/' . $web_folder . '/stats/.htaccess', 0755);
 			unset($ht_file);
@@ -1847,11 +1915,31 @@ class apache2_plugin {
 			$this->awstats_update($data, $web_config);
 		}
 
+                //* Create GoAccess configuration
+                if($data['new']['stats_type'] == 'goaccess' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
+                        $this->goaccess_update($data, $web_config);
+                }
+
 		//* Remove Stats-Folder when Statistics set to none
 		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
 			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
 		}
 
+		//* Remove the AWstats configuration file
+		if($data['old']['stats_type'] == 'awstats' && $data['new']['stats_type'] != 'awstats') {
+			$this->awstats_delete($data, $web_config);
+		}
+
+		//* Remove the GoAccess configuration file
+		if($data['old']['stats_type'] == 'goaccess' && $data['new']['stats_type'] != 'goaccess') {
+			$this->goaccess_delete($data, $web_config);
+		}
+
+                //* Remove the Webalizer configuration file
+		if($data['old']['stats_type'] == 'webalizer' && $data['new']['stats_type'] != 'webalizer') {
+			$this->webalizer_delete($data, $web_config);
+                }
+
 		$this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder);
 		$this->hhvm_update($data, $web_config);
 
@@ -2255,7 +2343,7 @@ class apache2_plugin {
 
 			}
 
-			//* Remove the awstats configuration file
+			//* Remove the AWstats configuration file
 			if($data['old']['stats_type'] == 'awstats') {
 				$this->awstats_delete($data, $web_config);
 			}
@@ -2957,18 +3045,111 @@ class apache2_plugin {
 		}
 	}
 
-	//* Delete the awstats configuration file
-	private function awstats_delete ($data, $web_config) {
+        //* Delete the awstats configuration file
+        private function awstats_delete ($data, $web_config) {
+                global $app;
+
+                $awstats_conf_dir = $web_config['awstats_conf_dir'];
+
+                if ( @is_file($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf') ) {
+                        $app->system->unlink($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf');
+                        $app->log('Removed AWStats config file: '.$awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf', LOGLEVEL_DEBUG);
+                }
+        }
+
+	//* Update the GoAccess configuration file
+        private function goaccess_update ($data, $web_config) {
+                global $app;
+
+                $web_folder = $data['new']['web_folder'];
+                if($data['new']['type'] == 'vhost') $web_folder = 'web';
+
+                $goaccess_conf_locs = array('/etc/goaccess.conf', '/etc/goaccess/goaccess.conf');
+                $count = 0;
+
+                foreach($goaccess_conf_locs as $goa_loc) {
+                        if(is_file($goa_loc) && (filesize($goa_loc) > 0)) {
+                                $goaccess_conf_main = $goa_loc;
+                                break;
+                        } else {
+                                $count++;
+                                if($count == 2) {
+                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_WARN);
+                                }
+                        }
+                }
+
+                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/.db")) $app->system->mkdirpath($data['new']['document_root'] . "/" . $web_folder . "/stats/.db");
+                $goaccess_conf = $data['new']['document_root'].'/log/goaccess.conf';
+
+                /*
+                In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
+                By default the originaly with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
+		*/
+
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master")) {
+                        $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $goaccess_conf);
+
+                } elseif(!file_exists($goaccess_conf)) {
+
+			/*
+                         By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
+                         Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
+			 */
+
+			$app->system->copy($goaccess_conf_main, $goaccess_conf);
+			$content = $app->system->file_get_contents($goaccess_conf, true);
+			$content = preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", $content);
+			$app->system->file_put_contents($goaccess_conf, $content, true);
+			unset($content);
+
+                }
+
+                if(file_exists($goaccess_conf)) {
+                        $domain = $data['new']['domain'];
+                        $content = $app->system->file_get_contents($goaccess_conf, true);
+                        $content = preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", $content);
+                        $app->system->file_put_contents($goaccess_conf, $content, true);
+                        unset($content);
+
+                }
+
+                if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
+                        $app->log('Created GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
+                } 
+
+                if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html");
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+                        $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+                } else {
+                        $app->system->copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+                }
+        }
+
+	//* Delete the GoAccess configuration file
+	private function goaccess_delete ($data, $web_config) {
 		global $app;
 
-		$awstats_conf_dir = $web_config['awstats_conf_dir'];
+		$goaccess_conf = $data['old']['document_root'] . "/log/goaccess.conf";
 
-		if ( @is_file($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf') ) {
-			$app->system->unlink($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf');
-			$app->log('Removed AWStats config file: '.$awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf', LOGLEVEL_DEBUG);
+		if ( @is_file($goaccess_conf) ) {
+			$app->system->unlink($goaccess_conf);
+			$app->log('Removed GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
 		}
 	}
 
+        //* Delete the Webalizer configuration file
+        private function webalizer_delete ($data, $web_config) {
+                global $app;
+
+                $webalizer_conf = $data['old']['document_root'] . "/log/webalizer.conf";
+
+                if ( @is_file($webalizer_conf) ) {
+                        $app->system->unlink($webalizer_conf);
+                        $app->log('Removed Webalizer config file: '.$webalizer_conf, LOGLEVEL_DEBUG);
+                }
+        }
+
 	private function hhvm_update($data, $web_config) {
 		global $app, $conf;
 
@@ -3054,18 +3235,28 @@ class apache2_plugin {
 		//$reload = false;
 
 		if($data['new']['php'] == 'php-fpm'){
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
 		} else {
-			if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){
+			if($data['old']['server_php_id'] != 0 && $data['old']['php'] == 'php-fpm'){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
@@ -3262,10 +3453,15 @@ class apache2_plugin {
 
 		$php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart';
 
-		if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){
+		if($data['old']['server_php_id'] != 0 && $data['old']['php'] == 'php-fpm'){
 			$default_php_fpm = false;
-			list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-			if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+			$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+			if($tmp_php) {
+				$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+				$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+				$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+			}
 		} else {
 			$default_php_fpm = true;
 		}
diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index d4b4a7c01c0516e582c1128c6180a6d3e6320aa1..b152a8758db795ad17b708ffe80ed27b1a8928d8 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -85,75 +85,114 @@ class bind_plugin {
 
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
-		
+
 		$domain = substr($data['new']['origin'], 0, strlen($data['new']['origin'])-1);
 		if (!file_exists($dns_config['bind_zonefiles_dir'].'/'.$this->zone_file_prefix().$domain)) return false;
-		
+
 		//* Check Entropy
 		if (file_get_contents('/proc/sys/kernel/random/entropy_avail') < 400) {
 			$app->log('DNSSEC ERROR: We are low on entropy. Not generating new Keys for '.$domain.'. Please consider installing package haveged.', LOGLEVEL_WARN);
 			echo "DNSSEC ERROR: We are low on entropy. Not generating new Keys for $domain. Please consider installing package haveged.\n";
 			return false;
 		}
-		
+
 		//* Verify that we do not already have keys (overwriting-protection)
-		if (file_exists($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.')) {
-			return $this->soa_dnssec_update($data);
-		} else if ($data['new']['dnssec_initialized'] == 'Y') { //In case that we generated keys but the dsset-file was not generated
-			$keycount=0;
-			foreach (glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'*.key') as $keyfile) {
-				$keycount++;
-			}
-			if ($keycount > 0) {
-				$this->soa_dnssec_sign($data);
-				return true;
+		if($data['old']['dnssec_algo'] == $data['new']['dnssec_algo']) {
+			if (file_exists($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.')) {
+				return $this->soa_dnssec_update($data);
+			} else if ($data['new']['dnssec_initialized'] == 'Y') { //In case that we generated keys but the dsset-file was not generated
+				$keycount=0;
+				foreach (glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'*.key') as $keyfile) {
+					$keycount++;
+				}
+				if ($keycount > 0) {
+					$this->soa_dnssec_sign($data);
+					return true;
+				}
 			}
 		}
-		
-		//Do some magic...
-		$app->system->exec_safe('cd ?; dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE ?; dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE ?', $dns_config['bind_zonefiles_dir'], $domain, $domain);
+
+		// Get DNSSEC Algorithms
+		$dnssec_algo = explode(',',$data['new']['dnssec_algo']);
+
+		//* Create the Zone Signing and Key Signing Keys
+		if(in_array('ECDSAP256SHA256',$dnssec_algo) && count(glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+013*.key')) == 0) {
+			$app->system->exec_safe('cd ?; dnssec-keygen -3 -a ECDSAP256SHA256 -n ZONE ?; dnssec-keygen -f KSK -3 -a ECDSAP256SHA256 -n ZONE ?', $dns_config['bind_zonefiles_dir'], $domain, $domain);
+		}
+		if(in_array('NSEC3RSASHA1',$dnssec_algo) && count(glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+007*.key')) == 0) {
+			$app->system->exec_safe('cd ?; dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE ?; dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE ?', $dns_config['bind_zonefiles_dir'], $domain, $domain);
+		}
 
 		$this->soa_dnssec_sign($data); //Now sign the zone for the first time
 		$data['new']['dnssec_initialized']='Y';
 	}
-	
+
 	function soa_dnssec_sign(&$data) {
 		global $app, $conf;
-		
+
 		//* Load libraries
 		$app->uses("getconf,tpl");
 
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
-		
+
 		$filespre = $this->zone_file_prefix();
 		$domain = substr($data['new']['origin'], 0, strlen($data['new']['origin'])-1);
 		if (!file_exists($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain)) return false;
-		
+
+		//* Get DNSSEC Algorithms
+		$dnssec_algo = explode(',',$data['new']['dnssec_algo']);
+
+		//* Get Zone file content
 		$zonefile = file_get_contents($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain);
 		$keycount=0;
-		foreach (glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'*.key') as $keyfile) {
-			$includeline = '$INCLUDE '.basename($keyfile);
-			if (!preg_match('@'.preg_quote($includeline).'@', $zonefile)) $zonefile .= "\n".$includeline."\n";
-			$keycount++;
+
+		//* Include ECDSAP256SHA256 keys in zone
+		if(in_array('ECDSAP256SHA256',$dnssec_algo)) {
+			foreach (glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+013*.key') as $keyfile) {
+				$includeline = '$INCLUDE '.basename($keyfile);
+				if (!preg_match('@'.preg_quote($includeline).'@', $zonefile)) $zonefile .= "\n".$includeline."\n";
+				$keycount++;
+			}
 		}
-		if ($keycount != 2) $app->log('DNSSEC Warning: There are more or less than 2 keyfiles for zone '.$domain, LOGLEVEL_WARN);
+
+		//* Include NSEC3RSASHA1 keys in zone
+		if(in_array('NSEC3RSASHA1',$dnssec_algo)) {
+			foreach (glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+007*.key') as $keyfile) {
+				$includeline = '$INCLUDE '.basename($keyfile);
+				if (!preg_match('@'.preg_quote($includeline).'@', $zonefile)) $zonefile .= "\n".$includeline."\n";
+				$keycount++;
+			}
+		}
+
+		$keycount_wanted = count(explode(',',$data['new']['dnssec_algo']))*2;
+
+		if ($keycount != $keycount_wanted) $app->log('DNSSEC Warning: There are more or less than 2 keyfiles for each algorithm for zone '.$domain.'. Found: '.$keycount. ' Expected: '.$keycount_wanted, LOGLEVEL_WARN);
 		file_put_contents($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain, $zonefile);
-		
-		//Sign the zone and set it valid for max. 16 days
+
+		//* Sign the zone and set it valid for max. 16 days
 		$app->system->exec_safe('cd ?; dnssec-signzone -A -e +1382400 -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N increment -o ? -t ?', $dns_config['bind_zonefiles_dir'], $domain, $filespre.$domain);
-			 
-		//Write Data back ino DB
+
+		//* Write Data back ino DB
 		$dnssecdata = "DS-Records:\n".file_get_contents($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.');
 		$dnssecdata .= "\n------------------------------------\n\nDNSKEY-Records:\n";
-		foreach (glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'*.key') as $keyfile) {
-			$dnssecdata .= file_get_contents($keyfile)."\n\n";
+
+		if(in_array('ECDSAP256SHA256',$dnssec_algo)) {
+			foreach (glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+013*.key') as $keyfile) {
+				$dnssecdata .= file_get_contents($keyfile)."\n\n";
+			}
 		}
-		
+
+		if(in_array('NSEC3RSASHA1',$dnssec_algo)) {
+			foreach (glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+007*.key') as $keyfile) {
+				$dnssecdata .= file_get_contents($keyfile)."\n\n";
+			}
+		}
+
 		if ($app->dbmaster !== $app->db) $app->dbmaster->query('UPDATE dns_soa SET dnssec_info=?, dnssec_initialized=\'Y\', dnssec_last_signed=? WHERE id=?', $dnssecdata, intval(time()), intval($data['new']['id']));
 		$app->db->query('UPDATE dns_soa SET dnssec_info=?, dnssec_initialized=\'Y\', dnssec_last_signed=? WHERE id=?', $dnssecdata, intval(time()), intval($data['new']['id']));
 	}
-	
+
 	function soa_dnssec_update(&$data, $new=false) {
 		global $app, $conf;
 
@@ -162,20 +201,20 @@ class bind_plugin {
 
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
-		
+
 		$filespre = $this->zone_file_prefix();
 		$domain = substr($data['new']['origin'], 0, strlen($data['new']['origin'])-1);
 		if (!file_exists($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain)) return false;
-		
+
 		//* Check for available entropy
 		if (file_get_contents('/proc/sys/kernel/random/entropy_avail') < 200) {
 			$app->log('DNSSEC ERROR: We are low on entropy. This could cause server script to fail. Please consider installing package haveged.', LOGLEVEL_ERR);
 			echo "DNSSEC ERROR: We are low on entropy. This could cause server script to fail. Please consider installing package haveged.\n";
 			return false;
 		}
-		
+
 		if (!$new && !file_exists($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.')) $this->soa_dnssec_create($data);
-		
+
 		$dbdata = $app->db->queryOneRecord('SELECT id,serial FROM dns_soa WHERE id=?', intval($data['new']['id']));
 		$app->system->exec_safe('cd ?; named-checkzone ? ? | egrep -ho \'[0-9]{10}\'', $dns_config['bind_zonefiles_dir'], $domain, $dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain);
 		$retState = $app->system->last_exec_retcode();
@@ -183,10 +222,10 @@ class bind_plugin {
 			$app->log('DNSSEC Error: Error in Zonefile for '.$domain, LOGLEVEL_ERR);
 			return false;
 		}
-		
+
 		$this->soa_dnssec_sign($data);
 	}
-	
+
 	function soa_dnssec_delete(&$data) {
 		global $app, $conf;
 
@@ -195,13 +234,16 @@ class bind_plugin {
 
 		//* load the server configuration options
 		$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
-		
+
 		$domain = substr($data['new']['origin'], 0, strlen($data['new']['origin'])-1);
-		
-		unlink($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+*');
+
+		$key_files = glob($dns_config['bind_zonefiles_dir'].'/K'.$domain.'.+*');
+		foreach($key_files as $file) {
+			unlink($file);
+		}
 		unlink($dns_config['bind_zonefiles_dir'].'/'.$this->zone_file_prefix().$domain.'.signed');
 		unlink($dns_config['bind_zonefiles_dir'].'/dsset-'.$domain.'.');
-		
+
 		if ($app->dbmaster !== $app->db) $app->dbmaster->query('UPDATE dns_soa SET dnssec_info=\'\', dnssec_initialized=\'N\' WHERE id=?', intval($data['new']['id']));
 		$app->db->query('UPDATE dns_soa SET dnssec_info=\'\', dnssec_initialized=\'N\' WHERE id=?', intval($data['new']['id']));
 	}
@@ -303,19 +345,24 @@ class bind_plugin {
 			unset($records_out);
 			unset($zone);
 		}
-		
+
 		//* DNSSEC-Implementation
-		if($data['old']['origin'] != $data['new']['origin']) {			
+		if($data['old']['origin'] != $data['new']['origin']) {
 			if (@$data['old']['dnssec_initialized'] == 'Y' && strlen(@$data['old']['origin']) > 3) $this->soa_dnssec_delete($data); //delete old keys
 			if ($data['new']['dnssec_wanted'] == 'Y') $this->soa_dnssec_create($data);
-		}
-		else if ($data['new']['dnssec_wanted'] == 'Y' && $data['old']['dnssec_initialized'] == 'N') $this->soa_dnssec_create($data);
-		else if ($data['new']['dnssec_wanted'] == 'N' && $data['old']['dnssec_initialized'] == 'Y') {	//delete old signed file if dnssec is no longer wanted
+		} elseif($data['old']['dnssec_algo'] != $data['new']['dnssec_algo']) {
+			$app->log("DNSSEC Algorithm has changed: ".$data['new']['dnssec_algo'], LOGLEVEL_DEBUG);
+			if ($data['new']['dnssec_wanted'] == 'Y') $this->soa_dnssec_create($data);
+		} elseif ($data['new']['dnssec_wanted'] == 'Y' && $data['old']['dnssec_initialized'] == 'N') {
+			$this->soa_dnssec_create($data);
+		} elseif ($data['new']['dnssec_wanted'] == 'N' && $data['old']['dnssec_initialized'] == 'Y') {	//delete old signed file if dnssec is no longer wanted
 			$filename = $dns_config['bind_zonefiles_dir'].'/' . $this->zone_file_prefix() . str_replace("/", "_", substr($data['old']['origin'], 0, -1));
 			if(is_file($filename.'.signed')) unlink($filename.'.signed');
- 		} else if ($data['new']['dnssec_wanted'] == 'Y') $this->soa_dnssec_update($data);
+ 		} elseif ($data['new']['dnssec_wanted'] == 'Y') {
+			$this->soa_dnssec_update($data);
+		}
 		// END DNSSEC
-		
+
 		//* rebuild the named.conf file if the origin has changed or when the origin is inserted.
 		//if($this->action == 'insert' || $data['old']['origin'] != $data['new']['origin']) {
 		$this->write_named_conf($data, $dns_config);
@@ -329,7 +376,7 @@ class bind_plugin {
 			if(is_file($filename.'.err')) unlink($filename.'.err');
 			if(is_file($filename.'.signed')) unlink($filename.'.signed');
  		}
- 		
+
 		//* Restart bind nameserver if update_acl is not empty, otherwise reload it
 		if($data['new']['update_acl'] != '') {
 			$app->services->restartServiceDelayed('bind', 'restart');
@@ -360,7 +407,7 @@ class bind_plugin {
 			//delete keys
 			$app->system->exec_safe('/usr/local/ispconfig/server/scripts/dnssec-delete.sh ?', $data['old']['origin']);
 		}
- 		
+
 		//* Reload bind nameserver
 		$app->services->restartServiceDelayed('bind', 'reload');
 
@@ -485,8 +532,6 @@ class bind_plugin {
 			$options = '';
 			if(trim($tmp['xfer']) != '') {
 				$options .= "        allow-transfer {".str_replace(',', ';', $tmp['xfer']).";};\n";
-			} else {
-				$options .= "        allow-transfer {none;};\n";
 			}
 			if(trim($tmp['also_notify']) != '') $options .= '        also-notify {'.str_replace(',', ';', $tmp['also_notify']).";};\n";
 			if(trim($tmp['update_acl']) != '') $options .= "        allow-update {".str_replace(',', ';', $tmp['update_acl']).";};\n";
@@ -510,7 +555,7 @@ class bind_plugin {
 		foreach($tmps_sec as $tmp) {
 
 			// When you have more than one master, the serial number is used to determine which Master has the most current version of the zone by the
-			// slaves.  The slaves actually ask for the SOA record from each Master when refreshing. 
+			// slaves.  The slaves actually ask for the SOA record from each Master when refreshing.
 			$options = "        masters {".str_replace(',', ';', $tmp['ns']).";};\n";
 			if(trim($tmp['xfer']) != '') {
 				$options .= "        allow-transfer {".str_replace(',', ';', $tmp['xfer']).";};\n";
diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index ad122807ba61edc34369f773c811f59f833c12f7..1d44a849aacf57d5edc6a92c9e8f208e6f275805 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -103,7 +103,7 @@ class cron_plugin {
 			$app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		// Get the client ID
 		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $data["new"]["sys_groupid"]);
 		$client_id = intval($client["client_id"]);
@@ -123,7 +123,7 @@ class cron_plugin {
 			$app->system->exec_safe("useradd -d ? -g ? ? -s /bin/false", $parent_domain["document_root"], $groupname, $username);
 			$app->log("Adding the user: $username", LOGLEVEL_DEBUG);
 		}
-        
+
         // Set the quota for the user
         if($username != '' && $app->system->is_user($username)) {
            if($parent_domain['hd_quota'] > 0) {
@@ -144,7 +144,7 @@ class cron_plugin {
               $app->system->exec_safe('setquota -u ? ? ? 0 0 -a &> /dev/null', $username, $blocks_soft, $blocks_hard);
               $app->system->exec_safe('setquota -T -u ? 604800 604800 -a &> /dev/null', $username);
             } elseif ($file_system == 'xfs') {
-                
+
               $app->system->exec_safe("xfs_quota -x -c ? ?", "limit -u bsoft=$mb_soft" . 'm'. " bhard=$mb_hard" . 'm'. " $username", $primitive_root);
 
               // xfs only supports timers globally, not per user.
@@ -177,21 +177,23 @@ class cron_plugin {
 	}
 
 	function delete($event_name, $data) {
-		global $app, $conf;
+		global $app;
 
 		//* get data from web
 		$parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `hd_quota` FROM `web_domain` WHERE `domain_id` = ?", $data["old"]["parent_domain_id"]);
-		if(!$parent_domain["domain_id"]) {
-			$app->log("Parent domain not found", LOGLEVEL_WARN);
-			return 0;
-		}
-
-		// Get the client ID
-		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ?", $data["old"]["sys_groupid"]);
-		$client_id = intval($client["client_id"]);
-		unset($client);
 
-		$this->parent_domain = $parent_domain;
+		if(!$parent_domain) {
+			$tmp = $app->db->queryOneRecord('SELECT * FROM sys_datalog WHERE dbtable = ? AND dbidx = ? AND `action` = ? ORDER BY `datalog_id` DESC', 'web_domain', 'domain_id:' . $data['old']['parent_domain_id'], 'd');
+			$tmp = unserialize($tmp);
+			if($tmp && isset($tmp['old'])) {
+				$this->parent_domain = $tmp['old'];
+			} else {
+				$app->log("Parent domain not found", LOGLEVEL_WARN);
+				return 0;
+			}
+		} else {
+			$this->parent_domain = $parent_domain;
+		}
 		$this->_write_crontab();
 	}
 
@@ -223,18 +225,18 @@ class cron_plugin {
 				} else {
 					$cron_line = str_replace(" ", "", $job['run_min']) . "\t" . str_replace(" ", "", $job['run_hour']) . "\t" . str_replace(" ", "", $job['run_mday']) . "\t" . str_replace(" ", "", $job['run_month']) . "\t" . str_replace(" ", "", $job['run_wday']);
 				}
-				
+
 				$log_target = "";
 				$log_wget_target = '/dev/null';
 				$log_root = '';
 				if($job['log'] == 'y') {
 					if($job['type'] != 'chrooted') $log_root = $this->parent_domain['document_root'];
 					$log_root .= '/private';
-					
+
 					$log_target = '>>' . $log_root . '/cron.log 2>>' . $log_root . '/cron_error.log';
 					$log_wget_target = $log_root . '/cron_wget.log';
 				}
-				
+
 				$cron_line .= "\t{$this->parent_domain['system_user']}"; //* running as user
 				if($job['type'] == 'url') {
 					$cron_line .= "\t{$cron_config['wget']} --no-check-certificate --user-agent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' -q -t 1 -T 7200 -O " . $log_wget_target . " " . escapeshellarg($job['command']) . " " . $log_target;
@@ -243,7 +245,7 @@ class cron_plugin {
 						$app->log("Insecure Cron job SKIPPED: " . $job['command'], LOGLEVEL_WARN);
 						continue;
 					}
-					
+
 					$web_root = '';
 					if($job['type'] == 'chrooted') {
 						if(substr($job['command'], 0, strlen($this->parent_domain['document_root'])) == $this->parent_domain['document_root']) {
@@ -253,7 +255,7 @@ class cron_plugin {
 					} else {
 						$web_root = $this->parent_domain['document_root'];
 					}
-					
+
 					$web_root .= '/web';
 					$job['command'] = str_replace('[web_root]', $web_root, $job['command']);
 
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 4d5ac826d3780f4d264f07c0060a9f0ffe13bd56..c584b6821592531b7f6ee3ffa11994bb74097fbb 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -135,7 +135,7 @@ class mail_plugin {
 			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]);
 			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]);
 			$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]);
-			
+
 			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]);
 			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]);
 			$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]);
@@ -149,26 +149,26 @@ class mail_plugin {
 				$app->log('Created Directory: '.$maildomain_path, LOGLEVEL_DEBUG);
 				$maildomain_path .= '/Maildir';
 			}
-					
+
 			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
 				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
 				$app->system->exec_safe("su -c ? vmail", "mv -f " . $data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']);
 				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN);
 			}
-	
+
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!empty($maildomain_path) && !is_dir($maildomain_path)) {
-	
+
 				$app->system->maildirmake($maildomain_path, $user, '', $group);
-	
+
 				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
 				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
 					if(is_dir($maildomain_path)) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$maildomain_path, $user); // Avoid maildirmake quota bug, see debian bug #214911
 					$app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$maildomain_path."' ".$user, LOGLEVEL_DEBUG);
 				}
 			}
-	
+
 			if(!is_dir($data['new']['maildir'].'/.Sent')) {
 				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
 			}
@@ -181,11 +181,11 @@ class mail_plugin {
 			if(!is_dir($data['new']['maildir'].'/.Junk')) {
 				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
 			}
-	
+
 			// Set permissions now recursive
 			$app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']);
 			$app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG);
-	
+
 			//* Set the maildir quota
 			if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') {
 				if($data['new']['quota'] > 0) {
@@ -195,61 +195,63 @@ class mail_plugin {
 			}
 		}
 
-		//* Send the welcome email message
-		$tmp = explode('@', $data["new"]["email"]);
-		$domain = $tmp[1];
-		unset($tmp);
-		$html = false;
-		if(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html');
-			$html = true;
-		} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html');
-			$html = true;
-		} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt');
-		} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt');
-		} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt')) {
-			$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt');
-		} elseif(file_exists($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt')) {
-			$lines = file($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt');
-		} else {
-			$lines = file($conf['rootpath'].'/conf/mail/welcome_email_en.txt');
-		}
-
-		//* Get from address
-		$parts = explode(':', trim($lines[0]));
-		unset($parts[0]);
-		$welcome_mail_from  = implode(':', $parts);
-		unset($lines[0]);
-
-		//* Get subject
-		$parts = explode(':', trim($lines[1]));
-		unset($parts[0]);
-		$welcome_mail_subject  = implode(':', $parts);
-		unset($lines[1]);
-
-		//* Get message
-		$welcome_mail_message = trim(implode($lines));
-		unset($tmp);
-
-		$mailHeaders      = "MIME-Version: 1.0" . "\n";
-		if($html) {
-			$mailHeaders     .= "Content-Type: text/html; charset=utf-8" . "\n";
-			$mailHeaders     .= "Content-Transfer-Encoding: quoted-printable" . "\n";
-		} else {
-			$mailHeaders     .= "Content-Type: text/plain; charset=utf-8" . "\n";
-			$mailHeaders     .= "Content-Transfer-Encoding: 8bit" . "\n";
-		}
-		$mailHeaders     .= "From: $welcome_mail_from" . "\n";
-		$mailHeaders     .= "Reply-To: $welcome_mail_from" . "\n";
-		$mailTarget       = $data["new"]["email"];
-		$mailSubject      = "=?utf-8?B?".base64_encode($welcome_mail_subject)."?=";
+		$global_config = $app->getconf->get_global_config('mail');
+		if($global_config['enable_welcome_mail'] == 'y') {
+			//* Send the welcome email message
+			$tmp = explode('@', $data["new"]["email"]);
+			$domain = $tmp[1];
+			unset($tmp);
+			$html = false;
+			if(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html');
+				$html = true;
+			} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html');
+				$html = true;
+			} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt');
+			} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt');
+			} elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt')) {
+				$lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt');
+			} elseif(file_exists($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt')) {
+				$lines = file($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt');
+			} else {
+				$lines = file($conf['rootpath'].'/conf/mail/welcome_email_en.txt');
+			}
 
-		//* Send the welcome email only on the "master" mail server to avoid duplicate emails
-		if($conf['mirror_server_id'] == 0) mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders);
+			//* Get from address
+			$parts = explode(':', trim($lines[0]));
+			unset($parts[0]);
+			$welcome_mail_from  = implode(':', $parts);
+			unset($lines[0]);
+
+			//* Get subject
+			$parts = explode(':', trim($lines[1]));
+			unset($parts[0]);
+			$welcome_mail_subject  = implode(':', $parts);
+			unset($lines[1]);
+
+			//* Get message
+			$welcome_mail_message = trim(implode($lines));
+			unset($tmp);
+
+			$mailHeaders      = "MIME-Version: 1.0" . "\n";
+			if($html) {
+				$mailHeaders     .= "Content-Type: text/html; charset=utf-8" . "\n";
+				$mailHeaders     .= "Content-Transfer-Encoding: quoted-printable" . "\n";
+			} else {
+				$mailHeaders     .= "Content-Type: text/plain; charset=utf-8" . "\n";
+				$mailHeaders     .= "Content-Transfer-Encoding: 8bit" . "\n";
+			}
+			$mailHeaders     .= "From: $welcome_mail_from" . "\n";
+			$mailHeaders     .= "Reply-To: $welcome_mail_from" . "\n";
+			$mailTarget       = $data["new"]["email"];
+			$mailSubject      = "=?utf-8?B?".base64_encode($welcome_mail_subject)."?=";
 
+			//* Send the welcome email only on the "master" mail server to avoid duplicate emails
+			if($conf['mirror_server_id'] == 0) mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders);
+		}
 	}
 
 	function user_update($event_name, $data) {
@@ -261,7 +263,7 @@ class mail_plugin {
 
 		// Maildir-Format must not be changed on this way !!
 		$data['new']['maildir_format'] = $data['old']['maildir_format'];
-		
+
 		$maildomain_path = $data['new']['maildir'];
 		$tmp_basepath = $data['new']['maildir'];
 		$tmp_basepath_parts = explode('/', $tmp_basepath);
@@ -315,7 +317,7 @@ class mail_plugin {
 				$app->system->exec_safe('mv -f ? ?'. $data['old']['maildir'], $data['new']['maildir']);
 				$app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG);
 			}
-				
+
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!is_dir($data['new']['maildir'].'/mdbox')) {
 				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? INBOX'", $data["new"]["email"]);
@@ -323,7 +325,7 @@ class mail_plugin {
 				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]);
 				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]);
 				$app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]);
-					
+
 				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]);
 				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]);
 				$app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]);
@@ -338,18 +340,18 @@ class mail_plugin {
 				$app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG);
 				$maildomain_path .= '/Maildir';
 			}
-	
+
 			//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 			if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
 				if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
 				$app->system->exec_safe("su -c ? ?", "mv -f ".$data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 'vmail');
 				$app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN);
 			}
-	
+
 			//* Create the maildir, if it doesn not exist, set permissions, set quota.
 			if(!empty($maildomain_path) && !is_dir($maildomain_path.'/new')) {
 				$app->system->maildirmake($maildomain_path, $user, '', $group);
-	
+
 				//* This is to fix the maildrop quota not being rebuilt after the quota is changed.
 				if($mail_config['pop3_imap_daemon'] != 'dovecot') {
 					if($data['new']['quota'] > 0) {
@@ -361,7 +363,7 @@ class mail_plugin {
 					}
 				}
 			}
-	
+
 			if(!is_dir($data['new']['maildir'].'/.Sent')) {
 				$app->system->maildirmake($maildomain_path, $user, 'Sent', $group);
 			}
@@ -374,11 +376,11 @@ class mail_plugin {
 			if(!is_dir($data['new']['maildir'].'/.Junk')) {
 				$app->system->maildirmake($maildomain_path, $user, 'Junk', $group);
 			}
-	
+
 			// Set permissions now recursive
 			$app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']);
 			$app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG);
-	
+
 			// Move mailbox, if domain has changed and delete old mailbox
 			if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) {
 				if(is_dir($data['new']['maildir'])) {
@@ -470,7 +472,7 @@ class mail_plugin {
 		} else {
 			$app->log('Possible security violation when deleting the mail domain mailfilter directory: '.$old_maildomain_path, LOGLEVEL_ERROR);
 		}
-		
+
 		//* Delete the mail-backups
 		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 		$backup_dir = $server_config['backup_dir'];
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index 9c9939655c7dd3cdc802ee1a44521d385eb86845..130d0a7f187ccfe6baea029754e0501c5cbfc589 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -100,144 +100,140 @@ class maildeliver_plugin {
 			$sieve_file = $data["new"]["maildir"].'/.sieve';
 			$sieve_file_svbin = $data["new"]["maildir"].'/.sieve.svbin';
 			$old_sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
-			$sieve_file_isp = $data["new"]["maildir"].'/.ispconfig.sieve';
-			$sieve_file_isp_svbin = $data["new"]["maildir"].'/.ispconfig.svbin';
+			$sieve_file_isp_before = $data["new"]["maildir"].'/.ispconfig-before.sieve';
+			$sieve_file_isp_before_svbin = $data["new"]["maildir"].'/.ispconfig-before.svbin';
+			$sieve_file_isp_after = $data["new"]["maildir"].'/.ispconfig.sieve';
+			$sieve_file_isp_after_svbin = $data["new"]["maildir"].'/.ispconfig.svbin';
+
 			if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp)  or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
 			// cleanup .sieve file if it is now a broken link
 			if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
 			if(is_file($sieve_file_svbin)) unlink($sieve_file_svbin)  or $app->log("Unable to delete file: $sieve_file_svbin", LOGLEVEL_WARN);
-			if(is_file($sieve_file_isp)) unlink($sieve_file_isp)  or $app->log("Unable to delete file: $sieve_file_isp", LOGLEVEL_WARN);
-			if(is_file($sieve_file_isp_svbin)) unlink($sieve_file_isp_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_svbin", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_before)) unlink($sieve_file_isp_before)  or $app->log("Unable to delete file: $sieve_file_isp_before", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_before_svbin)) unlink($sieve_file_isp_before_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_before_svbin", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_after)) unlink($sieve_file_isp_after)  or $app->log("Unable to delete file: $sieve_file_isp_after", LOGLEVEL_WARN);
+			if(is_file($sieve_file_isp_after_svbin)) unlink($sieve_file_isp_after_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_after_svbin", LOGLEVEL_WARN);
 			$app->load('tpl');
 
-			//* Select sieve filter file for dovecot version
-			exec('dovecot --version', $tmp);
-			if(substr($tmp[0], 0, 3) == '1.0') {
-				$filter_file_template = "sieve_filter.master";
-			} elseif(substr($tmp[0], 0, 3) == '1.2') {
-				$filter_file_template = "sieve_filter_1.2.master";
-			} elseif(substr($tmp[0], 0, 1) == '2') {
-				$filter_file_template = "sieve_filter_1.2.master";
-			} else {
-				$filter_file_template = "sieve_filter.master";
-			}
-			unset($tmp);
-
-			//* Create new filter file based on template
-			$tpl = new tpl();
-			$tpl->newTemplate($filter_file_template);
+			foreach ( array('before', 'after') as $sieve_script ) {
+				//* Create new filter file based on template
+				$tpl = new tpl();
+				$tpl->newTemplate("sieve_filter.master");
 
-			// cc Field
-			$tmp_mails_arr = explode(',',$data["new"]["cc"]);
-			$tmp_addresses_arr = array();
-			foreach($tmp_mails_arr as $address) {
-				if(trim($address) != '') $tmp_addresses_arr[] = array('address' => trim($address));
-			}
+				// cc Field
+				$tmp_mails_arr = explode(',',$data["new"]["cc"]);
+				$tmp_addresses_arr = array();
+				foreach($tmp_mails_arr as $address) {
+					if(trim($address) != '') $tmp_addresses_arr[] = array('address' => trim($address));
+				}
 			
-			$tpl->setVar('cc', $data["new"]["cc"]);
-			$tpl->setLoop('ccloop', $tmp_addresses_arr);
-
-			// Custom filters
-			if($data["new"]["custom_mailfilter"] == 'NULL') $data["new"]["custom_mailfilter"] = '';
-			$tpl->setVar('custom_mailfilter', str_replace("\r\n","\n",$data["new"]["custom_mailfilter"]));
-
-			// Move junk
-			$tpl->setVar('move_junk', $data["new"]["move_junk"]);
-
-			// Check autoresponder dates
-			if((!$data['new']['autoresponder_start_date'] || $data["new"]["autoresponder_start_date"] == '0000-00-00 00:00:00') && (!$data['new']['autoresponder_end_date'] || $data["new"]["autoresponder_end_date"] == '0000-00-00 00:00:00')) {
-				$tpl->setVar('autoresponder_date_limit', 0);
-			} else {
-				$tpl->setVar('autoresponder_date_limit', 1);
-			}
-
-
-			// Set autoresponder start date
-			$data["new"]["autoresponder_start_date"] = str_replace(" ", "T", $data["new"]["autoresponder_start_date"]);
-			$tpl->setVar('start_date', $data["new"]["autoresponder_start_date"]);
-
-			// Set autoresponder end date
-			$data["new"]["autoresponder_end_date"] = str_replace(" ", "T", $data["new"]["autoresponder_end_date"]);
-			$tpl->setVar('end_date', $data["new"]["autoresponder_end_date"]);
-
-			// Autoresponder
-			$tpl->setVar('autoresponder', $data["new"]["autoresponder"]);
-
-			// Autoresponder Subject
-			$data["new"]["autoresponder_subject"] = str_replace("\"", "'", $data["new"]["autoresponder_subject"]);
-			$tpl->setVar('autoresponder_subject', $data["new"]["autoresponder_subject"]);
-
-			// Autoresponder Text
-			$data["new"]["autoresponder_text"] = str_replace("\"", "'", $data["new"]["autoresponder_text"]);
-			$tpl->setVar('autoresponder_text', $data["new"]["autoresponder_text"]);
+				$tpl->setVar('cc', $data["new"]["cc"]);
+				$tpl->setLoop('ccloop', $tmp_addresses_arr);
+
+				// Custom filters
+				if($data["new"]["custom_mailfilter"] == 'NULL') $data["new"]["custom_mailfilter"] = '';
+				$tpl->setVar('custom_mailfilter', str_replace("\r\n","\n",$data["new"]["custom_mailfilter"]));
+
+				// Move junk
+				$tpl->setVar('move_junk', $data["new"]["move_junk"]);
+
+				// Set autoresponder start date
+				$data["new"]["autoresponder_start_date"] = str_replace(" ", "T", $data["new"]["autoresponder_start_date"]);
+				$tpl->setVar('start_date', $data["new"]["autoresponder_start_date"]);
+
+				// Set autoresponder end date
+				$data["new"]["autoresponder_end_date"] = str_replace(" ", "T", $data["new"]["autoresponder_end_date"]);
+				$tpl->setVar('end_date', $data["new"]["autoresponder_end_date"]);
+
+				// Autoresponder
+				$tpl->setVar('autoresponder', $data["new"]["autoresponder"]);
+
+				// Autoresponder Subject
+				$data["new"]["autoresponder_subject"] = str_replace("\"", "'", $data["new"]["autoresponder_subject"]);
+				$tpl->setVar('autoresponder_subject', $data["new"]["autoresponder_subject"]);
+
+				// Autoresponder Text
+				$data["new"]["autoresponder_text"] = str_replace("\"", "'", $data["new"]["autoresponder_text"]);
+				$tpl->setVar('autoresponder_text', $data["new"]["autoresponder_text"]);
+
+				if (! defined($address_str)) {
+					//* Set alias addresses for autoresponder
+					$sql = "SELECT * FROM mail_forwarding WHERE type = 'alias' AND destination = ?";
+					$records = $app->db->queryAllRecords($sql, $data["new"]["email"]);
+
+					$addresses = array();
+					$addresses[] = $data["new"]["email"];
+					if(is_array($records) && count($records) > 0) {
+						foreach($records as $rec) {
+							$addresses[] = $rec['source'];
+						}
+					}
 
-			//* Set alias addresses for autoresponder
-			$sql = "SELECT * FROM mail_forwarding WHERE type = 'alias' AND destination = ?";
-			$records = $app->db->queryAllRecords($sql, $data["new"]["email"]);
+					$app->log("Found " . count($addresses) . " addresses.", LOGLEVEL_DEBUG);
+
+					$alias_addresses = array();
+
+					$email_parts = explode('@', $data["new"]["email"]);
+					$sql = "SELECT * FROM mail_forwarding WHERE type = 'aliasdomain' AND destination = ?";
+					$records = $app->db->queryAllRecords($sql, '@'.$email_parts[1]);
+					if(is_array($records) && count($records) > 0) {
+						$app->log("Found " . count($records) . " records (aliasdomains).", LOGLEVEL_DEBUG);
+						foreach($records as $rec) {
+							$aliasdomain = substr($rec['source'], 1);
+							foreach($addresses as $email) {
+								$email_parts = explode('@', $email);
+								$alias_addresses[] = $email_parts[0].'@'.$aliasdomain;
+							}
+						}
+					}
 
-			$addresses = array();
-			$addresses[] = $data["new"]["email"];
-			if(is_array($records) && count($records) > 0) {
-				foreach($records as $rec) {
-					$addresses[] = $rec['source'];
-				}
-			}
+					$app->log("Found " . count($addresses) . " addresses at all.", LOGLEVEL_DEBUG);
 
-			$app->log("Found " . count($addresses) . " addresses.", LOGLEVEL_DEBUG);
+					$addresses = array_unique(array_merge($addresses, $alias_addresses));
 
-			$alias_addresses = array();
+					$app->log("Found " . count($addresses) . " unique addresses at all.", LOGLEVEL_DEBUG);
 
-			$email_parts = explode('@', $data["new"]["email"]);
-			$sql = "SELECT * FROM mail_forwarding WHERE type = 'aliasdomain' AND destination = ?";
-			$records = $app->db->queryAllRecords($sql, '@'.$email_parts[1]);
-			if(is_array($records) && count($records) > 0) {
-				$app->log("Found " . count($records) . " records (aliasdomains).", LOGLEVEL_DEBUG);
-				foreach($records as $rec) {
-					$aliasdomain = substr($rec['source'], 1);
-					foreach($addresses as $email) {
-						$email_parts = explode('@', $email);
-						$alias_addresses[] = $email_parts[0].'@'.$aliasdomain;
+					$address_str = '';
+					if(is_array($addresses) && count($addresses) > 0) {
+						$address_str .= ':addresses [';
+						foreach($addresses as $rec) {
+							$address_str .= '"'.$rec.'",';
+						}
+						$address_str = substr($address_str, 0, -1);
+						$address_str .= ']';
 					}
 				}
-			}
 
-			$app->log("Found " . count($addresses) . " addresses at all.", LOGLEVEL_DEBUG);
+				$tpl->setVar('addresses', $address_str);
 
-			$addresses = array_unique(array_merge($addresses, $alias_addresses));
-
-			$app->log("Found " . count($addresses) . " unique addresses at all.", LOGLEVEL_DEBUG);
-
-			$address_str = '';
-			if(is_array($addresses) && count($addresses) > 0) {
-				$address_str .= ':addresses [';
-				foreach($addresses as $rec) {
-					$address_str .= '"'.$rec.'",';
+				if ( ! is_dir($data["new"]["maildir"].'/sieve/') ) {
+					$app->system->mkdirpath($data["new"]["maildir"].'/sieve/', 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
 				}
-				$address_str = substr($address_str, 0, -1);
-				$address_str .= ']';
-			}
-
 
-			$tpl->setVar('addresses', $address_str);
-
-			if ( ! is_dir($data["new"]["maildir"].'/sieve/') ) {
-				$app->system->mkdirpath($data["new"]["maildir"].'/sieve/', 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
-			}
+				$tpl->setVar('sieve_script', $sieve_script);
+				if ($sieve_script == 'before') {
+					$sieve_file_isp = $sieve_file_isp_before;
+					$sieve_file_isp_svbin = $sieve_file_isp_before_svbin;
+				} elseif ($sieve_script == 'after') {
+					$sieve_file_isp = $sieve_file_isp_after;
+					$sieve_file_isp_svbin = $sieve_file_isp_after_svbin;
+				}
 
-			file_put_contents($sieve_file_isp, $tpl->grab()) or $app->log("Unable to write sieve filter file", LOGLEVEL_WARN);
-			if ( is_file($sieve_file_isp) ) {
-				$app->system->chown($sieve_file_isp,$mail_config['mailuser_name'],false);
-				$app->system->chgrp($sieve_file_isp,$mail_config['mailuser_group'],false);
+				file_put_contents($sieve_file_isp, $tpl->grab()) or $app->log("Unable to write sieve filter file " . $sieve_file_isp, LOGLEVEL_WARN);
+				if ( is_file($sieve_file_isp) ) {
+					$app->system->chown($sieve_file_isp,$mail_config['mailuser_name'],false);
+					$app->system->chgrp($sieve_file_isp,$mail_config['mailuser_group'],false);
 
-				$app->system->exec_safe("sievec ?", "$sieve_file_isp");
-				if ( is_file($sieve_file_isp_svbin) ) {
-					$app->system->chown($sieve_file_isp_svbin,$mail_config['mailuser_name'],false);
-					$app->system->chgrp($sieve_file_isp_svbin,$mail_config['mailuser_group'],false);
+					$app->system->exec_safe("sievec ?", "$sieve_file_isp");
+					if ( is_file($sieve_file_isp_svbin) ) {
+						$app->system->chown($sieve_file_isp_svbin,$mail_config['mailuser_name'],false);
+						$app->system->chgrp($sieve_file_isp_svbin,$mail_config['mailuser_group'],false);
+					}
 				}
-			}
 
-			unset($tpl);
+				unset($tpl);
 
+			}
 		}
 	}
 
@@ -246,15 +242,20 @@ class maildeliver_plugin {
 
 		$sieve_file = $data["old"]["maildir"].'/.sieve';
 		$sieve_file_svbin = $data["old"]["maildir"].'/.sieve.svbin';
-		$old_sieve_file_isp = $data["old"]["maildir"].'/sieve/ispconfig.sieve';
-		$sieve_file_isp = $data["old"]["maildir"].'/.ispconfig.sieve';
-		$sieve_file_isp_svbin = $data["old"]["maildir"].'/.ispconfig.svbin';
+		$old_sieve_file_isp = $data["new"]["maildir"].'/sieve/ispconfig.sieve';
+		$sieve_file_isp_before = $data["old"]["maildir"].'/.ispconfig-before.sieve';
+		$sieve_file_isp_before_svbin = $data["old"]["maildir"].'/.ispconfig-before.svbin';
+		$sieve_file_isp_after = $data["old"]["maildir"].'/.ispconfig.sieve';
+		$sieve_file_isp_after_svbin = $data["old"]["maildir"].'/.ispconfig.svbin';
+
 		if(is_file($old_sieve_file_isp)) unlink($old_sieve_file_isp)  or $app->log("Unable to delete file: $old_sieve_file_isp", LOGLEVEL_WARN);
 		// cleanup .sieve file if it is now a broken link
 		if(is_link($sieve_file) && !file_exists($sieve_file)) unlink($sieve_file)  or $app->log("Unable to delete file: $sieve_file", LOGLEVEL_WARN);
 		if(is_file($sieve_file_svbin)) unlink($sieve_file_svbin)  or $app->log("Unable to delete file: $sieve_file_svbin", LOGLEVEL_WARN);
-		if(is_file($sieve_file_isp)) unlink($sieve_file_isp)  or $app->log("Unable to delete file: $sieve_file_isp", LOGLEVEL_WARN);
-		if(is_file($sieve_file_isp_svbin)) unlink($sieve_file_isp_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_svbin", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_before)) unlink($sieve_file_isp_before)  or $app->log("Unable to delete file: $sieve_file_isp_before", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_before_svbin)) unlink($sieve_file_isp_before_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_before_svbin", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_after)) unlink($sieve_file_isp_after)  or $app->log("Unable to delete file: $sieve_file_isp_after", LOGLEVEL_WARN);
+		if(is_file($sieve_file_isp_after_svbin)) unlink($sieve_file_isp_after_svbin)  or $app->log("Unable to delete file: $sieve_file_isp_after_svbin", LOGLEVEL_WARN);
 	}
 
 
diff --git a/server/plugins-available/maildrop_plugin.inc.php b/server/plugins-available/maildrop_plugin.inc.php
index 2fefa26cfc95cfc697dc456278f136258543628b..00777a1662e7c9a7dea5deddbf70ee6ac563a1a6 100644
--- a/server/plugins-available/maildrop_plugin.inc.php
+++ b/server/plugins-available/maildrop_plugin.inc.php
@@ -146,9 +146,12 @@ class maildrop_plugin {
 
 				if ($data['new']['autoresponder_start_date'] && $data["new"]["autoresponder_start_date"] != '0000-00-00 00:00:00') { // Dates have been set
 					$tpl = str_replace('{start_date}', strtotime($data["new"]["autoresponder_start_date"]), $tpl);
-					$tpl = str_replace('{end_date}', strtotime($data["new"]["autoresponder_end_date"]), $tpl);
 				} else {
 					$tpl = str_replace('{start_date}', -7200, $tpl);
+				}
+				if ($data['new']['autoresponder_end_date'] && $data["new"]["autoresponder_end_date"] != '0000-00-00 00:00:00') { // Dates have been set
+					$tpl = str_replace('{end_date}', strtotime($data["new"]["autoresponder_end_date"]), $tpl);
+				} else {
 					$tpl = str_replace('{end_date}', 2147464800, $tpl);
 				}
 
@@ -204,7 +207,7 @@ class maildrop_plugin {
 					$app->log("Added CC address ".$data["new"]["cc"].' to mailfilter file.', LOGLEVEL_DEBUG);
 				}
 
-				if($data["new"]["move_junk"] == 'y') {
+				if($data["new"]["move_junk"] != 'n') {
 					if(file_exists($conf["rootpath"].'/conf-custom/mailfilter_move_junk.master')) {
 						$mailfilter_content .= file_get_contents($conf["rootpath"].'/conf-custom/mailfilter_move_junk.master')."\n";
 					} else {
diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php
index e6251aedf10637a4891900f3ec2c9e13455660b9..da033b80ccfc846e9f82a7f54e97ea99393408d7 100644
--- a/server/plugins-available/mailman_plugin.inc.php
+++ b/server/plugins-available/mailman_plugin.inc.php
@@ -71,9 +71,12 @@ class mailman_plugin {
 	function insert($event_name, $data) {
 		global $app, $conf;
 
+		$global_config = $app->getconf->get_global_config('mail');
+		$opt_quiet = ($global_config['enable_welcome_mail'] == 'n') ?  "-q" : "";
+
 		$this->update_config();
 
-		$pid = $app->system->exec_safe("nohup /usr/lib/mailman/bin/newlist -u ? -e ? ? ? ? >/dev/null 2>&1 & echo $!;", $data["new"]["domain"], $data["new"]["domain"], $data["new"]["listname"], $data["new"]["email"], $data["new"]["password"]);
+		$pid = $app->system->exec_safe("nohup /usr/lib/mailman/bin/newlist ? -u ? -e ? ? ? ? >/dev/null 2>&1 & echo $!;", $opt_quiet, $data["new"]["domain"], $data["new"]["domain"], $data["new"]["listname"], $data["new"]["email"], $data["new"]["password"]);
 		// wait for /usr/lib/mailman/bin/newlist-call
 		$running = true;
 		do {
@@ -87,9 +90,9 @@ class mailman_plugin {
 		}
 		if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
 		if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman');
-		
+
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
-		
+
 		// Fix list URL
 		$app->system->exec_safe('/usr/sbin/withlist -l -r fix_url ?', $data["new"]["listname"]);
 
@@ -100,7 +103,7 @@ class mailman_plugin {
 	// The purpose of this plugin is to rewrite the main.cf file
 	function update($event_name, $data) {
 		global $app, $conf;
-		
+
 		$this->update_config();
 
 		if($data["new"]["password"] != $data["old"]["password"] && $data["new"]["password"] != '') {
@@ -108,7 +111,7 @@ class mailman_plugin {
 			exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
 			$app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']);
 		}
-		
+
 		if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
 		if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman');
 	}
@@ -121,7 +124,7 @@ class mailman_plugin {
 		$app->system->exec_safe("nohup /usr/lib/mailman/bin/rmlist -a ? >/dev/null 2>&1 &", $data["old"]["listname"]);
 
 		exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &');
-		
+
 		if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
 		if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman');
 
diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index 72f602f9dae2e7ac46da32d4aaf72803e9c979b6..e1fba6e18082c4fda64addbb5a293bc3b9940f95 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -529,7 +529,7 @@ class mysql_clientdb_plugin {
 			//* Remote access option has changed.
 			if($data['new']['remote_access'] != $data['old']['remote_access']) {
 
-				//* set new priveliges
+				//* set new privileges
 				if($data['new']['remote_access'] == 'y') {
 					if($db_user) {
 						if($db_user['database_user'] == 'root'){
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 51f566a00c6f6574be20f90f1f2d634cee43e036..4b20a0339167f0ea41cf64c8bbc723ca0bba9be7 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -88,6 +88,35 @@ class nginx_plugin {
 
 		$app->plugins->registerEvent('web_folder_update', $this->plugin_name, 'web_folder_update');
 		$app->plugins->registerEvent('web_folder_delete', $this->plugin_name, 'web_folder_delete');
+
+		$app->plugins->registerEvent('directive_snippets_update', $this->plugin_name, 'directive_snippets');
+	}
+
+	function directive_snippets($event_name, $data) {
+		global $app, $conf;
+
+		$snippet = $data['new'];
+
+		if($snippet['active'] == 'y' && $snippet['update_sites'] == 'y') {
+			if($snippet['type'] == 'php') {
+				$rlike = $snippet['directive_snippets_id'].'|,'.$snippet['directive_snippets_id'].'|'.$snippet['directive_snippets_id'].',';
+				$affected_snippets = $app->db->queryAllRecords('SELECT directive_snippets_id FROM directive_snippets WHERE required_php_snippets RLIKE(?) AND type = ?', $rlike, 'nginx');
+				if(is_array($affected_snippets) && !empty($affected_snippets)) {
+					foreach($affected_snippets as $snippet) $sql_in[] = $snippet['directive_snippets_id'];
+					$affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id IN ?', $conf['server_id'], $sql_in);
+				}
+			}
+			if($snippet['type'] == 'nginx') $affected_sites = $app->db->queryAllRecords('SELECT domain_id FROM web_domain WHERE server_id = ? AND directive_snippets_id = ?', $conf['server_id'], $snippet['directive_snippets_id']);
+
+			if(is_array($affected_sites) && !empty($affected_sites)) {
+				foreach($affected_sites as $site) {
+					$website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ?', $site['domain_id']);
+					$new_data['old'] = $website;
+					$new_data['new'] = $website;
+					$this->update('web_domain_update', $new_data);
+				}
+			}
+		}
 	}
 
 	// Handle the creation of SSL certificates
@@ -425,6 +454,11 @@ class nginx_plugin {
 			$log_folder .= '/' . $subdomain_host;
 			unset($tmp);
 
+			if($app->system->is_blacklisted_web_path($web_folder)) {
+				$app->log('Vhost ' . $subdomain_host . ' is using a blacklisted web folder: ' . $web_folder, LOGLEVEL_ERROR);
+				return 0;
+			}
+
 			if(isset($data['old']['parent_domain_id'])) {
 				// old one
 				$tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ?', $data['old']['parent_domain_id']);
@@ -573,7 +607,13 @@ class nginx_plugin {
 		// Check if the directories are there and create them if necessary.
 		$app->system->web_folder_protection($data['new']['document_root'], false);
 
-		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
+		if(!is_dir($data['new']['document_root'].'/' . $web_folder)) {
+			if($web_folder !== 'web') { //vhost sub/alias
+				$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder, 0755, $username, $groupname);
+			} else {
+				$app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder);
+			}
+		}
 		if(!is_dir($data['new']['document_root'].'/' . $web_folder . '/error') and $data['new']['errordocs']) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/error');
 		if($data['new']['stats_type'] != '' && !is_dir($data['new']['document_root'].'/' . $web_folder . '/stats')) $app->system->mkdirpath($data['new']['document_root'].'/' . $web_folder . '/stats');
 		if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl');
@@ -994,30 +1034,29 @@ class nginx_plugin {
 		}
 		if($data['new']['ip_address'] == '*' && $data['new']['ipv6_address'] == '') $tpl->setVar('ipv6_wildcard', 1);
 
-		// PHP-FPM
-		// Support for multiple PHP versions
-		/*
-		if(trim($data['new']['fastcgi_php_version']) != ''){
-			$default_php_fpm = false;
-			list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-			if(substr($custom_php_fpm_ini_dir,-1) != '/') $custom_php_fpm_ini_dir .= '/';
-		} else {
-			$default_php_fpm = true;
-		}
-		*/
 		if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
 		} else {
-			if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] != 'no'){
+			if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
@@ -1194,6 +1233,9 @@ class nginx_plugin {
 			$nginx_directives = $data['new']['nginx_directives'];
 //			$vhost_data['enable_pagespeed'] = false;
 		}
+		if(!$nginx_directives) {
+			$nginx_directives = ''; // ensure it is not null
+		}
 
 		// folder_directive_snippets
 		if(trim($data['new']['folder_directive_snippets']) != ''){
@@ -1892,6 +1934,26 @@ class nginx_plugin {
 			$this->awstats_update($data, $web_config);
 		}
 
+                //* Create GoAccess configuration
+                if($data['new']['stats_type'] == 'goaccess' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
+                        $this->goaccess_update($data, $web_config);
+                }
+
+                //* Remove the AWstats configuration file
+		if($data['old']['stats_type'] == 'awstats' && $data['new']['stats_type'] != 'awstats') {
+			$this->awstats_delete($data, $web_config);
+                }
+
+		//* Remove the GoAccess configuration file
+		if($data['old']['stats_type'] == 'goaccess' && $data['new']['stats_type'] != 'goaccess') {
+			$this->goaccess_delete($data, $web_config);
+		}
+
+                //* Remove the Webalizer configuration file
+		if($data['old']['stats_type'] == 'webalizer' && $data['new']['stats_type'] != 'webalizer') {
+			$this->webalizer_delete($data, $web_config);
+                }
+
 		//* Remove Stats-Folder when Statistics set to none
 		if($data['new']['stats_type'] == '' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) {
 			$app->file->removeDirectory($data['new']['document_root'].'/web/stats');
@@ -2518,6 +2580,101 @@ class nginx_plugin {
 		//$app->services->restartServiceDelayed('httpd','reload');
 	}
 
+
+
+	//* Update the GoAccess configuration file
+	private function goaccess_update ($data, $web_config) {
+                global $app;
+
+                $web_folder = $data['new']['web_folder'];
+                if($data['new']['type'] == 'vhost') $web_folder = 'web';
+
+                $goaccess_conf_locs = array('/etc/goaccess.conf', '/etc/goaccess/goaccess.conf');
+                $count = 0;
+
+                foreach($goaccess_conf_locs as $goa_loc) {
+                        if(is_file($goa_loc) && (filesize($goa_loc) > 0)) {
+                                $goaccess_conf_main = $goa_loc;
+                                break;
+                        } else {
+                                $count++; 
+                                if($count == 2) {
+                                        $app->log("No GoAccess base config found. Make sure that GoAccess is installed and that the goaccess.conf does exist in /etc or /etc/goaccess", LOGLEVEL_WARN);
+                                }
+                        }
+                }
+
+                if(!is_dir($data['new']['document_root']."/" . $web_folder . "/stats/.db")) $app->system->mkdirpath($data['new']['document_root'] . "/" . $web_folder . "/stats/.db");
+		$goaccess_conf = $data['new']['document_root'].'/log/goaccess.conf';
+
+                /*
+                In case that you use a different log format, you should use a custom goaccess.conf which you'll have to put into /usr/local/ispconfig/server/conf-custom/.
+                By default the originaly with GoAccess shipped goaccess.conf from /etc/ will be used along with the log-format value COMBINED. 
+                */
+
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess.conf.master")) {
+                        $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $goaccess_conf);
+
+                } elseif(!file_exists($goaccess_conf)) {
+
+                        /*
+                         By default the goaccess.conf should get copied by the webserver plugin but in case it wasn't, or it got deleted by accident we gonna copy it again to the destination dir.
+                         Also there was no /usr/local/ispconfig/server/conf-custom/goaccess.conf.master, so we gonna use /etc/goaccess.conf as the base conf.
+                         */
+
+                        $app->system->copy($goaccess_conf_main, $goaccess_conf);
+                        $content = $app->system->file_get_contents($goaccess_conf, true);
+                        $content = preg_replace('/^(#)?log-format COMBINED/m', "log-format COMBINED", $content);
+                        $app->system->file_put_contents($goaccess_conf, $content, true);
+                        unset($content);
+
+                }
+
+                if(file_exists($goaccess_conf)) {
+                        $domain = $data['new']['domain'];
+                        $content = $app->system->file_get_contents($goaccess_conf, true);
+                        $content = preg_replace('/^(#)?html-report-title(.*)/m', "html-report-title $domain", $content);
+                        $app->system->file_put_contents($goaccess_conf, $content, true);
+                        unset($content);
+
+                }
+
+                if(is_file($goaccess_conf) && (filesize($goaccess_conf) > 0)) {
+                        $app->log('Created GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
+                }
+
+                if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html");
+                if(file_exists("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master")) {
+                        $app->system->copy("/usr/local/ispconfig/server/conf-custom/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+                } else {
+                        $app->system->copy("/usr/local/ispconfig/server/conf/goaccess_index.php.master", $data['new']['document_root']."/" . $web_folder . "/stats/index.php");
+		}
+	}
+
+        //* Delete the GoAccess configuration file
+        private function goaccess_delete ($data, $web_config) {
+                global $app;
+
+                $goaccess_conf = $data['old']['document_root'] . "/log/goaccess.conf";
+
+                if ( @is_file($goaccess_conf) ) {
+                        $app->system->unlink($goaccess_conf);
+                        $app->log('Removed GoAccess config file: '.$goaccess_conf, LOGLEVEL_DEBUG);
+                }
+        }
+
+        //* Delete the Webalizer configuration file
+        private function webalizer_delete ($data, $web_config) {
+                global $app;
+
+                $webalizer_conf = $data['old']['document_root'] . "/log/webalizer.conf";
+
+                if ( @is_file($webalizer_conf) ) {
+                        $app->system->unlink($webalizer_conf);
+                        $app->log('Removed Webalizer config file: '.$webalizer_conf, LOGLEVEL_DEBUG);
+                }
+        }
+
 	//* Update the awstats configuration file
 	private function awstats_update ($data, $web_config) {
 		global $app;
@@ -2657,18 +2814,28 @@ class nginx_plugin {
 
 		// HHVM => PHP-FPM-Fallback
 		if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){
-			if(trim($data['new']['fastcgi_php_version']) != ''){
+			if($data['new']['server_php_id'] != 0){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
 		} else {
-			if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] != 'no'){
+			if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){
 				$default_php_fpm = false;
-				list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+				if($tmp_php) {
+					$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+					$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+					$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+					if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+				}
 			} else {
 				$default_php_fpm = true;
 			}
@@ -2869,10 +3036,15 @@ class nginx_plugin {
 	private function php_fpm_pool_delete ($data, $web_config) {
 		global $app, $conf;
 
-		if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] != 'no'){
+		if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){
 			$default_php_fpm = false;
-			list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version']));
-			if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+			$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']);
+			if($tmp_php) {
+				$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+				$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+				$custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir'];
+				if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+			}
 		} else {
 			$default_php_fpm = true;
 		}
diff --git a/server/plugins-available/nginx_reverseproxy_plugin.inc.php b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
index 1013042254ba2a2c63980394e6dc964021beb1f8..f35f40d34a2fd638de9532da7b7e30717c0c6e6b 100644
--- a/server/plugins-available/nginx_reverseproxy_plugin.inc.php
+++ b/server/plugins-available/nginx_reverseproxy_plugin.inc.php
@@ -111,7 +111,9 @@ class nginx_reverseproxy_plugin {
 		$crt_file = $ssl_dir.'/'.$domain.'.crt';
 		$bundle_file = $ssl_dir.'/'.$domain.'.bundle';
 
-		$vhost_data['nginx_directives'] = preg_replace("/\[IP\]/", $vhost_data['ip_address'], $vhost_data['nginx_directives']);
+		if($vhost_data['nginx_directives']) {
+			$vhost_data['nginx_directives'] = preg_replace("/\[IP\]/", $vhost_data['ip_address'], $vhost_data['nginx_directives']);
+		}
 
 
 		if($data['new']['ssl'] == 'y' && @is_file($crt_file) && @is_file($key_file)) {
diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php
index 80db1c102a08a8e3a0b21edb82d4621220336a1d..2d6f063cd855752aa730a5bda6c34961949a00e2 100644
--- a/server/plugins-available/postfix_server_plugin.inc.php
+++ b/server/plugins-available/postfix_server_plugin.inc.php
@@ -33,9 +33,6 @@ class postfix_server_plugin {
 	var $plugin_name = 'postfix_server_plugin';
 	var $class_name = 'postfix_server_plugin';
 
-
-	var $postfix_config_dir = '/etc/postfix';
-
 	//* This function is called during ispconfig installation to determine
 	//  if a symlink shall be created for this plugin.
 	function onInstall() {
@@ -73,17 +70,23 @@ class postfix_server_plugin {
 	// The purpose of this plugin is to rewrite the main.cf file
 	function update($event_name, $data) {
 		global $app, $conf;
+		$postfix_restart = false;
 
 		// get the config
 		$app->uses("getconf,system");
 		$old_ini_data = $app->ini_parser->parse_ini_string($data['old']['config']);
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 
+                // Get postfix version
+		exec('postconf -d mail_version 2>&1', $out);
+		$postfix_version = preg_replace('/.*=\s*/', '', $out[0]);
+		unset($out);
+
 		copy('/etc/postfix/main.cf', '/etc/postfix/main.cf~');
-		
+
 		if ($mail_config['relayhost'].$mail_config['relayhost_user'].$mail_config['relayhost_password'] != $old_ini_data['mail']['relayhost'].$old_ini_data['mail']['relayhost_user'].$old_ini_data['mail']['relayhost_password']) {
 			$content = file_exists('/etc/postfix/sasl_passwd') ? file_get_contents('/etc/postfix/sasl_passwd') : '';
-			$content = preg_replace('/^'.preg_quote($old_ini_data['email']['relayhost']).'\s+[^\n]*(:?\n|)/m','',$content);
+			$content = preg_replace('/^'.preg_quote($old_ini_data['email']['relayhost'], '/').'\s+[^\n]*(:?\n|)/m','',$content);
 
 			if (!empty($mail_config['relayhost_user']) || !empty($mail_config['relayhost_password'])) {
 				$content .= "\n".$mail_config['relayhost'].'   '.$mail_config['relayhost_user'].':'.$mail_config['relayhost_password'];
@@ -103,7 +106,7 @@ class postfix_server_plugin {
 			exec("postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'");
 			exec("postconf -e 'smtp_sasl_security_options ='");
 			exec('postmap /etc/postfix/sasl_passwd');
-			exec($conf['init_scripts'] . '/' . 'postfix restart');
+			$postfix_restart=true;
 		}
 
 		if($mail_config['realtime_blackhole_list'] != $old_ini_data['mail']['realtime_blackhole_list']) {
@@ -115,14 +118,16 @@ class postfix_server_plugin {
 			$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 			$new_options = array();
 			foreach ($options as $key => $value) {
+				$value = trim($value);
+				if ($value == '') continue;
 				if (!preg_match('/reject_rbl_client/', $value)) {
 					$new_options[] = $value;
 				} else {
 					if(is_array($rbl_hosts) && !empty($rbl_hosts) && !$rbl_updated){
 						$rbl_updated = true;
-						foreach ($rbl_hosts as $key => $value) {
-							$value = trim($value);
-							if($value != '') $new_options[] = "reject_rbl_client ".$value;
+						foreach ($rbl_hosts as $key2 => $value2) {
+							$value2 = trim($value2);
+							if($value2 != '') $new_options[] = "reject_rbl_client ".$value2;
 						}
 					}
 				}
@@ -135,27 +140,147 @@ class postfix_server_plugin {
 				}
 			}
 			$app->system->exec_safe("postconf -e ?", 'smtpd_recipient_restrictions = '.implode(", ", $new_options));
-			exec('postfix reload');
 		}
-		
-		if($mail_config['reject_sender_login_mismatch'] != $old_ini_data['mail']['reject_sender_login_mismatch']) {
-			$options = explode(", ", exec("postconf -h smtpd_sender_restrictions"));
+
+		if ($mail_config['reject_sender_login_mismatch'] != $old_ini_data['mail']['reject_sender_login_mismatch']) {
+			$options = preg_split("/,\s*/", exec("postconf -h smtpd_sender_restrictions"));
 			$new_options = array();
 			foreach ($options as $key => $value) {
-				if (!preg_match('/reject_authenticated_sender_login_mismatch/', $value)) {
-					$new_options[] = $value;
+				$value = trim($value);
+				if ($value == '') continue;
+				if (preg_match('/reject_(authenticated_)?sender_login_mismatch/', $value)) {
+					continue;
 				}
+				$new_options[] = $value;
 			}
-				
+
 			if ($mail_config['reject_sender_login_mismatch'] == 'y') {
-				reset($new_options); $i = 0;
-				// insert after check_sender_access but before permit_...
-				while (isset($new_options[$i]) && substr($new_options[$i], 0, 19) == 'check_sender_access') ++$i;
-				array_splice($new_options, $i, 0, array('reject_authenticated_sender_login_mismatch'));
+				array_splice($new_options, 0, 0, array('reject_authenticated_sender_login_mismatch'));
+
+				for ($i = 0; isset($new_options[$i]); $i++) {
+					if ($new_options[$i] == 'permit_mynetworks') {
+						array_splice($new_options, $i+1, 0, array('reject_sender_login_mismatch'));
+						break;
+					}
+				}
 			}
+
 			$app->system->exec_safe("postconf -e ?", 'smtpd_sender_restrictions = '.implode(", ", $new_options));
-			exec('postfix reload');
-		}		
+		}
+
+		if ($mail_config['reject_unknown']) {
+			if (($mail_config['reject_unknown'] === 'client') || ($mail_config['reject_unknown'] === 'client_helo')) {
+				$options = preg_split("/,\s*/", exec("postconf -h smtpd_client_restrictions"));
+				$new_options = array();
+				foreach ($options as $key => $value) {
+					$value = trim($value);
+					if ($value == '') continue;
+					if (preg_match('/reject_unknown(_client)?_hostname/', $value)) {
+						continue;
+					}
+					$new_options[] = $value;
+				}
+
+				// insert before explicit permit, or append
+				for ($i = 0; isset($new_options[$i]); $i++) {
+					if ($new_options[$i] == 'permit') {
+						array_splice($new_options, $i, 0, array('reject_unknown_client_hostname'));
+						break;
+					}
+				}
+				if ($i == count($new_options)) {
+					$new_options[] = array('reject_unknown_client_hostname');
+				}
+
+				$app->system->exec_safe("postconf -e ?", 'smtpd_client_restrictions = '.implode(", ", $new_options));
+			} else {
+				$options = preg_split("/,\s*/", exec("postconf -h smtpd_client_restrictions"));
+				$new_options = array();
+				foreach ($options as $key => $value) {
+					$value = trim($value);
+					if ($value == '') continue;
+					if (preg_match('/reject_unknown(_client)?_hostname/', $value)) {
+						continue;
+					}
+					$new_options[] = $value;
+				}
+				$app->system->exec_safe("postconf -e ?", 'smtpd_client_restrictions = '.implode(", ", $new_options));
+			}
+
+			if (($mail_config['reject_unknown'] === 'helo') || ($mail_config['reject_unknown'] === 'client_helo')) {
+				$options = preg_split("/,\s*/", exec("postconf -h smtpd_helo_restrictions"));
+				$new_options = array();
+				foreach ($options as $key => $value) {
+					$value = trim($value);
+					if ($value == '') continue;
+					if (preg_match('/reject_unknown(_helo)?_hostname/', $value)) {
+						continue;
+					}
+					$new_options[] = $value;
+				}
+
+				// insert before explicit permit, or append
+				for ($i = 0; isset($new_options[$i]); $i++) {
+					if ($new_options[$i] == 'permit') {
+						array_splice($new_options, $i, 0, array('reject_unknown_helo_hostname'));
+						break;
+					}
+				}
+				if ($i == count($new_options)) {
+					$new_options[] = array('reject_unknown_helo_hostname');
+				}
+
+				$app->system->exec_safe("postconf -e ?", 'smtpd_helo_restrictions = '.implode(", ", $new_options));
+			} else {
+				$options = preg_split("/,\s*/", exec("postconf -h smtpd_helo_restrictions"));
+				$new_options = array();
+				foreach ($options as $key => $value) {
+					$value = trim($value);
+					if ($value == '') continue;
+					if (preg_match('/reject_unknown(_helo)?_hostname/', $value)) {
+						continue;
+					}
+					$new_options[] = $value;
+				}
+				$app->system->exec_safe("postconf -e ?", 'smtpd_helo_restrictions = '.implode(", ", $new_options));
+			}
+		}
+
+		if ($mail_config['stress_adaptive']) {
+			if ($mail_config['stress_adaptive'] == 'y') {
+				if (version_compare($postfix_version , '3.0', '>=')) {
+					$app->system->exec_safe("postconf -e ?", 'in_flow_delay = ${stress?{3}:{1}}s');
+					$app->system->exec_safe("postconf -e ?", 'smtp_connect_timeout = ${stress?{10}:{30}}s');
+					$app->system->exec_safe("postconf -e ?", 'smtp_helo_timeout = ${stress?{10}:{60}}s');
+					$app->system->exec_safe("postconf -e ?", 'smtp_mail_timeout = ${stress?{10}:{60}}s');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_error_sleep_time = ${stress?{1}:{2}}s');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_hard_error_limit = ${stress?{1}:{10}}');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_recipient_overshoot_limit = ${stress?{60}:{600}}');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_soft_error_limit = ${stress?{2}:{5}}');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_timeout = ${stress?{10}:{60}}s');
+				} elseif (version_compare($postfix_version , '2.5', '>=')) {
+					$app->system->exec_safe("postconf -e ?", 'in_flow_delay = ${stress?3}${stress:1}s');
+					$app->system->exec_safe("postconf -e ?", 'smtp_connect_timeout = ${stress?10}${stress:30}s');
+					$app->system->exec_safe("postconf -e ?", 'smtp_helo_timeout = ${stress?10}${stress:60}s');
+					$app->system->exec_safe("postconf -e ?", 'smtp_mail_timeout = ${stress?10}${stress:60}s');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_error_sleep_time = ${stress?1}${stress:2}s');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_hard_error_limit = ${stress?1}${stress:10}');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_recipient_overshoot_limit = ${stress?60}${stress:600}');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_soft_error_limit = ${stress?2}${stress:5}');
+					$app->system->exec_safe("postconf -e ?", 'smtpd_timeout = ${stress?10}${stress:60}s');
+				}
+			} else { // mail_config['stress_adaptive'] == 'n'
+				exec("postconf -X 'in_flow_delay'");
+				exec("postconf -X 'smtp_connect_timeout'");
+				exec("postconf -X 'smtp_helo_timeout'");
+				exec("postconf -X 'smtp_mail_timeout'");
+				exec("postconf -X 'smtpd_error_sleep_time'");
+				exec("postconf -X 'smtpd_hard_error_limit'");
+				exec("postconf -X 'smtpd_recipient_overshoot_limit'");
+				exec("postconf -X 'smtpd_soft_error_limit'");
+				exec("postconf -X 'smtpd_timeout'");
+			}
+		}
 		
 		if($app->system->is_installed('dovecot')) {
 			$virtual_transport = 'dovecot';
@@ -190,7 +315,35 @@ class postfix_server_plugin {
 			}
 		}
 
+		$quoted_postfix_config_dir = preg_quote($conf['postfix']['config_dir'], '|');
+		$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_recipient_access\s+proxy:mysql:${quoted_postfix_config_dir}/mysql-verify_recipients.cf|", $value)) {
+				continue;
+			}
+			$new_options[] = $value;
+		}
+		if (defined($configure_lmtp) && $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:${quoted_postfix_config_dir}/mysql-verify_recipients.cf"));
+					break;
+				}
+			}
+			# postfix < 3.3 needs this when using reject_unverified_recipient:
+			if(version_compare($postfix_version, 3.3, '<')) {
+				exec("postconf -e 'enable_original_recipient = yes'");
+			}
+		}
+		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'");
@@ -200,15 +353,18 @@ class postfix_server_plugin {
 				exec("postconf -e 'milter_protocol = 6'");
 				exec("postconf -e 'milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}'");
 				exec("postconf -e 'milter_default_action = accept'");
-				
-				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
+
+				exec("postconf -e 'smtpd_sender_restrictions = ${raslm} permit_mynetworks, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf'");
 				
 				$new_options = array();
 				$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
 				foreach ($options as $key => $value) {
-					if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
-						$new_options[] = $value;
+					$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)."'");
 				
@@ -234,8 +390,9 @@ class postfix_server_plugin {
 				
 				exec("postconf -e 'receive_override_options = no_address_mappings'");
 				exec("postconf -e 'content_filter = " . ($configure_lmtp ? "lmtp" : "amavis" ) . ":[127.0.0.1]:10024'");
-				
-				exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'");
+
+				// 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, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:/etc/postfix/tag_as_foreign.re, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf'");
 			}
 		}
 		
@@ -258,6 +415,6 @@ class postfix_server_plugin {
 
 		exec("postconf -e 'mailbox_size_limit = ".intval($mail_config['mailbox_size_limit']*1024*1024)."'");
 		exec("postconf -e 'message_size_limit = ".intval($mail_config['message_size_limit']*1024*1024)."'");
-		$app->services->restartServiceDelayed('postfix', 'reload');
+		$app->services->restartServiceDelayed('postfix', ($postfix_restart ? 'restart' : 'reload'));
 	}
 } // end class
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 9f19c2be58cb397f8b2fa4acf3b48c0ccca05440..e3276755bed03a99f0faa84d9e8983bed48f4e20 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -58,20 +58,20 @@ class shelluser_base_plugin {
 		/*
 		Register for the events
 		*/
-		
+
 		$app->plugins->registerEvent('shell_user_insert', $this->plugin_name, 'insert');
 		$app->plugins->registerEvent('shell_user_update', $this->plugin_name, 'update');
 		$app->plugins->registerEvent('shell_user_delete', $this->plugin_name, 'delete');
-		
+
 
 	}
 
 
 	function insert($event_name, $data) {
 		global $app, $conf;
-		
+
 		$app->uses('system,getconf');
-		
+
 		$security_config = $app->getconf->get_security_config('permissions');
 		if($security_config['allow_shell_user'] != 'yes') {
 			$app->log('Shell user plugin disabled by security settings.',LOGLEVEL_WARN);
@@ -88,7 +88,7 @@ class shelluser_base_plugin {
 			$app->log('Directory of the shell user is not valid.',LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		if(!$app->system->is_allowed_user($data['new']['username'], false, false)
 			|| !$app->system->is_allowed_user($data['new']['puser'], true, true)
 			|| !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
@@ -96,8 +96,8 @@ class shelluser_base_plugin {
 			return false;
 		}
 
-		if($data['new']['active'] != 'y') $data['new']['shell'] = '/bin/false';
-		
+		if($data['new']['active'] != 'y' || $data['new']['chroot'] == "jailkit") $data['new']['shell'] = '/bin/false';
+
 		if($app->system->is_user($data['new']['puser'])) {
 
 			// Get the UID of the parent user
@@ -105,24 +105,20 @@ class shelluser_base_plugin {
 			if($uid > $this->min_uid) {
 				//* Remove webfolder protection
 				$app->system->web_folder_protection($web['document_root'], false);
-				
+
 				//* Home directory of the new shell user
-				if($data['new']['chroot'] == 'jailkit') {
-					$homedir = $data['new']['dir'];
-				} else {
-					$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
-				}
-				
+				$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
+
 				// Create home base directory if it does not exist
 				if(!is_dir($data['new']['dir'].'/home')){
 					$app->file->mkdirs($data['new']['dir'].'/home', '0755');
 				}
-				
+
 				// Change ownership of home base dir to root user
 				$app->system->chown($data['new']['dir'].'/home','root');
 				$app->system->chgrp($data['new']['dir'].'/home','root');
 				$app->system->chmod($data['new']['dir'].'/home',0755);
-				
+
 				if(!is_dir($homedir)){
 					$app->file->mkdirs($homedir, '0750');
 					$app->system->chown($homedir,$data['new']['puser'],false);
@@ -142,10 +138,10 @@ class shelluser_base_plugin {
 						$app->log("Command chpasswd failed for user ".$data['new']['username'] . ' with code ' . $retval . ': ' . $stderr, LOGLEVEL_WARN);
 					}
 				}
-			
+
 				$app->system->chown($data['new']['dir'],$data['new']['username'],false);
 				$app->system->chgrp($data['new']['dir'],$data['new']['pgroup'],false);
-				
+
 
 				// call the ssh-rsa update function
 				$app->uses("getconf");
@@ -186,7 +182,7 @@ class shelluser_base_plugin {
 		global $app, $conf;
 
 		$app->uses('system,getconf');
-		
+
 		$security_config = $app->getconf->get_security_config('permissions');
 		if($security_config['allow_shell_user'] != 'yes') {
 			$app->log('Shell user plugin disabled by security settings.',LOGLEVEL_WARN);
@@ -199,7 +195,7 @@ class shelluser_base_plugin {
 			$app->log('Directory of the shell user is outside of website docroot.',LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		if(strpos($data['new']['dir'], '/../') !== false || substr($data['new']['dir'],-3) == '/..') {
 			$app->log('Directory of the shell user is not valid.',LOGLEVEL_WARN);
 			return false;
@@ -211,14 +207,14 @@ class shelluser_base_plugin {
 			$app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
 			return false;
 		}
-		
+
 		if($data['new']['active'] != 'y') $data['new']['shell'] = '/bin/false';
-		
+
 		if($app->system->is_user($data['new']['puser'])) {
 			// Get the UID of the parent user
 			$uid = intval($app->system->getuid($data['new']['puser']));
 			if($uid > $this->min_uid) {
-				
+
 				//* Home directory of the shell user
 				if($data['new']['chroot'] == 'jailkit') {
 					$homedir = $data['new']['dir'];
@@ -227,10 +223,10 @@ class shelluser_base_plugin {
 					$homedir = $data['new']['dir'].'/home/'.$data['new']['username'];
 					$homedir_old = $data['old']['dir'].'/home/'.$data['old']['username'];
 				}
-				
+
 				$app->log("Homedir New: ".$homedir, LOGLEVEL_DEBUG);
 				$app->log("Homedir Old: ".$homedir_old, LOGLEVEL_DEBUG);
-				
+
 				// Check if the user that we want to update exists, if not, we insert it
 				if($app->system->is_user($data['old']['username'])) {
 					//* Remove webfolder protection
@@ -243,7 +239,7 @@ class shelluser_base_plugin {
 							$app->log("New Homedir exists, renaming it to ".$homedir.'_bak', LOGLEVEL_DEBUG);
 							$app->system->rename($homedir,$homedir.'_bak');
 						}
-						
+
 						// Move old directory to new path
 						$app->system->rename($homedir_old,$homedir);
 						$app->file->mkdirs($homedir, '0750');
@@ -280,7 +276,7 @@ class shelluser_base_plugin {
 						$app->system->chown($homedir.'/.bash_history', $data['new']['username']);
 						$app->system->chgrp($homedir.'/.bash_history', $data['new']['pgroup']);
 					}
-					
+
 					//* Create .profile file
 					if(!is_file($data['new']['dir']).'/.profile') {
 						$app->system->touch($homedir.'/.profile');
@@ -307,7 +303,7 @@ class shelluser_base_plugin {
 		global $app, $conf;
 
 		$app->uses('system,getconf,services');
-		
+
 		$security_config = $app->getconf->get_security_config('permissions');
 		if($security_config['allow_shell_user'] != 'yes') {
 			$app->log('Shell user plugin disabled by security settings.',LOGLEVEL_WARN);
@@ -319,21 +315,21 @@ class shelluser_base_plugin {
 			$userid = intval($app->system->getuid($data['old']['username']));
 			if($userid > $this->min_uid) {
 				$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['old']['parent_domain_id']));
-					
+
 				// check if we have to delete the dir
 				$check = $app->db->queryOneRecord('SELECT shell_user_id FROM `shell_user` WHERE `dir` = ?', $data['old']['dir']);
 				if(!$check && is_dir($data['old']['dir'])) {
-					
+
 					$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['old']['parent_domain_id']);
 					$app->system->web_folder_protection($web['document_root'], false);
-					
+
 					// delete dir
 					if($data['new']['chroot'] == 'jailkit') {
 						$homedir = $data['old']['dir'];
 					} else {
 						$homedir = $data['old']['dir'].'/home/'.$data['old']['username'];
 					}
-				
+
 					if(substr($homedir, -1) !== '/') $homedir .= '/';
 					$files = array('.bash_logout', '.bash_history', '.bashrc', '.profile');
 					$dirs = array('.ssh', '.cache');
@@ -359,17 +355,22 @@ class shelluser_base_plugin {
 					}
 					unset($files);
 					unset($dirs);
-					
+
 					$app->system->web_folder_protection($web['document_root'], true);
 				}
-				
+
 				// We delete only non jailkit users, jailkit users will be deleted by the jailkit plugin.
 				if ($data['old']['chroot'] != "jailkit") {
 					// if this web uses PHP-FPM, that PPH-FPM service must be stopped before we can delete this user
 					if($web['php'] == 'php-fpm'){
-						if(trim($web['fastcgi_php_version']) != ''){
+						if($web['server_php_id'] != 0){
 							$default_php_fpm = false;
-							list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($web['fastcgi_php_version']));
+							$tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $web['server_php_id']);
+							if($tmp_php) {
+								$custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir'];
+								$custom_php_fpm_init_script = $tmp_php['php_fpm_init_script'];
+								if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/';
+							}
 						} else {
 							$default_php_fpm = true;
 						}
diff --git a/server/plugins-available/webserver_plugin.inc.php b/server/plugins-available/webserver_plugin.inc.php
index cca339ace01a5f123e6dd9167c568343d1906eed..3dae9216fa9371f9fac93c648441bfeaa11aeda7 100644
--- a/server/plugins-available/webserver_plugin.inc.php
+++ b/server/plugins-available/webserver_plugin.inc.php
@@ -89,20 +89,20 @@ class webserver_plugin {
 		//** add default php.ini files to check
 		$check_files[] = array('file' => $web_config['php_ini_path_apache'],
 			'mode' => 'mod',
-			'php_version' => ''); // default;
+			'php_version' => 0); // default;
 
 		$check_files[] = array('file' => $web_config['php_ini_path_cgi'],
 			'mode' => '', // all but 'mod' and 'fast-cgi'
-			'php_version' => ''); // default;
+			'php_version' => 0); // default;
 
 		if($fastcgi_config["fastcgi_phpini_path"] && $fastcgi_config["fastcgi_phpini_path"] != $web_config['php_ini_path_cgi']) {
 			$check_files[] = array('file' => $fastcgi_config["fastcgi_phpini_path"],
 				'mode' => 'fast-cgi',
-				'php_version' => ''); // default;
+				'php_version' => 0); // default;
 		} else {
 			$check_files[] = array('file' => $web_config['php_ini_path_cgi'],
 				'mode' => 'fast-cgi', // all but 'mod'
-				'php_version' => ''); // default;
+				'php_version' => 0); // default;
 		}
 
 
@@ -112,11 +112,11 @@ class webserver_plugin {
 			if($php['php_fastcgi_ini_dir'] && $php['php_fastcgi_ini_dir'] . '/php.ini' != $web_config['php_ini_path_cgi']) {
 				$check_files[] = array('file' => $php['php_fastcgi_ini_dir'] . '/php.ini',
 					'mode' => 'fast-cgi',
-					'php_version' => $php['php_fastcgi_ini_dir']);
+					'php_version' => $php['server_php_id']);
 			} elseif($php['php_fpm_ini_dir'] && $php['php_fpm_ini_dir'] . '/php.ini' != $web_config['php_ini_path_cgi']) {
 				$check_files[] = array('file' => $php['php_fpm_ini_dir'] . '/php.ini',
 					'mode' => 'php-fpm',
-					'php_version' => $php['php_fpm_ini_dir']);
+					'php_version' => $php['server_php_id']);
 			}
 		}
 		unset($php_versions);
diff --git a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
index 5a643a660a7a52db3596ec4a0312e6098e83f369..b2dd92265e8f638aae2addf1f34942fbb31e0448 100644
--- a/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
+++ b/server/plugins-available/z_php_fpm_incron_reload_plugin.inc.php
@@ -66,7 +66,7 @@ class z_php_fpm_incron_reload_plugin {
 
 	private function phpVersionUnchanged($data)
 	{
-		return $data['new']['fastcgi_php_version'] === $data['old']['fastcgi_php_version'];
+		return $data['new']['server_php_id'] === $data['old']['server_php_id'];
 	}
 
 	private function setup($data)
@@ -77,7 +77,7 @@ class z_php_fpm_incron_reload_plugin {
 		$this->createIncronConfiguration(
 			$triggerFile,
 			$data['system_user'],
-			$data['fastcgi_php_version']
+			$data['server_php_id']
 		);
 
 		$this->restartIncronService();
@@ -173,12 +173,14 @@ class z_php_fpm_incron_reload_plugin {
 	}
 
 	private function getPhpService($fastcgiPhpVersion) {
-		$phpInfo = explode(':', $fastcgiPhpVersion);
+		global $app;
+
+		$phpInfo = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $fastcgiPhpVersion);
 		if (empty($phpInfo)) {
 			return null;
 		}
 
-		$phpService = $phpInfo[1];
+		$phpService = $phpInfo['php_fpm_init_script'];
 		if (empty($phpService)) {
 			return null;
 		}
diff --git a/server/scripts/create_jailkit_chroot.sh b/server/scripts/create_jailkit_chroot.sh
index cc39b6e4cf1767d9a93c4db5b657c46c06cce891..dc0f948735abcbb73639094683fbb77c8e16a455 100755
--- a/server/scripts/create_jailkit_chroot.sh
+++ b/server/scripts/create_jailkit_chroot.sh
@@ -21,7 +21,7 @@ CHROOT_APP_SECTIONS=$2
 chown root:root $CHROOT_HOMEDIR
 
 ## Initialize the chroot into the specified directory with the specified applications
-jk_init -f -k -c /etc/jailkit/jk_init.ini -j $CHROOT_HOMEDIR $CHROOT_APP_SECTIONS
+jk_init -f -c /etc/jailkit/jk_init.ini -j $CHROOT_HOMEDIR $CHROOT_APP_SECTIONS
 
 ## Create the temp directory
 if [ ! -d "$CHROOT_HOMEDIR/tmp" ]
diff --git a/server/scripts/create_jailkit_programs.sh b/server/scripts/create_jailkit_programs.sh
index 11641f2c1ff506db996cb3063b2cefb41f985ff7..62ea1b2dc9a3377b01e3f7fb7ebf5a3e9311687a 100755
--- a/server/scripts/create_jailkit_programs.sh
+++ b/server/scripts/create_jailkit_programs.sh
@@ -17,4 +17,4 @@ fi
 CHROOT_HOMEDIR=$1
 CHROOT_APP_PROGRAMS=$2
 
-jk_cp -k $CHROOT_HOMEDIR $CHROOT_APP_PROGRAMS
+jk_cp -j $CHROOT_HOMEDIR $CHROOT_APP_PROGRAMS