diff --git a/LICENSE b/LICENSE
index 139b12fc1fcc916a8a9a604e292c6238cca759ef..5b4fffa24b95631ee35bc7210f7b23ecf12ff39b 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2007-2016, Till Brehm, ISPConfig UG
+Copyright (c) 2007-2020, Till Brehm, ISPConfig UG
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -22,4 +22,4 @@ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/install/dist/conf/debian90.conf.php b/install/dist/conf/debian90.conf.php
index 13fd2306543450d27d88f72319388f3ffe07abd8..e5d1d8a9b4f43c767ee5520b3cb61ce9d6f29424 100644
--- a/install/dist/conf/debian90.conf.php
+++ b/install/dist/conf/debian90.conf.php
@@ -101,7 +101,7 @@ $conf['web']['apps_vhost_group'] = 'ispapps';
 //* Fastcgi
 $conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.0/cgi/';
 $conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
-$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
+$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi7.0';
 
 //* Postfix
 $conf['postfix']['installed'] = false; // will be detected automatically during installation
diff --git a/install/install.php b/install/install.php
index fc6f9e10c0766c8ac049050c9fbea6ef4b7e3205..496ab3fdcef6b7de009f8bc6b2d523c3424ca885 100644
--- a/install/install.php
+++ b/install/install.php
@@ -30,30 +30,30 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 /*
 	ISPConfig 3 installer.
-	
+
 	-------------------------------------------------------------------------------------
 	- Interactive install
 	-------------------------------------------------------------------------------------
 	run:
-	
+
 	php install.php
-	
+
 	-------------------------------------------------------------------------------------
 	- Noninteractive (autoinstall) mode
 	-------------------------------------------------------------------------------------
-	
+
 	The autoinstall mode can read the installer questions from a .ini style file or from
-	a php config file. Examples for both file types are in the docs folder. 
+	a php config file. Examples for both file types are in the docs folder.
 	See autoinstall.ini.sample and autoinstall.conf_sample.php.
-	
+
 	run:
-	
+
 	php install.php --autoinstall=autoinstall.ini
-	
+
 	or
-	
+
 	php install.php --autoinstall=autoinstall.conf.php
-	
+
 */
 
 error_reporting(E_ALL|E_STRICT);
@@ -146,9 +146,9 @@ include_once 'dist/conf/'.$dist['confid'].'.conf.php';
 //** Installer Interface
 //****************************************************************************************************
 $inst = new installer();
-if (!$inst->get_php_version()) die('ISPConfig requieres PHP '.$inst->min_php."\n");
+if (!$inst->get_php_version()) die('ISPConfig requires PHP '.$inst->min_php."\n");
 $retval=shell_exec("which which");
-if (empty($retval)) die ("ISPConfig requieres which \n");
+if (empty($retval)) die ("ISPConfig requires which \n");
 
 $inst->check_prerequisites();
 
