diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 736fbc308301184948c0984579fafe4306bd6f1d..2ee654e1f275974764b6bec1dba0a012fa2333b7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,7 +8,7 @@ stages:
 
 syntax:lint:
   stage: syntax
-  image: bobey/docker-gitlab-ci-runner-php7
+  image: edbizarro/gitlab-ci-pipeline-php:7.2
   allow_failure: false
   only:
     - schedules
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..29ba602bf817b238a69adf828adb9f1a091e6e13 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -0,0 +1,3 @@
+-- add new proxy_protocol column
+ALTER TABLE `web_domain`
+    ADD COLUMN `proxy_protocol` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `log_retention`;
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 18b3ef57ebad6eac601268db1433e17f040b77af..bfef9733e5e05d719aa7fd3c6ac596247f3a8d47 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -2071,6 +2071,7 @@ CREATE TABLE `web_domain` (
   `https_port` int(11) unsigned NOT NULL DEFAULT '443',
   `folder_directive_snippets` text,
   `log_retention` int(11) NOT NULL DEFAULT '10',
+  `proxy_protocol` enum('n','y') NOT NULL default 'n',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 3786fc2ca35544961c3cdafd25653972e9bbfc1f..45a564439246b3d42ac4c84f97a255807c2afab9 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -105,6 +105,7 @@ php_fpm_ini_path=/etc/php5/fpm/php.ini
 php_fpm_pool_dir=/etc/php5/fpm/pool.d
 php_fpm_start_port=9010
 php_fpm_socket_dir=/var/lib/php5-fpm
+php_default_hide=n
 php_default_name=Default
 set_folder_permissions_on_update=n
 add_web_users_to_sshusers_group=y
diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 2075c7b90d10aaf8f14cc4648bf75a727f14ebb7..5daabd50b35a6ffdfc3e6933e7314c9ecd90cb99 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -141,12 +141,18 @@ class auth {
 		}
 	}
 
-	public function check_module_permissions($module) {
+
+       /**
+        * Check that the user has access to the given module.
+        *
+        * @return boolean
+        */
+       public function verify_module_permissions($module)  {
 		// Check if the current user has the permissions to access this module
 		$module = trim(preg_replace('@\s+@', '', $module));
 		$user_modules = explode(',',$_SESSION["s"]["user"]["modules"]);
+               $can_use_module = false;
 		if(strpos($module, ',') !== false){
-			$can_use_module = false;
 			$tmp_modules = explode(',', $module);
 			if(is_array($tmp_modules) && !empty($tmp_modules)){
 				foreach($tmp_modules as $tmp_module){
@@ -158,17 +164,21 @@ class auth {
 					}
 				}
 			}
-			if(!$can_use_module){
-				// echo "LOGIN_REDIRECT:/index.php";
-				header("Location: /index.php");
-				exit;
-			}
-		} else {
-			if(!in_array($module,$user_modules)) {
-				// echo "LOGIN_REDIRECT:/index.php";
-				header("Location: /index.php");
-				exit;
-			}
+               }
+               elseif(in_array($module,$user_modules)) {
+                       $can_use_module = true;
+               }
+               return $can_use_module;
+       }
+
+       /**
+        * Check that the user has access to the given module, redirect and exit on failure.
+        */
+       public function check_module_permissions($module)  {
+               if(!$this->verify_module_permissions($module)) {
+                       // echo "LOGIN_REDIRECT:/index.php";
+                       header("Location: /index.php");
+                       exit;
 		}
 	}
 	
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index c6022e6bc2f12c3a9f2f5ed4c171517a4e6b9144..945e422da258b143cdba680419626205792fbbd2 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -820,6 +820,28 @@ $form["tabs"]['web'] = array(
 			'default' => 'n',
 			'value' => array(0 => 'n',1 => 'y')
 		),
+		'vhost_proxy_protocol_enabled' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n',1 => 'y')
+		),
+		'vhost_proxy_protocol_http_port' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '880',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
+		'vhost_proxy_protocol_https_port' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '8443',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
 		'vhost_conf_dir' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