@@ -204,17 +204,17 @@ if(!function_exists('mysqli_connect')) die('No PHP MySQLi functions available. P
 //** Get MySQL root credentials
 $finished = false;
 do {
-	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');	 
+	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');
 	$tmp_mysql_server_port = $inst->free_query('MySQL server port', $conf['mysql']['port'],'mysql_port');
-	$tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user'],'mysql_root_user');	 
-	$tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password'],'mysql_root_password');	 
-	$tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database'],'mysql_database');	 
+	$tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user'],'mysql_root_user');
+	$tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password'],'mysql_root_password');
+	$tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database'],'mysql_database');
 	$tmp_mysql_server_charset = $inst->free_query('MySQL charset', $conf['mysql']['charset'],'mysql_charset');
-	
+
 	if($install_mode == 'expert') {
 		swriteln("The next two questions are about the internal ISPConfig database user and password.\nIt is recommended to accept the defaults which are 'ispconfig' as username and a random password.\nIf you use a different password, use only numbers and chars for the password.\n");
-		
-		$conf['mysql']['ispconfig_user'] = $inst->free_query('ISPConfig mysql database username', $conf['mysql']['ispconfig_user'],'mysql_ispconfig_user');	 
+
+		$conf['mysql']['ispconfig_user'] = $inst->free_query('ISPConfig mysql database username', $conf['mysql']['ispconfig_user'],'mysql_ispconfig_user');
 		$conf['mysql']['ispconfig_password'] = $inst->free_query('ISPConfig mysql database password', $conf['mysql']['ispconfig_password'],'mysql_ispconfig_password');
 	}
 
@@ -264,10 +264,10 @@ if($install_mode == 'expert' && strtolower($inst->simple_query('Shall this serve
 	//** Get MySQL root credentials
 	$finished = false;
 	do {
-		$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); 
+		$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname');
 		$tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port');
-		$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');	 
-		$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password'); 
+		$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');
+		$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password');
 		$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
 
 		//* Initialize the MySQL server connection
@@ -567,7 +567,7 @@ if($install_mode == 'standard' || strtolower($inst->simple_query('Install ISPCon
 	if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port']  = $ispconfig_vhost_port;
 	unset($ispconfig_vhost_port);
 
-	if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {	 
+	if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {
 		$inst->make_ispconfig_ssl_cert();
 	}
 	$inst->install_ispconfig_interface = true;
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 1573670a5da11ea49136f67edf69a93e58de3bb6..aea0a6469efd316c24e2791add5f00871c40a165 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -2761,9 +2761,7 @@ class installer_base {
 
 		// Request for certs if no LE SSL folder for server fqdn exist
 		$le_live_dir = '/etc/letsencrypt/live/' . $hostname;
-		if (!@is_dir($le_live_dir) && (
-				($svr_ip4 && in_array($svr_ip4, $dns_ips)) || ($svr_ip6 && in_array($svr_ip6, $dns_ips))
-			)) {
+		if (!@is_dir($le_live_dir) && (($svr_ip4 && in_array($svr_ip4, $dns_ips)) || ($svr_ip6 && in_array($svr_ip6, $dns_ips)))) {
 
 			// This script is needed earlier to check and open http port 80 or standalone might fail
 			// Make executable and temporary symlink latest letsencrypt pre, post and renew hook script before install
@@ -2865,7 +2863,7 @@ class installer_base {
 		$date = new DateTime();
 
 		// If the LE SSL certs for this hostname exists
-		if (is_dir($le_live_dir) && in_array($svr_ip, $dns_ips)) {
+		if (is_dir($le_live_dir) && (($svr_ip4 && in_array($svr_ip4, $dns_ips)) || ($svr_ip6 && in_array($svr_ip6, $dns_ips)))) {
 
 			// Backup existing ispserver ssl files
 			if (file_exists($ssl_crt_file)) rename($ssl_crt_file, $ssl_crt_file . '-' .$date->format('YmdHis') . '.bak');
diff --git a/install/tpl/named.conf.options.master b/install/tpl/named.conf.options.master
index 88c0e06493493f9493bfccb733e9bba74de22d25..cd5b0ebc2f614b0ab2881c733de35b42f068823c 100644
--- a/install/tpl/named.conf.options.master
+++ b/install/tpl/named.conf.options.master
@@ -21,6 +21,8 @@ options {
 	dnssec-enable yes;
 	dnssec-validation yes;
 	dnssec-lookaside auto;
+
+	version "unknown";
 	
 	allow-transfer {none;};
 
diff --git a/interface/index.htm b/interface/index.htm
deleted file mode 100644
index 9e38208a2d2e5bf54750ea3ed68dea120ad39b0a..0000000000000000000000000000000000000000
--- a/interface/index.htm
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <meta http-equiv="refresh" content="0;URL=web/index.php">
-</head>
-<body>
-</body>
-</html>
diff --git a/interface/web/dashboard/lib/lang/it.lng b/interface/web/dashboard/lib/lang/it.lng
index 6a22e7cf5ebbdae3c20939eb333b65412a460a31..db8858aafd91a6b2f02237957262fc08a60d5d61 100644
--- a/interface/web/dashboard/lib/lang/it.lng
+++ b/interface/web/dashboard/lib/lang/it.lng
@@ -1,5 +1,4 @@
 <?php
 $wb['welcome_user_txt'] = 'Buongiorno %s';
 $wb['available_modules_txt'] = 'Moduli disponibili';
-$wb['last_login_ip'] = "Ultimo login %s da %s";
 ?>
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index 81389c4553f540a2f1ae367fdf7bf5858011bd7f..fea4bd1f9806bd80efa1fcaa76c7404faa18680e 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -56,8 +56,33 @@ $form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update,
 $form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
 $form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
 
+$form["tabs"]['dns_records'] = array (
+	'title'  => "Records",
+	'width'  => 100,
+	'template'  => "templates/dns_records_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+
+		//#################################
+		// END Datatable fields
+		//#################################
+	),
+	'plugins' => array (
+		'dns_records' => array (
+			'class'   => 'plugin_listview',
+			'options' => array(
+				'listdef' => 'list/dns_a.list.php',
+				'sqlextwhere' => "zone = ".@$app->functions->intval(@$_REQUEST['id']),
+				'sql_order_by' => "ORDER BY type, name"
+			)
+		)
+	)
+);
+
 $form["tabs"]['dns_soa'] = array (
-	'title'  => "DNS Zone",
+	'title'  => "Zone settings",
 	'width'  => 100,
 	'template'  => "templates/dns_soa_edit.htm",
 	'fields'  => array (
@@ -303,31 +328,6 @@ $form["tabs"]['dns_soa'] = array (
 	)
 );
 
-$form["tabs"]['dns_records'] = array (
-	'title'  => "Records",
-	'width'  => 100,
-	'template'  => "templates/dns_records_edit.htm",
-	'fields'  => array (
-		//#################################
-		// Begin Datatable fields
-		//#################################
-
-		//#################################
-		// END Datatable fields
-		//#################################
-	),
-	'plugins' => array (
-		'dns_records' => array (
-			'class'   => 'plugin_listview',
-			'options' => array(
-				'listdef' => 'list/dns_a.list.php',
-				'sqlextwhere' => "zone = ".@$app->functions->intval(@$_REQUEST['id']),
-				'sql_order_by' => "ORDER BY type, name"
-			)
-		)
-	)
-);
-
 // show update acl to admins only.
 if(!$app->auth->is_admin()) unset($form["tabs"]['dns_soa']['fields']['update_acl']);
 
diff --git a/interface/web/dns/templates/dns_a_edit.htm b/interface/web/dns/templates/dns_a_edit.htm
index 907d84b0bc7a96ea338a7de020f5a1c29a001b74..0754bf9395771999c0e14df4ecc4e9a136345bf0 100644
--- a/interface/web/dns/templates/dns_a_edit.htm
+++ b/interface/web/dns/templates/dns_a_edit.htm
@@ -14,15 +14,15 @@
                     {tmpl_var name='active'}
                 </div>
             </div>
-        
-            
+
+
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
         <input type="hidden" name="type" value="{tmpl_var name='type'}">
-            
+
         <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_a_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
 <script language="JavaScript" type="text/javascript">
     jQuery('#data').ispconfigSearch({
@@ -37,5 +37,5 @@
         fillSearchFieldWith: 'fill_text',
         searchFieldWatermark: '',
         resultBoxPosition: ''
-    });	
+    });
 </script>
diff --git a/interface/web/dns/templates/dns_aaaa_edit.htm b/interface/web/dns/templates/dns_aaaa_edit.htm
index 13ee0ccaab0194a0e37b2c818b23e54dc5f31971..d21d2bdd92685b457b286836c2db2c75012f50d4 100644
--- a/interface/web/dns/templates/dns_aaaa_edit.htm
+++ b/interface/web/dns/templates/dns_aaaa_edit.htm
@@ -22,7 +22,7 @@
             
         <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_aaaa_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
 <script language="JavaScript" type="text/javascript">
     jQuery('#data').ispconfigSearch({
diff --git a/interface/web/dns/templates/dns_alias_edit.htm b/interface/web/dns/templates/dns_alias_edit.htm
index ad6c74d863c38abb4a8d185e53c18110b92c2f30..57a5343b6576fa409cad617e110b598a081c14f5 100644
--- a/interface/web/dns/templates/dns_alias_edit.htm
+++ b/interface/web/dns/templates/dns_alias_edit.htm
@@ -21,5 +21,5 @@
             
         <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_alias_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_caa_edit.htm b/interface/web/dns/templates/dns_caa_edit.htm
index 8d4372d9a9783c33895cf05a18af28ed1965802d..7c9d42d94b1d8ea292b97f419203c4fc0a15845d 100644
--- a/interface/web/dns/templates/dns_caa_edit.htm
+++ b/interface/web/dns/templates/dns_caa_edit.htm
@@ -51,7 +51,7 @@ For future use.  At this time, CA’s do not recognize any other flag values as
 
 <div class="clear"><div class="right">
 	<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_caa_edit.php">{tmpl_var name='btn_save_txt'}</button>
-	<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+	<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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
 </div></div>
 
 <script language="JavaScript" type="text/javascript">
diff --git a/interface/web/dns/templates/dns_cname_edit.htm b/interface/web/dns/templates/dns_cname_edit.htm
index 3b37e5133d6614812bc6c17f3a77f49db487de42..bf2464efa616d6243790c5b28e6812975f41bcda 100644
--- a/interface/web/dns/templates/dns_cname_edit.htm
+++ b/interface/web/dns/templates/dns_cname_edit.htm
@@ -21,5 +21,5 @@
             
         <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_cname_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_dkim_edit.htm b/interface/web/dns/templates/dns_dkim_edit.htm
index be3bea3dd53f0e9f357da901d7469116f0ea6a68..2947a2ba8589d5f231451347ab859ed59b5e6488 100644
--- a/interface/web/dns/templates/dns_dkim_edit.htm
+++ b/interface/web/dns/templates/dns_dkim_edit.htm
@@ -30,5 +30,5 @@
             
 <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_dkim_edit.php">{tmpl_var name='btn_save_txt'}</button>
-	<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+	<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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
 </div></div>
diff --git a/interface/web/dns/templates/dns_dmarc_edit.htm b/interface/web/dns/templates/dns_dmarc_edit.htm
index 4e966d36ed450ed7e0435ffc53ab346dae6d42d5..fc7530ca3fda1fe52501eb3524b3f3278932d1e5 100644
--- a/interface/web/dns/templates/dns_dmarc_edit.htm
+++ b/interface/web/dns/templates/dns_dmarc_edit.htm
@@ -152,5 +152,5 @@
 
         <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_dmarc_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_dname_edit.htm b/interface/web/dns/templates/dns_dname_edit.htm
index 32a1a396ddf627e6a8cc33ff17618a97e76a3416..8da217e3a825f7bffacc7a863b3049f00cbeb92f 100644
--- a/interface/web/dns/templates/dns_dname_edit.htm
+++ b/interface/web/dns/templates/dns_dname_edit.htm
@@ -21,5 +21,5 @@
 
 <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_dname_edit.php">{tmpl_var name='btn_save_txt'}</button>
-<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+<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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
 </div></div>
diff --git a/interface/web/dns/templates/dns_ds_edit.htm b/interface/web/dns/templates/dns_ds_edit.htm
index c7012d9fd9a7d2db0217d121e0203a2e382d818c..9f0e45ecd37e16f2f38ee92beec932802e4de55a 100644
--- a/interface/web/dns/templates/dns_ds_edit.htm
+++ b/interface/web/dns/templates/dns_ds_edit.htm
@@ -21,5 +21,5 @@
             
         <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_ds_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_hinfo_edit.htm b/interface/web/dns/templates/dns_hinfo_edit.htm
index 39a02dabbc2ed56ee17a31ed722d0dade7ec84e9..9d1281fbc12da4799848c199a3f5852c77878491 100644
--- a/interface/web/dns/templates/dns_hinfo_edit.htm
+++ b/interface/web/dns/templates/dns_hinfo_edit.htm
@@ -21,5 +21,5 @@
             
         <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_hinfo_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_loc_edit.htm b/interface/web/dns/templates/dns_loc_edit.htm
index d8e261991ce840e5679f562b76a3661c83b66c0d..8753f800e78add9d92ba510eb99cdbd97b4b40ac 100644
--- a/interface/web/dns/templates/dns_loc_edit.htm
+++ b/interface/web/dns/templates/dns_loc_edit.htm
@@ -21,5 +21,5 @@
             
         <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_loc_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_mx_edit.htm b/interface/web/dns/templates/dns_mx_edit.htm
index 3a84cbacb432b4106164df54823595e707d458f8..1d8889afc8e7534c5c4d23b9befa0d3502642134 100644
--- a/interface/web/dns/templates/dns_mx_edit.htm
+++ b/interface/web/dns/templates/dns_mx_edit.htm
@@ -24,5 +24,5 @@
             
         <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_mx_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_naptr_edit.htm b/interface/web/dns/templates/dns_naptr_edit.htm
index 15a944d6298106e5de1d134c2198d147d6b12a60..16aeef581f4779de038987868ef287e7643e73e3 100644
--- a/interface/web/dns/templates/dns_naptr_edit.htm
+++ b/interface/web/dns/templates/dns_naptr_edit.htm
@@ -36,5 +36,5 @@
 
         <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_naptr_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_ns_edit.htm b/interface/web/dns/templates/dns_ns_edit.htm
index 6644af152ccb47a62ebec03993a6dbfd9064b7cf..be3b576f65450342d714aaf5febe839fad1e069a 100644
--- a/interface/web/dns/templates/dns_ns_edit.htm
+++ b/interface/web/dns/templates/dns_ns_edit.htm
@@ -21,5 +21,5 @@
             
         <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_ns_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_ptr_edit.htm b/interface/web/dns/templates/dns_ptr_edit.htm
index 725bbb17fabb1e0b5797743a2ed8edd3fc1ad781..2cd3503dbf4bc2a45545d036f17d209fcb4d2bed 100644
--- a/interface/web/dns/templates/dns_ptr_edit.htm
+++ b/interface/web/dns/templates/dns_ptr_edit.htm
@@ -21,5 +21,5 @@
             
         <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_ptr_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_rp_edit.htm b/interface/web/dns/templates/dns_rp_edit.htm
index 9a4b9f4e55db2069ea15a5d5b34d9c1a7d4d7762..4719aff58cd4ecc0bb8ed89d93ac7b4b275422c8 100644
--- a/interface/web/dns/templates/dns_rp_edit.htm
+++ b/interface/web/dns/templates/dns_rp_edit.htm
@@ -21,5 +21,5 @@
             
         <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_rp_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
index 646b12957807e94fdc668b09266848de4e7d5151..fe381eaac3fb38324c44076ff1c86145ff55368d 100644
--- a/interface/web/dns/templates/dns_soa_admin_list.htm
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -21,14 +21,14 @@
         </div>
         </tmpl_if>
         <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
-            
+
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_wizard.php">{tmpl_var name="add_new_record_wizard_txt"}</button>
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_soa_edit.php">{tmpl_var name="add_new_record_txt"}</button>
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_import.php">{tmpl_var name="import_zone_file_txt"}</button>
-            
-        
 
-    
+
+
+
         <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
             <div class="table-wrapper marginTop15">
 <table class="table">
@@ -57,13 +57,13 @@
             <tbody>
                 <tmpl_loop name="records">
                     <tr>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
-						<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='origin'}">{tmpl_var name="origin"}</a></td>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
-                        <td class="text-right">   
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records">{tmpl_var name="active"}</td>
+						<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records">{tmpl_var name="sys_groupid"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='origin'}">{tmpl_var name="origin"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
+                        <td class="text-right">
                             <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
diff --git a/interface/web/dns/templates/dns_soa_edit.htm b/interface/web/dns/templates/dns_soa_edit.htm
index e16faac1aa5c4d9ea1641abb9f92ab70f631c5c4..24c9209ccc8035a28a4bd70a0175d1c5103f3c54 100644
--- a/interface/web/dns/templates/dns_soa_edit.htm
+++ b/interface/web/dns/templates/dns_soa_edit.htm
@@ -1,195 +1,217 @@
 <tmpl_if name="config_error_msg">
-<div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
-	<p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
-	<div><div style="float:left;width:150px;">{tmpl_var name='config_error_tstamp'} :&nbsp;</div><div style="padding-left:150px;">{tmpl_var name='config_error_msg'}</div></div>
+  <div style="background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px;">
+    <p style="font-face:bold">{tmpl_var name='configuration_error_txt'}</p>
+    <div>
+      <div style="float:left;width:150px;">{tmpl_var name='config_error_tstamp'} :&nbsp;</div>
+      <div style="padding-left:150px;">{tmpl_var name='config_error_msg'}</div>
+    </div>
+  </div>
+</tmpl_if>
+<tmpl_if name="is_admin">
+  <div class="form-group">
+    <tmpl_if name="edit_disabled">
+      <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+      <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
+        {tmpl_var name='server_id'}
+        </select>
+      </div>
+      <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
+      <tmpl_else>
+      <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+      <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
+        {tmpl_var name='server_id'}
+        </select>
+      </div>
+    </tmpl_if>
+  </div>
+  <tmpl_unless name="domain_option">
+    <div class="form-group">
+      <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+      <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
+        {tmpl_var name='client_group_id'}
+        </select>
+      </div>
+    </div>
+  </tmpl_unless>
+  <tmpl_else>
+  <tmpl_if name="only_one_server">
+    <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
+    <tmpl_else>
+    <div class="form-group">
+      <tmpl_if name="edit_disabled">
+        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
+          {tmpl_var name='client_server_id'}
+          </select>
+        </div>
+        <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
+        <tmpl_else>
+        <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
+        <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
+          {tmpl_var name='client_server_id'}
+          </select>
+        </div>
+      </tmpl_if>
+    </div>
+  </tmpl_if>
+</tmpl_if>
+<tmpl_if name="is_reseller">
+  <tmpl_unless name="domain_option">
+    <div class="form-group">
+      <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
+      <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
+        {tmpl_var name='client_group_id'}
+        </select>
+      </div>
+    </div>
+  </tmpl_unless>
+</tmpl_if>
+<div class="form-group">
+  <label for="origin" class="col-sm-3 control-label">{tmpl_var name='origin_txt'}</label>
+  <tmpl_if name="domain_option">
+    <div class="col-sm-9">
+      <select name="origin" id="origin" class="form-control">
+      {tmpl_var name='domain_option'}
+      </select>
+      <p class="formHint">{tmpl_var name='eg_domain_tld'}</p>
+    </div>
+    <tmpl_else>
+    <div class="col-sm-9">
+      <input type="text" name="origin" id="origin" value="{tmpl_var name='origin'}" class="form-control" />
+      <p class="formHint">{tmpl_var name='eg_domain_tld'}</p>
+    </div>
+  </tmpl_if>
+</div>
+<div class="form-group">
+  <label for="ns" class="col-sm-3 control-label">{tmpl_var name='ns_txt'}</label>
+  <div class="col-sm-9">
+    <input type="text" name="ns" id="ns" value="{tmpl_var name='ns'}" class="form-control" />
+    <p class="formHint">{tmpl_var name='eg_ns1_domain_tld'}</p>
+  </div>
+</div>
+<div class="form-group">
+  <label for="mbox" class="col-sm-3 control-label">{tmpl_var name='mbox_txt'}</label>
+  <div class="col-sm-9">
+    <input type="text" name="mbox" id="mbox" value="{tmpl_var name='mbox'}" class="form-control" />
+    <p class="formHint">{tmpl_var name='eg_webmaster_domain_tld'}</p>
+  </div>
+</div>
+<div class="form-group">
+  <label for="refresh" class="col-sm-3 control-label">{tmpl_var name='refresh_txt'}</label>
+  <div class="col-sm-6"><input type="text" name="refresh" id="refresh" value="{tmpl_var name='refresh'}" class="form-control" /></div>
+  <div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+  </div>
+</div>
+<div class="form-group">
+  <label for="retry" class="col-sm-3 control-label">{tmpl_var name='retry_txt'}</label>
+  <div class="col-sm-6"><input type="text" name="retry" id="retry" value="{tmpl_var name='retry'}" class="form-control" /></div>
+  <div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+  </div>
+</div>
+<div class="form-group">
+  <label for="expire" class="col-sm-3 control-label">{tmpl_var name='expire_txt'}</label>
+  <div class="col-sm-6"><input type="text" name="expire" id="expire" value="{tmpl_var name='expire'}" class="form-control" /></div>
+  <div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+  </div>
+</div>
+<div class="form-group">
+  <label for="minimum" class="col-sm-3 control-label">{tmpl_var name='minimum_txt'}</label>
+  <div class="col-sm-6"><input type="text" name="minimum" id="minimum" value="{tmpl_var name='minimum'}" class="form-control" /></div>
+  <div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+  </div>
+</div>
+<div class="form-group">
+  <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
+  <div class="col-sm-6"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div>
+  <div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
+  </div>
 </div>
+<div class="form-group">
+  <label for="xfer" class="col-sm-3 control-label">{tmpl_var name='xfer_txt'}</label>
+  <div class="col-sm-9"><input type="text" name="xfer" id="xfer" value="{tmpl_var name='xfer'}" class="form-control" /></div>
+</div>
+<div class="form-group">
+  <label for="also_notify" class="col-sm-3 control-label">{tmpl_var name='also_notify_txt'}</label>
+  <div class="col-sm-9"><input type="text" name="also_notify" id="also_notify" value="{tmpl_var name='also_notify'}" class="form-control" /></div>
+</div>
+<tmpl_if name="is_admin">
+  <div class="form-group">
+    <label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='update_acl_txt'}</label>
+    <div class="col-sm-9"><input type="text" name="update_acl" id="update_acl" value="{tmpl_var name='update_acl'}" class="form-control" /></div>
+  </div>
 </tmpl_if>
-
-            <tmpl_if name="is_admin">
-                <div class="form-group">
-                    <tmpl_if name="edit_disabled">
-                        <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
-                        <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
-                            {tmpl_var name='server_id'}
-                        </select></div>
-                        <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
-                        <tmpl_else>
-                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
-                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
-                                {tmpl_var name='server_id'}
-                            </select></div>
-                    </tmpl_if>
-                </div>
-                <tmpl_unless name="domain_option">
-                    <div class="form-group">
-                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
-                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
-                            {tmpl_var name='client_group_id'}
-                        </select></div>
-                    </div>
-                </tmpl_unless>
-            <tmpl_else>
-                <tmpl_if name="only_one_server">
-                    <input type="hidden" id="server_id" name="server_id" value="{tmpl_var name='server_id_value'}" />
-                <tmpl_else>
-                    <div class="form-group">
-                        <tmpl_if name="edit_disabled">
-                            <label for="server_id_disabled" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
-                            <div class="col-sm-9"><select name="server_id_disabled" id="server_id_disabled" class="form-control" disabled="disabled">
-                                {tmpl_var name='client_server_id'}
-                            </select></div>
-                            <input type="hidden" name="server_id" value="{tmpl_var name='server_id_value'}" />
-                        <tmpl_else>
-                            <label for="server_id" class="col-sm-3 control-label">{tmpl_var name='server_id_txt'}</label>
-                            <div class="col-sm-9"><select name="server_id" id="server_id" class="form-control">
-                                {tmpl_var name='client_server_id'}
-                            </select></div>
-                        </tmpl_if>
-                    </div>
-                </tmpl_if>
-            </tmpl_if>
-            <tmpl_if name="is_reseller">
-                <tmpl_unless name="domain_option">
-                    <div class="form-group">
-                        <label for="client_group_id" class="col-sm-3 control-label">{tmpl_var name='client_txt'}</label>
-                        <div class="col-sm-9"><select name="client_group_id" id="client_group_id" class="form-control">
-                            {tmpl_var name='client_group_id'}
-                        </select></div>
-                    </div>
-                </tmpl_unless>
-            </tmpl_if>
-            <div class="form-group">
-                <label for="origin" class="col-sm-3 control-label">{tmpl_var name='origin_txt'}</label>
-                <tmpl_if name="domain_option">
-                    <div class="col-sm-9">
-						<select name="origin" id="origin" class="form-control">
-                        {tmpl_var name='domain_option'}
-						</select>
-						<p class="formHint">{tmpl_var name='eg_domain_tld'}</p>
-					</div>
-                    <tmpl_else>
-                        <div class="col-sm-9">
-							<input type="text" name="origin" id="origin" value="{tmpl_var name='origin'}" class="form-control" />
-							<p class="formHint">{tmpl_var name='eg_domain_tld'}</p>
-						</div>
-					</tmpl_if>
-            </div>
-            <div class="form-group">
-                <label for="ns" class="col-sm-3 control-label">{tmpl_var name='ns_txt'}</label>
-                <div class="col-sm-9">
-					<input type="text" name="ns" id="ns" value="{tmpl_var name='ns'}" class="form-control" />
-					<p class="formHint">{tmpl_var name='eg_ns1_domain_tld'}</p>
-				</div>
-            </div>
-            <div class="form-group">
-                <label for="mbox" class="col-sm-3 control-label">{tmpl_var name='mbox_txt'}</label>
-                <div class="col-sm-9">
-					<input type="text" name="mbox" id="mbox" value="{tmpl_var name='mbox'}" class="form-control" />
-					<p class="formHint">{tmpl_var name='eg_webmaster_domain_tld'}</p>
-				</div>
-            </div>
-            <div class="form-group">
-                <label for="refresh" class="col-sm-3 control-label">{tmpl_var name='refresh_txt'}</label>
-                <div class="col-sm-6"><input type="text" name="refresh" id="refresh" value="{tmpl_var name='refresh'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
-            </div></div>
-            <div class="form-group">
-                <label for="retry" class="col-sm-3 control-label">{tmpl_var name='retry_txt'}</label>
-                <div class="col-sm-6"><input type="text" name="retry" id="retry" value="{tmpl_var name='retry'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
-            </div></div>
-            <div class="form-group">
-                <label for="expire" class="col-sm-3 control-label">{tmpl_var name='expire_txt'}</label>
-                <div class="col-sm-6"><input type="text" name="expire" id="expire" value="{tmpl_var name='expire'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
-            </div></div>
-            <div class="form-group">
-                <label for="minimum" class="col-sm-3 control-label">{tmpl_var name='minimum_txt'}</label>
-                <div class="col-sm-6"><input type="text" name="minimum" id="minimum" value="{tmpl_var name='minimum'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
-            </div></div>
-            <div class="form-group">
-                <label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
-                <div class="col-sm-6"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div><div class="col-sm-3 input-sm">&nbsp;{tmpl_var name='seconds_txt'}
-            </div></div>
-            <div class="form-group">
-                <label for="xfer" class="col-sm-3 control-label">{tmpl_var name='xfer_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="xfer" id="xfer" value="{tmpl_var name='xfer'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label for="also_notify" class="col-sm-3 control-label">{tmpl_var name='also_notify_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="also_notify" id="also_notify" value="{tmpl_var name='also_notify'}" class="form-control" /></div></div>
-            <tmpl_if name="is_admin">
-			<div class="form-group">
-                <label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='update_acl_txt'}</label>
-                <div class="col-sm-9"><input type="text" name="update_acl" id="update_acl" value="{tmpl_var name='update_acl'}" class="form-control" /></div></div>
-            </tmpl_if>
-						<div class="form-group">
-              <label for="serial" class="col-sm-3 control-label">{tmpl_var name='serial_txt'}</label>
-              <div class="col-sm-9"><textarea readonly="true" rows="1" id="serial" name="serial" class="form-control">{tmpl_var name='serial'}</textarea></div>
-			      </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
-                <div class="col-sm-9">
-                    {tmpl_var name='active'}
-                </div>
-            </div>
-
+<div class="form-group">
+  <label for="serial" class="col-sm-3 control-label">{tmpl_var name='serial_txt'}</label>
+  <div class="col-sm-9"><textarea readonly="true" rows="1" id="serial" name="serial" class="form-control">{tmpl_var name='serial'}</textarea></div>
+</div>
+<div class="form-group">
+  <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+  <div class="col-sm-9">
+    {tmpl_var name='active'}
+  </div>
+</div>
 <tmpl_if name="show_dnssec">
-		    <div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='dnssec_wanted_txt'}</label>
-                <div class="col-sm-9">
-                    {tmpl_var name='dnssec_wanted'}<br /><small>({tmpl_var name='dnssec_wanted_info'})</small>
-                </div>
-            </div>
-			<div class="form-group">
-                <label for="dnssec_algo" class="col-sm-3 control-label">{tmpl_var name='dnssec_algo_txt'}</label>
-                <div class="col-sm-9">{tmpl_var name='dnssec_algo'}</div>
-            </div>
-            <div class="form-group">
-                <label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='dnssec_info_txt'}</label>
-                <div class="col-sm-9"><textarea readonly="true" rows="5" id="dnssec_info" name="dnssec_info" class="form-control">{tmpl_var name='dnssec_info'}</textarea></div>
-			</div>
+  <div class="form-group">
+    <label class="col-sm-3 control-label">{tmpl_var name='dnssec_wanted_txt'}</label>
+    <div class="col-sm-9">
+      {tmpl_var name='dnssec_wanted'}<br /><small>({tmpl_var name='dnssec_wanted_info'})</small>
+    </div>
+  </div>
+  <div class="form-group">
+    <label for="dnssec_algo" class="col-sm-3 control-label">{tmpl_var name='dnssec_algo_txt'}</label>
+    <div class="col-sm-9">
+      {tmpl_var name='dnssec_algo'}
+    </div>
+  </div>
+  <div class="form-group">
+    <label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='dnssec_info_txt'}</label>
+    <div class="col-sm-9"><textarea readonly="true" rows="5" id="dnssec_info" name="dnssec_info" class="form-control">{tmpl_var name='dnssec_info'}</textarea></div>
+  </div>
 </tmpl_if>
-
-        <input type="hidden" name="id" value="{tmpl_var name='id'}">
-        <input name="serial" type="hidden" value="{tmpl_var name='serial'}">
-
-        <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_soa_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
+<input type="hidden" name="id" value="{tmpl_var name='id'}">
+<input name="serial" type="hidden" value="{tmpl_var name='serial'}">
+<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_soa_edit.php">{tmpl_var name='btn_save_txt'}</button>
+    <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_list.php">{tmpl_var name='btn_cancel_txt'}</button>
+  </div>
+</div>
 <script language="JavaScript" type="text/javascript">
-    jQuery('#xfer').ispconfigSearch({
-        dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
-        resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
-        ResultsTextPrefix: '<tmpl_var name="globalsearch_suggestions_text_txt">',
-        noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
-        noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
-        minChars: 0,
-        cssPrefix: 'df-',
-        fillSearchField: true,
-        fillSearchFieldWith: 'fill_text',
-        searchFieldWatermark: '',
-        resultBoxPosition: ''
-    });
-    jQuery('#also_notify').ispconfigSearch({
-        dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
-        resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
-        ResultsTextPrefix: '<tmpl_var name="globalsearch_suggestions_text_txt">',
-        noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
-        noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
-        minChars: 0,
-        cssPrefix: 'df-',
-        fillSearchField: true,
-        fillSearchFieldWith: 'fill_text',
-        searchFieldWatermark: '',
-        resultBoxPosition: ''
-    });
-    jQuery('#dnssec_wanted').on('click', function(event) {
-        if ($(this).is(':checked')) {
-            return;
-        }
+  jQuery('#xfer').ispconfigSearch({
+      dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
+      resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
+      ResultsTextPrefix: '<tmpl_var name="globalsearch_suggestions_text_txt">',
+      noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
+      noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
+      minChars: 0,
+      cssPrefix: 'df-',
+      fillSearchField: true,
+      fillSearchFieldWith: 'fill_text',
+      searchFieldWatermark: '',
+      resultBoxPosition: ''
+  });
+  jQuery('#also_notify').ispconfigSearch({
+      dataSrc: '/dns/ajax_get_json.php?type=get_ipv4',
+      resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
+      ResultsTextPrefix: '<tmpl_var name="globalsearch_suggestions_text_txt">',
+      noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
+      noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
+      minChars: 0,
+      cssPrefix: 'df-',
+      fillSearchField: true,
+      fillSearchFieldWith: 'fill_text',
+      searchFieldWatermark: '',
+      resultBoxPosition: ''
+  });
+  jQuery('#dnssec_wanted').on('click', function(event) {
+      if ($(this).is(':checked')) {
+          return;
+      }
 
-        if (window.confirm('{tmpl_var name="dnssec_wanted_info"}')) {
-            return;
-        }
+      if (window.confirm('{tmpl_var name="dnssec_wanted_info"}')) {
+          return;
+      }
 
-        event.preventDefault();
-    });
+      event.preventDefault();
+  });
 </script>
diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm
index df579e852aa3424bcbdb084340a0163a23a2f76d..ec23975175c429a9a2d61320db31bfea80d2b7e8 100644
--- a/interface/web/dns/templates/dns_soa_list.htm
+++ b/interface/web/dns/templates/dns_soa_list.htm
@@ -21,14 +21,14 @@
         </div>
         </tmpl_if>
         <p class="fieldset-legend">{tmpl_var name="toolsarea_head_txt"}</p>
-            
+
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_wizard.php">{tmpl_var name="add_new_record_wizard_txt"}</button>
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_soa_edit.php">{tmpl_var name="add_new_record_txt"}</button>
                 <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_import.php">{tmpl_var name="import_zone_file_txt"}</button>
-            
-        
 
-    
+
+
+
         <p class="fieldset-legend"><tmpl_var name="list_head_txt"></p>
             <div class="table-wrapper marginTop15">
 <table class="table">
@@ -55,12 +55,12 @@
             <tbody>
                 <tmpl_loop name="records">
                     <tr>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='origin'}">{tmpl_var name="origin"}</a></td>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
-                        <td class="text-right">   
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records">{tmpl_var name="active"}</td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='origin'}">{tmpl_var name="origin"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
+                        <td class="text-right">
                             <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                         </td>
                     </tr>
diff --git a/interface/web/dns/templates/dns_spf_edit.htm b/interface/web/dns/templates/dns_spf_edit.htm
index 2817d7645b8dc8ca7233b18501ff6a1612f94625..61d64b642a7a033acef7dd88b0f44ade42b51822 100644
--- a/interface/web/dns/templates/dns_spf_edit.htm
+++ b/interface/web/dns/templates/dns_spf_edit.htm
@@ -54,6 +54,6 @@
         <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>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
 
diff --git a/interface/web/dns/templates/dns_srv_edit.htm b/interface/web/dns/templates/dns_srv_edit.htm
index f142f482d433c14f310aebc2a8d3e9b614585962..22831e684010dd420ad51a22d536045f1dc79de3 100644
--- a/interface/web/dns/templates/dns_srv_edit.htm
+++ b/interface/web/dns/templates/dns_srv_edit.htm
@@ -30,5 +30,5 @@
             
         <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_srv_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_sshfp_edit.htm b/interface/web/dns/templates/dns_sshfp_edit.htm
index 18a40a8010c5ecb119fbb102a0ebb6f3ab1deef1..2f83356be58888fd3ff26bf4743ad5d0cc83d786 100644
--- a/interface/web/dns/templates/dns_sshfp_edit.htm
+++ b/interface/web/dns/templates/dns_sshfp_edit.htm
@@ -21,5 +21,5 @@
 
 <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_sshfp_edit.php">{tmpl_var name='btn_save_txt'}</button>
-<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+<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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
 </div></div>
diff --git a/interface/web/dns/templates/dns_tlsa_edit.htm b/interface/web/dns/templates/dns_tlsa_edit.htm
index 297077eecb125d532648fa4c3000332c401860f5..b780efb9bf6d5eaad7996b4bfed2efeb38ca15c1 100644
--- a/interface/web/dns/templates/dns_tlsa_edit.htm
+++ b/interface/web/dns/templates/dns_tlsa_edit.htm
@@ -21,5 +21,5 @@
             
         <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_tlsa_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/dns/templates/dns_txt_edit.htm b/interface/web/dns/templates/dns_txt_edit.htm
index de69bc553e29f22eb11e39a220d5a4543ab2465c..b74d6a55c7a3e82764af280d0f7a7d71c9da9e2f 100644
--- a/interface/web/dns/templates/dns_txt_edit.htm
+++ b/interface/web/dns/templates/dns_txt_edit.htm
@@ -21,5 +21,5 @@
             
         <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_txt_edit.php">{tmpl_var name='btn_save_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
+            <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'}&next_tab=dns_records">{tmpl_var name='btn_cancel_txt'}</button>
         </div></div>
diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php
index 0b48d7a92d59da48a71698fd5fc50a660ad38ddc..e62f5ca40a548b5504cf89f98ce8e9ba752258c5 100644
--- a/interface/web/sites/form/ftp_user.tform.php
+++ b/interface/web/sites/form/ftp_user.tform.php
@@ -203,7 +203,7 @@ if($app->auth->is_admin()) {
 				'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
 															'errmsg'=> 'directory_error_empty'),
 											1 => array ( 	'type' => 'REGEX',
-															'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{10,128}$/',
+															'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{7,128}$/',
 															'errmsg'=> 'directory_error_regex'),
 											2 => array (    'type'  => 'CUSTOM',
 														'class' => 'validate_ftpuser',
diff --git a/interface/web/sites/lib/lang/dk_ftp_user.lng b/interface/web/sites/lib/lang/dk_ftp_user.lng
index a5943cdff72be3be24028d703d99582900512fcf..2c08653e379e08b2a1276db43c9b5bfb96e934a3 100644
--- a/interface/web/sites/lib/lang/dk_ftp_user.lng
+++ b/interface/web/sites/lib/lang/dk_ftp_user.lng
@@ -18,7 +18,7 @@ $wb['active_txt'] = 'Aktiv';
 $wb['limit_ftp_user_txt'] = 'Max. antal of FTP brugere for din konto er nået.';
 $wb['username_error_empty'] = 'Brugernavn er tomt.';
 $wb['username_error_unique'] = 'Brugernavne skal være unikke.';
-$wb['username_error_regex'] = 'Brugernavne contains charachters that are not allowed.';
+$wb['username_error_regex'] = 'Brugernavne contains characters that are not allowed.';
 $wb['quota_size_error_empty'] = 'Kvote er tomt.';
 $wb['uid_error_empty'] = 'GID er tom.';
 $wb['directory_error_empty'] = 'Mappe er tom.';
diff --git a/interface/web/sites/lib/lang/en_ftp_user.lng b/interface/web/sites/lib/lang/en_ftp_user.lng
index 9d6a27fb682e4f7e18b278efa33a45a6014318f7..2deefcb719d7ab6bdc7c6345b535f4ff61e54fd9 100644
--- a/interface/web/sites/lib/lang/en_ftp_user.lng
+++ b/interface/web/sites/lib/lang/en_ftp_user.lng
@@ -18,7 +18,7 @@ $wb["active_txt"] = 'Active';
 $wb["limit_ftp_user_txt"] = 'The max. number of FTP users for your account is reached.';
 $wb["username_error_empty"] = 'Username is empty.';
 $wb["username_error_unique"] = 'The username must be unique.';
-$wb["username_error_regex"] = 'The username contains charachters that are not allowed.';
+$wb["username_error_regex"] = 'The username contains characters that are not allowed.';
 $wb["quota_size_error_empty"] = 'Quota is empty.';
 $wb["uid_error_empty"] = 'UID empty.';
 $wb["uid_error_empty"] = 'GID empty.';
diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css
index c255573e6c5560d69bc99ef7ef6e7bc20ca3edbc..8d679f274049b8482b1e0b05beaafd9458f1f6a9 100644
--- a/interface/web/themes/default/assets/stylesheets/ispconfig.css
+++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -37,6 +37,10 @@ body {
 .control-label-plain:after {
     content: ""; }
 
+.inlineLabel {
+  font-weight: 400;
+}
+
 .formbutton-default {
   padding: 6px 10px;
   border-bottom-style: solid;
diff --git a/server/conf/index/standard_index.html_bg b/server/conf/index/standard_index.html_bg
new file mode 100644
index 0000000000000000000000000000000000000000..63808928e56ce4e080ca78898e18adba6f220db0
--- /dev/null
+++ b/server/conf/index/standard_index.html_bg
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Привет!</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <link rel="shortcut icon" href="/favicon.ico" />
+    <meta name="robots" content="noindex" />
+	<style type="text/css"><!--
+    body {
+        color: #444444;
+        background-color: #EEEEEE;
+        font-family: 'Trebuchet MS', sans-serif;
+        font-size: 80%;
+    }
+    h1 {}
+    h2 { font-size: 1.2em; }
+    #page{
+        background-color: #FFFFFF;
+        width: 60%;
+        margin: 24px auto;
+        padding: 12px;
+    }
+    #header{
+        padding: 6px ;
+        text-align: center;
+    }
+    .header{ background-color: #83A342; color: #FFFFFF; }
+    #content {
+        padding: 4px 0 24px 0;
+    }
+    #footer {
+        color: #666666;
+        background: #f9f9f9;
+        padding: 10px 20px;
+        border-top: 5px #efefef solid;
+        font-size: 0.8em;
+        text-align: center;
+    }
+    #footer a {
+        color: #999999;
+    }
+    --></style>
+</head>
+<body>
+<div id="page">
+    <div id="header" class="header">
+        <h1>Добре дошли във <!--ADRESSE//-->вашият уеб сайт!<!--ADRESSE//--></h1>
+    </div>
+    <div id="content">
+        <h2>Това е страницата по подразбиране за вашият уеб сайт.</h2>
+        <p>Този файл може да бъде изтрит или презаписан с друг без никакъв проблем. Виждате съдържанието на файла <b>index.html</b> в <b>web</b> директорията.</p>
+        <p>Ако имате въпроси или проблеми може да се свържете с <!--SUPPORT//-->поддръжката<!--SUPPORT//-->.</p>
+    </div>
+    <div id="footer">
+        <p>Задвижван от <a href="http://www.ispconfig.org">ISPConfig</a></p>
+    </div>
+    </div>
+</body>
+</html>
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index e00a892fece390ee61e6aa97d98bae5dd402e0fc..bfa94f8fb3b3d3eaf81a4fffb25678bd3c7e8fc7 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -338,15 +338,15 @@ server {
 
 <tmpl_loop name="redirects">
 server {
-        listen <tmpl_var name='ip_address'>:80;
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='http_port'>;
 <tmpl_if name='ipv6_enabled'>
-        listen [<tmpl_var name='ipv6_address'>]:80;
+        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='http_port'>;
 </tmpl_if>
 
 <tmpl_if name='ssl_enabled'>
-        listen <tmpl_var name='ip_address'>:443 ssl;
+        listen <tmpl_var name='ip_address'>:<tmpl_var name='https_port'> ssl;
 <tmpl_if name='ipv6_enabled'>
-        listen [<tmpl_var name='ipv6_address'>]:443 ssl;
+        listen [<tmpl_var name='ipv6_address'>]:<tmpl_var name='https_port'> ssl;
 </tmpl_if>
         ssl_certificate <tmpl_var name='ssl_crt_file'>;
         ssl_certificate_key <tmpl_var name='ssl_key_file'>;
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 8cc87515b1db714d763578b457b8ca7581145a6e..692257848cb8a4ab440718b549a3c86025ffc780 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -76,8 +76,8 @@
 		ErrorDocument 503 /error/503.html
 </tmpl_if>
 
-		<IfModule mod_ssl.c>
 <tmpl_if name='ssl_enabled'>
+  <IfModule mod_ssl.c>
 		SSLEngine on
 		SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 		# SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
@@ -88,17 +88,17 @@
 		SSLCertificateFile <tmpl_var name='ssl_crt_file'>
 		SSLCertificateKeyFile <tmpl_var name='ssl_key_file'>
 		<tmpl_if name='apache_version' op='>=' value='2.4' format='version'>
-		SSLUseStapling on
-		SSLStaplingResponderTimeout 5
-		SSLStaplingReturnResponderErrors off
+		  SSLUseStapling on
+		  SSLStaplingResponderTimeout 5
+		  SSLStaplingReturnResponderErrors off
 		</tmpl_if>
-<tmpl_if name='has_bundle_cert'>
-		<tmpl_if name='apache_version' op='<' value='2.4.8' format='version'>
-		SSLCertificateChainFile <tmpl_var name='ssl_bundle_file'>
-		</tmpl_if>
-</tmpl_if>
+    <tmpl_if name='has_bundle_cert'>
+		  <tmpl_if name='apache_version' op='<' value='2.4.8' format='version'>
+		    SSLCertificateChainFile <tmpl_var name='ssl_bundle_file'>
+		  </tmpl_if>
+    </tmpl_if>
+  </IfModule>
 </tmpl_if>
-		</IfModule>
 
 		<Directory {tmpl_var name='web_document_root_www'}>
 				# Clear PHP settings of this website
diff --git a/server/cron.sh b/server/cron.sh
index 98f0ddfd30d4443382e0b77a5d1a9145bb503544..05fa10ef0d5c96a8d50d88b9e0cf0c1ca665084e 100644
--- a/server/cron.sh
+++ b/server/cron.sh
@@ -10,7 +10,7 @@ if [ -f /usr/local/ispconfig/server/lib/php.ini ]; then
 fi
 
 cd /usr/local/ispconfig/server
-/usr/bin/php -q \
+$(which php) -q \
     -d disable_classes= \
     -d disable_functions= \
     -d open_basedir= \
diff --git a/server/lib/classes/cron.d/300-quota_notify.inc.php b/server/lib/classes/cron.d/300-quota_notify.inc.php
index 5d652d0820d99a72eb67d7379cd73556c4a4a2d6..2a12f6fd3f467731d1bbedd84142d5382a51cd3b 100644
--- a/server/lib/classes/cron.d/300-quota_notify.inc.php
+++ b/server/lib/classes/cron.d/300-quota_notify.inc.php
@@ -49,7 +49,7 @@ class cronjob_quota_notify extends cronjob {
 
 	public function onRunJob() {
 		global $app, $conf;
-		
+
 		/* used for all monitor cronjobs */
 		$app->load('monitor_tools');
 		$this->_tools = new monitor_tools();
@@ -88,7 +88,11 @@ class cronjob_quota_notify extends cronjob {
 						if($rec['traffic_quota_lock'] != 'y' && ($web_config['overtraffic_notify_admin'] == 'y' || $web_config['overtraffic_notify_client'] == 'y')) {
 
 							$placeholders = array('{domain}' => $rec['domain'],
-								'{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'));
+								'{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'),
+								'{used}' => $web_traffic,
+								'{limit}' => $web_traffic_quota,
+								'{ratio}' => number_format(($web_traffic_quota > 0 ? $web_traffic/$web_traffic_quota : 0) * 100, 2, '.', '').'%'
+							);
 
 							$recipients = array();
 							//* send email to admin
@@ -410,12 +414,12 @@ class cronjob_quota_notify extends cronjob {
 				$monitor_data = array();
 				foreach ($tmp_rec as $tmp_mon) {
 					$tmp_array = unserialize($app->db->unquote($tmp_mon['data']));
-					if(is_array($tmp_array)) 
+					if(is_array($tmp_array))
 						foreach($tmp_array as $sys_groupid => $data)
 							$monitor_data[$data['sys_groupid']][] = $data;
 				}
 				//* remove duplicates from monitor-data
-				foreach($monitor_data as $_monitor_data) 
+				foreach($monitor_data as $_monitor_data)
 					$monitor_data[$_monitor_data[0]['sys_groupid']]=array_map("unserialize", array_unique(array_map("serialize", $_monitor_data)));
 			}
 
@@ -492,11 +496,11 @@ class cronjob_quota_notify extends cronjob {
 										$recipients = array();
 
 										//* send email to admin
-										if($global_config['admin_mail'] != '' && $web_config['overquota_db_notify_admin'] == 'y') 
+										if($global_config['admin_mail'] != '' && $web_config['overquota_db_notify_admin'] == 'y')
 											$recipients[] = $global_config['admin_mail'];
 
 										//* Send email to client
-										if($web_config['overquota_db_notify_client'] == 'y' && $client['email'] != '') 
+										if($web_config['overquota_db_notify_client'] == 'y' && $client['email'] != '')
 											$recipients[] = $client['email'];
 
 										$this->_tools->send_notification_email('db_quota_ok_notification', $placeholders, $recipients);
@@ -507,7 +511,7 @@ class cronjob_quota_notify extends cronjob {
 
 							}
 
-						}   
+						}
 
 					}
 
diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
deleted file mode 100644
index 77be94c1052fec841e81706447bf7ea70f17ac0c..0000000000000000000000000000000000000000
--- a/server/lib/classes/letsencrypt.inc.php
+++ /dev/null
@@ -1,574 +0,0 @@
-<?php
-
-/*
-Copyright (c) 2017, Marius Burkard, projektfarm Gmbh
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-class letsencrypt {
-
-	/**
-	 * Construct for this class
-	 *
-	 * @return system
-	 */
-	private $base_path = '/etc/letsencrypt';
-	private $renew_config_path = '/etc/letsencrypt/renewal';
-	private $certbot_use_certcommand = false;
-
-	public function __construct(){
-
-	}
-
-	public function get_acme_script() {
-		$acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh'));
-		$acme = reset($acme);
-		if(is_executable($acme)) {
-			return $acme;
-		} else {
-			return false;
-		}
-	}
-
-	public function get_acme_command($domains, $key_file, $bundle_file, $cert_file, $server_type = 'apache') {
-		global $app, $conf;
-
-		$letsencrypt = $this->get_acme_script();
-
-		$cmd = '';
-		// generate cli format
-		foreach($domains as $domain) {
-			$cmd .= (string) " -d " . $domain;
-		}
-
-		if($cmd == '') {
-			return false;
-		}
-
-		if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) {
-			$cert_arg = '--fullchain-file ' . escapeshellarg($cert_file);
-		} else {
-			$cert_arg = '--fullchain-file ' . escapeshellarg($bundle_file) . ' --cert-file ' . escapeshellarg($cert_file);
-		}
-
-		$cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme --always-force-new-domain-key --keylength 4096; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' ' . $cert_arg . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . ' --log ' . escapeshellarg($conf['ispconfig_log_dir'].'/acme.log') . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C  ; fi';
-
-		return $cmd;
-	}
-
-	public function get_certbot_script() {
-		$letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot'));
-		$letsencrypt = reset($letsencrypt);
-		if(is_executable($letsencrypt)) {
-			return $letsencrypt;
-		} else {
-			return false;
-		}
-	}
-
-	private function install_acme() {
-		$install_cmd = 'wget -O -  https://get.acme.sh | sh';
-		$ret = null;
-		$val = 0;
-		exec($install_cmd . ' 2>&1', $ret, $val);
-
-		return ($val == 0 ? true : false);
-	}
-
-	private function get_reload_command() {
-		global $app, $conf;
-
-		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
-
-		$daemon = '';
-		switch ($web_config['server_type']) {
-			case 'nginx':
-				$daemon = $web_config['server_type'];
-				break;
-			default:
-				if(is_file($conf['init_scripts'] . '/' . 'httpd24-httpd') || is_dir('/opt/rh/httpd24/root/etc/httpd')) {
-					$daemon = 'httpd24-httpd';
-				} elseif(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) {
-					$daemon = 'httpd';
-				} else {
-					$daemon = 'apache2';
-				}
-		}
-
-		$cmd = $app->system->getinitcommand($daemon, 'force-reload');
-		return $cmd;
-	}
-
-	public function get_certbot_command($domains) {
-		global $app;
-
-		$letsencrypt = $this->get_certbot_script();
-
-		$cmd = '';
-		// generate cli format
-		foreach($domains as $domain) {
-			$cmd .= (string) " --domains " . $domain;
-		}
-
-		if($cmd == '') {
-			return false;
-		}
-
-		$matches = array();
-		$ret = null;
-		$val = 0;
-
-		$letsencrypt_version = exec($letsencrypt . ' --version  2>&1', $ret, $val);
-		if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $letsencrypt_version, $matches)) {
-			$letsencrypt_version = $matches[2];
-		}
-		if (version_compare($letsencrypt_version, '0.22', '>=')) {
-			$acme_version = 'https://acme-v02.api.letsencrypt.org/directory';
-		} else {
-			$acme_version = 'https://acme-v01.api.letsencrypt.org/directory';
-		}
-		if (version_compare($letsencrypt_version, '0.30', '>=')) {
-			$app->log("LE version is " . $letsencrypt_version . ", so using certificates command", LOGLEVEL_DEBUG);
-			$this->certbot_use_certcommand = true;
-			$webroot_map = array();
-			for($i = 0; $i < count($domains); $i++) {
-				$webroot_map[$domains[$i]] = '/usr/local/ispconfig/interface/acme';
-			}
-			$webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map)));
-		} else {
-			$webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme";
-		}
-
-		$cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $cmd --webroot-path /usr/local/ispconfig/interface/acme";
-
-		return $cmd;
-	}
-
-	public function get_letsencrypt_certificate_paths($domains = array()) {
-		global $app;
-
-		if($this->get_acme_script()) {
-			return false;
-		}
-
-		if(empty($domains)) return false;
-		if(!is_dir($this->renew_config_path)) return false;
-
-		$dir = opendir($this->renew_config_path);
-		if(!$dir) return false;
-
-		$path_scores = array();
-
-		$main_domain = reset($domains);
-		sort($domains);
-		$min_diff = false;
-
-		while($file = readdir($dir)) {
-			if($file === '.' || $file === '..' || substr($file, -5) !== '.conf')  continue;
-			$file_path = $this->renew_config_path . '/' . $file;
-			if(!is_file($file_path) || !is_readable($file_path)) continue;
-
-			$fp = fopen($file_path, 'r');
-			if(!$fp) continue;
-
-			$path_scores[$file_path] = array(
-				'domains' => array(),
-				'diff' => 0,
-				'has_main_domain' => false,
-				'cert_paths' => array(
-					'cert' => '',
-					'privkey' => '',
-					'chain' => '',
-					'fullchain' => ''
-				)
-			);
-			$in_list = false;
-			while(!feof($fp) && $line = fgets($fp)) {
-				$line = trim($line);
-				if($line === '') continue;
-				elseif(!$in_list) {
-					if($line == '[[webroot_map]]') $in_list = true;
-
-					$tmp = explode('=', $line, 2);
-					if(count($tmp) != 2) continue;
-					$key = trim($tmp[0]);
-					if($key == 'cert' || $key == 'privkey' || $key == 'chain' || $key == 'fullchain') {
-						$path_scores[$file_path]['cert_paths'][$key] = trim($tmp[1]);
-					}
-
-					continue;
-				}
-
-				$tmp = explode('=', $line, 2);
-				if(count($tmp) != 2) continue;
-
-				$domain = trim($tmp[0]);
-				if($domain == $main_domain) $path_scores[$file_path]['has_main_domain'] = true;
-				$path_scores[$file_path]['domains'][] = $domain;
-			}
-			fclose($fp);
-
-			sort($path_scores[$file_path]['domains']);
-			if(count(array_intersect($domains, $path_scores[$file_path]['domains'])) < 1) {
-				$path_scores[$file_path]['diff'] = false;
-			} else {
-				// give higher diff value to missing domains than to those that are too much in there
-				$path_scores[$file_path]['diff'] = (count(array_diff($domains, $path_scores[$file_path]['domains'])) * 1.5) + count(array_diff($path_scores[$file_path]['domains'], $domains));
-			}
-
-			if($min_diff === false || $path_scores[$file_path]['diff'] < $min_diff) $min_diff = $path_scores[$file_path]['diff'];
-		}
-		closedir($dir);
-
-		if($min_diff === false) return false;
-
-		$cert_paths = false;
-		$used_path = false;
-		foreach($path_scores as $path => $data) {
-			if($data['diff'] === $min_diff) {
-				$used_path = $path;
-				$cert_paths = $data['cert_paths'];
-				if($data['has_main_domain'] == true) break;
-			}
-		}
-
-		$app->log("Let's Encrypt Cert config path is: " . ($used_path ? $used_path : "not found") . ".", LOGLEVEL_DEBUG);
-
-		return $cert_paths;
-	}
-
-	private function get_ssl_domain($data) {
-		global $app;
-
-		$domain = $data['new']['ssl_domain'];
-		if(!$domain) {
-			$domain = $data['new']['domain'];
-		}
-
-		if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') {
-			$domain = $data['new']['domain'];
-			if(substr($domain, 0, 2) === '*.') {
-				// wildcard domain not yet supported by letsencrypt!
-				$app->log('Wildcard domains not yet supported by letsencrypt, so changing ' . $domain . ' to ' . substr($domain, 2), LOGLEVEL_WARN);
-				$domain = substr($domain, 2);
-			}
-		}
-
-		return $domain;
-	}
-
-	public function get_website_certificate_paths($data) {
-		$ssl_dir = $data['new']['document_root'].'/ssl';
-		$domain = $this->get_ssl_domain($data);
-
-		$cert_paths = array(
-			'domain' => $domain,
-			'key' => $ssl_dir.'/'.$domain.'.key',
-			'key2' => $ssl_dir.'/'.$domain.'.key.org',
-			'csr' => $ssl_dir.'/'.$domain.'.csr',
-			'crt' => $ssl_dir.'/'.$domain.'.crt',
-			'bundle' => $ssl_dir.'/'.$domain.'.bundle'
-		);
-
-		if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') {
-			$cert_paths = array(
-				'domain' => $domain,
-				'key' => $ssl_dir.'/'.$domain.'-le.key',
-				'key2' => $ssl_dir.'/'.$domain.'-le.key.org',
-				'crt' => $ssl_dir.'/'.$domain.'-le.crt',
-				'bundle' => $ssl_dir.'/'.$domain.'-le.bundle'
-			);
-		}
-
-		return $cert_paths;
-	}
-
-	public function request_certificates($data, $server_type = 'apache') {
-		global $app, $conf;
-
-		$app->uses('getconf');
-		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
-		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-
-		$use_acme = false;
-		if($this->get_acme_script()) {
-			$use_acme = true;
-		} elseif(!$this->get_certbot_script()) {
-			// acme and le missing
-			$this->install_acme();
-		}
-
-		$tmp = $app->letsencrypt->get_website_certificate_paths($data);
-		$domain = $tmp['domain'];
-		$key_file = $tmp['key'];
-		$crt_file = $tmp['crt'];
-		$bundle_file = $tmp['bundle'];
-
-		// default values
-		$temp_domains = array($domain);
-		$cli_domain_arg = '';
-		$subdomains = null;
-		$aliasdomains = null;
-
-		//* be sure to have good domain
-		if(substr($domain,0,4) != 'www.' && ($data['new']['subdomain'] == "www" || $data['new']['subdomain'] == "*")) {
-			$temp_domains[] = "www." . $domain;
-		}
-
-		//* then, add subdomain if we have
-		$subdomains = $app->db->queryAllRecords('SELECT domain FROM web_domain WHERE parent_domain_id = '.intval($data['new']['domain_id'])." AND active = 'y' AND type = 'subdomain' AND ssl_letsencrypt_exclude != 'y'");
-		if(is_array($subdomains)) {
-			foreach($subdomains as $subdomain) {
-				$temp_domains[] = $subdomain['domain'];
-			}
-		}
-
-		//* then, add alias domain if we have
-		$aliasdomains = $app->db->queryAllRecords('SELECT domain,subdomain FROM web_domain WHERE parent_domain_id = '.intval($data['new']['domain_id'])." AND active = 'y' AND type = 'alias' AND ssl_letsencrypt_exclude != 'y'");
-		if(is_array($aliasdomains)) {
-			foreach($aliasdomains as $aliasdomain) {
-				$temp_domains[] = $aliasdomain['domain'];
-				if(isset($aliasdomain['subdomain']) && substr($aliasdomain['domain'],0,4) != 'www.' && ($aliasdomain['subdomain'] == "www" OR $aliasdomain['subdomain'] == "*")) {
-					$temp_domains[] = "www." . $aliasdomain['domain'];
-				}
-			}
-		}
-
-		// prevent duplicate
-		$temp_domains = array_unique($temp_domains);
-
-		// check if domains are reachable to avoid letsencrypt verification errors
-		$le_rnd_file = uniqid('le-') . '.txt';
-		$le_rnd_hash = md5(uniqid('le-', true));
-		if(!is_dir('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/')) {
-			$app->system->mkdir('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/', false, 0755, true);
-		}
-		file_put_contents('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/' . $le_rnd_file, $le_rnd_hash);
-
-		$le_domains = array();
-		foreach($temp_domains as $temp_domain) {
-			if((isset($web_config['skip_le_check']) && $web_config['skip_le_check'] == 'y') || (isset($server_config['migration_mode']) && $server_config['migration_mode'] == 'y')) {
-				$le_domains[] = $temp_domain;
-			} else {
-				$le_hash_check = trim(@file_get_contents('http://' . $temp_domain . '/.well-known/acme-challenge/' . $le_rnd_file));
-				if($le_hash_check == $le_rnd_hash) {
-					$le_domains[] = $temp_domain;
-					$app->log("Verified domain " . $temp_domain . " should be reachable for letsencrypt.", LOGLEVEL_DEBUG);
-				} else {
-					$app->log("Could not verify domain " . $temp_domain . ", so excluding it from letsencrypt request.", LOGLEVEL_WARN);
-				}
-			}
-		}
-		if(!empty($le_domains)) {
-			foreach($le_domains as $idx=>$temp_domain) {
-				//check caa-record
-				$caa_check = false;
-				$caa_domain = $temp_domain;
-				$count = substr_count($caa_domain, '.');
-				if($count === 2) {
-					if(strlen(explode('.', $caa_domain)[1]) > 3) {
-						$caa_domain = explode('.', $caa_domain, 2)[1];
- 					}
-				} else if($count > 2) {
-					$caa_domain = get_domain(explode('.', $caa_domain, 2)[1]);
-				}
-				$caa_records = @dns_get_record($caa_domain, DNS_CAA); // requieres PHP 7.0.16, 7.1.2
-				if(is_array($caa_records) && !empty($caa_records)) {
-					foreach ($caa_records as $record) {
-						if($record['value'] == 'letsencrypt.org') $caa_check = true;
-					}
-				} else {
-					$caa_check = true;
-				}
-
-				if($caa_check === false) {
-					$app->log("Incomplete CAA-Records for " . $temp_domain . ", so excluding it from letsencrypt request.", LOGLEVEL_WARN);
-					unset($le_domains[$idx]);
-				}
-			}
-		}
-
-		$temp_domains = $le_domains;
-		unset($le_domains);
-		@unlink('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/' . $le_rnd_file);
-
-		$le_domain_count = count($temp_domains);
-		if($le_domain_count > 100) {
-			$temp_domains = array_slice($temp_domains, 0, 100);
-			$app->log("There were " . $le_domain_count . " domains in the domain list. LE only supports 100, so we strip the rest.", LOGLEVEL_WARN);
-		}
-
-		// unset useless data
-		unset($subdomains);
-		unset($aliasdomains);
-
-		$this->certbot_use_certcommand = false;
-		$letsencrypt_cmd = '';
-		$allow_return_codes = null;
-		if($use_acme) {
-			$letsencrypt_cmd = $this->get_acme_command($temp_domains, $key_file, $bundle_file, $crt_file, $server_type);
-			$allow_return_codes = array(2);
-		} else {
-			$letsencrypt_cmd = $this->get_certbot_command($temp_domains);
-		}
-
-		$success = false;
-		if($letsencrypt_cmd) {
-			if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') {
-				$app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
-				$app->log("Let's Encrypt SSL Cert domains: $cli_domain_arg", LOGLEVEL_DEBUG);
-
-				$success = $app->system->_exec($letsencrypt_cmd, $allow_return_codes);
-			} else {
-				$app->log("Migration mode active, skipping Let's Encrypt SSL Cert creation for: $domain", LOGLEVEL_DEBUG);
-				$success = true;
-			}
-		}
-
-		if($use_acme === true) {
-			if(!$success) {
-				$app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN);
-				$app->log($letsencrypt_cmd, LOGLEVEL_WARN);
-				return false;
-			} else {
-				return true;
-			}
-		}
-
-		$le_files = array();
-		if($this->certbot_use_certcommand === true && $letsencrypt_cmd) {
-			$cli_domain_arg = '';
-			// generate cli format
-			foreach($temp_domains as $temp_domain) {
-				$cli_domain_arg .= (string) " --domains " . $temp_domain;
-			}
-
-
-			$letsencrypt_cmd = $this->get_certbot_script() . " certificates " . $cli_domain_arg;
-			$output = explode("\n", shell_exec($letsencrypt_cmd . " 2>/dev/null | grep -v '^\$'"));
-			$le_path = '';
-			$skip_to_next = true;
-			$matches = null;
-			foreach($output as $outline) {
-				$outline = trim($outline);
-				$app->log("LE CERT OUTPUT: " . $outline, LOGLEVEL_DEBUG);
-
-				if($skip_to_next === true && !preg_match('/^\s*Certificate Name/', $outline)) {
-					continue;
-				}
-				$skip_to_next = false;
-
-				if(preg_match('/^\s*Expiry.*?VALID:\s+\D/', $outline)) {
-					$app->log("Found LE path is expired or invalid: " . $matches[1], LOGLEVEL_DEBUG);
-					$skip_to_next = true;
-					continue;
-				}
-
-				if(preg_match('/^\s*Certificate Path:\s*(\/.*?)\s*$/', $outline, $matches)) {
-					$app->log("Found LE path: " . $matches[1], LOGLEVEL_DEBUG);
-					$le_path = dirname($matches[1]);
-					if(is_dir($le_path)) {
-						break;
-					} else {
-						$le_path = false;
-					}
-				}
-			}
-
-			if($le_path) {
-				$le_files = array(
-					'privkey' => $le_path . '/privkey.pem',
-					'chain' => $le_path . '/chain.pem',
-					'cert' => $le_path . '/cert.pem',
-					'fullchain' => $le_path . '/fullchain.pem'
-				);
-			}
-		}
-		if(empty($le_files)) {
-			$le_files = $this->get_letsencrypt_certificate_paths($temp_domains);
-		}
-		unset($temp_domains);
-
-		if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) {
-			$crt_tmp_file = $le_files['fullchain'];
-		} else {
-			$crt_tmp_file = $le_files['cert'];
-		}
-
-		$key_tmp_file = $le_files['privkey'];
-		$bundle_tmp_file = $le_files['chain'];
-
-		if(!$success) {
-			// error issuing cert
-			$app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN);
-			$app->log($letsencrypt_cmd, LOGLEVEL_WARN);
-
-			// if cert already exists, dont remove it. Ex. expired/misstyped/noDnsYet alias domain, api down...
-			if(!file_exists($crt_tmp_file)) {
-				return false;
-			}
-		}
-
-		//* check is been correctly created
-		if(file_exists($crt_tmp_file)) {
-			$app->log("Let's Encrypt Cert file: $crt_tmp_file exists.", LOGLEVEL_DEBUG);
-			$date = date("YmdHis");
-
-			//* TODO: check if is a symlink, if target same keep it, either remove it
-			if(is_file($key_file)) {
-				$app->system->copy($key_file, $key_file.'.old.'.$date);
-				$app->system->chmod($key_file.'.old.'.$date, 0400);
-				$app->system->unlink($key_file);
-			}
-
-			if(@is_link($key_file)) $app->system->unlink($key_file);
-			if(@file_exists($key_tmp_file)) $app->system->exec_safe("ln -s ? ?", $key_tmp_file, $key_file);
-
-			if(is_file($crt_file)) {
-				$app->system->copy($crt_file, $crt_file.'.old.'.$date);
-				$app->system->chmod($crt_file.'.old.'.$date, 0400);
-				$app->system->unlink($crt_file);
-			}
-
-			if(@is_link($crt_file)) $app->system->unlink($crt_file);
-			if(@file_exists($crt_tmp_file))$app->system->exec_safe("ln -s ? ?", $crt_tmp_file, $crt_file);
-
-			if(is_file($bundle_file)) {
-				$app->system->copy($bundle_file, $bundle_file.'.old.'.$date);
-				$app->system->chmod($bundle_file.'.old.'.$date, 0400);
-				$app->system->unlink($bundle_file);
-			}
-
-			if(@is_link($bundle_file)) $app->system->unlink($bundle_file);
-			if(@file_exists($bundle_tmp_file)) $app->system->exec_safe("ln -s ? ?", $bundle_tmp_file, $bundle_file);
-
-			return true;
-		} else {
-			$app->log("Let's Encrypt Cert file: $crt_tmp_file does not exist.", LOGLEVEL_DEBUG);
-			return false;
-		}
-	}
-}
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index ba86d1f11597c5f770fe332936dc1dc3ec1354c8..72a16386ea3f947bac52abfb9d668a08d2fc006d 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -934,6 +934,13 @@ class system{
 		return copy($file1, $file2);
 	}
 