@@ -1129,6 +1151,12 @@ $form["tabs"]['web'] = array(
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'php_default_hide' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
 		'php_default_name' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 24a1a419335bc58103cacb942780782f2402427d..520fdb1028ee19ce6ff491ae19198fecca516233 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index aa4385b8aedcd46eb693e35c0692b2e470ad9380..1ca873fd2d2a3a8c2849fc60e1964940c8492386 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index c12a1a7dad6ea7dfd973cfba771f85d59f840077..79a956cfad3f138e7c450ba3a0d2794ffb19574a 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -296,6 +296,7 @@ $wb['logging_txt'] = 'Gravar logs de acesso e erros de sites';
 $wb['logging_desc_txt'] = 'Usar Ferramentas > Sicronizar para aplicar mudanças em sites existentes. Para o Apache, os logs de acesso e erros podem ser anonimizados. Para o nginx, apenas o log de acesso é anonimizado, o log de erros conterá endereços IP.';
 $wb['log_retention_txt'] = 'Tempo de retenção do log (dias)';
 $wb['log_retention_error_ispositive'] = 'O tempo de retenção do log deve ser um número > 0.';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Descrição da versão padrão do php';
 $wb['php_default_name_error_empty'] = 'A descrição da versão padrão do php está em branco.';
 $wb['error_mailbox_message_size_txt'] = 'O tamanho da cota da conta de e-mail deve ser maior ou igual o tamanho da cota de mensagens.';
@@ -304,3 +305,6 @@ $wb['content_filter_txt'] = 'Filtro de conteúdo';
 $wb['rspamd_url_txt'] = 'URL do rspamd';
 $wb['rspamd_user_txt'] = 'Usuário do rspamd';
 $wb['rspamd_password_txt'] = 'Senha do rspamd';
+$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';
diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng
index 40f02fb637dcfa37e48082f0569d0652f2e8aee4..b1ac3545e7f02b2e3405e1779fa8a308d7e58c10 100644
--- a/interface/web/admin/lib/lang/ca_server_config.lng
+++ b/interface/web/admin/lib/lang/ca_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 2b42cf6691e1dd68e8205cac0a301cd8bef0c280..a4219cafa301f249b8109c3a4cc44797dc04ddbc 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 9e0ce6f48fd8ceb3caf7d627e42cd24516d98959..aa7818f9ad7a3d8a714fce3fc5472318ea4af437 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Beschreibung Standard PHP';
 $wb['php_default_name_error_empty'] = 'Beschreibung Standard PHP ist leer.';
 $wb['error_mailbox_message_size_txt'] = 'Mailboxgröße muss gleich oder größer als max. Nachrichtengröße sein.';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content-Filter';
 $wb['rspamd_url_txt'] = 'Rspamd-URL';
 $wb['rspamd_user_txt'] = 'Rspamd-Benutzer';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng
index e6d5eaa289f46696b77bef89e613c7889e503521..0020d5347a4f994923980f42df3484ebd370d669 100644
--- a/interface/web/admin/lib/lang/dk_server_config.lng
+++ b/interface/web/admin/lib/lang/dk_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 394ba2bde91296dc3706f0b9b6e741f8df7d01a2..29ad1bf4543befbe3bb2b5f07466c194d96dafcf 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index b8c9166d43001e02a7091f8fe4078757f5a38447..9093ac6baa198d8c3d698c9443cfadbcb8942c5f 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -296,6 +296,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -304,3 +305,6 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 08c80ec80edc9e770381ebc60ce90e8a63f14358..2b1ca0a221cc82a0e137ec5b495877b51ff2b3bd 100755
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index 85b994a72ebe4227609b11546994160dbc33dc95..6724ea0e8556557d0ee0d482615aefa8c2fc31a9 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index 705c376a290c5f83a0b6c426c87a0e88df32640f..a505ceef37709577b03cae94892f281953c99b4d 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index 609d9ab889d2b20f614d11b9bc0049775a521dc9..a390c29e6cb6828c008efcadb8313f1d59709287 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 52533a2c78bdf8e25d110e05b37813462bed003c..3da2d0ad4e843916350e498bdda202f49a1cc3c7 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index e4c1e47ce59eadd0b81de1e8e23da00118f093d4..c79b29607257ce52cbc3979c829e12dad139f499 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index 2d7d9e9ddb6513aec59e84737f35003de876940f..89491ae4979545b664f9eeb69cf8296a6ddbc330 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 6cd157154a5615ba9f05ff7d1b7d68a4ec1d265f..6569591233f37890d0084927695c4896b7c5a621 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index 542add696bbcd4f2397a1e51ad65750b0055bd93..1e398f9bdcba0ad529c29faadd23a710a2dde9bd 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 61509f30cf3b9671b0c9220816f3fce9db3e0cc5..87ec7fc285ab2d2ca4ff166e9319413419fffa8f 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index fabd1d61cca176499d2b3712dc746f75b746caf1..e1df35f548706ea7e5aa33e4a55b140311b6d8ad 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index b5a1a18759e32c00a5732d126790396f9b1dda8e..6d7dc3d8ca3d727e351d198fe682d4461e699ca5 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index db17e9ac5a889e74bf7cf3f84d4c288f15f37f25..027e41c13e13f7d68bebeb7324a8fd393b72f1e1 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 92b55336f05a38a718efe21faa713d90958727f3..be8742f80caf245c0eec26b8295ae561804a424d 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index 801a4fece1acc493c17a671e17824dd598928151..659a83e7d4ad0fa4c1545f50f1fba92e8e0b1927 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -295,6 +295,7 @@ $wb['logging_txt'] = 'Store website access and error logs';
 $wb['logging_desc_txt'] = 'Use Tools > Resync to apply changes to existing sites. For Apache, access and error log can be anonymized. For nginx, only the access log is anonymized, the error log will contain IP addresses.';
 $wb['log_retention_txt'] = 'Log retention (days)';
 $wb['log_retention_error_ispositive'] = 'Log retention must be a number > 0';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Description Default PHP-Version';
 $wb['php_default_name_error_empty'] = 'Description Default PHP-Version must not be empty';
 $wb['error_mailbox_message_size_txt'] = 'Mailbox size must be larger or equal to message size';
@@ -303,4 +304,7 @@ $wb['content_filter_txt'] = 'Content Filter';
 $wb['rspamd_url_txt'] = 'Rspamd URL';
 $wb['rspamd_user_txt'] = 'Rspamd User';
 $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';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 7d664b6947d309f30bc99d5a16941037036761f9..76812dd90d3f24d43a0d7b5c16402840a0f912f3 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -295,6 +295,10 @@ $wb['logging_txt'] = 'Web Sitesi Erişim ve Hata Günlükleri Kaydedilsin';
 $wb['logging_desc_txt'] = 'Değişiklikleri var olan sitelere uygulamak için Araçlar > Yeniden Eşitle komutunu kullanın. Apache için, erişim ve hata günlükleri anonimleştirilebilir. nginx için, only erişim günlüğü anonimleştirilebilir, hata günlüğüne IP adresleri kaydedilir.';
 $wb['log_retention_txt'] = 'Günlük Tutma Süresi (Gün)';
 $wb['log_retention_error_ispositive'] = 'Günlük tutma süresi 0 değerinden büyük bir sayı olmalıdır';
+$wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox';
 $wb['php_default_name_txt'] = 'Varsayılan PHP Sürümü Açıklaması';
 $wb['php_default_name_error_empty'] = 'Varsayılan PHP sürümü açıklaması boş olamaz';
+$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';
 ?>
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm
index 05042bac8563c9936caaaf9938f423c7117c6442..1031eea183b11ea6916c98b5420227621a8874b5 100644
--- a/interface/web/admin/templates/server_config_web_edit.htm
+++ b/interface/web/admin/templates/server_config_web_edit.htm
@@ -54,6 +54,20 @@
 				{tmpl_var name='vhost_rewrite_v6'}
 			</div>
 		</div>
+        <div class="form-group">
+            <label for="vhost_proxy_protocol_enabled" class="col-sm-3 control-label">{tmpl_var name='vhost_proxy_protocol_enabled_txt'}</label>
+            <div class="col-sm-9">
+                {tmpl_var name='vhost_proxy_protocol_enabled'}
+            </div>
+        </div>
+        <div class="form-group">
+            <label for="vhost_proxy_protocol_http_port" class="col-sm-3 control-label">{tmpl_var name='vhost_proxy_protocol_http_port_txt'}</label>
+            <div class="col-sm-9"><input type="text" name="vhost_proxy_protocol_http_port" id="vhost_proxy_protocol_http_port" value="{tmpl_var name='vhost_proxy_protocol_http_port'}" class="form-control"/></div>
+        </div>
+        <div class="form-group">
+            <label for="vhost_proxy_protocol_https_port" class="col-sm-3 control-label">{tmpl_var name='vhost_proxy_protocol_https_port_txt'}</label>
+            <div class="col-sm-9"><input type="text" name="vhost_proxy_protocol_https_port" id="vhost_proxy_protocol_https_port" value="{tmpl_var name='vhost_proxy_protocol_https_port'}" class="form-control"/></div>
+        </div>
             <div class="form-group apache">
                 <label for="vhost_conf_dir" class="col-sm-3 control-label">{tmpl_var name='vhost_conf_dir_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="vhost_conf_dir" id="vhost_conf_dir" value="{tmpl_var name='vhost_conf_dir'}" class="form-control" /></div></div>
@@ -258,7 +272,13 @@
     </div>
     <div id="collapsePHP" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPHP">
       <div class="panel-body">
-	  <!-- Begin content -->
+      <!-- Begin content -->
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">{tmpl_var name='php_default_hide_txt'}</label>
+                    <div class="col-sm-9">
+                        {tmpl_var name='php_default_hide'}
+                    </div>
+                </div>
 				<div class="form-group">
                     <label for="php_default_name" class="col-sm-3 control-label">{tmpl_var name='php_default_name_txt'}</label>
                     <div class="col-sm-9"><input type="text" name="php_default_name" id="php_default_name" value="{tmpl_var name='php_default_name'}" class="form-control" /></div></div>
diff --git a/interface/web/dashboard/dashlets/databasequota.php b/interface/web/dashboard/dashlets/databasequota.php
index 6439cdee1269e2c2d2e4db64eb8d3003a1669f81..d8c131702f043fff173249df1ce222c22a59f71f 100644
--- a/interface/web/dashboard/dashlets/databasequota.php
+++ b/interface/web/dashboard/dashlets/databasequota.php
@@ -7,6 +7,9 @@ class dashlet_databasequota {
 
 		//* Loading Template
 		$app->uses('tpl,quota_lib');
+               if (!$app->auth->verify_module_permissions('sites')) {
+                       return;
+               }
 
 		$tpl = new tpl;
 		$tpl->newTemplate("dashlets/templates/databasequota.htm");
diff --git a/interface/web/dashboard/dashlets/quota.php b/interface/web/dashboard/dashlets/quota.php
index 6ff975b6235f368a14597ac72d5d461ff19d83f2..dfb82d5c242bbe6ad8699e97db26855e1d378829 100644
--- a/interface/web/dashboard/dashlets/quota.php
+++ b/interface/web/dashboard/dashlets/quota.php
@@ -7,6 +7,9 @@ class dashlet_quota {
 
 		//* Loading Template
 		$app->uses('tpl,quota_lib');
+               if (!$app->auth->verify_module_permissions('sites')) {
+                       return;
+               }
 
 		$tpl = new tpl;
 		$tpl->newTemplate("dashlets/templates/quota.htm");
diff --git a/interface/web/dns/dns_spf_edit.php b/interface/web/dns/dns_spf_edit.php
index 94096662a1e8e0af7e0e228d322d0c955076b8f2..1c632d2d120ec302cbe7215515728a0e56b7f515 100644
--- a/interface/web/dns/dns_spf_edit.php
+++ b/interface/web/dns/dns_spf_edit.php
@@ -72,13 +72,16 @@ class page_action extends tform_actions {
 	}
 
 	function onShowEnd() {
-		global $app, $conf;
+		global $app;
+
+		$id = $app->functions->intval($_GET['id']);
 
-		$zone = $app->functions->intval($_GET['zone']);
+		// if there is no existing SPF record, assume we want a new active record
+		$app->tpl->setVar('active', 'CHECKED');
 
 		//* check for an existing spf-record
-		$sql = "SELECT data, active FROM dns_rr WHERE data LIKE 'v=spf1%' AND zone = ? AND " . $app->tform->getAuthSQL('r');
-		$rec = $app->db->queryOneRecord($sql, $zone);
+		$sql = "SELECT data, active FROM dns_rr WHERE id = ? AND " . $app->tform->getAuthSQL('r');
+		$rec = $app->db->queryOneRecord($sql, $id);
 		if ( isset($rec) && !empty($rec) ) {
 			$this->id = 1;
 			$old_data = strtolower($rec['data']);
@@ -132,7 +135,6 @@ class page_action extends tform_actions {
 	function onSubmit() {
 		global $app, $conf;
 
-
 		// Get the parent soa record of the domain
 		$soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $app->functions->intval($_POST["zone"]));
 
@@ -153,8 +155,34 @@ class page_action extends tform_actions {
 				}
 			}
 		} // end if user is not admin
+		
+		// Check that the record does not yet exist
+		$existing_records = $app->db->queryAllRecords("SELECT id FROM dns_rr WHERE zone = ? AND name = ? AND type = 'TXT' AND data LIKE 'v=spf1%'", $_POST['zone'], $_POST['name']);
+		if (!empty($existing_records)) {
+			if (count($existing_records) > 1) {
+				$multiple_existing_records_error_txt = $app->tform->wordbook['spf_record_exists_multiple_txt'];
+				$multiple_existing_records_error_txt = str_replace('{hostname}', $_POST['name'], $multiple_existing_records_error_txt);
+
+				$app->error($multiple_existing_records_error_txt);
+			}
+
+			// If there is just one existing record, three things can be going on:
+			// - if we are adding a new record, show a warning that it already exists and offer to edit it
+			// - if we are editing an existing record and changing its 'name' field to one that is already existing, also show the warning
+			// - otherwise we are just editing the existing the record, so there is no need for a warning
+			$existing_record = array_pop($existing_records);
+			if (empty($this->dataRecord['id']) || ($this->dataRecord['id'] !== $existing_record['id'])) {
+				$existing_record_error_txt = $app->tform->wordbook['spf_record_exists_txt'];
+				$existing_record_error_txt = str_replace('{hostname}', $_POST['name'], $existing_record_error_txt);
+				$existing_record_error_txt = str_replace('{existing_record_id}', $existing_record['id'], $existing_record_error_txt);
+
+				$app->error($existing_record_error_txt);
+			}
+		}
+
+		// Create spf-record
+		$spf_record = [];
 
-		//create spf-record
 		if (!empty($this->dataRecord['spf_mx'])) {
 			$spf_record[] = 'mx';
 		}
@@ -217,7 +245,6 @@ class page_action extends tform_actions {
 		else $this->dataRecord['data'] = 'v=spf1 ' . $this->dataRecord['spf_mechanism'] . 'all';
 		unset($temp);
 
-		$this->dataRecord['name'] = $soa['origin'];
 		if (isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'Y';
 		
 		// Set the server ID of the rr record to the same server ID as the parent record.
@@ -228,10 +255,6 @@ class page_action extends tform_actions {
 		$this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
 		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
 
-		// always update an existing entry
-		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data LIKE 'v=spf1%' AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord['name']);
-		$this->id = $check['id'];
-
 		if (!isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'N';
 
 		parent::onSubmit();
diff --git a/interface/web/dns/dns_txt_edit.php b/interface/web/dns/dns_txt_edit.php
index 8f61d2bfe725e218df4a2c3d28b06f040e6ca570..7caa27d040c38955bd93d4fedc09b46df9091edd 100644
--- a/interface/web/dns/dns_txt_edit.php
+++ b/interface/web/dns/dns_txt_edit.php
@@ -44,7 +44,22 @@ require_once './dns_edit_base.php';
 
 // Loading classes
 class page_action extends dns_page_action {
+	function onLoad() {
+		parent::onLoad();
+		
+		// The SPF wizard has a button to edit a record as TXT. We need this to prevent a redirect loop.
+		if (!empty($_GET['edit_raw'])) {
+			return;
+		}
 
+		// Redirect to SPF wizard if we detect a SPF record
+		if ('GET' === $_SERVER['REQUEST_METHOD'] && !empty($this->dataRecord['data'])) {
+			if ('v=spf1' === mb_substr($this->dataRecord['data'], 0, 6)) {
+				header(sprintf('Location: dns_spf_edit.php?id=%d', $this->dataRecord['id']));
+				exit;
+			}
+		}
+	}
 }
 
 $page = new page_action;
diff --git a/interface/web/dns/form/dns_spf.tform.php b/interface/web/dns/form/dns_spf.tform.php
index 62b6b5283b58dc03f582be5e2f730ee31041e90d..53081b7ccabdf11b10d674abcb3cde1afe5260e4 100644
--- a/interface/web/dns/form/dns_spf.tform.php
+++ b/interface/web/dns/form/dns_spf.tform.php
@@ -86,7 +86,7 @@ $form["tabs"]['dns'] = array (
 					'type' => 'TOLOWER')
 			),
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}$/',
+					'regex' => '/^(\*\.|[a-zA-Z0-9\.\-\_]){0,255}$/',
 					'errmsg'=> 'name_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/dns/lib/lang/ar_dns_spf.lng b/interface/web/dns/lib/lang/ar_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/ar_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ar_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_spf.lng b/interface/web/dns/lib/lang/bg_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/bg_dns_spf.lng
+++ b/interface/web/dns/lib/lang/bg_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_spf.lng b/interface/web/dns/lib/lang/br_dns_spf.lng
index 739e59cf41787cc4d0dec825d9fe8afb79540cf4..13722f66961395bbccd6348cd3e066403e0a0f01 100644
--- a/interface/web/dns/lib/lang/br_dns_spf.lng
+++ b/interface/web/dns/lib/lang/br_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'Registro SPF';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'Mecanismo SPF';
 $wb['spf_mechanism_pass_txt'] = 'Pass - permitir e-mails de outros remetentes';
 $wb['spf_mechanism_fail_txt'] = 'Fail - rejeitar e-mails de outros remetentes';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'O domínio é inválido.';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Ativo';
 $wb['record_exists_txt'] = 'Registro dns já existe.';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'O limite de registros dns para esta conta foi alcançado.';
 $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns nesta zona.';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_spf.lng b/interface/web/dns/lib/lang/ca_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/ca_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ca_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_spf.lng b/interface/web/dns/lib/lang/cz_dns_spf.lng
index 3086454c34e87cff4a5c722ab48b0c7963632c14..637d0ca7677fe53ced0314be012f3e4ed55d70c2 100644
--- a/interface/web/dns/lib/lang/cz_dns_spf.lng
+++ b/interface/web/dns/lib/lang/cz_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF Záznam';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanismus';
 $wb['spf_mechanism_pass_txt'] = 'Přijmout - přijímat e-mail od ostatních odesílatelů';
 $wb['spf_mechanism_fail_txt'] = 'Odmítat - odmítnout e-mail od ostatních odesílatelů';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Neplatné doménové jméno';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktivní';
 $wb['record_exists_txt'] = 'DNS záznam již existuje';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'Byl dosažen max. počet DNS záznamů pro váš účet.';
 $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny DNS.';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_spf.lng b/interface/web/dns/lib/lang/de_dns_spf.lng
index aec5595ad323afbb2212c79a529fb3cac4544828..9bf5e676ece594235a5840a895a764734bf72c49 100644
--- a/interface/web/dns/lib/lang/de_dns_spf.lng
+++ b/interface/web/dns/lib/lang/de_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanismus';
 $wb['spf_mechanism_pass_txt'] = 'Pass - Mails von anderen Sendern zulassen';
 $wb['spf_mechanism_fail_txt'] = 'Fail - Mails von anderen Sendern abweisen';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Ungültiger Domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Aktiv';
 $wb['record_exists_txt'] = 'DNS-Eintrag existiert bereits';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['ttl_range_error'] = 'Min. TTL time ist 60 Sekunden.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['limit_dns_record_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
 $wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_spf.lng b/interface/web/dns/lib/lang/dk_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/dk_dns_spf.lng
+++ b/interface/web/dns/lib/lang/dk_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_spf.lng b/interface/web/dns/lib/lang/el_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/el_dns_spf.lng
+++ b/interface/web/dns/lib/lang/el_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/en_dns_spf.lng b/interface/web/dns/lib/lang/en_dns_spf.lng
index 7ac24dd227b26b9a34faa0b6877a8a7c5a53b99a..2518d4f51f5ac41d4b56678c2e350d9e2ea4ad16 100644
--- a/interface/web/dns/lib/lang/en_dns_spf.lng
+++ b/interface/web/dns/lib/lang/en_dns_spf.lng
@@ -2,6 +2,7 @@
 
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -21,8 +22,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb["ttl_txt"] = 'TTL';
 $wb["active_txt"] = 'Active';
 $wb["record_exists_txt"] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
 $wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
-
diff --git a/interface/web/dns/lib/lang/es_dns_spf.lng b/interface/web/dns/lib/lang/es_dns_spf.lng
index e4094672bb524276712d89d6dfd2820b97be6bb7..62c60654f0315adcc9ad801d66f627c050696498 100755
--- a/interface/web/dns/lib/lang/es_dns_spf.lng
+++ b/interface/web/dns/lib/lang/es_dns_spf.lng
@@ -1,9 +1,12 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
+$wb['name_txt'] = 'Hostname';
 $wb['data_txt'] = 'Registro SPF';
 $wb['limit_dns_record_txt'] = 'Ha alcanzado el número máx. de registros DNS permitidos para su cuenta.';
 $wb['no_zone_perm'] = 'Usted no tiene permisos para agregar un registro a esta zona DNS.';
 $wb['record_exists_txt'] = 'El registro DNS ya existe';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['spf_a_txt'] = 'Permitir a la dirección IP actual del dominio enviar correo electrónico para este dominio';
 $wb['spf_domain_note_txt'] = '(dominios separados por espacios en blanco)';
 $wb['spf_domain_txt'] = 'Cualquier dominio que pueda entregar o retransmitir correo para este dominio';
@@ -22,4 +25,6 @@ $wb['spf_mechanism_txt'] = 'Mecanismo SPF';
 $wb['spf_mx_txt'] = 'Permite a los servidores configurados como MX enviar correos desde este dominio';
 $wb['ttl_range_error'] = 'El tiempo mín. de TTL es 60 segundos.';
 $wb['ttl_txt'] = 'TTL';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_spf.lng b/interface/web/dns/lib/lang/fi_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/fi_dns_spf.lng
+++ b/interface/web/dns/lib/lang/fi_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_spf.lng b/interface/web/dns/lib/lang/fr_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/fr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/fr_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_spf.lng b/interface/web/dns/lib/lang/hr_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/hr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/hr_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_spf.lng b/interface/web/dns/lib/lang/hu_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/hu_dns_spf.lng
+++ b/interface/web/dns/lib/lang/hu_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_spf.lng b/interface/web/dns/lib/lang/id_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/id_dns_spf.lng
+++ b/interface/web/dns/lib/lang/id_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_spf.lng b/interface/web/dns/lib/lang/it_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/it_dns_spf.lng
+++ b/interface/web/dns/lib/lang/it_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_spf.lng b/interface/web/dns/lib/lang/ja_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/ja_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ja_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_spf.lng b/interface/web/dns/lib/lang/nl_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/nl_dns_spf.lng
+++ b/interface/web/dns/lib/lang/nl_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_spf.lng b/interface/web/dns/lib/lang/pl_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/pl_dns_spf.lng
+++ b/interface/web/dns/lib/lang/pl_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_spf.lng b/interface/web/dns/lib/lang/pt_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/pt_dns_spf.lng
+++ b/interface/web/dns/lib/lang/pt_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_spf.lng b/interface/web/dns/lib/lang/ro_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/ro_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ro_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_spf.lng b/interface/web/dns/lib/lang/ru_dns_spf.lng
index cc4b4b087be6b840f2d58593d5ff3de096b69cd7..2d69c49a326a9eb55da2c6003afde78b664493e5 100644
--- a/interface/web/dns/lib/lang/ru_dns_spf.lng
+++ b/interface/web/dns/lib/lang/ru_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-запись';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'Механизм SPF';
 $wb['spf_mechanism_pass_txt'] = 'Pass - разрешить почту от других отправителей';
 $wb['spf_mechanism_fail_txt'] = 'Fail - отклонить почту от других отправителей';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Недопустимое доменное им
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Активно';
 $wb['record_exists_txt'] = 'DNS-запись уже существует';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'Макс. количество DNS-записей для вашей учетной записи достигнуто.';
 $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту запись.';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_spf.lng b/interface/web/dns/lib/lang/se_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/se_dns_spf.lng
+++ b/interface/web/dns/lib/lang/se_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_spf.lng b/interface/web/dns/lib/lang/sk_dns_spf.lng
index df8d1fe1453faa2d4decfe0d3dc94cf19ff48458..0cbf77862f6619ad477913cefb5c4b5e248ddae6 100644
--- a/interface/web/dns/lib/lang/sk_dns_spf.lng
+++ b/interface/web/dns/lib/lang/sk_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF-Record';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Mechanism';
 $wb['spf_mechanism_pass_txt'] = 'Pass - allow mail from other senders';
 $wb['spf_mechanism_fail_txt'] = 'Fail - reject mail from other senders';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Invalid domainname';
 $wb['ttl_txt'] = 'TTL';
 $wb['active_txt'] = 'Active';
 $wb['record_exists_txt'] = 'DNS-Record already exists';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
 $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_spf.lng b/interface/web/dns/lib/lang/tr_dns_spf.lng
index 40cad402a461aff5e9fe8ce0d5c94e6f4257e727..5ca1e470e389f72efff1099c543c23b711e1bb47 100644
--- a/interface/web/dns/lib/lang/tr_dns_spf.lng
+++ b/interface/web/dns/lib/lang/tr_dns_spf.lng
@@ -1,5 +1,6 @@
 <?php
 $wb['data_txt'] = 'SPF Kaydı';
+$wb['name_txt'] = 'Hostname';
 $wb['spf_mechanism_txt'] = 'SPF Yöntemi';
 $wb['spf_mechanism_pass_txt'] = 'Kabul - Diğer göndericilerden gelen e-postalar kabul edilsin';
 $wb['spf_mechanism_fail_txt'] = 'Red - Diğer göndericilerden gelen e-postalar reddedilsin';
@@ -19,7 +20,11 @@ $wb['spf_invalid_domain_txt'] = 'Etki alanı adı geçersiz';
 $wb['ttl_txt'] = 'TTL Süresi';
 $wb['active_txt'] = 'Etkin';
 $wb['record_exists_txt'] = 'DNS kaydı zaten var';
+$wb['spf_record_exists_txt'] = 'SPF-Record already exists for hostname "{hostname}". Do you want to <a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">edit the existing record</a>?';
+$wb['spf_record_exists_multiple_txt'] = 'Multiple SPF-Records exist for hostname "{hostname}". This will cause recipients to reject your mail! Delete or merge duplicate existing records and try again.';
 $wb['limit_dns_record_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla DNS kaydı sınırına ulaştınız.';
 $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
+$wb['name_error_regex'] = 'The hostname has the wrong format.';
+$wb['btn_edit_as_txt_record_txt'] = 'Edit as TXT record';
 ?>
diff --git a/interface/web/dns/templates/dns_spf_edit.htm b/interface/web/dns/templates/dns_spf_edit.htm
index 3c34b37a41b03d0f74b5f335d2a3986c25f2ed43..fc7400d6200f61c7d24d576da966458d65f5a02d 100644
--- a/interface/web/dns/templates/dns_spf_edit.htm
+++ b/interface/web/dns/templates/dns_spf_edit.htm
@@ -5,6 +5,10 @@
 
 
         
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div>
+            </div>
             <div class="form-group">
                 <label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
 				<div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" readonly class="form-control" /></div></div>
@@ -52,11 +56,11 @@
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}" id="zone">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
-        <input type="hidden" name="name" value="{tmpl_var name='name'}">
             </div>
             
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_spf_edit.php">{tmpl_var name='btn_save_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_edit_as_txt_record_txt'}" data-load-content="dns/dns_txt_edit.php?id={tmpl_var name='id'}&zone={tmpl_var name='zone'}&edit_raw=1">{tmpl_var name='btn_edit_as_txt_record_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
 
diff --git a/interface/web/favicon.ico b/interface/web/favicon.ico
deleted file mode 100644
index dc71b5320c890943e4aba52d80689deb58c6b39e..0000000000000000000000000000000000000000
Binary files a/interface/web/favicon.ico and /dev/null differ
diff --git a/interface/web/help/templates/faq_manage_questions_list.htm b/interface/web/help/templates/faq_manage_questions_list.htm
index a29d0f06d059d0a8d154c14f4630223bb09ca303..9b54e7d4ff712dc1033b75b075c6faa974898bda 100644
--- a/interface/web/help/templates/faq_manage_questions_list.htm
+++ b/interface/web/help/templates/faq_manage_questions_list.htm
@@ -24,7 +24,7 @@
                         <td width="60%">{tmpl_var name='hf_question'}</td>
                         <td width="30%">{tmpl_var name='hf_section'}</td>
                         <td class="text-right" width="5%">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_delete.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                         <td class="text-right" width="5%">
                             <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="help/faq_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
diff --git a/interface/web/help/templates/help_faq_sections_list.htm b/interface/web/help/templates/help_faq_sections_list.htm
index 5a3733aa0b6da6333fee5cdd762ef3b804f1f974..1d0ef16443b09a6a0143e9f918250b903ab70efb 100644
--- a/interface/web/help/templates/help_faq_sections_list.htm
+++ b/interface/web/help/templates/help_faq_sections_list.htm
@@ -26,7 +26,7 @@
                     <tr>
                         <td><b>{tmpl_var name='hfs_name'}</b></td>
                         <td class="text-right">
-                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_sections_delete.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
+                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('help/faq_sections_delete.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                         <td class="text-right">
                             <a class="btn btn-default formbutton-default formbutton-narrow" data-load-content="help/faq_sections_edit.php?id={tmpl_var name='id'}"><span class="icon icon-edit"></span></a>
diff --git a/interface/web/login/login_as.php b/interface/web/login/login_as.php
index 4c2fb33393e6d6e555d350515750ebd5bf66972d..67d5858ff60be84e3ae954d2fa526791f7c1290f 100644
--- a/interface/web/login/login_as.php
+++ b/interface/web/login/login_as.php
@@ -96,7 +96,7 @@ echo '
 	<input type="hidden" name="s_pg" value="dashboard" />
 	<input type="hidden" name="login_as" value="1" />
     <div class="wf_actions buttons">
-      <button class="btn btn-default formbutton-success" type="button" value="'.$wb['btn_yes_txt'].'" data-submit-form="pageForm" data-form-action="/login/index.php"><span>'.$wb['btn_yes_txt'].'</span></button>
+      <button class="btn btn-default formbutton-success" type="button" value="'.$wb['btn_yes_txt'].'" data-submit-form="pageForm" data-form-action="login/index.php"><span>'.$wb['btn_yes_txt'].'</span></button>
       <button class="btn btn-default formbutton-default" value="'.$wb['btn_back_txt'].'" data-load-content="'.$backlink.'"><span>'.$wb['btn_back_txt'].'</span></button>
     </div>
 ';
diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php
index dadd871bab6214d2214058f125492eed78d664b4..fa60fba63298f271f42036ce82ae34c8c4c6e9f8 100644
--- a/interface/web/login/logout.php
+++ b/interface/web/login/logout.php
@@ -54,7 +54,7 @@ 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-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>
 	';
diff --git a/interface/web/login/password_reset.php b/interface/web/login/password_reset.php
index 02c71f2948383a02202dfc4b53e83f2a5a2bbc46..1550ae8af261f6e895d660b0780502f7f0d45fdf 100644
--- a/interface/web/login/password_reset.php
+++ b/interface/web/login/password_reset.php
@@ -43,7 +43,7 @@ $app->tpl->setInclude('content_tpl', 'templates/password_reset.htm');
 
 $app->tpl_defaults();
 
-include ISPC_ROOT_PATH.'/web/login/lib/lang/'.$app->functions->check_language($_SESSION['s']['language']).'.lng';
+include ISPC_ROOT_PATH.'/web/login/lib/lang/'.$app->functions->check_language($conf['language']).'.lng';
 $app->tpl->setVar($wb);
 $continue = true;
 
diff --git a/interface/web/mail/backup_stats.php b/interface/web/mail/backup_stats.php
index 1317326573491aca4882b27dad7684bf1891ca1a..0bf0ceae0bbea619e8ba010a742ded1c985560dc 100644
--- a/interface/web/mail/backup_stats.php
+++ b/interface/web/mail/backup_stats.php
@@ -9,7 +9,7 @@ $list_def_file = 'list/backup_stats.list.php';
 ******************************************/
 
 //* Check permissions for module
-$app->auth->check_module_permissions('sites');
+$app->auth->check_module_permissions('mail');
 
 $app->load('listform_actions','functions');
 
diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php
index 6466f614c64548bd9cacf532ed63a21b45b78d3a..cc100cd7d23a6994191ab283f7de2aac7fb221c7 100644
--- a/interface/web/mail/lib/module.conf.php
+++ b/interface/web/mail/lib/module.conf.php
@@ -189,12 +189,13 @@ $items[] = array( 'title'  => 'Mailbox traffic',
 	'target'  => 'content',
 	'link' => 'mail/mail_user_stats.php',
 	'html_id' => 'mail_user_stats');
-$items[] = array (
-    'title'   => 'Backup Stats',
-    'target'  => 'content',
-    'link'    => 'mail/backup_stats.php',
-    'html_id' => 'backup_stats');
-
+if($app->auth->get_client_limit($userid, 'backup') == 'y') {
+        $items[] = array (
+            'title'   => 'Backup Stats',
+            'target'  => 'content',
+            'link'    => 'mail/backup_stats.php',
+            'html_id' => 'backup_stats');
+}
 
 $module['nav'][] = array( 'title' => 'Statistics',
 	'open'  => 1,
diff --git a/interface/web/sites/ajax_get_json.php b/interface/web/sites/ajax_get_json.php
index 494f274f1033fa3a0b4d59c2099697497b68343f..298fbdb0190b16e20b0a1f282236bf11095f29b0 100644
--- a/interface/web/sites/ajax_get_json.php
+++ b/interface/web/sites/ajax_get_json.php
@@ -97,7 +97,9 @@ if($type == 'getphpfastcgi'){
 	} elseif($php_type == 'fast-cgi'){
 		$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND active = 'y'".$sql_where, $server_id);
 	}
-	$php_records[]=array('name' => $app->functions->htmlentities($web_config['php_default_name']));
+	if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
+		$php_records[]=array('name' => $app->functions->htmlentities($web_config['php_default_name']));
+	}
 	uasort($php_records, 'sort_php');
 	$php_select = "";
 	if(is_array($php_records) && !empty($php_records)) {
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 838445e3615276f5a8250c039ea07e5e71bc005b..8b5a36441aedc45ab5b4ccb19577d873d89e3c6b 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -766,6 +766,12 @@ if($_SESSION["s"]["user"]["typ"] == 'admin'
 				'width'  => '30',
 				'maxlength' => '255'
 			),
+			'proxy_protocol' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'CHECKBOX',
+				'default' => 'y',
+				'value' => array(0 => 'n',1 => 'y')
+			),
 			'php_fpm_use_socket' => array (
 				'datatype' => 'VARCHAR',
 				'formtype' => 'CHECKBOX',
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 f208ab3f3698882517a59a2a062a4e51e5b7e0ec..f866aa7b25a3565dd99f38adfb6329ada36cbdd9 100644
--- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 a84d915230bd3f789ed1a24b099067256c96b3af..84b729eda59db38119715b7ca6cdf330ac15eeaf 100644
--- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng
@@ -94,6 +94,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be
 $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 01a7414a98c5fd7fd5bdcb5e4a666a646cae5eeb..7d021d4a3243a47d394ffa784df701b7c43206e0 100644
--- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deve ter
 $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['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';
@@ -158,4 +160,5 @@ $wb['enable_pagespeed_txt'] = 'Habilitar PageSpeed';
 $wb['log_retention_txt'] = 'Tempo de retenção do log de arquivos';
 $wb['log_retention_error_regex'] = 'Tempo de retenção em dias (valores permitidos: mínimo 0, máximo 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Cota de disco não pode ser configurada para 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 aae2f46339e8c6a275ce8531c5878d7255c12a89..40fda06d115c972db8424325afe3b6a99022fece 100644
--- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be
 $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['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';
@@ -153,4 +155,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 deaa3269c404119e9adf80cdb112d3c8f5242cdf..5e6ed3e7561c6831569d9db602c1c078a2a5654b 100644
--- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng
@@ -100,6 +100,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 d95b6d47e48ba54ff5d0a55d2cba7cb4c9ccf11b..b5fef5aa15dc9d5da23ab681be8875cb271965f9 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -99,6 +99,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers muß ein
 $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['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';
@@ -153,4 +155,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Log-Dateien Aufbewahrungszeit';
 $wb['log_retention_error_regex'] = 'Aufbewahrungszeit in Tagen (Erlaubte Werte: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota kann nicht 0 sein.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 aae2f46339e8c6a275ce8531c5878d7255c12a89..40fda06d115c972db8424325afe3b6a99022fece 100644
--- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be
 $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['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';
@@ -153,4 +155,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 0ea2c2a7967226c037300d80b41eb8be0aec0b0c..4fc9e15107f5ce135223c29edc7a1345af5b9583 100644
--- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 ae546e1c4d416668e32b112d980df7022d38cfab..985a1abcf26a93de6b49df712b514dabc22d71da 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be
 $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['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';
@@ -158,4 +160,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 f98c02db15e26d1414e134b1e4aa4a69861686e5..d6de7b80889c56d4e73ec323ae16e16a75efffe6 100644
--- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 c7c4a144322ef29b110f7c4a3c4ccbdbec8cce8e..3c9dfc5578012409404027553d1c0f867342b686 100644
--- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 931c00a53336a2bfc6f08e92b734684162623486..91a806f8700fab7416a3bd5f420c596f215d46b3 100644
--- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 7842d770b4511077bd90176f75f7cfda7c2571fe..3874c876f1b3f32d4f162da8b2d27dffa9c52437 100644
--- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 a40a4b62a5d7ef6604c373258475489a05302275..d14356efefc841432e615f6ed45e7db4819e321e 100644
--- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 617e7fe769b65badc85fef78f0c79d99a1a36fc2..0d7d7285ab6a291c8d21d0ea95e60ae646d028cc 100644
--- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 9fbca551a3178dfa5b54d78f30b0270d5f521d33..4613d2e14e26ffe5d417b556e5171987881c6779 100644
--- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 0efd971187ddb35d2df92bc14afb18025cd3bfe8..f4eabe51de05802c386279441031836735a842b1 100644
--- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 dd007d549f12dd71f78723391d7192b01c3540f8..fbd13b159d7c6c77104219fac16428d8920eb1f2 100644
--- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 8a426b0a1a512d90107376f315b61f44ff158581..ce4cdaceaf28603fca9d63e293041bc35032a980 100644
--- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng
@@ -98,6 +98,8 @@ $wb['web_folder_error_regex'] = 'Wprowadzono nieprawidłowy katalog. Proszę nie
 $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 170f2feb044376d3b326067ca2cebad51e13d8d4..8c1e76af3814b40d744512f90ed3e678b8829c52 100644
--- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 046c2c71a6ee107f1bc473ae511dd27eed51d193..00a9c247fc177e2129c0b8364b954c3f5e0bba5e 100644
--- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 e87af3b65474f0faeba733f976c701da373756f1..8e596defa399a59f4ce7c8062c27d99daa177b31 100644
--- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 1a2572b950cde238795bb2e3d7c6fe9e31e281ff..01db60b572a21ec4f550078e0d931af5412ae6af 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
 $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 17e60da6e6692092e617c97f74216029acd7ec24..7d52d3edf189dfac4fc46608acc73c264d828f0c 100644
--- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng
@@ -96,6 +96,8 @@ $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['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';
@@ -153,4 +155,5 @@ $wb['log_retention_txt'] = 'Logfiles retention time';
 $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)';
 $wb['domain_error_acme_invalid'] = 'Domain name acme.invalid not permitted.';
 $wb['limit_web_quota_not_0_txt'] = 'Harddisk Quota cannot be set to 0.';
+$wb['proxy_protocol_txt'] = 'Enable PROXY Protocol';
 ?>
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 4cfe808bfb9a5d358d439505b6c22844d99decc7..a190375c374423fce7f0cb7ac9f9427bdfa05547 100644
--- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng
@@ -97,6 +97,8 @@ $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers deÄŸeri
 $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['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 c37f3b74374c021fb97ee0f227aed9e4ff8d2963..a9aefad9675cc3a8b52f6e45b569e1149b796384 100644
--- a/interface/web/sites/lib/module.conf.php
+++ b/interface/web/sites/lib/module.conf.php
@@ -209,12 +209,14 @@ $items[] = array(   'title'   => 'Database quota',
 	'link'    => 'sites/database_quota_stats.php',
 	'html_id' => 'databse_quota_stats');
 
-$items[] = array (
-	'title'   => 'Backup Stats',
-	'target'  => 'content',
-	'link'    => 'sites/backup_stats.php',
-	'html_id' => 'backup_stats'
-);
+if($app->auth->get_client_limit($userid, 'backup') == 'y') {
+        $items[] = array (
+                'title'   => 'Backup Stats',
+                'target'  => 'content',
+                'link'    => 'sites/backup_stats.php',
+                'html_id' => 'backup_stats'
+        );
+}
 
 $module['nav'][] = array(   'title' => 'Statistics',
 	'open'  => 1,
diff --git a/interface/web/sites/templates/web_vhost_domain_advanced.htm b/interface/web/sites/templates/web_vhost_domain_advanced.htm
index 0b5ddfbd8bfb1bf818d433940f2fcee0c638f180..11f95d9cbdec9e8ef7969c2a961d8227bd42851e 100644
--- a/interface/web/sites/templates/web_vhost_domain_advanced.htm
+++ b/interface/web/sites/templates/web_vhost_domain_advanced.htm
@@ -49,7 +49,13 @@
 			<div class="form-group nginx">
                 <label for="https_port" class="col-sm-3 control-label">{tmpl_var name='https_port_txt'}</label>
                 <div class="col-sm-9"><input name="https_port" id="https_port" value="{tmpl_var name='https_port'}" type="text" class="form-control" /></div>
-            </div>	
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='proxy_protocol_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='proxy_protocol'}
+                </div>
+            </div>
             <div class="phpfpm">
                 <div class="form-group">
                     <label class="col-sm-3 control-label">{tmpl_var name='php_fpm_use_socket_txt'}</label>
diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm
index 149d4308875af598dfb80c0165a7da816da68da0..46235e09c2d324d56b3bc13d7ddbb54395d085ef 100644
--- a/interface/web/sites/templates/web_vhost_domain_edit.htm
+++ b/interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -230,6 +230,9 @@
                 <div class="col-sm-9"><select name="fastcgi_php_version" id="fastcgi_php_version" class="form-control">
                     {tmpl_var name='fastcgi_php_version'}
                 </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>
             </div>
             <tmpl_if name="limit_directive_snippets" op="==" value="y"><div class="form-group">
 				<label for="directive_snippets_id" class="col-sm-3 control-label">{tmpl_var name='directive_snippets_id_txt'}</label>
diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php
index 459af39670cfd8f0d823363d6cdc48cb64f64d49..7f0cd697e9ca654df167bcd43987af943ab329c5 100644
--- a/interface/web/sites/web_vhost_domain_edit.php
+++ b/interface/web/sites/web_vhost_domain_edit.php
@@ -257,7 +257,9 @@ class page_action extends tform_actions {
 					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?) AND active = 'y'", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
 				}
 			}
-			$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			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>";
+			}
 			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')){
@@ -403,7 +405,9 @@ class page_action extends tform_actions {
 					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND (client_id = 0 OR client_id=?) AND active = 'y'", $parent_domain['server_id'], $_SESSION['s']['user']['client_id']);
 				}
 			}
-			$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			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>";
+			}
 			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')){
@@ -623,7 +627,9 @@ class page_action extends tform_actions {
 					$php_records = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fastcgi_binary != '' AND php_fastcgi_ini_dir != '' AND server_id = ? AND active = 'y'", $parent_domain['server_id']);
 				}
 			}
-			$php_select = "<option value=''>".$app->functions->htmlentities($web_config['php_default_name'])."</option>";
+			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>";
+			}
 			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')){
@@ -1375,6 +1381,8 @@ class page_action extends tform_actions {
 			}
 		}
 		
+		$this->validateDefaultFastcgiPhpVersion();
+		
 		parent::onSubmit();
 	}
 	
@@ -1539,6 +1547,47 @@ class page_action extends tform_actions {
 
 		if(isset($this->dataRecord['folder_directive_snippets'])) $app->db->query("UPDATE web_domain SET folder_directive_snippets = ? WHERE domain_id = ?", $this->dataRecord['folder_directive_snippets'], $this->id);
 	}
+	
+	function validateDefaultFastcgiPhpVersion() {
+		global $app;
+
+		// If PHP is not enabled, we don't need to validate the default PHP version
+		if (empty($this->dataRecord['php']) || 'no' === $this->dataRecord['php']) {
+			return;
+		}
+
+		// If the default PHP version is not hidden, we don't need to do any additional validation
+		$app->uses('getconf');
+		$web_config = $app->getconf->get_server_config($this->dataRecord['server_id'], 'web');
+		if (empty($web_config['php_default_hide']) || 'n' === $web_config['php_default_hide']) {
+			return;
+		}
+
+		// 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'));
+			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;
+		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'];
+		}
+
+		if ('' === $old_fastcgi_php_version) {
+			// Warning was already shown, user confirmed the new PHP version
+			if (!empty($_POST['fastcgi_php_version_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);
+		}
+	}
 }
 
 $page = new page_action;
diff --git a/interface/web/themes/default/assets/favicon/android-chrome-192x192.png b/interface/web/themes/default/assets/favicon/android-chrome-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd24a98743b0457c88874bffdc136ed0e99401a5
Binary files /dev/null and b/interface/web/themes/default/assets/favicon/android-chrome-192x192.png differ
diff --git a/interface/web/themes/default/assets/favicon/android-chrome-512x512.png b/interface/web/themes/default/assets/favicon/android-chrome-512x512.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4d9ad1e03c2471a88f883de17c129555e906774
Binary files /dev/null and b/interface/web/themes/default/assets/favicon/android-chrome-512x512.png differ
diff --git a/interface/web/themes/default/assets/favicon/apple-touch-icon.png b/interface/web/themes/default/assets/favicon/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..713b3d50d1aaa8f4421ffb898b8d7310e2ee97c1
Binary files /dev/null and b/interface/web/themes/default/assets/favicon/apple-touch-icon.png differ
diff --git a/interface/web/themes/default/assets/favicon/browserconfig.xml b/interface/web/themes/default/assets/favicon/browserconfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0076c46ca3e54a8a9edefa6ff5524ec1ea7537a
--- /dev/null
+++ b/interface/web/themes/default/assets/favicon/browserconfig.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+    <msapplication>
+        <tile>
+            <square150x150logo src="/themes/default/assets/favicon/mstile-150x150.png"/>
+            <TileColor>#cc151c</TileColor>
+        </tile>
+    </msapplication>
+</browserconfig>
diff --git a/interface/web/themes/default/assets/favicon/favicon-16x16.png b/interface/web/themes/default/assets/favicon/favicon-16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..6877b0cf7cb185bcd9031c22eeabcd06a7d75175
Binary files /dev/null and b/interface/web/themes/default/assets/favicon/favicon-16x16.png differ
diff --git a/interface/web/themes/default/assets/favicon/favicon-32x32.png b/interface/web/themes/default/assets/favicon/favicon-32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..562f38a8669e4e568002f000b5804f9496bde006
Binary files /dev/null and b/interface/web/themes/default/assets/favicon/favicon-32x32.png differ
diff --git a/interface/web/themes/default/assets/favicon/favicon.ico b/interface/web/themes/default/assets/favicon/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..13554cb35355c7a7eee489693006c26041312d25
Binary files /dev/null and b/interface/web/themes/default/assets/favicon/favicon.ico differ
diff --git a/interface/web/themes/default/assets/favicon/mstile-150x150.png b/interface/web/themes/default/assets/favicon/mstile-150x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..83fcba69390f17f68b5dde4969858fb3d9d28292
Binary files /dev/null and b/interface/web/themes/default/assets/favicon/mstile-150x150.png differ
diff --git a/interface/web/themes/default/assets/favicon/safari-pinned-tab.svg b/interface/web/themes/default/assets/favicon/safari-pinned-tab.svg
new file mode 100644
index 0000000000000000000000000000000000000000..12238ebc5b76f76f47e13de85b885110287e24cc
--- /dev/null
+++ b/interface/web/themes/default/assets/favicon/safari-pinned-tab.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" width="1422.667" height="1422.667" viewBox="0 0 1067.000000 1067.000000"><path d="M92.9 141.4c-.2.2-2.8.7-5.8 1.1-19.1 2.4-41.8 14.2-57.7 30.1C22 180 13 191.6 13 193.8c0 .5-.8 2-1.9 3.3-1.9 2.5-8.4 19-9.8 25C.9 224 .5 329.7.5 457v231.5l2.7 8.5c9.4 29.1 29.3 51.5 57.2 64.5 8.4 3.9 18.1 7.3 23.1 8 1.1.2 4.5.6 7.5 1.1 3 .4 144.4.8 314.3.8l308.7.1.1 8c0 4.4.2 9.3.3 10.8.1 1.6-.2 3.1-.6 3.3-.5.3-.6 1-.2 1.5.3.5.5 6.2.4 12.7-.1 6.4-.1 12.6-.1 13.7 0 2-.5 2-147.2 1.8-81-.2-163.5-.3-183.4-.3h-36.2l-.3-13.7-.3-13.7-52-.1c-28.6 0-52.4.1-53 .2-2 .6-.8 40.4 1.5 49.3.5 1.9 1.1 4.6 1.4 6 1 5.1 7.9 21.6 9.5 23 .3.3 1.7 2.5 3 5 1.4 2.5 3 5 3.5 5.6.6.6 2.5 2.8 4.1 4.9 2.8 3.6 10.7 11.7 13.7 14 .7.6 3.1 2.5 5.3 4.2 3.8 3 6.7 4.8 16.2 9.8 4.1 2.2 16.2 6.7 21.8 8 3 .8 4.1.9 12.5 2.1 4.9.6 385 1.2 386.3.6.5-.2 3.2-.6 6-.8 6.4-.4 15.5-2.5 22.4-5.2 2.9-1.1 5.4-1.7 5.7-1.4.4.3.6 0 .6-.6 0-.7.3-1.1.8-1 1 .3 10.5-4.6 16.5-8.6 6.7-4.5 14.5-11.2 18.8-16.1 1.9-2.2 4.1-4.7 4.9-5.6 7.4-8.5 16.5-26.4 19.5-38.3 1.8-7.6 2-8.5 3-14.2.6-3.8.7-70 .1-73.9-.1-1.1-.6-4.5-1.1-7.5-.4-3-1.4-7.2-2.1-9.2-.7-2.1-1.3-3.9-1.3-4.1 0-.1-.4-1.5-1-3-.6-1.6-1.1-3-1.1-3.2 0-2.8-11.6-22.7-17-29-10-11.7-26.4-24-39.7-29.5-4.2-1.8-8.3-3.3-9.2-3.5-.9-.3-4.2-1.1-7.3-2-3.2-.8-9.2-1.9-13.5-2.3-4.3-.4-146.1-.7-315-.7H103l-.1-6.5c0-7.6 0-407.7.1-413.2v-3.6h855v8.1c.4 71.1 0 414.1-.4 414.5-.3.3-19.1.5-41.6.5-22.6 0-41.3.4-41.5.8-.4.5-.7 62.4-.5 98.4v5l46.8-.1c38.4 0 55.5-.6 60.2-1.9.3-.1 1.9-.5 3.5-.9 25-6.1 48-22 62.2-43.1 6.1-8.9 10-16.9 13.2-27 2.9-9.1 3.6-11.9 4.8-21 .8-6.5.9-436.1 0-444-1-9.5-1.4-11.5-4.6-21-2.6-8-4.5-12-10.7-23-3.2-5.6-10.1-14-16.5-19.8-8.3-7.6-8.9-8.1-12.4-10.3-1.6-1-3.2-2.1-3.5-2.4-2.8-2.9-22.1-11.5-30.5-13.6-1.6-.4-3.4-.8-4-1-.5-.1-2.3-.6-4-1-2.9-.9-884.8-1.8-885.6-1z"/><path d="M240.3 539.6c.2 1.3.1 2.7-.3 2.9-.4.2-.5 1.7-.3 3.2.8 5.6.8 7.8 0 9-.4.6-.4 1.4.2 1.7.6.4.6 1.8.1 3.6-.5 1.7-.5 3 0 3s.5 1.3 0 2.9c-.4 1.6-.6 3.2-.4 3.4.9.9 1 11.8.2 12.3-.5.3-.5 1-.1 1.7.8 1.3 1.1 5.7.3 5.7-.3 0-.5 1.8-.5 4s.2 4 .5 4 .5 1.1.5 2.5-.4 2.5-.8 2.5-.3.8.2 1.8.6 2.4.1 3.3c-.5.8-.5 2.1 0 2.8.4.8.4 2.6 0 4.2-.5 1.5-.6 3-.4 3.2.9.9 1 11.8.2 12.3-.5.3-.5 1-.1 1.7.9 1.4 1.1 5.7.2 5.7-.3 0-.3 1.7 0 3.7l.6 3.8 53 .1c50.2.1 56.5-.2 55-2.6-.3-.5-.5-3-.5-5.7 0-6.2 0-13.8-.2-16.1 0-.9 0-3.1.1-4.7.2-6.6.2-8.1.2-9.3-.1-.6-.1-1.8-.2-2.5 0-.6.1-3.9.2-7.3.1-3.3 0-6.5-.4-7-.3-.6-.2-2.6.2-4.6.5-2 .5-4.2.1-4.9-.5-.7-.4-2.3 0-3.5.5-1.3.5-2.6.1-2.9-.8-.4-.5-6.3.4-9.1.2-.6-.1-1.7-.5-2.5-.5-.7-.5-1.8.1-2.5s.6-1.5.1-1.8c-.8-.5-.5-8.5.4-9.5.2-.2-.1-1.1-.6-2.1-.6-1-.6-3 0-4.8.7-2.5.5-3.2-.8-3.6-.9-.3-25.5-.5-54.6-.5h-52.8l.5 2.5z"/></svg>
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/favicon/site.webmanifest b/interface/web/themes/default/assets/favicon/site.webmanifest
new file mode 100644
index 0000000000000000000000000000000000000000..a94d9f4b4a50a1339d06d14c42929e87705ce309
--- /dev/null
+++ b/interface/web/themes/default/assets/favicon/site.webmanifest
@@ -0,0 +1,18 @@
+{
+    "name": "ISPConfig",
+    "short_name": "ISPConfig",
+    "icons": [
+        {
+            "src": "/themes/default/assets/favicon/android-chrome-192x192.png",
+            "sizes": "192x192",
+            "type": "image/png"
+        },
+        {
+            "src": "/themes/default/assets/favicon/android-chrome-512x512.png",
+            "sizes": "512x512",
+            "type": "image/png"
+        }
+    ],
+    "theme_color": "#cc151c",
+    "background_color": "#cc151c"
+}
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js
index 5f797af3286f8b0a7902f8bcebe4f48bcdf70c46..70e3a903a65dbf44576868151101c19015858bfd 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -172,7 +172,7 @@ var ISPConfig = {
 						ISPConfig.loadContent(parts[1]);
 					} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
 						// Go to the login page
-						document.location.href = '/index.php';
+						document.location.href = './index.php';
 					} else {
 						$('#pageContent').html(jqXHR.responseText);
 						ISPConfig.onAfterContentLoad(target, $('#'+formname).serialize());
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.min.js b/interface/web/themes/default/assets/javascripts/ispconfig.min.js
index 76af49d1dc114b1279a8ee8941fda095bcdb8cc6..e118b994b0b4cc5c1592b86c465e04fcade91796 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.min.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.min.js
@@ -1 +1 @@
-var ISPConfig={pageFormChanged:!1,tabChangeWarningTxt:"",tabChangeDiscardTxt:"",tabChangeWarning:!1,tabChangeDiscard:!1,requestsRunning:0,indicatorCompleted:!1,registeredHooks:new Array,new_tpl_add_id:0,dataLogTimer:0,options:{useLoadIndicator:!1,useComboBox:!1},setOption:function(a,b){ISPConfig.options[a]=b},setOptions:function(a){$.extend(ISPConfig.options,a)},reportError:function(){},registerHook:function(a,b){ISPConfig.registeredHooks[a]||(ISPConfig.registeredHooks[a]=new Array);var c=ISPConfig.registeredHooks[a].length;ISPConfig.registeredHooks[a][c]=b},callHook:function(a,b){if(ISPConfig.registeredHooks[a])for(var c=0;c<ISPConfig.registeredHooks[a].length;c++){var d=ISPConfig.registeredHooks[a][c];d(a,b)}},resetFormChanged:function(){ISPConfig.pageFormChanged=!1},showLoadIndicator:function(){if(document.body.style.cursor="wait",1==ISPConfig.options.useLoadIndicator&&(ISPConfig.requestsRunning+=1,ISPConfig.requestsRunning<2)){var a=$("#ajaxloader");a.length<1&&(a=$('<div id="ajaxloader" style="display: none;"></div>'),a.appendTo("body"));var b=$("#content");if(b.length<1)return;ISPConfig.indicatorCompleted=!1;var c=b.offset().left+150,d=b.offset().top+150;a.css({left:c,top:d}).fadeIn("fast",function(){ISPConfig.indicatorCompleted=!0,ISPConfig.requestsRunning<1&&$(this).fadeOut("fast",function(){$(this).hide()})})}},hideLoadIndicator:function(){document.body.style.cursor="",ISPConfig.requestsRunning-=1,ISPConfig.requestsRunning<1&&(ISPConfig.requestsRunning=0,1==ISPConfig.indicatorCompleted&&$("#ajaxloader").fadeOut("fast",function(){$("#ajaxloader").hide()}))},onAfterSideNavLoaded:function(){1==ISPConfig.options.useComboBox&&$("#sidebar").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:!0,allowClear:!0})},onAfterContentLoad:function(a,b){b=b?"&"+b:"",1==ISPConfig.options.useComboBox&&$("#pageContent").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:!0,allowClear:!0,formatResult:function(a){return a.id&&$(a.element).parent().hasClass("flags")?'<span class="flags flag-'+a.id.toLowerCase()+'">'+a.text+"</span>":a.text},formatSelection:function(a){return a.id&&$(a.element).parent().hasClass("flags")?'<span class="flags flag-'+a.id.toLowerCase()+'">'+a.text+"</span>":a.text}}).on("change",function(){$("#pageForm .table #Filter").length>0&&$("#pageForm .table #Filter").trigger("click")}),$('input[data-input-element="date"]').datetimepicker({language:"en",todayHighlight:!0,todayBtn:"linked",bootcssVer:3,fontAwesome:!0,autoclose:!0,minView:"month"}),$('input[data-input-element="datetime"]').datetimepicker({language:"en",todayHighlight:!0,todayBtn:"linked",bootcssVer:3,fontAwesome:!0,autoclose:!0}),$('[data-toggle="tooltip"]').tooltip({}),$('input[type="password"]').each(function(){$(this).prop("readonly",!0).tooltip({title:"Click to set",placement:"left"})}),$('input[type="password"]').on("click focus",function(){$(this).prop("readonly",!1),$(this).tooltip("destroy")}),ISPConfig.callHook("onAfterContentLoad",{url:a,data:b})},submitForm:function(a,b,c){var d=arguments[3];if(c||(c=!1),!c||window.confirm(c)){$.ajax({type:"POST",url:b,data:$("#"+a).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,e,f){if(d&&alert(d),f.responseText.indexOf("HEADER_REDIRECT:")>-1){var g=f.responseText.split(":");ISPConfig.loadContent(g[1])}else f.responseText.indexOf("LOGIN_REDIRECT:")>-1?document.location.href="/index.php":($("#pageContent").html(f.responseText),ISPConfig.onAfterContentLoad(b,$("#"+a).serialize()),ISPConfig.pageFormChanged=!1);clearTimeout(dataLogTimer),ISPConfig.dataLogNotification(),ISPConfig.hideLoadIndicator()},error:function(a){ISPConfig.hideLoadIndicator();a.responseText.split(":");ISPConfig.reportError("Ajax Request was not successful. 111")}})}},submitUploadForm:function(a,b){var c=function(a){var b,c=a.contentWindow.document.body.innerHTML;try{b=JSON.parse(c)}catch(d){b=c}var e=$("<div></div>").html(b),f="",g=e.find("#OKMsg").html();g&&(f='<div id="OKMsg">'+g+"</div>");var h=e.find("#errorMsg").html();h&&(f=f+'<div id="errorMsg">'+h+"</div>");var i=e.find('input[name="_csrf_key"]').val(),j=e.find('input[name="_csrf_id"]').val();return f=f+'<input type="hidden" name="_csrf_id" value="'+j+'" /><input type="hidden" name="_csrf_key" value="'+i+'" />'},d="ajaxUploader-iframe-"+Math.round((new Date).getTime()/1e3);$("body").append('<iframe width="0" height="0" style="display:none;" name="'+d+'" id="'+d+'"/>'),$("#"+d).load(function(){var a=c(this);$("#errorMsg").remove(),$("#OKMsg").remove(),$('input[name="_csrf_key"]').remove(),$('input[name="_csrf_id"]').remove(),$('input[name="id"]').before(a),$(this).remove()}),$('input[type="file"]').closest("form").attr({target:d,action:b}).submit()},capp:function(a,b){$.ajax({type:"GET",url:"capp.php",data:"mod="+a+(void 0!=b?"&redirect="+b:""),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){if(""!=c.responseText)if(c.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=c.responseText.split(":");ISPConfig.loadContent(d[1])}else if(c.responseText.indexOf("URL_REDIRECT:")>-1){var e=c.responseText.substr(c.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=e}ISPConfig.loadMenus(),ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful."+a)}})},loadContent:function(a){{var b=arguments[1];$.ajax({type:"GET",url:a,data:b?b:null,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,d,e){if(e.responseText.indexOf("HEADER_REDIRECT:")>-1){var f=e.responseText.split(":");ISPConfig.loadContent(f[1])}else if(e.responseText.indexOf("URL_REDIRECT:")>-1){var g=e.responseText.substr(e.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=g}else $("#pageContent").html(e.responseText),ISPConfig.onAfterContentLoad(a,b?b:null),ISPConfig.pageFormChanged=!1;clearTimeout(dataLogTimer),ISPConfig.dataLogNotification(),ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 113")}})}},loadContentRefresh:function(a){if($("#refreshinterval").val()>0){{$.ajax({type:"GET",url:a,data:"refresh="+document.getElementById("refreshinterval").value,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(b,c,d){ISPConfig.hideLoadIndicator(),$("#pageContent").html(d.responseText),ISPConfig.onAfterContentLoad(a,"refresh="+document.getElementById("refreshinterval").value),ISPConfig.pageFormChanged=!1},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful."+a)}})}setTimeout("ISPConfig.loadContentRefresh('"+a+"&refresh="+document.getElementById("refreshinterval").value+"')",1e3*document.getElementById("refreshinterval").value*60)}},loadInitContent:function(){var a=$("#pageContent").attr("data-startpage");a||(a="dashboard/dashboard.php");$.ajax({type:"GET",url:a,data:"",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){if(c.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=c.responseText.split(":");ISPConfig.loadContent(d[1])}else $("#pageContent").html(c.responseText),ISPConfig.onAfterContentLoad("dashboard/dashboard.php",""),ISPConfig.pageFormChanged=!1;ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 114")}});ISPConfig.loadMenus(),ISPConfig.keepalive(),ISPConfig.dataLogNotification(),setTimeout(function(){try{$("form#pageForm").find('input[name="username"]').focus()}catch(a){}},1e3)},loadMenus:function(){$.ajax({type:"GET",url:"nav.php",data:"nav=side",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){ISPConfig.hideLoadIndicator(),$("#sidebar").html(c.responseText),ISPConfig.onAfterSideNavLoaded(),ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 115")}}),$.ajax({type:"GET",url:"nav.php",data:"nav=top",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){ISPConfig.hideLoadIndicator(),$("#topnav-container").html(c.responseText),ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 116")}})},changeTab:function(a,b,c){if(ISPConfig.requestsRunning>0)return console.log("tab change interrupted, request still running."),!1;document.pageForm.next_tab.value=a;var d=$("form#pageForm").find('[name="id"]'),e=null;if(d.length>0&&(e=d.val()),"y"!=ISPConfig.tabChangeDiscard||c)if(e&&"y"==ISPConfig.tabChangeWarning&&1==ISPConfig.pageFormChanged)if(window.confirm(ISPConfig.tabChangeWarningTxt))ISPConfig.submitForm("pageForm",b);else{var f=a;e?ISPConfig.loadContent(b,{next_tab:f,id:e}):ISPConfig.loadContent(b,{next_tab:f})}else ISPConfig.submitForm("pageForm",b);else{if(!(d.length<1||e)||0!=ISPConfig.pageFormChanged&&!window.confirm(ISPConfig.tabChangeDiscardTxt))return!1;var f=a;e?ISPConfig.loadContent(b,{next_tab:f,id:e}):ISPConfig.loadContent(b,{next_tab:f})}},confirm_action:function(a,b){window.confirm(b)&&ISPConfig.loadContent(a)},loadContentInto:function(a,b){$.ajax({type:"GET",url:b,dataType:"html",beforeSend:function(){},success:function(b,c,d){$("#"+a).html(d.responseText)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 118")}})},loadOptionInto:function(a,b,c){$.ajax({type:"GET",url:b,dataType:"html",beforeSend:function(){},success:function(d,e,f){var g=f.responseText,h=g.split("#");el=document.getElementById(a),el.innerHTML="";for(var i=0;i<h.length;++i){var j=document.createElement("option");j.appendChild(document.createTextNode(h[i])),j.value=h[i],el.appendChild(j)}"undefined"!=typeof c&&c(a,b)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 119")}})},keepalive:function(){$.ajax({type:"GET",url:"keepalive.php",dataType:"html",success:function(){setTimeout(function(){ISPConfig.keepalive()},1e6)},error:function(){ISPConfig.reportError("Session expired. Please login again.")}})},dataLogNotification:function(){console.log(ISPConfig.options);$.ajax({type:"GET",url:"datalogstatus.php",dataType:"json",success:function(a){var d=[];$.each(a.entries,function(a,b){d.push("<li><strong>"+b.text+":</strong> "+b.count+"</li>")}),a.count>0?($(".modal-body").html(d.join("")),$(".notification_text").text(a.count),$(".notification").css("display",""),dataLogTimer=setTimeout(function(){ISPConfig.dataLogNotification()},2e3)):($(".notification").css("display","none"),$(".modal-body").html(""),$("#datalogModal").modal("hide"),dataLogTimer=setTimeout(function(){ISPConfig.dataLogNotification()},5e3))},error:function(){ISPConfig.reportError("Notification not loading, aborting."),$(".notification").css("display","none")}})},addAdditionalTemplate:function(){var a=$("#template_additional").val(),b=$("#tpl_add_select").val().split("|",2),c=b[0],d=b[1];if(c>0){var e=a.split("/");ISPConfig.new_tpl_add_id+=1;var f=$('<a href="#"><span class="glyphicon glyphicon-remove-circle" aria-hidden="true"></span></a>').attr("class","btn btn-danger btn-xs").click(function(a){a.preventDefault(),ISPConfig.delAdditionalTemplate($(this).parent().attr("rel"))});e[e.length]="n"+ISPConfig.new_tpl_add_id+":"+c,$("<li>"+d+"</li>").attr("rel","n"+ISPConfig.new_tpl_add_id).append(f).appendTo("#template_additional_list ul"),$("#template_additional").val(e.join("/")),alert("additional template "+d+" added to customer")}else alert("no additional template selcted")},delAdditionalTemplate:function(a){var b=$("#template_additional").val();if(a){var c=$("#template_additional_list ul").find('li[rel="'+a+'"]').eq(0),d=c.text();c.remove();for(var e=b.split("/"),f=new Array,g=0;g<e.length;g++){var h=e[g].split(":",2);(2!=h.length||h[0]!=a)&&(f[f.length]=e[g])}$("#template_additional").val(f.join("/")),alert("additional template "+d+" deleted from customer")}else if(""!=b){var i=document.getElementById("tpl_add_select").value.split("|",2),j=i[0],d=i[1];$("#template_additional_list ul").find("li:not([rel])").each(function(){var a=$(this).text();return a==d?($(this).remove(),!1):this});var f=b,k=new RegExp("(^|/)"+j+"(/|$)");f=f.replace(k,""),f=f.replace("//","/"),$("#template_additional").val(f),alert("additional template "+d+" deleted from customer")}else alert("no additional template selcted")}};$(document).on("change",function(a){var b=a.target.localName;$("#pageForm .table #Filter").length>0&&"select"==b&&(a.preventDefault(),$("#pageForm .table #Filter").trigger("click")),("select"==b||"input"==b||"textarea"==b)&&0==$(a.target).hasClass("no-page-form-change")&&(ISPConfig.pageFormChanged=!0)});var $page=$("html, body");$(document).on("click","a[data-load-content],button[data-load-content]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this).attr("data-load-content");return b?void ISPConfig.loadContent(b):this}),$(document).on("click","a[data-capp],button[data-capp]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this).attr("data-capp");return b?void ISPConfig.capp(b):this}),$(document).on("click","a[data-submit-form],button[data-submit-form]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this),c=b.attr("data-form-action"),d=b.attr("data-submit-form");"true"==b.attr("data-form-upload")?ISPConfig.submitUploadForm(d,c):ISPConfig.submitForm(d,c)}),$(document).bind("keypress",function(a){"13"==a.which&&$("#pageForm .table #Filter").length>0&&0==$(a.target).hasClass("ui-autocomplete-input")&&(a.preventDefault(),$("#pageForm .table #Filter").trigger("click")),"13"==a.which&&$(".tab-content button.formbutton-success").length>0&&"textarea"!=a.target.localName&&$(a.target).is(":input")&&(a.preventDefault(),$(".tab-content button.formbutton-success").not("[disabled='disabled']").trigger("click"))}),$(document).on("click","th[data-column]",function(){var b=$(this),c=b.attr("data-column");if(!c)return this;if($("#pageForm .table #Filter").length>0&&"false"!=b.attr("data-sortable")){var d=$("#Filter"),e=d.attr("data-form-action"),f=d.attr("data-submit-form"),g=b.attr("data-ordered"),h="?";e.indexOf("?")>=0&&(h="&"),e=e+h+"orderby="+c,ISPConfig.submitForm(f,e),$(document).ajaxComplete(function(){var a=$('#pageForm .table th[data-column="'+c+'"]');a.parent().children("th[data-column]").removeAttr("data-ordered"),g&&"asc"==g?a.attr("data-ordered","desc"):a.attr("data-ordered","asc")})}}),$(document).on("click",".addPlaceholder",function(){var a=$(this).text(),b=$(this).siblings(":input");b.insertAtCaret(a)}),$(document).on("click",".addPlaceholderContent",function(){var a=$(this).find(".addPlaceholderContent").text(),b=$(this).siblings(":input");b.insertAtCaret(a)}),$(document).on("click","[data-check-fields] > input[type='checkbox']",function(){if($(this).is(":checked"))for(var a=$(this).parent().attr("data-check-fields"),b=a.split(/,/),c=0;c<b.length;c++){var d=b[c];$('input[type="checkbox"][name="'+d+'"]').prop("checked",!0)}}),$(document).on("click","[data-uncheck-fields] > input[type='checkbox']",function(){if(0==$(this).is(":checked"))for(var a=$(this).parent().attr("data-uncheck-fields"),b=a.split(/,/),c=0;c<b.length;c++){var d=b[c];$('input[type="checkbox"][name="'+d+'"]').prop("checked",!1)}}),$(document).on("ready",function(){$.fn.extend({insertAtCaret:function(a){return this.each(function(){if(document.selection)this.focus(),sel=document.selection.createRange(),sel.text=a,this.focus();else if(this.selectionStart||"0"==this.selectionStart){var c=this.selectionStart,d=this.selectionEnd,e=this.scrollTop;this.value=this.value.substring(0,c)+a+this.value.substring(d,this.value.length),this.focus(),this.selectionStart=c+a.length,this.selectionEnd=c+a.length,this.scrollTop=e}else this.value+=a,this.focus()})}}),$(".progress .progress-bar").css("width",function(){return $(this).attr("aria-valuenow")+"%"}),ISPConfig.loadInitContent(),$("#searchform").submit(function(a){a.preventDefault()}),$("#pageForm").submit(function(a){$("#pageForm .table #Filter").length>0&&a.preventDefault()}),$.fn.setCursorPosition=function(a){var b=$(this).get(0);if(b.setSelectionRange)b.setSelectionRange(a,a);else if(b.createTextRange){var c=b.createTextRange();c.collapse(!0),a<0&&(a=$(this).val().length+a),c.moveEnd("character",a),c.moveStart("character",a),c.select()}},$.fn.getCursorPosition=function(){var a=0,b=$(this).get(0);if("number"===typeof b.selectionStart)a="backward"==b.selectionDirection?b.selectionStart:b.selectionEnd;else if(document.selection){this.focus();var c=document.selection.createRange();c.moveStart("character",-b.value.length),a=c.text.length}return a}});
\ No newline at end of file
+var ISPConfig={pageFormChanged:!1,tabChangeWarningTxt:"",tabChangeDiscardTxt:"",tabChangeWarning:!1,tabChangeDiscard:!1,requestsRunning:0,indicatorCompleted:!1,registeredHooks:new Array,new_tpl_add_id:0,dataLogTimer:0,options:{useLoadIndicator:!1,useComboBox:!1},setOption:function(a,b){ISPConfig.options[a]=b},setOptions:function(a){$.extend(ISPConfig.options,a)},reportError:function(){},registerHook:function(a,b){ISPConfig.registeredHooks[a]||(ISPConfig.registeredHooks[a]=new Array);var c=ISPConfig.registeredHooks[a].length;ISPConfig.registeredHooks[a][c]=b},callHook:function(a,b){if(ISPConfig.registeredHooks[a])for(var c=0;c<ISPConfig.registeredHooks[a].length;c++){var d=ISPConfig.registeredHooks[a][c];d(a,b)}},resetFormChanged:function(){ISPConfig.pageFormChanged=!1},showLoadIndicator:function(){if(document.body.style.cursor="wait",1==ISPConfig.options.useLoadIndicator&&(ISPConfig.requestsRunning+=1,ISPConfig.requestsRunning<2)){var a=$("#ajaxloader");a.length<1&&(a=$('<div id="ajaxloader" style="display: none;"></div>'),a.appendTo("body"));var b=$("#content");if(b.length<1)return;ISPConfig.indicatorCompleted=!1;var c=b.offset().left+150,d=b.offset().top+150;a.css({left:c,top:d}).fadeIn("fast",function(){ISPConfig.indicatorCompleted=!0,ISPConfig.requestsRunning<1&&$(this).fadeOut("fast",function(){$(this).hide()})})}},hideLoadIndicator:function(){document.body.style.cursor="",ISPConfig.requestsRunning-=1,ISPConfig.requestsRunning<1&&(ISPConfig.requestsRunning=0,1==ISPConfig.indicatorCompleted&&$("#ajaxloader").fadeOut("fast",function(){$("#ajaxloader").hide()}))},onAfterSideNavLoaded:function(){1==ISPConfig.options.useComboBox&&$("#sidebar").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:!0,allowClear:!0})},onAfterContentLoad:function(a,b){b=b?"&"+b:"",1==ISPConfig.options.useComboBox&&$("#pageContent").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:!0,allowClear:!0,formatResult:function(a){return a.id&&$(a.element).parent().hasClass("flags")?'<span class="flags flag-'+a.id.toLowerCase()+'">'+a.text+"</span>":a.text},formatSelection:function(a){return a.id&&$(a.element).parent().hasClass("flags")?'<span class="flags flag-'+a.id.toLowerCase()+'">'+a.text+"</span>":a.text}}).on("change",function(){$("#pageForm .table #Filter").length>0&&$("#pageForm .table #Filter").trigger("click")}),$('input[data-input-element="date"]').datetimepicker({language:"en",todayHighlight:!0,todayBtn:"linked",bootcssVer:3,fontAwesome:!0,autoclose:!0,minView:"month"}),$('input[data-input-element="datetime"]').datetimepicker({language:"en",todayHighlight:!0,todayBtn:"linked",bootcssVer:3,fontAwesome:!0,autoclose:!0}),$('[data-toggle="tooltip"]').tooltip({}),$('input[type="password"]').each(function(){$(this).prop("readonly",!0).tooltip({title:"Click to set",placement:"left"})}),$('input[type="password"]').on("click focus",function(){$(this).prop("readonly",!1),$(this).tooltip("destroy")}),ISPConfig.callHook("onAfterContentLoad",{url:a,data:b})},submitForm:function(a,b,c){var d=arguments[3];if(c||(c=!1),!c||window.confirm(c)){$.ajax({type:"POST",url:b,data:$("#"+a).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,e,f){if(d&&alert(d),f.responseText.indexOf("HEADER_REDIRECT:")>-1){var g=f.responseText.split(":");ISPConfig.loadContent(g[1])}else f.responseText.indexOf("LOGIN_REDIRECT:")>-1?document.location.href="./index.php":($("#pageContent").html(f.responseText),ISPConfig.onAfterContentLoad(b,$("#"+a).serialize()),ISPConfig.pageFormChanged=!1);clearTimeout(dataLogTimer),ISPConfig.dataLogNotification(),ISPConfig.hideLoadIndicator()},error:function(a){ISPConfig.hideLoadIndicator();a.responseText.split(":");ISPConfig.reportError("Ajax Request was not successful. 111")}})}},submitUploadForm:function(a,b){var c=function(a){var b,c=a.contentWindow.document.body.innerHTML;try{b=JSON.parse(c)}catch(d){b=c}var e=$("<div></div>").html(b),f="",g=e.find("#OKMsg").html();g&&(f='<div id="OKMsg">'+g+"</div>");var h=e.find("#errorMsg").html();h&&(f=f+'<div id="errorMsg">'+h+"</div>");var i=e.find('input[name="_csrf_key"]').val(),j=e.find('input[name="_csrf_id"]').val();return f=f+'<input type="hidden" name="_csrf_id" value="'+j+'" /><input type="hidden" name="_csrf_key" value="'+i+'" />'},d="ajaxUploader-iframe-"+Math.round((new Date).getTime()/1e3);$("body").append('<iframe width="0" height="0" style="display:none;" name="'+d+'" id="'+d+'"/>'),$("#"+d).load(function(){var a=c(this);$("#errorMsg").remove(),$("#OKMsg").remove(),$('input[name="_csrf_key"]').remove(),$('input[name="_csrf_id"]').remove(),$('input[name="id"]').before(a),$(this).remove()}),$('input[type="file"]').closest("form").attr({target:d,action:b}).submit()},capp:function(a,b){$.ajax({type:"GET",url:"capp.php",data:"mod="+a+(void 0!=b?"&redirect="+b:""),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){if(""!=c.responseText)if(c.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=c.responseText.split(":");ISPConfig.loadContent(d[1])}else if(c.responseText.indexOf("URL_REDIRECT:")>-1){var e=c.responseText.substr(c.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=e}ISPConfig.loadMenus(),ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful."+a)}})},loadContent:function(a){{var b=arguments[1];$.ajax({type:"GET",url:a,data:b?b:null,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,d,e){if(e.responseText.indexOf("HEADER_REDIRECT:")>-1){var f=e.responseText.split(":");ISPConfig.loadContent(f[1])}else if(e.responseText.indexOf("URL_REDIRECT:")>-1){var g=e.responseText.substr(e.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=g}else $("#pageContent").html(e.responseText),ISPConfig.onAfterContentLoad(a,b?b:null),ISPConfig.pageFormChanged=!1;clearTimeout(dataLogTimer),ISPConfig.dataLogNotification(),ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 113")}})}},loadContentRefresh:function(a){if($("#refreshinterval").val()>0){{$.ajax({type:"GET",url:a,data:"refresh="+document.getElementById("refreshinterval").value,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(b,c,d){ISPConfig.hideLoadIndicator(),$("#pageContent").html(d.responseText),ISPConfig.onAfterContentLoad(a,"refresh="+document.getElementById("refreshinterval").value),ISPConfig.pageFormChanged=!1},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful."+a)}})}setTimeout("ISPConfig.loadContentRefresh('"+a+"&refresh="+document.getElementById("refreshinterval").value+"')",1e3*document.getElementById("refreshinterval").value*60)}},loadInitContent:function(){var a=$("#pageContent").attr("data-startpage");a||(a="dashboard/dashboard.php");$.ajax({type:"GET",url:a,data:"",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){if(c.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=c.responseText.split(":");ISPConfig.loadContent(d[1])}else $("#pageContent").html(c.responseText),ISPConfig.onAfterContentLoad("dashboard/dashboard.php",""),ISPConfig.pageFormChanged=!1;ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 114")}});ISPConfig.loadMenus(),ISPConfig.keepalive(),ISPConfig.dataLogNotification(),setTimeout(function(){try{$("form#pageForm").find('input[name="username"]').focus()}catch(a){}},1e3)},loadMenus:function(){$.ajax({type:"GET",url:"nav.php",data:"nav=side",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){ISPConfig.hideLoadIndicator(),$("#sidebar").html(c.responseText),ISPConfig.onAfterSideNavLoaded(),ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 115")}}),$.ajax({type:"GET",url:"nav.php",data:"nav=top",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(a,b,c){ISPConfig.hideLoadIndicator(),$("#topnav-container").html(c.responseText),ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator(),ISPConfig.reportError("Ajax Request was not successful. 116")}})},changeTab:function(a,b,c){if(ISPConfig.requestsRunning>0)return console.log("tab change interrupted, request still running."),!1;document.pageForm.next_tab.value=a;var d=$("form#pageForm").find('[name="id"]'),e=null;if(d.length>0&&(e=d.val()),"y"!=ISPConfig.tabChangeDiscard||c)if(e&&"y"==ISPConfig.tabChangeWarning&&1==ISPConfig.pageFormChanged)if(window.confirm(ISPConfig.tabChangeWarningTxt))ISPConfig.submitForm("pageForm",b);else{var f=a;e?ISPConfig.loadContent(b,{next_tab:f,id:e}):ISPConfig.loadContent(b,{next_tab:f})}else ISPConfig.submitForm("pageForm",b);else{if(!(d.length<1||e)||0!=ISPConfig.pageFormChanged&&!window.confirm(ISPConfig.tabChangeDiscardTxt))return!1;var f=a;e?ISPConfig.loadContent(b,{next_tab:f,id:e}):ISPConfig.loadContent(b,{next_tab:f})}},confirm_action:function(a,b){window.confirm(b)&&ISPConfig.loadContent(a)},loadContentInto:function(a,b){$.ajax({type:"GET",url:b,dataType:"html",beforeSend:function(){},success:function(b,c,d){$("#"+a).html(d.responseText)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 118")}})},loadOptionInto:function(a,b,c){$.ajax({type:"GET",url:b,dataType:"html",beforeSend:function(){},success:function(d,e,f){var g=f.responseText,h=g.split("#");el=document.getElementById(a),el.innerHTML="";for(var i=0;i<h.length;++i){var j=document.createElement("option");j.appendChild(document.createTextNode(h[i])),j.value=h[i],el.appendChild(j)}"undefined"!=typeof c&&c(a,b)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 119")}})},keepalive:function(){$.ajax({type:"GET",url:"keepalive.php",dataType:"html",success:function(){setTimeout(function(){ISPConfig.keepalive()},1e6)},error:function(){ISPConfig.reportError("Session expired. Please login again.")}})},dataLogNotification:function(){console.log(ISPConfig.options);$.ajax({type:"GET",url:"datalogstatus.php",dataType:"json",success:function(a){var d=[];$.each(a.entries,function(a,b){d.push("<li><strong>"+b.text+":</strong> "+b.count+"</li>")}),a.count>0?($(".modal-body").html(d.join("")),$(".notification_text").text(a.count),$(".notification").css("display",""),dataLogTimer=setTimeout(function(){ISPConfig.dataLogNotification()},2e3)):($(".notification").css("display","none"),$(".modal-body").html(""),$("#datalogModal").modal("hide"),dataLogTimer=setTimeout(function(){ISPConfig.dataLogNotification()},5e3))},error:function(){ISPConfig.reportError("Notification not loading, aborting."),$(".notification").css("display","none")}})},addAdditionalTemplate:function(){var a=$("#template_additional").val(),b=$("#tpl_add_select").val().split("|",2),c=b[0],d=b[1];if(c>0){var e=a.split("/");ISPConfig.new_tpl_add_id+=1;var f=$('<a href="#"><span class="glyphicon glyphicon-remove-circle" aria-hidden="true"></span></a>').attr("class","btn btn-danger btn-xs").click(function(a){a.preventDefault(),ISPConfig.delAdditionalTemplate($(this).parent().attr("rel"))});e[e.length]="n"+ISPConfig.new_tpl_add_id+":"+c,$("<li>"+d+"</li>").attr("rel","n"+ISPConfig.new_tpl_add_id).append(f).appendTo("#template_additional_list ul"),$("#template_additional").val(e.join("/")),alert("additional template "+d+" added to customer")}else alert("no additional template selcted")},delAdditionalTemplate:function(a){var b=$("#template_additional").val();if(a){var c=$("#template_additional_list ul").find('li[rel="'+a+'"]').eq(0),d=c.text();c.remove();for(var e=b.split("/"),f=new Array,g=0;g<e.length;g++){var h=e[g].split(":",2);(2!=h.length||h[0]!=a)&&(f[f.length]=e[g])}$("#template_additional").val(f.join("/")),alert("additional template "+d+" deleted from customer")}else if(""!=b){var i=document.getElementById("tpl_add_select").value.split("|",2),j=i[0],d=i[1];$("#template_additional_list ul").find("li:not([rel])").each(function(){var a=$(this).text();return a==d?($(this).remove(),!1):this});var f=b,k=new RegExp("(^|/)"+j+"(/|$)");f=f.replace(k,""),f=f.replace("//","/"),$("#template_additional").val(f),alert("additional template "+d+" deleted from customer")}else alert("no additional template selcted")}};$(document).on("change",function(a){var b=a.target.localName;$("#pageForm .table #Filter").length>0&&"select"==b&&(a.preventDefault(),$("#pageForm .table #Filter").trigger("click")),("select"==b||"input"==b||"textarea"==b)&&0==$(a.target).hasClass("no-page-form-change")&&(ISPConfig.pageFormChanged=!0)});var $page=$("html, body");$(document).on("click","a[data-load-content],button[data-load-content]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this).attr("data-load-content");return b?void ISPConfig.loadContent(b):this}),$(document).on("click","a[data-capp],button[data-capp]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this).attr("data-capp");return b?void ISPConfig.capp(b):this}),$(document).on("click","a[data-submit-form],button[data-submit-form]",function(a){if(a.preventDefault(),ISPConfig.requestsRunning>0)return void console.log("preventing click because there is still a request running.");$page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()}),$page.animate({scrollTop:0},1e3,function(){$page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){$page.stop()})});var b=$(this),c=b.attr("data-form-action"),d=b.attr("data-submit-form");"true"==b.attr("data-form-upload")?ISPConfig.submitUploadForm(d,c):ISPConfig.submitForm(d,c)}),$(document).bind("keypress",function(a){"13"==a.which&&$("#pageForm .table #Filter").length>0&&0==$(a.target).hasClass("ui-autocomplete-input")&&(a.preventDefault(),$("#pageForm .table #Filter").trigger("click")),"13"==a.which&&$(".tab-content button.formbutton-success").length>0&&"textarea"!=a.target.localName&&$(a.target).is(":input")&&(a.preventDefault(),$(".tab-content button.formbutton-success").not("[disabled='disabled']").trigger("click"))}),$(document).on("click","th[data-column]",function(){var b=$(this),c=b.attr("data-column");if(!c)return this;if($("#pageForm .table #Filter").length>0&&"false"!=b.attr("data-sortable")){var d=$("#Filter"),e=d.attr("data-form-action"),f=d.attr("data-submit-form"),g=b.attr("data-ordered"),h="?";e.indexOf("?")>=0&&(h="&"),e=e+h+"orderby="+c,ISPConfig.submitForm(f,e),$(document).ajaxComplete(function(){var a=$('#pageForm .table th[data-column="'+c+'"]');a.parent().children("th[data-column]").removeAttr("data-ordered"),g&&"asc"==g?a.attr("data-ordered","desc"):a.attr("data-ordered","asc")})}}),$(document).on("click",".addPlaceholder",function(){var a=$(this).text(),b=$(this).siblings(":input");b.insertAtCaret(a)}),$(document).on("click",".addPlaceholderContent",function(){var a=$(this).find(".addPlaceholderContent").text(),b=$(this).siblings(":input");b.insertAtCaret(a)}),$(document).on("click","[data-check-fields] > input[type='checkbox']",function(){if($(this).is(":checked"))for(var a=$(this).parent().attr("data-check-fields"),b=a.split(/,/),c=0;c<b.length;c++){var d=b[c];$('input[type="checkbox"][name="'+d+'"]').prop("checked",!0)}}),$(document).on("click","[data-uncheck-fields] > input[type='checkbox']",function(){if(0==$(this).is(":checked"))for(var a=$(this).parent().attr("data-uncheck-fields"),b=a.split(/,/),c=0;c<b.length;c++){var d=b[c];$('input[type="checkbox"][name="'+d+'"]').prop("checked",!1)}}),$(document).on("ready",function(){$.fn.extend({insertAtCaret:function(a){return this.each(function(){if(document.selection)this.focus(),sel=document.selection.createRange(),sel.text=a,this.focus();else if(this.selectionStart||"0"==this.selectionStart){var c=this.selectionStart,d=this.selectionEnd,e=this.scrollTop;this.value=this.value.substring(0,c)+a+this.value.substring(d,this.value.length),this.focus(),this.selectionStart=c+a.length,this.selectionEnd=c+a.length,this.scrollTop=e}else this.value+=a,this.focus()})}}),$(".progress .progress-bar").css("width",function(){return $(this).attr("aria-valuenow")+"%"}),ISPConfig.loadInitContent(),$("#searchform").submit(function(a){a.preventDefault()}),$("#pageForm").submit(function(a){$("#pageForm .table #Filter").length>0&&a.preventDefault()}),$.fn.setCursorPosition=function(a){var b=$(this).get(0);if(b.setSelectionRange)b.setSelectionRange(a,a);else if(b.createTextRange){var c=b.createTextRange();c.collapse(!0),a<0&&(a=$(this).val().length+a),c.moveEnd("character",a),c.moveStart("character",a),c.select()}},$.fn.getCursorPosition=function(){var a=0,b=$(this).get(0);if("number"===typeof b.selectionStart)a="backward"==b.selectionDirection?b.selectionStart:b.selectionEnd;else if(document.selection){this.focus();var c=document.selection.createRange();c.moveStart("character",-b.value.length),a=c.text.length}return a}});
\ No newline at end of file
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 0cdd2f89b342158ee6e496aa4e9351275314efc2..b49e6cd61dfd978365185ea35a8909c504206169 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -10,6 +10,16 @@
   <meta name='keywords' lang='en' content='' />
   <meta name='robots' content='noindex, nofollow' />
 
+  <link rel='apple-touch-icon' sizes='180x180' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/apple-touch-icon.png'>
+  <link rel='icon' type='image/png' sizes='32x32' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon-32x32.png'>
+  <link rel='icon' type='image/png' sizes='16x16' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon-16x16.png'>
+  <link rel='manifest' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/site.webmanifest'>
+  <link rel='mask-icon' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/safari-pinned-tab.svg' color='#cc151c'>
+  <link rel='shortcut icon' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon.ico'>
+  <meta name='msapplication-TileColor' content='#cc151c'>
+  <meta name='msapplication-config' content='/themes/<tmpl_var name='current_theme'>/assets/favicon/browserconfig.xml'>
+  <meta name='theme-color' content='#cc151c'>
+
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/bootstrap.min.css' />
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/fonts.min.css' />
   <link rel='stylesheet' href='themes/<tmpl_var name='current_theme'>/assets/stylesheets/ispconfig.css' />
diff --git a/interface/web/themes/default/templates/main_login.tpl.htm b/interface/web/themes/default/templates/main_login.tpl.htm
index 11042f02af351ebfdc4f97212bcf3b3b3b1044a5..c52e9071f283b83ff20ebd4b1cc53d039399f5f3 100644
--- a/interface/web/themes/default/templates/main_login.tpl.htm
+++ b/interface/web/themes/default/templates/main_login.tpl.htm
@@ -8,7 +8,16 @@
   <meta name='viewport' content='width=device-width, user-scalable=yes'>
   <meta name='description' lang='en' content='' />
   <meta name='keywords' lang='en' content='' />
-  <meta name='robots' content='index, follow' />
+
+ <link rel='apple-touch-icon' sizes='180x180' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/apple-touch-icon.png'>
+ <link rel='icon' type='image/png' sizes='32x32' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon-32x32.png'>
+ <link rel='icon' type='image/png' sizes='16x16' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon-16x16.png'>
+ <link rel='manifest' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/site.webmanifest'>
+ <link rel='mask-icon' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/safari-pinned-tab.svg' color='#cc151c'>
+ <link rel='shortcut icon' href='/themes/<tmpl_var name='current_theme'>/assets/favicon/favicon.ico'>
+ <meta name='msapplication-TileColor' content='#cc151c'>
+ <meta name='msapplication-config' content='/themes/<tmpl_var name='current_theme'>/assets/favicon/browserconfig.xml'>
+ <meta name='theme-color' content='#cc151c'>
 
   <link rel='stylesheet' href='../themes/<tmpl_var name='current_theme'>/assets/stylesheets/bootstrap.min.css' />
   <link rel='stylesheet' href='../themes/<tmpl_var name='current_theme'>/assets/stylesheets/fonts.min.css' />
diff --git a/remoting_client/API-docs/mail_alias_add.html b/remoting_client/API-docs/mail_alias_add.html
index 0e87abd8fc89473621ea55c9d38ef340bdedbb0a..101d3bfef8d05f0c9463c87cc496078d961312e7 100644
--- a/remoting_client/API-docs/mail_alias_add.html
+++ b/remoting_client/API-docs/mail_alias_add.html
@@ -24,6 +24,8 @@
 <p class="margin"> destination&nbsp;&nbsp;(<span class="paratype">text</span>)</p>
 <p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('alias','aliasdomain','forward','catchall')</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> allow_send_ase&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> greylisting&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <p class="headgrp">Output: </p> 
 <p class="margin"> Returns the ID of the newly added mail alias.</p>
 <!--<b>Output:</b> 
diff --git a/remoting_client/API-docs/mail_alias_update.html b/remoting_client/API-docs/mail_alias_update.html
index 0a2c6890748558eb245d54ca4879915c1c57a160..f4d960a059e8e374d843ed1c0390a6cb21bcb5a4 100644
--- a/remoting_client/API-docs/mail_alias_update.html
+++ b/remoting_client/API-docs/mail_alias_update.html
@@ -24,6 +24,8 @@
 <p class="margin"> destination&nbsp;&nbsp;(<span class="paratype">text</span>)</p>
 <p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('alias','aliasdomain','forward','catchall')</span>)</p>
 <p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> allow_send_ase&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> greylisting&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
 <b>Output: </b> 
 <p class="margin"> Returns the number of affected rows.</p>
 <!--<b>Output:</b> 
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index b1db61fe1c90e9a34dbc7797060ded982ebd66de..4487e4e4506dfb224e99de4dc607eb0d4cb188b9 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -1,5 +1,10 @@
 server {
         listen <tmpl_var name='ip_address'>:<tmpl_var name='http_port'>;
+<tmpl_if name='use_proxy_protocol' op='==' value='y'>
+<tmpl_if name='proxy_protocol_http' op='>' value='0'>
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_http'> proxy_protocol;
+</tmpl_if>
+</tmpl_if>
 <tmpl_if name='ipv6_enabled'>
         listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='http_port'>;
 </tmpl_if>
@@ -8,6 +13,11 @@ server {
 </tmpl_if>
 <tmpl_if name='ssl_enabled'>
         listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if};
+<tmpl_if name='use_proxy_protocol' op='==' value='y'>
+<tmpl_if name='proxy_protocol_https' op='>' value='0'>
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='proxy_protocol_https'> ssl proxy_protocol;
+</tmpl_if>
+</tmpl_if>
 		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 		# 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_prefer_server_ciphers on;
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index e45634e9b208df0fd6a6a74fd1d4151dcfdf3167..bec2cedef22047e37fd77ac285912b45c95c7235 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -12,6 +12,18 @@
 
 <tmpl_loop name='vhosts'>
 <VirtualHost {tmpl_var name='ip_address'}:{tmpl_var name='port'}>
+<tmpl_if name='use_proxy_protocol' op='==' value='y'>
+<tmpl_if name='apache_version' op='>=' value='2.4.30' format='version'>
+	<IfModule mod_remoteip.c>
+		RemoteIPProxyProtocol On
+	</IfModule>
+	</tmpl_else>
+	<IfModule mod_proxy_protocol.c>
+		ProxyProtocol On
+	</IfModule>
+</tmpl_if>
+</tmpl_if>
+
 <tmpl_hook name='apache2_vhost:vhost_header'>
 <tmpl_if name='php' op='==' value='suphp'>
 		DocumentRoot <tmpl_var name='web_document_root'>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 08730bee8e5bb8268c553d16d11f68b1877e4b3c..a40e902e2d6c79b6574d7dac1234a5988e5ed203 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1675,6 +1675,16 @@ class apache2_plugin {
 		if(count($rewrite_rules) > 0)  $tmp_vhost_arr = $tmp_vhost_arr + array('redirects' => $rewrite_rules);
 		if(count($alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $alias_seo_redirects);
 		$vhosts[] = $tmp_vhost_arr;
+
+		//if proxy protocol is enabled we need to add a new port to lsiten to
+		if($web_config['vhost_proxy_protocol_enabled'] == 'y' && $data['new']['proxy_protocol'] == 'y'){
+			if((int)$web_config['vhost_proxy_protocol_http_port'] > 0) {
+				$tmp_vhost_arr['port']           = (int)$web_config['vhost_proxy_protocol_http_port'];
+				$tmp_vhost_arr['use_proxy_protocol'] = $data['new']['proxy_protocol'];
+				$vhosts[]                        = $tmp_vhost_arr;
+			}
+		}
+
 		unset($tmp_vhost_arr);
 
 		//* Add vhost for ipv4 IP with SSL
@@ -1689,6 +1699,16 @@ class apache2_plugin {
 			}
 			if(count($ipv4_ssl_alias_seo_redirects) > 0) $tmp_vhost_arr = $tmp_vhost_arr + array('alias_seo_redirects' => $ipv4_ssl_alias_seo_redirects);
 			$vhosts[] = $tmp_vhost_arr;
+
+			//if proxy protocol is enabled we need to add a new port to lsiten to
+			if($web_config['vhost_proxy_protocol_enabled'] == 'y' && $data['new']['proxy_protocol'] == 'y'){
+				if((int)$web_config['vhost_proxy_protocol_https_port'] > 0) {
+					$tmp_vhost_arr['port']           = (int)$web_config['vhost_proxy_protocol_https_port'];
+					$tmp_vhost_arr['use_proxy_protocol'] = $data['new']['proxy_protocol'];
+					$vhosts[]                        = $tmp_vhost_arr;
+				}
+			}
+
 			unset($tmp_vhost_arr, $ipv4_ssl_alias_seo_redirects);
 			$app->log('Enable SSL for: '.$domain, LOGLEVEL_DEBUG);
 		}
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index a26a96896f6e58a2d6159b2651d41bf1fe3e5506..cd4b736fa4d9408ce372da3402086c59d5731a0c 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1519,6 +1519,19 @@ class nginx_plugin {
 			}
 			unset($tmp_output, $tmp_retval);
 		}
+
+		//proxy protocol settings
+		if($web_config['vhost_proxy_protocol_enabled'] == "y"){
+		    if((int)$web_config['vhost_proxy_protocol_https_port'] > 0) {
+			    $vhost_data['use_proxy_protocol'] = $data['new']['proxy_protocol'];
+			    $vhost_data['proxy_protocol_http'] = (int)$web_config['vhost_proxy_protocol_http_port'];
+			    $vhost_data['proxy_protocol_https'] = (int)$web_config['vhost_proxy_protocol_https_port'];
+		    } else {
+		        $vhost_data['use_proxy_protocol'] = "n";
+		    }
+		}else{
+			$vhost_data['use_proxy_protocol'] = "n";
+		}
 		
 		// set logging variable
 		$vhost_data['logging'] = $web_config['logging'];