+	function move($file1, $file2) {
+                $cmd = 'mv ? ?';
+                $this->exec_safe($cmd, $file1, $file2);
+                $return_var = $this->last_exec_retcode();
+                return $return_var == 0 ? true : false;
+        }
+
 	function touch($file, $allow_symlink = false){
 		global $app;
 		if($allow_symlink == false && @file_exists($file) && $this->checkpath($file) == false) {
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index e300117767a078d4817849a69f1fabcaf79c9ba9..f6a0a1ce7bb20f2a3328e4e619c83c934d8c94cf 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -714,7 +714,7 @@ class apache2_plugin {
 				}
 
 				//* Unmount the old log directory bfore we move the log dir
-				$app->system->exec_safe('umount ?', $data['old']['document_root'].'/log');
+				$app->system->exec_safe('umount -l ?', $data['old']['document_root'].'/log');
 
 				//* Create new base directory, if it does not exist yet
 				if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
@@ -808,7 +808,7 @@ class apache2_plugin {
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 
 			//* Unmount log directory
-			$app->system->exec_safe('umount ?', $data['old']['document_root'].'/'.$old_log_folder);
+			$app->system->exec_safe('umount -l ?', $data['old']['document_root'].'/'.$old_log_folder);
 		}
 
 		//* Create the log dir if nescessary and mount it
@@ -2138,10 +2138,10 @@ class apache2_plugin {
 		if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias'){
 			if(is_array($log_folders) && !empty($log_folders)){
 				foreach($log_folders as $log_folder){
-					$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
+					$app->system->exec_safe('umount -l ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 				}
 			} else {
-				$app->system->exec_safe('umount ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
+				$app->system->exec_safe('umount -l ? 2>/dev/null', $data['old']['document_root'].'/'.$log_folder);
 			}
 
 			// remove letsencrypt if it exists (renew will always fail otherwise)
diff --git a/server/plugins-available/getmail_plugin.inc.php b/server/plugins-available/getmail_plugin.inc.php
index c3f4f7e1dcd48f210bcf935398f9960cb28fe80f..c06638db32943b574d835af0f47a92e8332820c6 100644
--- a/server/plugins-available/getmail_plugin.inc.php
+++ b/server/plugins-available/getmail_plugin.inc.php
@@ -76,7 +76,7 @@ class getmail_plugin {
 
 	function update($event_name, $data) {
 		global $app, $conf;
-		
+
 		// Do not write getmail config files on mirror servers to avoid double fetching of emails.
 		if($conf['mirror_server_id'] > 0) return true;
 
@@ -116,7 +116,7 @@ class getmail_plugin {
 					$tpl = str_replace('{DELETE}', 'false', $tpl);
 				}
 
-				if($data["new"]["read_all"] == 'y') {
+				if($data["new"]["source_read_all"] == 'y') {
 					$tpl = str_replace('{READ_ALL}', 'true', $tpl);
 				} else {
 					$tpl = str_replace('{READ_ALL}', 'false', $tpl);