diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php
index 434af6a98364c134e993575281a2a5e7fcfde481..612adf71861d69dedcf95a7ecbb785844a2ea41d 100644
--- a/interface/lib/classes/remote.d/dns.inc.php
+++ b/interface/lib/classes/remote.d/dns.inc.php
@@ -213,13 +213,13 @@ class remoting_dns extends remoting {
 
 	
 	//* Add a slave zone
-    public function dns_slave_add($session_id, $client_id, $params) {
+	public function dns_slave_add($session_id, $client_id, $params) {
 		if(!$this->checkPerm($session_id, 'dns_zone_add')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
 		return $this->insertQuery('../dns/form/dns_slave.tform.php', $client_id, $params);
-    }
+	}
 	
 	//* Update a slave zone
 	public function dns_slave_update($session_id, $client_id, $primary_id, $params) {
@@ -231,14 +231,14 @@ class remoting_dns extends remoting {
 		return $affected_rows;
 	}
 
-    //* Delete a slave zone
-    public function dns_slave_delete($session_id, $primary_id) {
+	//* Delete a slave zone
+	public function dns_slave_delete($session_id, $primary_id) {
 		if(!$this->checkPerm($session_id, 'dns_zone_delete')) {
 			throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.');
 			return false;
 		}
 		return $this->deleteQuery('../dns/form/dns_slave.tform.php', $primary_id);
-    }
+	}
 
 	//* Get record id by origin
 	public function dns_zone_get_id($session_id, $origin) {
@@ -428,6 +428,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_caa_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'CAA');
+	}
+
+	//* Add a record
+	public function dns_caa_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'CAA');
+	}
+
+	//* Update a record
+	public function dns_caa_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'CAA');
+	}
+
+	//* Delete a record
+	public function dns_caa_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'CAA');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_cname_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'CNAME');
@@ -494,6 +516,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_naptr_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'NAPTR');
+	}
+
+	//* Add a record
+	public function dns_naptr_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'NAPTR');
+	}
+
+	//* Update a record
+	public function dns_naptr_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'NAPTR');
+	}
+
+	//* Delete a record
+	public function dns_naptr_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'NAPTR');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_ns_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'NS');
@@ -582,6 +626,28 @@ class remoting_dns extends remoting {
 
 	// ----------------------------------------------------------------------------------------------------------------
 
+	//* Get record details
+	public function dns_tlsa_get($session_id, $primary_id) {
+		return $this->dns_rr_get($session_id, $primary_id, 'TLSA');
+	}
+
+	//* Add a record
+	public function dns_tlsa_add($session_id, $client_id, $params, $update_serial=false) {
+		return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'TLSA');
+	}
+
+	//* Update a record
+	public function dns_tlsa_update($session_id, $client_id, $primary_id, $params, $update_serial=false) {
+		return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'TLSA');
+	}
+
+	//* Delete a record
+	public function dns_tlsa_delete($session_id, $primary_id, $update_serial=false) {
+		return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'TLSA');
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------
+
 	//* Get record details
 	public function dns_txt_get($session_id, $primary_id) {
 		return $this->dns_rr_get($session_id, $primary_id, 'TXT');
diff --git a/interface/web/admin/lib/lang/ar_remote_user.lng b/interface/web/admin/lib/lang/ar_remote_user.lng
index b1db64e8e674dfd4c8f03a91e0f32229f9c05ccf..98670aea070653a7d752c9724c08db8efbf97196 100644
--- a/interface/web/admin/lib/lang/ar_remote_user.lng
+++ b/interface/web/admin/lib/lang/ar_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/bg_remote_user.lng b/interface/web/admin/lib/lang/bg_remote_user.lng
index 2ad534da451a9ac5024d455f9be133485a812a3a..f52283d908f6b746aeea7234ea80b828e2e197be 100644
--- a/interface/web/admin/lib/lang/bg_remote_user.lng
+++ b/interface/web/admin/lib/lang/bg_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias функции';
 $wb['DNS cname functions'] = 'DNS cname функции';
 $wb['DNS hinfo functions'] = 'DNS hinfo функции';
 $wb['DNS mx functions'] = 'DNS mx функции';
+$wb['DNS naptr functions'] = 'DNS naptr функции';
 $wb['DNS ns functions'] = 'DNS ns функции';
 $wb['DNS ptr functions'] = 'DNS ptr функции';
 $wb['DNS rp functions'] = 'DNS rp функции';
diff --git a/interface/web/admin/lib/lang/br_remote_user.lng b/interface/web/admin/lib/lang/br_remote_user.lng
index 7fbcbdf372bb64fe90d711ab729c7ed3e684f867..520b95e18f4caf7fe7609586b22452416d15eaf4 100644
--- a/interface/web/admin/lib/lang/br_remote_user.lng
+++ b/interface/web/admin/lib/lang/br_remote_user.lng
@@ -51,6 +51,7 @@ $wb['DNS cname functions'] = 'Funções de CNAME dns';
 $wb['DNS hinfo functions'] = 'Funções de HINFO dns';
 $wb['DNS mx functions'] = 'Funções de MX dns';
 $wb['DNS ns functions'] = 'Funções de NS dns';
+$wb['DNS naptr functions'] = 'Funções de NAPTR dns';
 $wb['DNS ptr functions'] = 'Funções de PTR dns';
 $wb['DNS rp functions'] = 'Funções de RP dns';
 $wb['DNS srv functions'] = 'Funções de SVR dns';
diff --git a/interface/web/admin/lib/lang/ca_remote_user.lng b/interface/web/admin/lib/lang/ca_remote_user.lng
index 638882de55d7983925378752b9f89d8efa5892cd..e0b911afe5e3cb61cbdb9b8dd3b8d1d0617fc8f1 100644
--- a/interface/web/admin/lib/lang/ca_remote_user.lng
+++ b/interface/web/admin/lib/lang/ca_remote_user.lng
@@ -36,6 +36,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/cz_remote_user.lng b/interface/web/admin/lib/lang/cz_remote_user.lng
index 1c53a5c5b7964b6ebfd2ec193e29984319bd26a5..4ea38e6aaac856f823ed029dedb153a8965710e0 100644
--- a/interface/web/admin/lib/lang/cz_remote_user.lng
+++ b/interface/web/admin/lib/lang/cz_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'Funkce DNS ALIAS';
 $wb['DNS cname functions'] = 'Funkce DNS CNAME';
 $wb['DNS hinfo functions'] = 'Funkce DNS HINFO';
 $wb['DNS mx functions'] = 'Funkce DNS MX';
+$wb['DNS naptr functions'] = 'Funkce DNS NAPTR';
 $wb['DNS ns functions'] = 'Funkce DNS NS';
 $wb['DNS ptr functions'] = 'Funkce DNS PTR';
 $wb['DNS rp functions'] = 'Funkce DNS RP';
diff --git a/interface/web/admin/lib/lang/de_remote_user.lng b/interface/web/admin/lib/lang/de_remote_user.lng
index 9bfb9c43a0fbc32e3e55c1d34476a8398962df01..a1ffd4aa3db4edea698cede7f78466cbb600bb86 100644
--- a/interface/web/admin/lib/lang/de_remote_user.lng
+++ b/interface/web/admin/lib/lang/de_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS Alias Funktionen';
 $wb['DNS cname functions'] = 'DNS cname Funktionen';
 $wb['DNS hinfo functions'] = 'DNS hinfo Funktionen';
 $wb['DNS mx functions'] = 'DNS mx Funktionen';
+$wb['DNS naptr functions'] = 'DNS NAPTR Funktionen';
 $wb['DNS ns functions'] = 'DNS ns Funktionen';
 $wb['DNS ptr functions'] = 'DNS ptr Funktionen';
 $wb['DNS rp functions'] = 'DNS rp Funktionen';
diff --git a/interface/web/admin/lib/lang/dk_remote_user.lng b/interface/web/admin/lib/lang/dk_remote_user.lng
index c592247b83bdf97614e6eecc82309704bbd80bd0..aae5089aa137a6440b6170e9d489a22cce816a89 100644
--- a/interface/web/admin/lib/lang/dk_remote_user.lng
+++ b/interface/web/admin/lib/lang/dk_remote_user.lng
@@ -36,6 +36,7 @@ $wb['DNS alias functions'] = 'DNS alias funktioner';
 $wb['DNS cname functions'] = 'DNS cname funktioner';
 $wb['DNS hinfo functions'] = 'DNS hinfo funktioner';
 $wb['DNS mx functions'] = 'DNS mx funktioner';
+$wb['DNS naptr functions'] = 'DNS naptr funktioner';
 $wb['DNS ns functions'] = 'DNS ns funktioner';
 $wb['DNS ptr functions'] = 'DNS ptr funktioner';
 $wb['DNS rp functions'] = 'DNS rp funktioner';
diff --git a/interface/web/admin/lib/lang/el_remote_user.lng b/interface/web/admin/lib/lang/el_remote_user.lng
index 43d04d0e02a2eb392338adcc91de86b88573e656..65efbd8f961a7e476ecb3d104a5660a40fcec8dc 100644
--- a/interface/web/admin/lib/lang/el_remote_user.lng
+++ b/interface/web/admin/lib/lang/el_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'Ενέργειες εγγραφών alias του D
 $wb['DNS cname functions'] = 'Ενέργειες εγγραφών cname του DNS';
 $wb['DNS hinfo functions'] = 'Ενέργειες εγγραφών hinfo του DNS';
 $wb['DNS mx functions'] = 'Ενέργειες εγγραφών mx του DNS';
+$wb['DNS naptr functions'] = 'Ενέργειες εγγραφών naptr του DNS';
 $wb['DNS ns functions'] = 'Ενέργειες εγγραφών ns του DNS';
 $wb['DNS ptr functions'] = 'Ενέργειες εγγραφών ptr του DNS';
 $wb['DNS rp functions'] = 'Ενέργειες εγγραφών rp του DNS';
diff --git a/interface/web/admin/lib/lang/en_remote_user.lng b/interface/web/admin/lib/lang/en_remote_user.lng
index 638882de55d7983925378752b9f89d8efa5892cd..e0b911afe5e3cb61cbdb9b8dd3b8d1d0617fc8f1 100644
--- a/interface/web/admin/lib/lang/en_remote_user.lng
+++ b/interface/web/admin/lib/lang/en_remote_user.lng
@@ -36,6 +36,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/es_remote_user.lng b/interface/web/admin/lib/lang/es_remote_user.lng
index 2bd9c6f2cef9deb2f79a23a9e531afdee29892f8..bb52540f4cfd98fc69b20755f8a6e781b3477291 100644
--- a/interface/web/admin/lib/lang/es_remote_user.lng
+++ b/interface/web/admin/lib/lang/es_remote_user.lng
@@ -7,6 +7,7 @@ $wb['DNS alias functions'] = 'Funciones DNS para registro ALIAS';
 $wb['DNS cname functions'] = 'Funciones DNS para registro CNAME';
 $wb['DNS hinfo functions'] = 'Funciones DNS para registro HINFO';
 $wb['DNS mx functions'] = 'Funciones DNS para registro MX';
+$wb['DNS naptr functions'] = 'Funciones DNS para registro NAPTR';
 $wb['DNS ns functions'] = 'Funciones DNS para registro NS';
 $wb['DNS ptr functions'] = 'Funciones DNS para registro PTR';
 $wb['DNS rp functions'] = 'Funciones DNS para registro RP';
diff --git a/interface/web/admin/lib/lang/fi_remote_user.lng b/interface/web/admin/lib/lang/fi_remote_user.lng
index f225bb841698fb6aa029a4c121cdbefb0e5a9e7d..7bdb977afd1993515c1e7bca8b23f6c853b6f4c2 100644
--- a/interface/web/admin/lib/lang/fi_remote_user.lng
+++ b/interface/web/admin/lib/lang/fi_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias-tietuetoiminnot';
 $wb['DNS cname functions'] = 'DNS cname-tietuetoiminnot';
 $wb['DNS hinfo functions'] = 'DNS hinfo-tietuetoiminnot';
 $wb['DNS mx functions'] = 'DNS mx-tietuetoiminnot';
+$wb['DNS naptr functions'] = 'DNS naptr-tietuetoiminnot';
 $wb['DNS ns functions'] = 'DNS ns-tietuetoiminnot';
 $wb['DNS ptr functions'] = 'DNS ptr-tietuetoiminnot';
 $wb['DNS rp functions'] = 'DNS rp-tietuetoiminnot';
diff --git a/interface/web/admin/lib/lang/fr_remote_user.lng b/interface/web/admin/lib/lang/fr_remote_user.lng
index 99a8f2e4f9d112ac14ccbb006c80825a34b5f34d..7eae30dff3da86361090e9d810fcde00482a4b71 100644
--- a/interface/web/admin/lib/lang/fr_remote_user.lng
+++ b/interface/web/admin/lib/lang/fr_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'Fonction alias DNS';
 $wb['DNS cname functions'] = 'Fonctions CNAME DNS';
 $wb['DNS hinfo functions'] = 'Fonctions HINFO DNS';
 $wb['DNS mx functions'] = 'Fonctions MX DNS';
+$wb['DNS naptr functions'] = 'Fonctions NAPTR DNS';
 $wb['DNS ns functions'] = 'Fonctions NS DNS';
 $wb['DNS ptr functions'] = 'Fonctions PTR DNS';
 $wb['DNS rp functions'] = 'Fonctions RP DNS';
diff --git a/interface/web/admin/lib/lang/hr_remote_user.lng b/interface/web/admin/lib/lang/hr_remote_user.lng
index e5cef6a179dc546d8781ce32ecc41c5ea2ed8cfc..fecbd7e33c47a59a1f98c56485fc4a8fb0158642 100644
--- a/interface/web/admin/lib/lang/hr_remote_user.lng
+++ b/interface/web/admin/lib/lang/hr_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias funkcije';
 $wb['DNS cname functions'] = 'DNS cname funkcije';
 $wb['DNS hinfo functions'] = 'DNS hinfo funkcije';
 $wb['DNS mx functions'] = 'DNS mx funkcije';
+$wb['DNS naptr functions'] = 'DNS naptr funkcije';
 $wb['DNS ns functions'] = 'DNS ns funkcije';
 $wb['DNS ptr functions'] = 'DNS ptr funkcije';
 $wb['DNS rp functions'] = 'DNS rp funkcije';
diff --git a/interface/web/admin/lib/lang/hu_remote_user.lng b/interface/web/admin/lib/lang/hu_remote_user.lng
index ad34bf08233b022fecf8dd31f54e0184051838ab..6a32f3cea7803db41819c825f6ba1badcacee36d 100644
--- a/interface/web/admin/lib/lang/hu_remote_user.lng
+++ b/interface/web/admin/lib/lang/hu_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/id_remote_user.lng b/interface/web/admin/lib/lang/id_remote_user.lng
index 1a31ae327484732b0be62f612c23fa7be34cc456..0b148796867cc9e22c37dc51e5b9a3e347c4dcf2 100644
--- a/interface/web/admin/lib/lang/id_remote_user.lng
+++ b/interface/web/admin/lib/lang/id_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'Fungsi-fungsi Alias DNS';
 $wb['DNS cname functions'] = 'Fungsi-fungsi CNAME DNS';
 $wb['DNS hinfo functions'] = 'Fungsi-fungsi HINFO DNS';
 $wb['DNS mx functions'] = 'Fungsi-fungsi MX DNS';
+$wb['DNS naptr functions'] = 'Fungsi-fungsi NAPTR DNS';
 $wb['DNS ns functions'] = 'Fungsi-fungsi NS DNS';
 $wb['DNS ptr functions'] = 'Fungsi-fungsi PTR DNS';
 $wb['DNS rp functions'] = 'Fungsi-fungsi RP DNS';
diff --git a/interface/web/admin/lib/lang/it_remote_user.lng b/interface/web/admin/lib/lang/it_remote_user.lng
index 967270222bf0d1d5168dc214fd28677fcfaa1f9a..f5fc847d68a317c7c8395c0adfc0b8692efb1094 100644
--- a/interface/web/admin/lib/lang/it_remote_user.lng
+++ b/interface/web/admin/lib/lang/it_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/ja_remote_user.lng b/interface/web/admin/lib/lang/ja_remote_user.lng
index 5ffbecd22ab8ad9847c6d01c48df9d02da7301cd..9b8ca0f9c97f7b9510d0e526733927ea326e87b8 100644
--- a/interface/web/admin/lib/lang/ja_remote_user.lng
+++ b/interface/web/admin/lib/lang/ja_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/nl_remote_user.lng b/interface/web/admin/lib/lang/nl_remote_user.lng
index 884331daa0cee7b9caa817afeb43f8251c4010f2..b0053f182f11a360ce9a1ee8c4d237bce4b7b062 100644
--- a/interface/web/admin/lib/lang/nl_remote_user.lng
+++ b/interface/web/admin/lib/lang/nl_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functies';
 $wb['DNS cname functions'] = 'DNS cname functies';
 $wb['DNS hinfo functions'] = 'DNS hinfo functies';
 $wb['DNS mx functions'] = 'DNS mx functies';
+$wb['DNS naptr functions'] = 'DNS naptr functies';
 $wb['DNS ns functions'] = 'DNS ns functies';
 $wb['DNS ptr functions'] = 'DNS ptr functies';
 $wb['DNS rp functions'] = 'DNS rp functies';
diff --git a/interface/web/admin/lib/lang/pl_remote_user.lng b/interface/web/admin/lib/lang/pl_remote_user.lng
index 1e611ffbe1a898632c0d3cb2839a1550cc0394a7..e5274930953f227946b8da0da480e5e0a9cca4a7 100644
--- a/interface/web/admin/lib/lang/pl_remote_user.lng
+++ b/interface/web/admin/lib/lang/pl_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'Funkcje aliasów DNS';
 $wb['DNS cname functions'] = 'Funkcje rekordu CNAME DNS';
 $wb['DNS hinfo functions'] = 'Funkcje rekordu HINFO DNS';
 $wb['DNS mx functions'] = 'Funkcje rekordu MX DNS';
+$wb['DNS naptr functions'] = 'Funkcje rekordu NAPTR DNS';
 $wb['DNS ns functions'] = 'Funkcje rekordu NS DNS';
 $wb['DNS ptr functions'] = 'Funkcje rekordu PTR DNS';
 $wb['DNS rp functions'] = 'Funkcje rekordu RP DNS';
diff --git a/interface/web/admin/lib/lang/pt_remote_user.lng b/interface/web/admin/lib/lang/pt_remote_user.lng
index b1e8e088993d895392bd4d2814892193ca4f7248..24b4a5eac8bd1576773f866d482d27d3a09323d0 100644
--- a/interface/web/admin/lib/lang/pt_remote_user.lng
+++ b/interface/web/admin/lib/lang/pt_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'Funções de alias DNS';
 $wb['DNS cname functions'] = 'Funções de cname DNS';
 $wb['DNS hinfo functions'] = 'Funções de hinfo DNS';
 $wb['DNS mx functions'] = 'Funções de mx DNS';
+$wb['DNS naptr functions'] = 'Funções de naptr DNS';
 $wb['DNS ns functions'] = 'Funções de ns DNS';
 $wb['DNS ptr functions'] = 'Funções de ptr DNS';
 $wb['DNS rp functions'] = 'Funções de rp DNS';
diff --git a/interface/web/admin/lib/lang/ro_remote_user.lng b/interface/web/admin/lib/lang/ro_remote_user.lng
index b1db64e8e674dfd4c8f03a91e0f32229f9c05ccf..98670aea070653a7d752c9724c08db8efbf97196 100644
--- a/interface/web/admin/lib/lang/ro_remote_user.lng
+++ b/interface/web/admin/lib/lang/ro_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/ru_remote_user.lng b/interface/web/admin/lib/lang/ru_remote_user.lng
index e1266951aaf6caf1e6a9290d0371b6daa7f35460..ea3d502a6a86adc888b77de87158fa6264157b22 100644
--- a/interface/web/admin/lib/lang/ru_remote_user.lng
+++ b/interface/web/admin/lib/lang/ru_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'Функции DNS ALIAS';
 $wb['DNS cname functions'] = 'Функции DNS CNAME';
 $wb['DNS hinfo functions'] = 'Функции DNS hinfo';
 $wb['DNS mx functions'] = 'Функции DNS mx';
+$wb['DNS naptr functions'] = 'Функции DNS naptr';
 $wb['DNS ns functions'] = 'Функции DNS ns';
 $wb['DNS ptr functions'] = 'Функции DNS ptr';
 $wb['DNS rp functions'] = 'Функции DNS rp';
diff --git a/interface/web/admin/lib/lang/se_remote_user.lng b/interface/web/admin/lib/lang/se_remote_user.lng
index c71d09f54f4a5047997b7e7e964791f8a7043a11..f6600173fe6300f4780ddfefdfbfb5038d6cd651 100644
--- a/interface/web/admin/lib/lang/se_remote_user.lng
+++ b/interface/web/admin/lib/lang/se_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/sk_remote_user.lng b/interface/web/admin/lib/lang/sk_remote_user.lng
index 4e867066c784c5e68f9c3c302c226113d0ecdaed..d6cee727572c01f4c89a9fcdbc6848af5b6b235f 100644
--- a/interface/web/admin/lib/lang/sk_remote_user.lng
+++ b/interface/web/admin/lib/lang/sk_remote_user.lng
@@ -35,6 +35,7 @@ $wb['DNS alias functions'] = 'DNS alias functions';
 $wb['DNS cname functions'] = 'DNS cname functions';
 $wb['DNS hinfo functions'] = 'DNS hinfo functions';
 $wb['DNS mx functions'] = 'DNS mx functions';
+$wb['DNS naptr functions'] = 'DNS naptr functions';
 $wb['DNS ns functions'] = 'DNS ns functions';
 $wb['DNS ptr functions'] = 'DNS ptr functions';
 $wb['DNS rp functions'] = 'DNS rp functions';
diff --git a/interface/web/admin/lib/lang/tr_remote_user.lng b/interface/web/admin/lib/lang/tr_remote_user.lng
index aacb7f4c35bfa406b96e8e02f179606f8e5fd33f..5c2746f7ccf0c88ffd72c0694547576d8374b34c 100644
--- a/interface/web/admin/lib/lang/tr_remote_user.lng
+++ b/interface/web/admin/lib/lang/tr_remote_user.lng
@@ -36,6 +36,7 @@ $wb['DNS alias functions'] = 'DNS alias iÅŸlevleri';
 $wb['DNS cname functions'] = 'DNS cname iÅŸlevleri';
 $wb['DNS hinfo functions'] = 'DNS hinfo iÅŸlevleri';
 $wb['DNS mx functions'] = 'DNS mx iÅŸlevleri';
+$wb['DNS naptr functions'] = 'DNS naptr iÅŸlevleri';
 $wb['DNS ns functions'] = 'DNS ns iÅŸlevleri';
 $wb['DNS ptr functions'] = 'DNS ptr iÅŸlevleri';
 $wb['DNS rp functions'] = 'DNS rp iÅŸlevleri';
diff --git a/interface/web/dns/dns_aaaa_edit.php b/interface/web/dns/dns_aaaa_edit.php
index 006e71cf4cfa0b31724b1f6b354e0f896a7e0ee5..780fbcc80efca2386b2e1a9ca76776b4f592c284 100644
--- a/interface/web/dns/dns_aaaa_edit.php
+++ b/interface/web/dns/dns_aaaa_edit.php
@@ -45,6 +45,14 @@ require_once './dns_edit_base.php';
 // Loading classes
 class page_action extends dns_page_action {
 
+	protected function checkDuplicate() {
+		global $app;
+		//* Check for duplicates where IP and hostname are the same
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'AAAA' AND name = ? AND zone = ? and data = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->dataRecord["data"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		if($tmp['number'] > 0) return true;
+		return false;
+	}
+
 }
 
 $page = new page_action;
diff --git a/interface/web/dns/dns_cname_edit.php b/interface/web/dns/dns_cname_edit.php
index 403650c1c444481d54bb26edef94f60251a74bb2..1f17169e607af1e91b5182f4a89e621d30e98156 100644
--- a/interface/web/dns/dns_cname_edit.php
+++ b/interface/web/dns/dns_cname_edit.php
@@ -48,7 +48,7 @@ class page_action extends dns_page_action {
 	protected function checkDuplicate() {
 		global $app;
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = ? AND zone = ? and id != ?) OR (type = 'AAAA' AND name = ? AND zone = ? and id != ?) OR (type = 'CNAME' AND name = ? AND zone = ? and id != ?)", $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id, $this->dataRecord["name"], $this->dataRecord["zone"], $this->id);
 		if($tmp['number'] > 0) return true;
 		return false;
 	}
diff --git a/interface/web/dns/dns_dkim_edit.php b/interface/web/dns/dns_dkim_edit.php
index 5c95b2033d78d5211d62d3590676add744a10d39..520d3822816d738a94067c40e32a813a7747d435 100644
--- a/interface/web/dns/dns_dkim_edit.php
+++ b/interface/web/dns/dns_dkim_edit.php
@@ -126,6 +126,7 @@ class page_action extends tform_actions {
 		$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
 
 		// check for duplicate entry
+		// Should NOT include data in this check?  it must be unique for zone/name (selector)/type, regardless of data
 		$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data = ? AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord["data"], $this->dataRecord['name']);
 		if ($check!='') $app->tform->errorMessage .= $app->tform->wordbook["record_exists_txt"];
 		if (empty($this->dataRecord['data'])) $app->tform->errorMessage .= $app->tform->wordbook["dkim_disabled_txt"];
diff --git a/interface/web/dns/dns_edit_base.php b/interface/web/dns/dns_edit_base.php
index 9cea8b6ae20b7dc56ef26f592b40b200c983d7e4..4f61b71ce5e4c3079e50a75093bdb5bb9a4a402c 100644
--- a/interface/web/dns/dns_edit_base.php
+++ b/interface/web/dns/dns_edit_base.php
@@ -44,6 +44,29 @@ class dns_page_action extends tform_actions {
 		return false;
 	}
 
+	protected function zoneFileEscape( $str ) {
+		// escape backslash and double quotes
+		$ret = str_replace( '\\', '\\\\', $str );
+		$ret = str_replace( '"', '\\"', $ret );
+		return $ret;
+	}
+
+	protected function zoneFileUnescape( $str ) {
+		// escape sequence can be rfc 1035 '\DDD' (backslash, 3 digits) or '\X' (backslash, non-digit char)
+		return preg_replace_callback(  '/\\\\(\d\d\d|\D)/',
+			function( $Matches ) {
+				if (preg_match( '/\d{3}/', $Matches[1] )) {
+					return chr( $Matches[1] );
+				} elseif (preg_match( '/\D/', $Matches[1])) {
+					return $Matches[1];
+				} else {
+					return $Matches[0];
+				}
+			},
+			$str
+		);
+	}
+
 	function onShowNew() {
 		global $app, $conf;
 
diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php
index 540a731ba24d53f805d35838b801ef2f83ad16d1..b0c19bfff0f9d8228fb557667c99dd08da112ac2 100644
--- a/interface/web/dns/dns_import.php
+++ b/interface/web/dns/dns_import.php
@@ -34,8 +34,9 @@ require_once '../../lib/app.inc.php';
 //* Check permissions for module
 $app->auth->check_module_permissions('dns');
 
-$msg = '';
-$error = '';
+$msg = [];
+$warn = [];
+$error = [];
 
 // Loading the template
 $app->uses('tform,tpl,validate_dns');
@@ -208,6 +209,40 @@ $lng_file = 'lib/lang/'.$app->functions->check_language($_SESSION['s']['language
 include $lng_file;
 $app->tpl->setVar($wb);
 
+/** Returns shortest name for an owner with giving $origin in effect */
+function origin_name( $owner, $origin ) {
+	if ($owner == "@") { return ''; }
+	if ($owner == "*") { return $owner; }
+	if ($owner == "") { return $origin; }
+	if ($origin == "") { return $owner; }
+	if (substr($owner, -1) == ".") {
+		if (substr($origin, -1) == ".") {
+			return substr_replace( $owner, '', 0 - (strlen($origin) + 1) );
+		} else {
+			return $owner;
+		}
+	}
+	if ($origin == ".") {
+		return "${owner}.";
+	}
+	if (substr($origin, -1) != ".") {
+		// should be an erorr,
+		// only "." terminated $origin can be handled determinately
+		return "${owner}.${origin}";
+	}
+	return $owner;
+
+}
+
+/** Returns full name for an owner with given $origin in effect */
+function fqdn_name( $owner, $origin ) {
+	if (substr($owner, -1) == ".") {
+		return $owner;
+	}
+	$name = origin_name( $owner, $origin );
+	return $name . (strlen($name) > 0 ? "." : "") . $origin;
+}
+
 // Import the zone-file
 //if(1=="1")
 if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])){
@@ -227,26 +262,34 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 	// Remove empty lines, comments, whitespace, tabs, etc.
 	$new_lines = array();
 	foreach($lines as $line){
-		$line = trim($line);
+		$line = rtrim($line);
+		$line = preg_replace('/^\s+/', ' ', $line);
 		if ($line != '' && substr($line, 0, 1) != ';'){
-			if(strpos($line, ";") !== FALSE) {
-				if(!preg_match("/\"[^\"]+;[^\"]*\"/", $line)) {
-					$line = substr($line, 0, strpos($line, ";"));
+			if(preg_match("/\sNAPTR\s/i", $line)) {
+				// NAPTR contains regex strings, there's not much we can safely clean up.
+				// remove a comment if found after the ending period (and comment doesn't contain period)
+				$line = preg_replace( '/^(.+\.)(\s*;[^\.]*)$/', '\1', $line );
+			} else {
+				if(strpos($line, ";") !== FALSE) {
+					if(!preg_match("/\"[^\"]+;[^\"]*\"/", $line)) {
+						$line = substr($line, 0, strpos($line, ";"));
+					}
 				}
-			}
-			if(strpos($line, "(") !== FALSE ) {
-				if (!preg_match("/v=DKIM/",$line)) {
-					$line = substr($line, 0, strpos($line, "("));
+				if(strpos($line, "(") !== FALSE ) {
+					if (!preg_match("/v=DKIM/",$line)) {
+						$line = substr($line, 0, strpos($line, "("));
+					}
 				}
-			}
-			if(strpos($line, ")") !== FALSE ) {
-				if (!preg_match("/v=DKIM/",$line)) {
-					$line = substr($line, 0, strpos($line, ")"));
+				if(strpos($line, ")") !== FALSE ) {
+					if (!preg_match("/v=DKIM/",$line)) {
+						$line = substr($line, 0, strpos($line, ")"));
+					}
 				}
 			}
 			
-			$line = trim($line);
+			$line = rtrim($line);
 			if ($line != ''){
+				// this of course breaks TXT when it includes whitespace
 				$sPattern = '/\s+/m';
 				$sReplace = ' ';
 				$new_lines[] = preg_replace($sPattern, $sReplace, $line);
@@ -257,29 +300,42 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 	$lines = $new_lines;
 	unset($new_lines);
 
-	//$lines = file("apriqot.se.txt");
-	$name = str_replace("txt", "", $_FILES['file']['name']);
-	$name = str_replace("zone", "", $name);
-
 	if ($domain !== NULL){
-		$name = $domain;
-	}
-
-	if (substr($name, -1) != "."){
-		$name .= ".";
+		// SOA name will be the specified domain
+		$name = origin_name( $domain, '.' );
+	} else {
+		// SOA name will be read from SOA record
+		$name = '.';
 	}
 
 	$i = 0;
-	$origin_exists = FALSE;
+	$ttl = 3600;
+	$soa_ttl = '86400';
 	$soa_array_key = -1;
 	$soa = array();
 	$soa['name'] = $name;
+	$origin = $name;
+	$owner = $name;
 	$r = 0;
 	$dns_rr = array();
+	$add_default_ns = TRUE;
+	$found_soa = FALSE;
 	foreach($lines as $line){
 
 		$parts = explode(' ', $line);
 
+		// leading whitespace means same owner as previous record
+		if ($parts[0] == '') {
+			// SOA is (only) read from multiple lines
+			if($i > ($soa_array_key) && $i <= ($soa_array_key + 5)) {
+				array_shift($parts);
+			} else {
+				$parts[0] = $owner;
+			}
+		} elseif (strpos( $parts[0], '$' ) !== 0) {
+			$owner = fqdn_name( $parts[0], $origin );
+		}
+
 		// make elements lowercase
 		$new_parts = array();
 		foreach($parts as $part){
@@ -297,46 +353,75 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 		$parts = $new_parts;
 		unset($new_parts);
 
-		// if ORIGIN exists, overwrite $soa['name']
+		// Set current $ORIGIN (note: value in file can be a name relative to current origin)
 		if($parts[0] == '$origin'){
-			$soa['name'] = $parts[1];
-			$origin_exists = TRUE;
+			$origin = fqdn_name( $parts[1], $origin );
 		}
 		// TTL
 		if($parts[0] == '$ttl'){
 			$time_format = strtolower(substr($parts[1], -1));
 			switch ($time_format) {
 			case 's':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1));
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1));
 				break;
 			case 'm':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 60;
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1)) * 60;
 				break;
 			case 'h':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 3600;
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1)) * 3600;
 				break;
 			case 'd':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 86400;
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1)) * 86400;
 				break;
 			case 'w':
-				$soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 604800;
+				$ttl = $app->functions->intval(substr($parts[1], 0, -1)) * 604800;
 				break;
 			default:
-				$soa['ttl'] = $app->functions->intval($parts[1]);
+				$ttl = $app->functions->intval($parts[1]);
 			}
+			$soa_ttl = $ttl;
 			unset($time_format);
 		}
 		// SOA
 		if(in_array("soa", $parts)){
-			$soa['mbox'] = array_pop($parts);
-			//$soa['ns'] = array_pop($parts);
-			$soa['ns'] = $servers[0]['server_name'];
-			// if domain is part of SOA, overwrite $soa['name']
-			if($parts[0] != '@' && $parts[0] != 'in' && $parts[0] != 'soa' && $origin_exists === FALSE){
-				$soa['name'] = $parts[0];
+			// Check for multiple SOA records in file
+			if($found_soa && $soa_array_key != -1){
+				// we could just skip any SOA which doesn't match the domain name,
+				// which would allow concating zone files (sub1.d.tld, sub2.d.tld, d.tld) together for import
+				$error[] = $wb['zone_file_multiple_soa'];
+				$valid_zone_file = FALSE;
+			} else {
+				$soa['mbox'] = array_pop($parts);
+
+				//$soa['ns'] = array_pop($parts);
+				$soa['ns'] = $servers[0]['server_name'];
+
+				// $parts[0] will always be owner name
+				$soa_domain = fqdn_name( $parts[0], $origin );
+
+				if ($domain !== NULL){
+					// domain was given, check that domain and SOA domain share some root
+					if (    ( strpos( $soa_domain, origin_name( $domain, '.' ) ) !== FALSE )
+					     || ( strpos( origin_name( $domain, '.' ), $soa_domain ) !== FALSE ) ) {
+						$valid_zone_file = TRUE;
+					}
+				} else {
+					// domain not given, use domain from SOA
+					if($soa_domain != ".") {
+						$soa['name'] = $soa_domain;
+						$valid_zone_file = TRUE;
+					}
+				}
+
+				if(is_numeric($parts[1])){
+					$soa['ttl'] = $app->functions->intval($parts[1]);
+				} else {
+					$soa['ttl'] = $soa_ttl;
+				}
+
+				$found_soa = TRUE;
+				$soa_array_key = $i;
 			}
-			$soa_array_key = $i;
-			$valid_zone_file = TRUE;
 		}
 		// SERIAL
 		if($i == ($soa_array_key + 1)) $soa['serial'] = $app->functions->intval($parts[0]);
@@ -438,197 +523,120 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 		}
 		// RESOURCE RECORDS
 		if($i > ($soa_array_key + 5)){
-			if(substr($parts[0], -1) == '.' || $parts[0] == '@' || ($parts[0] != 'a' && $parts[0] != 'aaaa' && $parts[0] != 'ns' && $parts[0] != 'cname' && $parts[0] != 'hinfo' && $parts[0] != 'mx' && $parts[0] != 'naptr' && $parts[0] != 'ptr' && $parts[0] != 'rp' && $parts[0] != 'srv' && $parts[0] != 'txt')){
-				if(is_numeric($parts[1])){
-					if($parts[2] == 'in'){
-						$resource_type = $parts[3];
-						$pkey = 3;
-					} else {
-						$resource_type = $parts[2];
-						$pkey = 2;
-					}
-				} else {
-					if($parts[1] == 'in'){
-						$resource_type = $parts[2];
-						$pkey = 2;
-					} else {
-						$resource_type = $parts[1];
-						$pkey = 1;
-					}
-				}
-				$dns_rr[$r]['type'] = $resource_type;
-				if($parts[0] == '@' || $parts[0] == '.'){
-					$dns_rr[$r]['name'] = $soa['name'];
-				} else {
-					$dns_rr[$r]['name'] = $parts[0];
-				}
-				if(is_numeric($parts[1])){
-					$dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
-				} else {
-					$dns_rr[$r]['ttl'] = $soa['ttl'];
-				}
-				switch ($resource_type) {
-				case 'mx':
-				case 'srv':
-					$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-					$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-					break;
-				case 'txt':
-					$dns_rr[$r]['aux'] = 0;
-					$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-					if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-					break;
-				default:
-					$dns_rr[$r]['aux'] = 0;
-					$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-				}
+
+			$dns_rr[$r]['name'] = fqdn_name( $owner, $soa['name'] );
+			array_shift($parts);  // shift record owner from $parts[0]
+
+			if(is_numeric($parts[0])) {
+				$dns_rr[$r]['ttl'] = $app->functions->intval($parts[0]);
+				array_shift($parts);  // shift ttl from $parts[0]
 			} else {
-				// a 3600 IN A 1.2.3.4
-				if(is_numeric($parts[1]) && $parts[2] == 'in' && ($parts[3] == 'a' || $parts[3] == 'aaaa' || $parts[3] == 'ns'|| $parts[3] == 'cname' || $parts[3] == 'hinfo' || $parts[3] == 'mx' || $parts[3] == 'naptr' || $parts[3] == 'ptr' || $parts[3] == 'rp' || $parts[3] == 'srv' || $parts[3] == 'txt')){
-					$resource_type = $parts[3];
-					$pkey = 3;
-					$dns_rr[$r]['type'] = $resource_type;
-					$dns_rr[$r]['name'] = $parts[0];
-					$dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
-					switch ($resource_type) {
-					case 'mx':
-					case 'srv':
-						$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-						break;
-					case 'txt':
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-						if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-						if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-						break;
-					default:
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					}
-				}
-				// a IN A 1.2.3.4
-				elseif($parts[1] == 'in' && ($parts[2] == 'a' || $parts[2] == 'aaaa' || $parts[2] == 'ns'|| $parts[2] == 'cname' || $parts[2] == 'hinfo' || $parts[2] == 'mx' || $parts[2] == 'naptr' || $parts[2] == 'ptr' || $parts[2] == 'rp' || $parts[2] == 'srv' || $parts[2] == 'txt')){
-					$resource_type = $parts[2];
-					$pkey = 2;
-					$dns_rr[$r]['type'] = $resource_type;
-					$dns_rr[$r]['name'] = $parts[0];
-					$dns_rr[$r]['ttl'] = $soa['ttl'];
-					switch ($resource_type) {
-					case 'mx':
-					case 'srv':
-						$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-						break;
-					case 'txt':
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-						if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-						if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-						break;
-					default:
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					}
-				}
-				// a 3600 A 1.2.3.4
-				elseif(is_numeric($parts[1]) && ($parts[2] == 'a' || $parts[2] == 'aaaa' || $parts[2] == 'ns'|| $parts[2] == 'cname' || $parts[2] == 'hinfo' || $parts[2] == 'mx' || $parts[2] == 'naptr' || $parts[2] == 'ptr' || $parts[2] == 'rp' || $parts[2] == 'srv' || $parts[2] == 'txt')){
-					$resource_type = $parts[2];
-					$pkey = 2;
-					$dns_rr[$r]['type'] = $resource_type;
-					$dns_rr[$r]['name'] = $parts[0];
-					$dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
-					switch ($resource_type) {
-					case 'mx':
-					case 'srv':
-						$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-						break;
-					case 'txt':
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-						if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-						if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-						break;
-					default:
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					}
-				}
-				// A 1.2.3.4
-				// MX 10 mail
-				// TXT "v=spf1 a mx ptr -all"
-				else {
-					$resource_type = $parts[0];
-					$pkey = 0;
-					$dns_rr[$r]['type'] = $resource_type;
-					$dns_rr[$r]['name'] = $soa['name'];
-					$dns_rr[$r]['ttl'] = $soa['ttl'];
-					switch ($resource_type) {
-					case 'mx':
-					case 'srv':
-						$dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
-						break;
-					case 'txt':
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-						if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
-						if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
-						break;
-					default:
-						$dns_rr[$r]['aux'] = 0;
-						$dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
-					}
-				}
+				$dns_rr[$r]['ttl'] = $ttl;
 			}
-			$dns_rr[$r]['type'] = strtoupper($dns_rr[$r]['type']);
-			if($dns_rr[$r]['type'] == 'NS' && $dns_rr[$r]['name'] == $soa['name']){
+
+			if($parts[0] == 'in'){
+				array_shift($parts);  // shift class from $parts[0]
+			} elseif (in_array( $parts[0], [ 'ch', 'hs', ] )) {
+				$warn[] = $wb['ignore_record_not_class_in'] . "  ($owner " . strtoupper($parts[0]) . ")";
 				unset($dns_rr[$r]);
+				continue;
 			}
-			
-			$valid = true;
+
+			// A 1.2.3.4
+			// MX 10 mail
+			// TXT "v=spf1 a mx ptr -all"
+			$resource_type = array_shift($parts);
+			switch ($resource_type) {
+			case 'mx':
+			case 'srv':
+			case 'naptr':
+				$dns_rr[$r]['aux'] = $app->functions->intval(array_shift($parts));
+				$dns_rr[$r]['data'] = implode(' ', $parts);
+				break;
+			case 'txt':
+				$dns_rr[$r]['aux'] = 0;
+				$dns_rr[$r]['data'] = implode(' ', $parts);
+				$dns_rr[$r]['data'] = preg_replace( [ '/^\"/', '/\"$/' ], '', $dns_rr[$r]['data']);
+				break;
+			default:
+				$dns_rr[$r]['aux'] = 0;
+				$dns_rr[$r]['data'] = implode(' ', $parts);
+			}
+
+			$dns_rr[$r]['type'] = strtoupper($resource_type);
+
+			if($dns_rr[$r]['type'] == 'NS' && fqdn_name( $dns_rr[$r]['name'], $soa['name'] ) == $soa['name']){
+				$add_default_ns = FALSE;
+			}
+
 			$dns_rr[$r]['ttl'] = $app->functions->intval($dns_rr[$r]['ttl']);
 			$dns_rr[$r]['aux'] = $app->functions->intval($dns_rr[$r]['aux']);
-			$dns_rr[$r]['data'] = strip_tags($dns_rr[$r]['data']);
-			if(!preg_match('/^[a-zA-Z0-9\.\-\*]{0,64}$/',$dns_rr[$r]['name'])) $valid == false;
-			if(!in_array(strtoupper($dns_rr[$r]['type']),array('A','AAAA','ALIAS','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY'))) $valid == false;
-			if($valid == false) unset($dns_rr[$r]);
+
+			// this really breaks NAPTR .. conceivably TXT, too.
+			// just make sure data is encoded when saved and escaped when displayed/used
+			if(!in_array($dns_rr[$r]['type'],array('NAPTR','TXT',))) {
+				$dns_rr[$r]['data'] = strip_tags($dns_rr[$r]['data']);
+			}
+
+			// regex based on https://stackoverflow.com/questions/3026957/how-to-validate-a-domain-name-using-regex-php
+			// probably should find something better that covers valid syntax, moreso than just valid hostnames
+			if(!preg_match('/^(|@|\*|(?!\-)(?:(\*|(?:[a-zA-Z\d_][a-zA-Z\d\-_]{0,61})?[a-zA-Z\d_])\.){1,126}(?!\d+)[a-zA-Z\d_]{1,63}\.?)$/',$dns_rr[$r]['name'])) {
+				$error[] = $wb['ignore_record_invalid_owner'] . " (" . htmlspecialchars($dns_rr[$r]['name']) . ")";
+				unset( $dns_rr[$r] );
+				continue;
+			}
+
+			if(!in_array($dns_rr[$r]['type'],array('A','AAAA','ALIAS','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY'))) {
+				$error[] = $wb['ignore_record_unknown_type'] . " (" . htmlspecialchars($dns_rr[$r]['type']) . ")";
+				unset( $dns_rr[$r] );
+				continue;
+			}
 			
 			$r++;
 		}
 		$i++;
 	}
 
-	foreach ($servers as $server){
-		$dns_rr[$r]['name'] = $soa['name'];
-		$dns_rr[$r]['type'] = 'NS';
-		$dns_rr[$r]['data'] = $server['server_name'];
-		$dns_rr[$r]['aux'] = 0;
-		$dns_rr[$r]['ttl'] = $soa['ttl'];
-		$r++;
+	if ( $add_default_ns ) {
+		foreach ($servers as $server){
+			$dns_rr[$r]['name'] = $soa['name'];
+			$dns_rr[$r]['type'] = 'NS';
+			$dns_rr[$r]['data'] = $server['server_name'];
+			$dns_rr[$r]['aux'] = 0;
+			$dns_rr[$r]['ttl'] = $soa['ttl'];
+			$r++;
+		}
 	}
 	//print('<pre>');
 	//print_r($dns_rr);
 	//print('</pre>');
 
+	if (!$found_soa) {
+		$valid_zone_file = false;
+		$error[] = $wb['zone_file_missing_soa'];
+	}
+	if (intval($soa['serial']) == 0
+		|| (intval($soa['refresh']) == 0 && intval($soa['retry']) == 0 && intval($soa['expire']) == 0 && intval($soa['minimum']) == 0 )
+	) {
+		$valid_zone_file = false;
+		$error[] = $wb['zone_file_soa_parser'];
+$error[] = print_r( $soa, true );
+	}
+	if ($settings['use_domain_module'] == 'y' && ! $app->tools_sites->checkDomainModuleDomain($soa['name']) ) {
+		$valid_zone_file = false;
+		$error[] = $wb['zone_not_allowed'];
+	}
 
 	// Insert the soa record
 	$sys_userid = $_SESSION['s']['user']['userid'];
-	$origin = $soa['name'];
-	$ns = $soa['ns'];
-	$mbox = $soa['mbox'];
-	$refresh = $soa['refresh'];
-	$retry = $soa['retry'];
-	$expire = $soa['expire'];
-	$minimum = $soa['minimum'];
-	$ttl = isset($soa['ttl']) ? $soa['ttl'] : '86400';
 	$xfer = '';
 	$serial = $app->functions->intval($soa['serial']+1);
 	//print_r($soa);
 	//die();
-	if($valid_zone_file){
+	$records = $app->db->queryAllRecords("SELECT id FROM dns_soa WHERE origin = ?", $soa['name']);
+	if (count($records) > 0) {
+		$error[] = $wb['zone_already_exists'];
+	} elseif ($valid_zone_file) {
 		$insert_data = array(
 			"sys_userid" => $sys_userid,
 			"sys_groupid" => $sys_groupid,
@@ -636,15 +644,15 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 			"sys_perm_group" => 'riud',
 			"sys_perm_other" => '',
 			"server_id" => $server_id,
-			"origin" => $origin,
-			"ns" => $ns,
-			"mbox" => $mbox,
+			"origin" => $soa['name'],
+			"ns" => $soa['ns'],
+			"mbox" => $soa['mbox'],
 			"serial" => $serial,
-			"refresh" => $refresh,
-			"retry" => $retry,
-			"expire" => $expire,
-			"minimum" => $minimum,
-			"ttl" => $ttl,
+			"refresh" => $soa['refresh'],
+			"retry" => $soa['retry'],
+			"expire" => $soa['expire'],
+			"minimum" => $soa['minimum'],
+			"ttl" => $soa['ttl'],
 			"active" => 'Y',
 			"xfer" => $xfer
 		);
@@ -655,6 +663,11 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 		{
 			foreach($dns_rr as $rr)
 			{
+				// ensure record name is within $soa['name'] zone
+				if(fqdn_name( $rr['name'], $soa['name'] ) != $soa['name']
+				   && (strpos( fqdn_name( $rr['name'], $soa['name'] ), ".".$soa['name'] ) === FALSE ) ){
+					continue;
+				}
 				$insert_data = array(
 					"sys_userid" => $sys_userid,
 					"sys_groupid" => $sys_groupid,
@@ -663,7 +676,7 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 					"sys_perm_other" => '',
 					"server_id" => $server_id,
 					"zone" => $dns_soa_id,
-					"name" => $rr['name'],
+					"name" => origin_name( $rr['name'], $soa['name'] ),
 					"type" => $rr['type'],
 					"data" => $rr['data'],
 					"aux" => $rr['aux'],
@@ -672,21 +685,39 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 				);
 				$dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
 			}
+
+			$msg[] = $wb['zone_file_successfully_imported_txt'];
+		} elseif (is_array($dns_rr)) {
+			$error[] = $wb['zone_file_import_fail'];
+		} else {
+			$msg[] = $wb['zone_file_successfully_imported_txt'];
 		}
-		$msg .= $wb['zone_file_successfully_imported_txt'];
 	} else {
-		$error .= $wb['error_no_valid_zone_file_txt'];
+		$error[] = $wb['error_no_valid_zone_file_txt'];
 	}
 	//header('Location: /dns/dns_soa_edit.php?id='.$dns_soa_id);
 } else {
 	if(isset($_FILES['file']['name'])) {
-		$error = $wb['no_file_uploaded_error'];
+		$error[] = $wb['no_file_uploaded_error'];
 	}
 }
 
+$_error='';
+if (count($error) > 0) {
+	// this markup should really be moved to ispconfig.js
+	$_error = '<div class="alert alert-danger clear">' . implode( '<br />', $error) . '</div>';
+}
+if (count($warn) > 0) {
+	// and add a 'warn' variable to templates and ispconfig.js
+	$_error = '<div class="alert alert-warning clear">' . implode( '<br />', $warn) . '</div>';
+}
+$app->tpl->setVar('error', $_error);
 
-$app->tpl->setVar('msg', $msg);
-$app->tpl->setVar('error', $error);
+$_msg='';
+if (count($msg) > 0) {
+	$_msg = '<div class="alert alert-success clear">' . implode( '<br />', $msg) . '</div>';
+}
+$app->tpl->setVar('msg', $_msg);
 
 $app->tpl_defaults();
 $app->tpl->pparse();
diff --git a/interface/web/dns/dns_naptr_edit.php b/interface/web/dns/dns_naptr_edit.php
new file mode 100644
index 0000000000000000000000000000000000000000..99001ac8c528abf17691359afc76c2dd2f9a70c5
--- /dev/null
+++ b/interface/web/dns/dns_naptr_edit.php
@@ -0,0 +1,100 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$tform_def_file = "form/dns_naptr.tform.php";
+
+/******************************************
+* End Form configuration
+******************************************/
+
+require_once '../../lib/config.inc.php';
+require_once '../../lib/app.inc.php';
+require_once './dns_edit_base.php';
+
+// Loading classes
+class page_action extends dns_page_action {
+
+	function onSubmit() {
+		// Combine and escape/format fields into the data to be saved
+		$this->dataRecord['data'] = $this->dataRecord['pref'] .' '.
+			'"'. $this->zoneFileEscape( $this->dataRecord['flags'] ) .'" '.
+			'"'. $this->zoneFileEscape( $this->dataRecord['service'] ) .'" '.
+			'"'. $this->zoneFileEscape( $this->dataRecord['regexp'] ) .'" '.
+			$this->dataRecord['replacement'] . (substr( $this->dataRecord['replacement'], -1 ) == '.' ? '' : '.');
+
+		$this->dataRecord['aux'] = $this->dataRecord['order'];
+
+		parent::onSubmit();
+	}
+
+
+	function onShowEnd() {
+		global $app, $conf;
+
+		// Split the parts of NAPTR record, unescape (backslashes), and unquote to edit.
+		//
+		// Examples:
+		// ;;       order pref flags service        regexp           replacement
+		// IN NAPTR 100   10   ""    ""  "!^cid:.+@([^\.]+\.)(.*)$!\2!i"    .
+		//
+		// ;;       order pref flags   service  regexp     replacement
+		// IN NAPTR 100  100  "s"   "thttp+L2R"   ""    thttp.example.com.
+		// IN NAPTR 100  100  "s"   "ftp+L2R"    ""     ftp.example.com.
+		//
+		// 'order' in stored in 'aux' column,
+		// all of 'pref "flags" "service" "regexp" replacement.' is here in 'data'
+		//
+		$matched = preg_match('/^\s*(\d+)\s+"([a-zA-Z0-9]*)"\s+"([^"]*)"\s+"(.*)"\s+([^\s]*\.)\s*$/', $this->dataRecord['data'], $matches);
+
+		if ($matched === FALSE || is_array($matches) && count($matches) == 0) {
+			if ( isset($app->tform->errorMessage) ) {
+				$app->tform->errorMessage .= '<br/>' . $app->tform->wordbook["record_parse_error"];
+			}
+		} else {
+			$app->tpl->setVar('pref',        $matches[1], true);
+			$app->tpl->setVar('flags',       $this->zoneFileUnescape($matches[2]), true);
+			$app->tpl->setVar('service',     $this->zoneFileUnescape($matches[3]), true);
+			$app->tpl->setVar('regexp',      $this->zoneFileUnescape($matches[4]), true);
+			$app->tpl->setVar('replacement', $matches[5], true);
+		}
+
+		parent::onShowEnd();
+	}
+
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
diff --git a/interface/web/dns/form/dns_naptr.tform.php b/interface/web/dns/form/dns_naptr.tform.php
new file mode 100644
index 0000000000000000000000000000000000000000..24531dba2c4e8cf3165bb1cb36484acbca2b5f54
--- /dev/null
+++ b/interface/web/dns/form/dns_naptr.tform.php
@@ -0,0 +1,174 @@
+<?php
+
+/*
+	Form Definition
+
+	Tabledefinition
+
+	Datatypes:
+	- INTEGER (Forces the input to Int)
+	- DOUBLE
+	- CURRENCY (Formats the values to currency notation)
+	- VARCHAR (no format check, maxlength: 255)
+	- TEXT (no format check)
+	- DATE (Dateformat, automatic conversion to timestamps)
+
+	Formtype:
+	- TEXT (Textfield)
+	- TEXTAREA (Textarea)
+	- PASSWORD (Password textfield, input is not shown when edited)
+	- SELECT (Select option field)
+	- RADIO
+	- CHECKBOX
+	- CHECKBOXARRAY
+	- FILE
+
+	VALUE:
+	- Wert oder Array
+
+	Hint:
+	The ID field of the database table is not part of the datafield definition.
+	The ID field must be always auto incement (int or bigint).
+
+
+*/
+global $app;
+
+$form["title"]    = "DNS NAPTR";
+$form["description"]  = "";
+$form["name"]    = "dns_naptr";
+$form["action"]   = "dns_naptr_edit.php";
+$form["db_table"]  = "dns_rr";
+$form["db_table_idx"] = "id";
+$form["db_history"]  = "yes";
+$form["tab_default"] = "dns";
+$form["list_default"] = "dns_a_list.php";
+$form["auth"]   = 'yes'; // yes / no
+
+$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
+
+$form["tabs"]['dns'] = array (
+	'title'  => "DNS NAPTR",
+	'width'  => 100,
+	'template'  => "templates/dns_naptr_edit.htm",
+	'fields'  => array (
+		//#################################
+		// Begin Datatable fields
+		//#################################
+		'server_id' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'zone' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => @$app->functions->intval($_REQUEST["zone"]),
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'name' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'filters'   => array(
+				0 => array( 'event' => 'SAVE',
+					'type' => 'IDNTOASCII'),
+				1 => array( 'event' => 'SHOW',
+					'type' => 'IDNTOUTF8'),
+				2 => array( 'event' => 'SAVE',
+					'type' => 'TOLOWER')
+			),
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '/^((\*|[a-zA-Z0-9\-_]{1,255})(\.[a-zA-Z0-9\-_]{1,255})*\.?)?$/',
+					'errmsg'=> 'name_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '1024'
+		),
+		'type' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => 'NAPTR',
+			'value'  => '',
+			'width'  => '5',
+			'maxlength' => '5'
+		),
+		'data' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array (
+				0 => array (
+					'type' => 'NOTEMPTY',
+					'errmsg'=> 'data_error_empty'),
+				1 => array (
+					'type' => 'REGEX',
+					// matching:  'pref "flags" "service" "regexp" replacement.'
+					'regex' => '/^\s*(\d+)\s+"([a-zA-Z0-9]*)"\s+"([^"]*)"\s+"(.*)"\s+([^\s]*\.)\s*$/',
+					'errmsg'=> 'naptr_error_regex'),
+			),
+			'default' => '100 "" "" "" .',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '1024'
+		),
+		'aux' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '100',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'ttl' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'validators' => array (  0 => array ( 'type' => 'RANGE',
+					'range' => '60:',
+					'errmsg'=> 'ttl_range_error'),
+			),
+			'default' => '3600',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		'active' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'Y',
+			'value'  => array(0 => 'N', 1 => 'Y')
+		),
+		'stamp' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'serial' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '10',
+			'maxlength' => '10'
+		),
+		//#################################
+		// END Datatable fields
+		//#################################
+	)
+);
+
+
+
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_a.lng b/interface/web/dns/lib/lang/ar_dns_a.lng
index 7543672a9482becb158ccc74f22d896e6415ceed..68e40da5e7ca7244f66a69adc7693aff3a621b21 100644
--- a/interface/web/dns/lib/lang/ar_dns_a.lng
+++ b/interface/web/dns/lib/lang/ar_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_aaaa.lng b/interface/web/dns/lib/lang/ar_dns_aaaa.lng
index 0b7e38ac651ad47bbf8848947f3e1f06810e83f5..3d634780f1acfc6c6c2dfbecfb2eb22a58e16961 100644
--- a/interface/web/dns/lib/lang/ar_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_import.lng b/interface/web/dns/lib/lang/ar_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/ar_dns_import.lng
+++ b/interface/web/dns/lib/lang/ar_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ar_dns_naptr.lng b/interface/web/dns/lib/lang/ar_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_soa.lng b/interface/web/dns/lib/lang/ar_dns_soa.lng
index 4e93c5b41c13dd95e20cef40dca43881c7f14cb5..c9721cebc0e2de6bb770816a544e0b3b8dd3863d 100644
--- a/interface/web/dns/lib/lang/ar_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list)';
 $wb['active_txt'] = 'Active';
diff --git a/interface/web/dns/lib/lang/bg_dns_aaaa.lng b/interface/web/dns/lib/lang/bg_dns_aaaa.lng
index 37ad45726f0aecfc33d70248b4d55d6cd9457d61..d4efae73db90b63da0cb54f72a89416e3c5867ac 100644
--- a/interface/web/dns/lib/lang/bg_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/bg_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Вие нямате право да добавяте за
 $wb['name_error_empty'] = 'Полето с имейла е празно.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_import.lng b/interface/web/dns/lib/lang/bg_dns_import.lng
index 848a4f933bc8d24a156996f4b20ddc96acd24b95..7ff3498c44d0847282b2755823bc1270e61964f9 100644
--- a/interface/web/dns/lib/lang/bg_dns_import.lng
+++ b/interface/web/dns/lib/lang/bg_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Не е качен файла с зоната';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/bg_dns_naptr.lng b/interface/web/dns/lib/lang/bg_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_aaaa.lng b/interface/web/dns/lib/lang/br_dns_aaaa.lng
index 1a3cfb2d2740446bea11ffdc4f98404b225d51cd..2f81a52a0c40a19677f41cb74d3ca2dc54b74d54 100644
--- a/interface/web/dns/lib/lang/br_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/br_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Você não tem permissão para adicionar registros dns ne
 $wb['name_error_empty'] = 'O nome do host está em branco.';
 $wb['name_error_regex'] = 'O nome do host possui formato inválido (somente nomes canônicos são suportados).';
 $wb['data_error_empty'] = 'Endereço IPv6 está em branco.';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'O endereço IPv6 possui formato inválido.';
 $wb['ttl_range_error'] = 'O TTL mínimo são 60 segundos.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_import.lng b/interface/web/dns/lib/lang/br_dns_import.lng
index ffcef7d743b9c2e7daf443dd9ab5d30ca4f49784..8bcc0ddff4241c062e01afe7c70eb8a75f3e20f3 100644
--- a/interface/web/dns/lib/lang/br_dns_import.lng
+++ b/interface/web/dns/lib/lang/br_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Importar arquivo de zona';
 $wb['no_file_uploaded_error'] = 'Nenhum arquivo de zona dns foi carregado.';
 $wb['error_no_server_id'] = 'Nenhum servidor foi informado.';
 $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido nesta conta.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/br_dns_naptr.lng b/interface/web/dns/lib/lang/br_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ca_dns_aaaa.lng b/interface/web/dns/lib/lang/ca_dns_aaaa.lng
index e29a5cbf0dc4661c2fe56e925db06b59abe2432d..c06b153dc29c1bb81437eb870677b6d10eacee4f 100644
--- a/interface/web/dns/lib/lang/ca_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Vous n\'avez pas la permission d\'ajouter un enregistreme
 $wb['name_error_empty'] = 'Le nom d\'hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d\'hôte est invalide.';
 $wb['data_error_empty'] = 'L\'adresse IP est vide.';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_import.lng b/interface/web/dns/lib/lang/ca_dns_import.lng
index feb0ba7919ff585a0c9e8f43a0e95a838da92e13..78c2edbf808ba61813fb9fa6fd65cf7d7f721a0e 100644
--- a/interface/web/dns/lib/lang/ca_dns_import.lng
+++ b/interface/web/dns/lib/lang/ca_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Aucun fichier de Zone téléchargé';
 $wb['zone_file_import_txt'] = 'Importer un fichier de Zone';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ca_dns_naptr.lng b/interface/web/dns/lib/lang/ca_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/ca_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ca_dns_soa.lng b/interface/web/dns/lib/lang/ca_dns_soa.lng
index aaf07a0b999573c52d6858557277785b108b5a57..0b6759f07372f84c449c17942f8c4ca849225a53 100644
--- a/interface/web/dns/lib/lang/ca_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ca_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Autoriser les transfers de zones vers <br />ces IP (liste séparée par des virgules)';
 $wb['active_txt'] = 'Actif';
diff --git a/interface/web/dns/lib/lang/cz_dns_aaaa.lng b/interface/web/dns/lib/lang/cz_dns_aaaa.lng
index e28e9a8b735c040eb8002a0e4fc7838eb6074329..9c59cea715218d80821d7b20fdcd8dd351e1af72 100644
--- a/interface/web/dns/lib/lang/cz_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnění přidat záznam do této zóny.';
 $wb['name_error_empty'] = 'Název hostitele je prázdný.';
 $wb['name_error_regex'] = 'Název hostitele má chybný formát.';
 $wb['data_error_empty'] = 'IP adresa je prázdná';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL doba je 60 sekund.';
 $wb['ip_error_wrong'] = 'IP - formát adresy neplatný';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_import.lng b/interface/web/dns/lib/lang/cz_dns_import.lng
index fc90d3cf3ca7a085406b899d6d6199e719b996bf..ed254338a5c39aeb6c4f849c63f0947acdd15a77 100644
--- a/interface/web/dns/lib/lang/cz_dns_import.lng
+++ b/interface/web/dns/lib/lang/cz_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Nelze odeslat DNS zonový soubor';
 $wb['zone_file_import_txt'] = 'Importovat DNS zonový soubor';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet povolen.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/cz_dns_naptr.lng b/interface/web/dns/lib/lang/cz_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_soa.lng b/interface/web/dns/lib/lang/cz_dns_soa.lng
index 5e4a0c2bb3b9a21ca19897551f5e643dd1d9d664..cb35f0ef3bbe946036dd51179d8f5c0ef92ce730 100644
--- a/interface/web/dns/lib/lang/cz_dns_soa.lng
+++ b/interface/web/dns/lib/lang/cz_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Povolot přenos zóny do <br />těchto IP adres (položky oddělené čárkami)';
 $wb['active_txt'] = 'Aktivní';
diff --git a/interface/web/dns/lib/lang/de_dns_aaaa.lng b/interface/web/dns/lib/lang/de_dns_aaaa.lng
index 4fe054d36799e9cbd24d15f709c17ee18e956abb..a225723f89b29af111b12b084f252e963d08e8bd 100644
--- a/interface/web/dns/lib/lang/de_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/de_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser
 $wb['name_error_empty'] = 'Der Hostname ist leer.';
 $wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
 $wb['data_error_empty'] = 'IPv6 Adresse ist leer';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IPv6 Adressen Format ist ungültig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_import.lng b/interface/web/dns/lib/lang/de_dns_import.lng
index f33d304a0dafd1902fc13a14b99f7bb32fe2019c..31db13932e2476cb0b5b94f397000d58e4e1ca53 100644
--- a/interface/web/dns/lib/lang/de_dns_import.lng
+++ b/interface/web/dns/lib/lang/de_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Zonen Datei importieren';
 $wb['no_file_uploaded_error'] = 'Keine Datei hochgeladen';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/de_dns_naptr.lng b/interface/web/dns/lib/lang/de_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_soa.lng b/interface/web/dns/lib/lang/de_dns_soa.lng
index 35d0e54ccdfd1ceeadd13a7ca2f9db0041330639..76d139391ddb580830e537c7050f09171d3bc943 100644
--- a/interface/web/dns/lib/lang/de_dns_soa.lng
+++ b/interface/web/dns/lib/lang/de_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Seriennummer';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Zonentransfer zu diesen IP Adressen erlauben (mit Komma getrennte Liste)';
 $wb['active_txt'] = 'Aktiv';
diff --git a/interface/web/dns/lib/lang/dk_dns_aaaa.lng b/interface/web/dns/lib/lang/dk_dns_aaaa.lng
index 664d63b41c4b6f401b17e1b0a9422b71bc418588..27a7fae5380fd130db25680a8893c4fea6640490 100644
--- a/interface/web/dns/lib/lang/dk_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Du har ikke tilladelse til at tilføje en post til denne
 $wb['name_error_empty'] = 'Værtsnavnet er tomt.';
 $wb['name_error_regex'] = 'Værtsnavnet har et forkert format.';
 $wb['data_error_empty'] = 'IP-Adressen er tom';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL tid er 60 sekunder.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_import.lng b/interface/web/dns/lib/lang/dk_dns_import.lng
index 9edbe20009f599620964237b9cb97d32312745f9..93357e11940d8d1a833e93a80f553bf1a8364ad5 100644
--- a/interface/web/dns/lib/lang/dk_dns_import.lng
+++ b/interface/web/dns/lib/lang/dk_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Importer Zone Filer';
 $wb['no_file_uploaded_error'] = 'Ingen zone-fil overført';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/dk_dns_naptr.lng b/interface/web/dns/lib/lang/dk_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/dk_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/dk_dns_soa.lng b/interface/web/dns/lib/lang/dk_dns_soa.lng
index 1c8c5cc53c415555b240266f33e8c17ac079d785..6a3d71d973588f748bbda7b7d566a23442ed8a8a 100644
--- a/interface/web/dns/lib/lang/dk_dns_soa.lng
+++ b/interface/web/dns/lib/lang/dk_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Opfriske';
 $wb['retry_txt'] = 'Prøv igen';
 $wb['expire_txt'] = 'Udløber';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Tillad zone overførsler til <br />disse IP-adresser (kommasepareret liste)';
 $wb['active_txt'] = 'Aktiv';
diff --git a/interface/web/dns/lib/lang/el_dns_aaaa.lng b/interface/web/dns/lib/lang/el_dns_aaaa.lng
index 5ca896c732464dade830e64edabd23cb7abf795f..faced402b1e7a662ff6297b0d70eba2d1e20e67d 100644
--- a/interface/web/dns/lib/lang/el_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/el_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Δεν έχετε δικαίωμα να προσθέσε
 $wb['name_error_empty'] = 'Το hostname δεν έχει οριστεί.';
 $wb['name_error_regex'] = 'Το hostname δεν έχει σωστή μορφοποίηση.';
 $wb['data_error_empty'] = 'Διεύθυνση IP κενή';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Διεύθυνση IP με μη έγκυρη μορφοποίηση';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_import.lng b/interface/web/dns/lib/lang/el_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/el_dns_import.lng
+++ b/interface/web/dns/lib/lang/el_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/el_dns_naptr.lng b/interface/web/dns/lib/lang/el_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_a.lng b/interface/web/dns/lib/lang/en_dns_a.lng
index dbba7fb6e8f11f41456a53342305ac907b196826..510d04f34dd1408cc20a9b1e2972c40bc1ce6e5e 100644
--- a/interface/web/dns/lib/lang/en_dns_a.lng
+++ b/interface/web/dns/lib/lang/en_dns_a.lng
@@ -12,6 +12,6 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
 $wb["ip_error_wrong"] = 'IP-Address format invalid';
-$wb["data_error_duplicate"] = 'Duplicate A-Record or CNAME-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_aaaa.lng b/interface/web/dns/lib/lang/en_dns_aaaa.lng
index 201a4d958479e7d7a08c20f76d2aa65ab2cc59db..1272fb8587d13a1f9fe740f8ca67f258bb68a655 100644
--- a/interface/web/dns/lib/lang/en_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/en_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb["no_zone_perm"] = 'You do not have the permission to add a record to this DN
 $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb["ip_error_wrong"] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
-?>
\ No newline at end of file
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_import.lng b/interface/web/dns/lib/lang/en_dns_import.lng
index c80722c3c18d2d4c44e2a218e35506c381d40b82..89227b15a5836717fa1957f77fc7990b474e22d9 100644
--- a/interface/web/dns/lib/lang/en_dns_import.lng
+++ b/interface/web/dns/lib/lang/en_dns_import.lng
@@ -5,12 +5,21 @@ $wb['client_txt'] = 'Client';
 $wb["btn_save_txt"] = 'Import Zonefile';
 $wb["btn_cancel_txt"] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
-$wb['no_file_uploaded_error'] = 'No zonefile uploaded';
+$wb['no_file_uploaded_error'] = 'No zonefile uploaded.';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
-?>
\ No newline at end of file
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_naptr.lng b/interface/web/dns/lib/lang/en_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng
index 03dd6834c9584916c86abeb5b8cab8b81a3585a0..1729a4d0cbe9b2e3a311462517c1dc811e11460c 100644
--- a/interface/web/dns/lib/lang/en_dns_soa.lng
+++ b/interface/web/dns/lib/lang/en_dns_soa.lng
@@ -7,7 +7,7 @@ $wb["serial_txt"] = 'Serial';
 $wb["refresh_txt"] = 'Refresh';
 $wb["retry_txt"] = 'Retry';
 $wb["expire_txt"] = 'Expire';
-$wb["minimum_txt"] = 'Minimum';
+$wb["minimum_txt"] = 'Minimum (negative cache ttl)';
 $wb["ttl_txt"] = 'TTL';
 $wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list)';
 $wb["active_txt"] = 'Active';
diff --git a/interface/web/dns/lib/lang/es_dns_aaaa.lng b/interface/web/dns/lib/lang/es_dns_aaaa.lng
index 8851ef84ffcaaaf6fe9db91e3b44028d305434ce..957feabdb5db358db068efb3062f6202df708fb7 100644
--- a/interface/web/dns/lib/lang/es_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/es_dns_aaaa.lng
@@ -1,6 +1,7 @@
 <?php
 $wb['active_txt'] = 'Habilitado';
 $wb['data_error_empty'] = 'Dirección IP vacía';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['data_txt'] = 'Dirección IPv6';
 $wb['ip_error_wrong'] = 'La dirección IP tiene un formato incorrecto';
 $wb['limit_dns_record_txt'] = 'Ha alcanzado el número máx. de registros DNS permitidos para su cuenta.';
diff --git a/interface/web/dns/lib/lang/es_dns_import.lng b/interface/web/dns/lib/lang/es_dns_import.lng
index 80b5eb463b661209f7f2f6a777278d7c4db8658b..db73b69e33602d1fbbea4ad1ee3ffbacf8c2b9af 100644
--- a/interface/web/dns/lib/lang/es_dns_import.lng
+++ b/interface/web/dns/lib/lang/es_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Importar Archivo de Zona';
 $wb['zone_file_import_txt'] = 'Importar archivo de zona';
 $wb['zone_file_successfully_imported_txt'] = 'El archivo de zona se ha importado correctamente!';
 $wb['zonefile_to_import_txt'] = 'Archivo de Zona';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/es_dns_naptr.lng b/interface/web/dns/lib/lang/es_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_aaaa.lng b/interface/web/dns/lib/lang/fi_dns_aaaa.lng
index 78c65575fd57a6a9e57cdbf8c29e6f23dc9213a8..f6f99f324b19c5e67bd05321d33ea2b6cd206196 100644
--- a/interface/web/dns/lib/lang/fi_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/fi_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Käyttäjätunnuksella ei ole oikeuksia lisätä tietueit
 $wb['name_error_empty'] = 'Verkkotunnus on tyhjä.';
 $wb['name_error_regex'] = 'Verkkotunnus on väärän muotoinen.';
 $wb['data_error_empty'] = 'Tekstikenttä on tyhjä';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Tekstikenttä on vääränlainen';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_import.lng b/interface/web/dns/lib/lang/fi_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/fi_dns_import.lng
+++ b/interface/web/dns/lib/lang/fi_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/fi_dns_naptr.lng b/interface/web/dns/lib/lang/fi_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_aaaa.lng b/interface/web/dns/lib/lang/fr_dns_aaaa.lng
index 1cc3722de5030f5a744c59729b119214029709ba..280acdcea41f048a2167745aabfe70fba51c06bd 100644
--- a/interface/web/dns/lib/lang/fr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Vous n’avez pas la permission d’ajouter un enregistre
 $wb['name_error_empty'] = 'Le nom d’hôte est vide.';
 $wb['name_error_regex'] = 'Le format du nom d’hôte est invalide.';
 $wb['data_error_empty'] = 'L’adresse IP est vide.';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_import.lng b/interface/web/dns/lib/lang/fr_dns_import.lng
index 73bc88f82460a20e463a0509f12b511f81aa40a4..c367f542bb17aabbf3c29f2799108c8e07d705a0 100644
--- a/interface/web/dns/lib/lang/fr_dns_import.lng
+++ b/interface/web/dns/lib/lang/fr_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Aucun fichier de Zone téléchargé';
 $wb['zone_file_import_txt'] = 'Importer un fichier de Zone';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/fr_dns_naptr.lng b/interface/web/dns/lib/lang/fr_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_soa.lng b/interface/web/dns/lib/lang/fr_dns_soa.lng
index fa5a5202f6b3ce87509c5d6a55f9d0f6c899514f..da63faadbdea9adab67fa598a1331997d941d246 100644
--- a/interface/web/dns/lib/lang/fr_dns_soa.lng
+++ b/interface/web/dns/lib/lang/fr_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Autoriser les transfers de zones vers <br />ces IP (liste séparée par des virgules)';
 $wb['active_txt'] = 'Actif';
diff --git a/interface/web/dns/lib/lang/hr_dns_aaaa.lng b/interface/web/dns/lib/lang/hr_dns_aaaa.lng
index d8a3419309a7d907b6e69a593fcf1eb599642470..76fc6007032ab8af4f8ee2b6bea0a29475e67fcf 100644
--- a/interface/web/dns/lib/lang/hr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/hr_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Nemate dozvolu za dodavanja zapisa ovoj domeni.';
 $wb['name_error_empty'] = 'Naziv hosta nije upisan.';
 $wb['name_error_regex'] = 'Naziv hosta je u pogrešnom formatu.';
 $wb['data_error_empty'] = 'Polje IPv6 adresa je prazno';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Neispravan format IPv6 adrese';
 $wb['ttl_range_error'] = 'Minimalno TTL vrijeme je 60 sekundi.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_import.lng b/interface/web/dns/lib/lang/hr_dns_import.lng
index 09c178e5bbbaa7e7d7580c1e454f2b2dc8b1fe79..59632ed64edad24d7f293db3c849e21f76fd9f18 100644
--- a/interface/web/dns/lib/lang/hr_dns_import.lng
+++ b/interface/web/dns/lib/lang/hr_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Klijent';
 $wb['btn_save_txt'] = 'Importiraj zonsku datoteku';
 $wb['btn_cancel_txt'] = 'Odustani';
 $wb['domain_txt'] = 'Domena';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zonska datoteka';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Importiraj zonske datoteka';
 $wb['no_file_uploaded_error'] = 'Nije prenešena zonska datoteka';
 $wb['zone_file_import_txt'] = 'Importiraj zonsku datoteku';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/hr_dns_naptr.lng b/interface/web/dns/lib/lang/hr_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_a.lng b/interface/web/dns/lib/lang/hu_dns_a.lng
index 3e52e94b9f5acb7515ce3d22b0bee93a7491801e..4820079b53509194ec4acd2902309c9210efbd14 100644
--- a/interface/web/dns/lib/lang/hu_dns_a.lng
+++ b/interface/web/dns/lib/lang/hu_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_aaaa.lng b/interface/web/dns/lib/lang/hu_dns_aaaa.lng
index f78f42d1869ac054c4cb54c52b6d4e5a514ce395..5f261eeb5fd5a90b828f114f53f95331ffd1c776 100644
--- a/interface/web/dns/lib/lang/hu_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_import.lng b/interface/web/dns/lib/lang/hu_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/hu_dns_import.lng
+++ b/interface/web/dns/lib/lang/hu_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/hu_dns_naptr.lng b/interface/web/dns/lib/lang/hu_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_soa.lng b/interface/web/dns/lib/lang/hu_dns_soa.lng
index 80388e40560f24b36c3f56d36fac1fc241c1dcf1..401961408864d7817ba7e8c5f4b4ecbc3b02d7c8 100644
--- a/interface/web/dns/lib/lang/hu_dns_soa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list)';
 $wb['active_txt'] = 'Aktív';
diff --git a/interface/web/dns/lib/lang/id_dns_aaaa.lng b/interface/web/dns/lib/lang/id_dns_aaaa.lng
index 68cab8327197c6488b3a7265b01a6a2396053434..3257ba193f4e5464a068c4379aec1db0f1d78ae8 100644
--- a/interface/web/dns/lib/lang/id_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/id_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Anda tidak memiliki hak untuk menambah record ke zona DNS
 $wb['name_error_empty'] = 'Nama Host kosong.';
 $wb['name_error_regex'] = 'Format Nama Host salah.';
 $wb['data_error_empty'] = 'Alamat IP kosong';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Format Alamat IP tidak valid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_import.lng b/interface/web/dns/lib/lang/id_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/id_dns_import.lng
+++ b/interface/web/dns/lib/lang/id_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/id_dns_naptr.lng b/interface/web/dns/lib/lang/id_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_soa.lng b/interface/web/dns/lib/lang/id_dns_soa.lng
index a8b9df0d591dff46b52da7f4c67082e1617f0c22..c42890b71c1ae0cd010a138d54c21fd6e0016403 100644
--- a/interface/web/dns/lib/lang/id_dns_soa.lng
+++ b/interface/web/dns/lib/lang/id_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Izinkan transfer zona ke <br />IP ini (daftar dipisahkan dengan koma)';
 $wb['active_txt'] = 'Aktif';
diff --git a/interface/web/dns/lib/lang/it_dns_a.lng b/interface/web/dns/lib/lang/it_dns_a.lng
index 122560b487303a23c1b0cb5732278a14235332b5..9aa9e1186f96b282503d7bd1a5c43909162724aa 100644
--- a/interface/web/dns/lib/lang/it_dns_a.lng
+++ b/interface/web/dns/lib/lang/it_dns_a.lng
@@ -11,7 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname  vuoto.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_aaaa.lng b/interface/web/dns/lib/lang/it_dns_aaaa.lng
index 2746bb887df7d2ada5cffb61cbc6bd2e65964ed9..e82ada0166b3e5f1379cfac4453f1e19fccf8b2c 100644
--- a/interface/web/dns/lib/lang/it_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/it_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Non hai il permesso di aggiungere record a questa zona DN
 $wb['name_error_empty'] = 'Nome Host vuoto.';
 $wb['name_error_regex'] = 'Formato errato per Nome Host.';
 $wb['data_error_empty'] = 'Indirizzo Ip vuoto';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ttl_range_error'] = 'TTL time minimo 60 secondi.';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_import.lng b/interface/web/dns/lib/lang/it_dns_import.lng
index 4ccee92b65a6541416ab26920d0cb507a88ddbfe..1d734ab4b04f92286fdef0c96e3a62e0efe49c39 100644
--- a/interface/web/dns/lib/lang/it_dns_import.lng
+++ b/interface/web/dns/lib/lang/it_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Nessun file di zona selezionato';
 $wb['zone_file_import_txt'] = 'Importa file di zona';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/it_dns_naptr.lng b/interface/web/dns/lib/lang/it_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_soa.lng b/interface/web/dns/lib/lang/it_dns_soa.lng
index 48ba33d550309b4ad0cb6f1f93f63beeb576a5e8..7ca3cb1cb13f1f104d5aad6516d522735045182d 100644
--- a/interface/web/dns/lib/lang/it_dns_soa.lng
+++ b/interface/web/dns/lib/lang/it_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Seriale';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Consenti trasferimento zone a <br />questi IP (elenco separato da virgola)';
 $wb['active_txt'] = 'Attivo';
diff --git a/interface/web/dns/lib/lang/ja_dns_aaaa.lng b/interface/web/dns/lib/lang/ja_dns_aaaa.lng
index 2c859b741688819bc985290574466e35cd78bad1..3f10406659c013da53e318c0a6285ed17f006c9c 100644
--- a/interface/web/dns/lib/lang/ja_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'このDNSゾーンにレコードを追加する権限が
 $wb['name_error_empty'] = 'ホスト名を入力してください。';
 $wb['name_error_regex'] = 'ホスト名の形式が不正です。';
 $wb['data_error_empty'] = 'IPアドレスを入力してください。';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IPアドレスの形式が不正です。';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_import.lng b/interface/web/dns/lib/lang/ja_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/ja_dns_import.lng
+++ b/interface/web/dns/lib/lang/ja_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ja_dns_naptr.lng b/interface/web/dns/lib/lang/ja_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_soa.lng b/interface/web/dns/lib/lang/ja_dns_soa.lng
index 2e0fd5515fc2fbc42c94d3f25d472810ede11324..3964f3fcdb73888f6c3208043b4cb7adf29e425e 100644
--- a/interface/web/dns/lib/lang/ja_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ja_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'ゾーン転送を許可するIPアドレス<br />(, で区切ってください)';
 $wb['active_txt'] = '有効';
diff --git a/interface/web/dns/lib/lang/nl_dns_aaaa.lng b/interface/web/dns/lib/lang/nl_dns_aaaa.lng
index 298193c1e8272c527536fafec54bd2e92483ae88..139cc71ded4bbe3875fd0563f0870ab6fbe3acb7 100644
--- a/interface/web/dns/lib/lang/nl_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'U heeft geen toestemming om een record toe te voegen aan
 $wb['name_error_empty'] = 'De hostnaam is niet ingvuld';
 $wb['name_error_regex'] = 'De hostnaam heeft een onjuist formaat.';
 $wb['data_error_empty'] = 'IP-adres is niet ingevuld';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-adres formaat ongeldig';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_import.lng b/interface/web/dns/lib/lang/nl_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/nl_dns_import.lng
+++ b/interface/web/dns/lib/lang/nl_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/nl_dns_naptr.lng b/interface/web/dns/lib/lang/nl_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_soa.lng b/interface/web/dns/lib/lang/nl_dns_soa.lng
index b29c040df81144e49a6271a96ca54e5131c5443e..121339c00ca296b5b108516fb406c98edd4e7f4c 100644
--- a/interface/web/dns/lib/lang/nl_dns_soa.lng
+++ b/interface/web/dns/lib/lang/nl_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serieel';
 $wb['refresh_txt'] = 'Ververs';
 $wb['retry_txt'] = 'Opnieuw proberen';
 $wb['expire_txt'] = 'Verlopen';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Sta zone transfers toe naar <br />deze IPs (komma gescheiden waarden)';
 $wb['active_txt'] = 'Actief';
diff --git a/interface/web/dns/lib/lang/pl_dns_aaaa.lng b/interface/web/dns/lib/lang/pl_dns_aaaa.lng
index 867d73ab97de4c5197cedd791d7ca151052e6ce2..86d93fe71f0b03155691982a1ef0cdfc4c8a5fd2 100644
--- a/interface/web/dns/lib/lang/pl_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Nie masz uprawnień, aby dodać nowy wpis w tej strefie D
 $wb['name_error_empty'] = 'Nazwa serwera jest pusta.';
 $wb['name_error_regex'] = 'Nazwa serwera ma niepoprawny format.';
 $wb['data_error_empty'] = 'Adres IP jest pusty.';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Adres IP ma niepoprawny format.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_import.lng b/interface/web/dns/lib/lang/pl_dns_import.lng
index d622e03985e4376eb243a5145d383a7cb4ba29cd..f6b618c87b425b2bb570886f896ed1abde067d1c 100644
--- a/interface/web/dns/lib/lang/pl_dns_import.lng
+++ b/interface/web/dns/lib/lang/pl_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Nie załadowany żaden plik';
 $wb['zone_file_import_txt'] = 'Import pliku strefy';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/pl_dns_naptr.lng b/interface/web/dns/lib/lang/pl_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_soa.lng b/interface/web/dns/lib/lang/pl_dns_soa.lng
index f2d7e1ad87ed7a2848da364004168e5be483bbf0..1724c4c141c77a15d08c93021ca7ee2d3f189fe0 100644
--- a/interface/web/dns/lib/lang/pl_dns_soa.lng
+++ b/interface/web/dns/lib/lang/pl_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Klucz';
 $wb['refresh_txt'] = 'Odśwież';
 $wb['retry_txt'] = 'Ponów';
 $wb['expire_txt'] = 'Wygasł';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Zezwól na przeniesienie stref do <br />tych adresów IP (adresy rozdzielaj przecinkiem)';
 $wb['active_txt'] = 'Aktywny';
diff --git a/interface/web/dns/lib/lang/pt_dns_aaaa.lng b/interface/web/dns/lib/lang/pt_dns_aaaa.lng
index 04698ced19967f56caa6dac3691dc1eb411780c5..9fc3798dc86f5fbc118c16567bfb99e4cf3c833a 100644
--- a/interface/web/dns/lib/lang/pt_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Não tem permissão para adicionar registos a está zona
 $wb['name_error_empty'] = 'O Hostname está em branco.';
 $wb['name_error_regex'] = 'O Hostname está com formato inválido.';
 $wb['data_error_empty'] = 'Endereço-IP em branco';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Endereço-IP com formato inválido';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_import.lng b/interface/web/dns/lib/lang/pt_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/pt_dns_import.lng
+++ b/interface/web/dns/lib/lang/pt_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/pt_dns_naptr.lng b/interface/web/dns/lib/lang/pt_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_soa.lng b/interface/web/dns/lib/lang/pt_dns_soa.lng
index 61ff07f0cbd56d1cb9e24c4955cd83c8e5b59931..bdcc1660ff0e7f4b9a348ce678520aea214d8ed9 100644
--- a/interface/web/dns/lib/lang/pt_dns_soa.lng
+++ b/interface/web/dns/lib/lang/pt_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Permitir transferências de zona para <br />estes IPs (lista separada por ponto e vírgula)';
 $wb['active_txt'] = 'Activo';
diff --git a/interface/web/dns/lib/lang/ro_dns_a.lng b/interface/web/dns/lib/lang/ro_dns_a.lng
index f2f6a46c439121575df40209e87a5811833c9efa..b8c25224326052b584fbd2a838eb18235f289ceb 100644
--- a/interface/web/dns/lib/lang/ro_dns_a.lng
+++ b/interface/web/dns/lib/lang/ro_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'Hostname necompletat';
 $wb['name_error_regex'] = 'Hostname format gresit';
 $wb['data_error_empty'] = 'IP-Adresa vid';
 $wb['ip_error_wrong'] = 'IP-Adresa format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_aaaa.lng b/interface/web/dns/lib/lang/ro_dns_aaaa.lng
index 0b7e38ac651ad47bbf8848947f3e1f06810e83f5..3d634780f1acfc6c6c2dfbecfb2eb22a58e16961 100644
--- a/interface/web/dns/lib/lang/ro_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_import.lng b/interface/web/dns/lib/lang/ro_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/ro_dns_import.lng
+++ b/interface/web/dns/lib/lang/ro_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ro_dns_naptr.lng b/interface/web/dns/lib/lang/ro_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_soa.lng b/interface/web/dns/lib/lang/ro_dns_soa.lng
index 134758f95ec9e9f701d394e241a678f6bd123530..40607318f713d7a08f4d87dd24425e1b0f60e44e 100644
--- a/interface/web/dns/lib/lang/ro_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ro_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serial';
 $wb['refresh_txt'] = 'Reincarca';
 $wb['retry_txt'] = 'Reincearca';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Accepta transfer zone catre <br />aceste  IP-uri (comma separated list)';
 $wb['active_txt'] = 'Active';
diff --git a/interface/web/dns/lib/lang/ru_dns_aaaa.lng b/interface/web/dns/lib/lang/ru_dns_aaaa.lng
index 4620b53eaa2adae2f8ae796f119c7f1382abdbcd..e8a02443d3ebcb0fbc7c0e332b02f675136175b7 100644
--- a/interface/web/dns/lib/lang/ru_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'У Вас нет прав добавлять эту за
 $wb['name_error_empty'] = 'Имя пустое.';
 $wb['name_error_regex'] = 'Неправильный формат имени хоста.';
 $wb['data_error_empty'] = 'Пустой IP-адрес';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'Неправильный формат IP-адреса';
 $wb['ttl_range_error'] = 'Мин. время <b>TTL</b> 60 секунд.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_import.lng b/interface/web/dns/lib/lang/ru_dns_import.lng
index 752e02cc6c0faa4368b420dde619a92f6c77884d..95cf32c935bb281cd84cc1c79d38500eea2e90b4 100644
--- a/interface/web/dns/lib/lang/ru_dns_import.lng
+++ b/interface/web/dns/lib/lang/ru_dns_import.lng
@@ -13,4 +13,13 @@ $wb['no_file_uploaded_error'] = 'Файл зоны не загружен.';
 $wb['zone_file_import_txt'] = 'Импорт файла зоны';
 $wb['error_no_server_id'] = 'Не указан сервер.';
 $wb['error_not_allowed_server_id'] = 'Выбранный сервер не доступен для этой учетной записи.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/ru_dns_naptr.lng b/interface/web/dns/lib/lang/ru_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_soa.lng b/interface/web/dns/lib/lang/ru_dns_soa.lng
index fe716cdc1b1ca89be506c500674187fc042a8131..7bd15cd63858f16b496326756fe8b652902e63b7 100644
--- a/interface/web/dns/lib/lang/ru_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ru_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Серийный номер';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Повтор';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Xfer (IP)';
 $wb['active_txt'] = 'Активно';
diff --git a/interface/web/dns/lib/lang/se_dns_a.lng b/interface/web/dns/lib/lang/se_dns_a.lng
index 7543672a9482becb158ccc74f22d896e6415ceed..68e40da5e7ca7244f66a69adc7693aff3a621b21 100644
--- a/interface/web/dns/lib/lang/se_dns_a.lng
+++ b/interface/web/dns/lib/lang/se_dns_a.lng
@@ -12,6 +12,6 @@ $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
-$wb['data_error_duplicate'] = 'Duplicate A-Record';
+$wb['data_error_duplicate'] = 'Duplicate A or CNAME Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_aaaa.lng b/interface/web/dns/lib/lang/se_dns_aaaa.lng
index 0b7e38ac651ad47bbf8848947f3e1f06810e83f5..3d634780f1acfc6c6c2dfbecfb2eb22a58e16961 100644
--- a/interface/web/dns/lib/lang/se_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/se_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['name_error_empty'] = 'The hostname is empty.';
 $wb['name_error_regex'] = 'The hostname has the wrong format.';
 $wb['data_error_empty'] = 'IP-Address empty';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_import.lng b/interface/web/dns/lib/lang/se_dns_import.lng
index 801dd473f7d23e517251c45f7f09a06d304ec88d..1c9496600275d21b8fb2bbfe059017c67b1e892b 100644
--- a/interface/web/dns/lib/lang/se_dns_import.lng
+++ b/interface/web/dns/lib/lang/se_dns_import.lng
@@ -7,10 +7,19 @@ $wb['domain_txt'] = 'Domän';
 $wb['zone_file_successfully_imported_txt'] = 'Zonfilimporten har lyckats!';
 $wb['error_no_valid_zone_file_txt'] = 'Detta verkar inte vara en giltig zonfil';
 $wb['zonefile_to_import_txt'] = 'Zonfil';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Importera zonfiler';
 $wb['no_file_uploaded_error'] = 'Ingen zonfil uppladdad';
 $wb['zone_file_import_txt'] = 'Zonfilsimport';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/se_dns_naptr.lng b/interface/web/dns/lib/lang/se_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_soa.lng b/interface/web/dns/lib/lang/se_dns_soa.lng
index 034d3235a7e5c16d36678de066054e1b22c4d4f5..cfeb2f9fde36215601657786424c558134aeb70b 100644
--- a/interface/web/dns/lib/lang/se_dns_soa.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Serienummer';
 $wb['refresh_txt'] = 'Refresh';
 $wb['retry_txt'] = 'Retry';
 $wb['expire_txt'] = 'Expire';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list)';
 $wb['active_txt'] = 'Aktiv';
diff --git a/interface/web/dns/lib/lang/sk_dns_aaaa.lng b/interface/web/dns/lib/lang/sk_dns_aaaa.lng
index 78d5cc6c4c63f556ed0b85df5172396ad1d9783c..246ac1dd237093571c04a3d6a17c3edd3e8f92fe 100644
--- a/interface/web/dns/lib/lang/sk_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Nemáte oprávnenie Pridať záznam do tejto zóny DNS.';
 $wb['name_error_empty'] = 'Hostname je prázdny.';
 $wb['name_error_regex'] = 'Hostname má zlý formát.';
 $wb['data_error_empty'] = 'IP-Adresa prázdna';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP-Adresa má zlý formát';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_import.lng b/interface/web/dns/lib/lang/sk_dns_import.lng
index 8f67eba14c74cf72fbf18fc031dc1896de3fc21a..3fc63992ed75d7262ee09d7726130a858bcf5fed 100644
--- a/interface/web/dns/lib/lang/sk_dns_import.lng
+++ b/interface/web/dns/lib/lang/sk_dns_import.lng
@@ -4,13 +4,22 @@ $wb['client_txt'] = 'Client';
 $wb['btn_save_txt'] = 'Import Zonefile';
 $wb['btn_cancel_txt'] = 'Cancel';
 $wb['domain_txt'] = 'Domain';
-$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported!';
-$wb['error_no_valid_zone_file_txt'] = 'This appears to be no valid zone file!';
+$wb['zone_file_successfully_imported_txt'] = 'The zone file has successfully been imported.';
+$wb['error_no_valid_zone_file_txt'] = 'This zone file appears invalid.';
 $wb['zonefile_to_import_txt'] = 'Zone File';
-$wb['domain_field_desc_txt'] = 'Can be left empty if domain name is in the filename or the zone-file content.';
+$wb['domain_field_desc_txt'] = 'If empty, domain name is taken from SOA record.';
 $wb['title'] = 'Import Zone Files';
 $wb['no_file_uploaded_error'] = 'No zonefile uploaded';
 $wb['zone_file_import_txt'] = 'Zone File Import';
 $wb['error_no_server_id'] = 'No server provided.';
 $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/sk_dns_naptr.lng b/interface/web/dns/lib/lang/sk_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_soa.lng b/interface/web/dns/lib/lang/sk_dns_soa.lng
index ac1f1162430a009255edcd60ec76809fc8fe14ac..79d49eee92d6136f143f0d8a477f66c2b5b3a663 100644
--- a/interface/web/dns/lib/lang/sk_dns_soa.lng
+++ b/interface/web/dns/lib/lang/sk_dns_soa.lng
@@ -7,7 +7,7 @@ $wb['serial_txt'] = 'Seriové čislo';
 $wb['refresh_txt'] = 'Obnoviť';
 $wb['retry_txt'] = 'Opakovať';
 $wb['expire_txt'] = 'Expirovať';
-$wb['minimum_txt'] = 'Minimum';
+$wb['minimum_txt'] = 'Minimum (negative cache ttl)';
 $wb['ttl_txt'] = 'TTL';
 $wb['xfer_txt'] = 'Povoliť prenosy zóny na <br />tieto IP (comma separated list)';
 $wb['active_txt'] = 'Aktivovať';
diff --git a/interface/web/dns/lib/lang/tr_dns_aaaa.lng b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
index 1726f80a8ff6c45979e06548ce7a01425b311dd2..d75ff802bbae11774e408063045e53b93f38eb30 100644
--- a/interface/web/dns/lib/lang/tr_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/tr_dns_aaaa.lng
@@ -11,6 +11,7 @@ $wb['no_zone_perm'] = 'Bu DNS bölgesine kayıt ekleme izniniz yok.';
 $wb['name_error_empty'] = 'Sunucu adı boş olamaz.';
 $wb['name_error_regex'] = 'Sunucu adının biçimi geçersiz.';
 $wb['data_error_empty'] = 'IP Adresi boÅŸ olamaz';
+$wb['data_error_duplicate'] = 'Duplicate AAAA or CNAME Record';
 $wb['ip_error_wrong'] = 'IP adresinin biçimi geçersiz';
 $wb['ttl_range_error'] = 'En düşük TTL süresi 60 saniyedir.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_import.lng b/interface/web/dns/lib/lang/tr_dns_import.lng
index 0f95a3131f76190b4277ceb9cd6e6d9b08f02d79..8aa42a51e3c6126a0620d20bee38418048d96751 100644
--- a/interface/web/dns/lib/lang/tr_dns_import.lng
+++ b/interface/web/dns/lib/lang/tr_dns_import.lng
@@ -13,4 +13,13 @@ $wb['title'] = 'Bölge Dosyalarını İçe Aktar';
 $wb['no_file_uploaded_error'] = 'Hiçbir bölge dosyası yüklenmedi';
 $wb['error_no_server_id'] = 'Sunucu belirtilmemiÅŸ.';
 $wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.';
+$wb['zone_already_exists'] = 'This zone already exists, you must delete or rename it first.';
+$wb['zone_not_allowed'] = 'This zone is not allowed for this account.';
+$wb['zone_file_missing_soa'] = 'The zone file must contain a SOA record.';
+$wb['zone_file_multiple_soa'] = 'The zone file cannot contain multiple SOA records.';
+$wb['zone_file_soa_parser'] = 'The SOA record in this zone file could not be processed.  Ensure SERIAL, REFRESH, RETRY, EXPIRE and MINIMUM are each on a separate line from other data.';
+$wb['ignore_record_not_class_in'] = 'Ignoring DNS record, not class IN.';
+$wb['ignore_record_unknown_type'] = 'Ignoring DNS record, unknown type.';
+$wb['ignore_record_invalid_owner'] = 'Ignoring DNS record, not able to validate owner name.';
+$wb['zone_file_import_fail'] = 'The zone file did not import.';
 ?>
diff --git a/interface/web/dns/lib/lang/tr_dns_naptr.lng b/interface/web/dns/lib/lang/tr_dns_naptr.lng
new file mode 100644
index 0000000000000000000000000000000000000000..c63e695a86e7fe26e0491b73d7830c5778abf827
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb["server_id_txt"] = 'Server';
+$wb["zone_txt"] = 'Zone';
+$wb["name_txt"] = 'Hostname';
+$wb["order_txt"] = 'Order';
+$wb["pref_txt"] = 'Pref';
+$wb["flags_txt"] = 'Flags';
+$wb["service_txt"] = 'Service';
+$wb["regexp_txt"] = 'RegExp';
+$wb["replacement_txt"] = 'Replacement';
+$wb["ttl_txt"] = 'TTL';
+$wb["active_txt"] = 'Active';
+$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
+$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
+$wb["name_error_empty"] = 'The hostname is empty.';
+$wb["name_error_regex"] = 'The hostname has the wrong format.';
+$wb["data_error_empty"] = 'NAPTR record is empty.';
+$wb["naptr_error_regex"] = 'Invalid NAPTR record.  The NAPTR record must include Order, Pref and either Regex or Replacement.';
+$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
+$wb['record_parse_error'] = 'Could not parse the record found in database.';
+?>
diff --git a/interface/web/dns/lib/remote.conf.php b/interface/web/dns/lib/remote.conf.php
index 0ca556926bf29d8f6aaadbdebb8cb7ad324be371..ea725de8a4d99f537c621f5516d7840a602b7fe9 100644
--- a/interface/web/dns/lib/remote.conf.php
+++ b/interface/web/dns/lib/remote.conf.php
@@ -4,16 +4,18 @@ $function_list['dns_zone_get,dns_zone_get_id,dns_zone_add,dns_zone_update,dns_zo
 $function_list['dns_a_get,dns_a_add,dns_a_update,dns_a_delete'] = 'DNS a functions';
 $function_list['dns_aaaa_get,dns_aaaa_add,dns_aaaa_update,dns_aaaa_delete'] = 'DNS aaaa functions';
 $function_list['dns_alias_get,dns_alias_add,dns_alias_update,dns_alias_delete'] = 'DNS alias functions';
+$function_list['dns_caa_get,dns_caa_add,dns_caa_update,dns_caa_delete'] = 'DNS caa functions';
 $function_list['dns_cname_get,dns_cname_add,dns_cname_update,dns_cname_delete'] = 'DNS cname functions';
 $function_list['dns_ds_get,dns_ds_add,dns_ds_update,dns_ds_delete'] = 'DNS ds functions';
 $function_list['dns_hinfo_get,dns_hinfo_add,dns_hinfo_update,dns_hinfo_delete'] = 'DNS hinfo functions';
 $function_list['dns_loc_get,dns_loc_add,dns_loc_update,dns_loc_delete'] = 'DNS loc functions';
 $function_list['dns_mx_get,dns_mx_add,dns_mx_update,dns_mx_delete'] = 'DNS mx functions';
-$function_list['dns_tlsa_get,dns_tlsa_add,dns_tlsa_update,dns_tlsa_delete'] = 'DNS tlsa functions';
+$function_list['dns_naptr_get,dns_naptr_add,dns_naptr_update,dns_naptr_delete'] = 'DNS naptr functions';
 $function_list['dns_ns_get,dns_ns_add,dns_ns_update,dns_ns_delete'] = 'DNS ns functions';
 $function_list['dns_ptr_get,dns_ptr_add,dns_ptr_update,dns_ptr_delete'] = 'DNS ptr functions';
 $function_list['dns_rp_get,dns_rp_add,dns_rp_update,dns_rp_delete'] = 'DNS rp functions';
 $function_list['dns_srv_get,dns_srv_add,dns_srv_update,dns_srv_delete'] = 'DNS srv functions';
+$function_list['dns_tlsa_get,dns_tlsa_add,dns_tlsa_update,dns_tlsa_delete'] = 'DNS tlsa functions';
 $function_list['dns_txt_get,dns_txt_add,dns_txt_update,dns_txt_delete'] = 'DNS txt functions';
 
 ?>
diff --git a/interface/web/dns/list/dns_a.list.php b/interface/web/dns/list/dns_a.list.php
index 1c6999511d1280b8c015b422bed9435a6cf5485b..b6363b7d246110541d30d85ffbf61f7ffcde07d8 100644
--- a/interface/web/dns/list/dns_a.list.php
+++ b/interface/web/dns/list/dns_a.list.php
@@ -132,7 +132,7 @@ $liste["item"][] = array( 'field'  => "type",
 	'prefix' => "",
 	'suffix' => "",
 	'width'  => "",
-	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
+	'value'  => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NAPTR'=>'NAPTR', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT'));
 
 
 ?>
diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm
index 5a4a5eeb683309e2e4287644c64ecf12d4b65388..b6b21f18b618c3e75d0f0f26a034b7716847c4b3 100644
--- a/interface/web/dns/templates/dns_a_list.htm
+++ b/interface/web/dns/templates/dns_a_list.htm
@@ -28,6 +28,7 @@
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_hinfo_edit.php?zone={tmpl_var name='parent_id'}">HINFO</button>
 			<button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_loc_edit.php?zone={tmpl_var name='parent_id'}">LOC</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_mx_edit.php?zone={tmpl_var name='parent_id'}">MX</button>
+            <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_naptr_edit.php?zone={tmpl_var name='parent_id'}">NAPTR</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_ns_edit.php?zone={tmpl_var name='parent_id'}">NS</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_ptr_edit.php?zone={tmpl_var name='parent_id'}">PTR</button>
             <button class="btn btn-default formbutton-success" type="button" data-load-content="dns/dns_rp_edit.php?zone={tmpl_var name='parent_id'}">RP</button>
diff --git a/interface/web/dns/templates/dns_naptr_edit.htm b/interface/web/dns/templates/dns_naptr_edit.htm
new file mode 100644
index 0000000000000000000000000000000000000000..8fd928c3de5b151b72303311d0b8084c007d5241
--- /dev/null
+++ b/interface/web/dns/templates/dns_naptr_edit.htm
@@ -0,0 +1,46 @@
+<div class='page-header'>
+	<h1><tmpl_var name="list_head_txt"></h1>
+</div>
+<p><tmpl_var name="list_desc_txt"></p>
+
+
+            <div class="form-group">
+                <label for="name" class="col-sm-3 control-label">{tmpl_var name='name_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="name" id="name" value="{tmpl_var name='name'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="order" class="col-sm-3 control-label">{tmpl_var name='order_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="order" id="order" value="{tmpl_var name='aux'}" class="form-control" placeholder="100" /></div></div>
+            <div class="form-group">
+                <label for="pref" class="col-sm-3 control-label">{tmpl_var name='pref_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="pref" id="pref" value="{tmpl_var name='pref'}" class="form-control" placeholder="100" /></div></div>
+            <div class="form-group">
+                <label for="flags" class="col-sm-3 control-label">{tmpl_var name='flags_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="flags" id="flags" value="{tmpl_var name='flags'}" class="form-control" placeholder="s" /></div></div>
+            <div class="form-group">
+                <label for="service" class="col-sm-3 control-label">{tmpl_var name='service_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="service" id="service" value="{tmpl_var name='service'}" class="form-control" placeholder="http+I2R" /></div></div>
+            <div class="form-group">
+                <label for="regexp" class="col-sm-3 control-label">{tmpl_var name='regexp_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="regexp" id="regexp" value="{tmpl_var name='regexp'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label for="replacement" class="col-sm-3 control-label">{tmpl_var name='replacement_txt'}</label>
+                <div class="col-sm-9"><input type="text" name="replacement" id="replacement" value="{tmpl_var name='replacement'}" class="form-control" placeholder="_http._tcp.foo.com." /></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-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='active'}
+                </div>
+            </div>
+
+
+	<input type="hidden" name="id" value="{tmpl_var name='id'}">
+	<input type="hidden" name="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_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>
+        </div></div>
diff --git a/remoting_client/API-docs/dns_naptr_add.html b/remoting_client/API-docs/dns_naptr_add.html
new file mode 100644
index 0000000000000000000000000000000000000000..d691d65b3a1c2569c73c198fbf8bef151b356be7
--- /dev/null
+++ b/remoting_client/API-docs/dns_naptr_add.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>dns_naptr_add(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Adds a dns server location record if <em>type</em> is <em>naptr</em>.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$params</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> stamp&nbsp;&nbsp;(<span class="paratype">timestamp</span>)</p>
+<p class="margin"> serial&nbsp;&nbsp;(<span class="paratype">int(10)</span>)</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns the ID of the newly added naptr resource record.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_naptr_delete.html b/remoting_client/API-docs/dns_naptr_delete.html
new file mode 100644
index 0000000000000000000000000000000000000000..376bd18aa28592619b7664144c2b79d965dae80c
--- /dev/null
+++ b/remoting_client/API-docs/dns_naptr_delete.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>dns_naptr_delete(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Deletes target dns naptr resource record.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns the number of deleted records.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_naptr_get.html b/remoting_client/API-docs/dns_naptr_get.html
new file mode 100644
index 0000000000000000000000000000000000000000..eb3d6b0eda7691ab0b55c46b98ec667c3fcddc2b
--- /dev/null
+++ b/remoting_client/API-docs/dns_naptr_get.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>dns_naptr_get(<span class="var">$session_id</span>, <span class="var">$primary_id</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Retrieves information about target dns naptr resource record.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$primary_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns all fields and values of the chosen dns naptr resource record.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/dns_naptr_update.html b/remoting_client/API-docs/dns_naptr_update.html
new file mode 100644
index 0000000000000000000000000000000000000000..97f40f056f172d133b333e4e3e360f36cae5de49
--- /dev/null
+++ b/remoting_client/API-docs/dns_naptr_update.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>dns_naptr_update(<span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span>);</h1>
+<br>
+<b>Description: </b>
+<p class="margin"> Updates a dns server location record if <em>type</em> is <em>naptr</em>.</p><br>
+<b>Input Variables: </b> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$client_id</span>, <span class="var">$primary_id</span>, <span class="var">$params</span></p>
+<b>Parameters (in <span style= "color:#A17FFF">$params</span>): </b>
+<p class="margin"> server_id&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> zone&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> name&nbsp;&nbsp;(<span class="paratype">varchar(64)</span>)</p>
+<p class="margin"> type&nbsp;&nbsp;(<span class="paratype">enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt')</span>)</p>
+<p class="margin"> data&nbsp;&nbsp;(<span class="paratype">varchar(255)</span>)</p>
+<p class="margin"> aux&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> ttl&nbsp;&nbsp;(<span class="paratype">int(11)</span>)</p>
+<p class="margin"> active&nbsp;&nbsp;(<span class="paratype">enum('n','y')</span>)</p>
+<p class="margin"> stamp&nbsp;&nbsp;(<span class="paratype">timestamp</span>)</p>
+<p class="margin"> serial&nbsp;&nbsp;(<span class="paratype">int(10)</span>)</p>
+<b>Output: </b> 
+<p class="margin"> Returns the number of affected rows.</p>
+<!--<b>Output:</b> 
+<p style="margin-left:100px">Gives a record of </p> -->
+</div>
+
+</body></html>
diff --git a/remoting_client/API-docs/navigation.html b/remoting_client/API-docs/navigation.html
index 02b5876b3d2f33335f1f2f0eca6a4822930846aa..89ef7bc8e4fbe9a7617a77a56fb812440b442997 100644
--- a/remoting_client/API-docs/navigation.html
+++ b/remoting_client/API-docs/navigation.html
@@ -75,6 +75,10 @@
 <p><a href="dns_mx_delete.html" target="content">dns_mx_delete</a></p>
 <p><a href="dns_mx_get.html" target="content">dns_mx_get</a></p>
 <p><a href="dns_mx_update.html" target="content">dns_mx_update</a></p>
+<p><a href="dns_naptr_add.html" target="content">dns_naptr_add</a></p>
+<p><a href="dns_naptr_delete.html" target="content">dns_naptr_delete</a></p>
+<p><a href="dns_naptr_get.html" target="content">dns_naptr_get</a></p>
+<p><a href="dns_naptr_update.html" target="content">dns_naptr_update</a></p>
 <p><a href="dns_ns_add.html" target="content">dns_ns_add</a></p>
 <p><a href="dns_ns_delete.html" target="content">dns_ns_delete</a></p>
 <p><a href="dns_ns_get.html" target="content">dns_ns_get</a></p>
diff --git a/remoting_client/examples/dns_naptr_add.php b/remoting_client/examples/dns_naptr_add.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6665a5c4bea4e51fe4590491c0ac97fbf78d43c
--- /dev/null
+++ b/remoting_client/examples/dns_naptr_add.php
@@ -0,0 +1,58 @@
+<?php
+
+require 'soap_config.php';
+
+$context = stream_context_create( array(
+	'ssl' => array(
+		// set some SSL/TLS specific options
+		'verify_peer' => false,
+		'verify_peer_name' => false,
+		'allow_self_signed' => true
+	),
+));
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	$timestamp = date("Y-m-d H:i:s");
+
+	//* Set the function parameters.
+	$client_id = 1;
+	$params = array(
+		'server_id' => 1,
+		'zone' => 10,
+		'name' => 'server',
+		'type' => 'naptr',
+		'data' => '100 "s" "thttp+L2R" "" thttp.example.com.',
+		'aux' => '100',
+		'ttl' => '3600',
+		'active' => 'y',
+		'stamp' => $timestamp,
+		'serial' => '1',
+	);
+
+	$id = $client->dns_naptr_add($session_id, $client_id, $params);
+
+	echo "ID: ".$id."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_naptr_delete.php b/remoting_client/examples/dns_naptr_delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..1d794ccea745e2ac419b16c96538e18a0eeee84e
--- /dev/null
+++ b/remoting_client/examples/dns_naptr_delete.php
@@ -0,0 +1,45 @@
+<?php
+
+require 'soap_config.php';
+
+$context = stream_context_create( array(
+	'ssl' => array(
+		// set some SSL/TLS specific options
+		'verify_peer' => false,
+		'verify_peer_name' => false,
+		'allow_self_signed' => true
+	),
+));
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Parameters
+	$id = 11;
+
+
+	$affected_rows = $client->dns_naptr_delete($session_id, $id);
+
+	echo "Number of records that have been deleted: ".$affected_rows."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_naptr_get.php b/remoting_client/examples/dns_naptr_get.php
new file mode 100644
index 0000000000000000000000000000000000000000..b9beec45f47964bfdbd1fe4d2c8cfe3e92448b90
--- /dev/null
+++ b/remoting_client/examples/dns_naptr_get.php
@@ -0,0 +1,45 @@
+<?php
+
+require 'soap_config.php';
+
+
+$context = stream_context_create( array(
+	'ssl' => array(
+		// set some SSL/TLS specific options
+		'verify_peer' => false,
+		'verify_peer_name' => false,
+		'allow_self_signed' => true
+	),
+));
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Set the function parameters.
+	$id = 11;
+
+	$dns_record = $client->dns_naptr_get($session_id, $id);
+
+	print_r($dns_record);
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/remoting_client/examples/dns_naptr_update.php b/remoting_client/examples/dns_naptr_update.php
new file mode 100644
index 0000000000000000000000000000000000000000..1f9746468797735d949b2164ed2b38b18c10a9a4
--- /dev/null
+++ b/remoting_client/examples/dns_naptr_update.php
@@ -0,0 +1,53 @@
+<?php
+
+require 'soap_config.php';
+
+
+$context = stream_context_create( array(
+	'ssl' => array(
+		// set some SSL/TLS specific options
+		'verify_peer' => false,
+		'verify_peer_name' => false,
+		'allow_self_signed' => true
+	),
+));
+
+
+$client = new SoapClient(null, array('location' => $soap_location,
+		'uri'      => $soap_uri,
+		'trace' => 1,
+		'exceptions' => 1,
+		'stream_context' => $context));
+
+
+try {
+	if($session_id = $client->login($username, $password)) {
+		echo 'Logged successfull. Session ID:'.$session_id.'<br />';
+	}
+
+	//* Parameters
+	$id = 11;
+	$client_id = 1;
+
+
+	//* Get the dns record
+	$dns_record = $client->dns_naptr_get($session_id, $id);
+
+	//* Change active to inactive
+	$dns_record['active'] = 'n';
+
+	$affected_rows = $client->dns_naptr_update($session_id, $client_id, $id, $dns_record);
+
+	echo "Number of records that have been changed in the database: ".$affected_rows."<br>";
+
+	if($client->logout($session_id)) {
+		echo 'Logged out.<br />';
+	}
+
+
+} catch (SoapFault $e) {
+	echo $client->__getLastResponse();
+	die('SOAP Error: '.$e->getMessage());
+}
+
+?>
diff --git a/server/conf/bind_pri.domain.master b/server/conf/bind_pri.domain.master
index fb867901dc2848506db0790c5ce076e92d2326ab..379d80c8df00ad012ec88a02a3fc84cc03bffac0 100644
--- a/server/conf/bind_pri.domain.master
+++ b/server/conf/bind_pri.domain.master
@@ -9,46 +9,46 @@ $TTL        {tmpl_var name='ttl'}
 
 <tmpl_loop name='zones'>
 <tmpl_if name="type" op='==' value='NS'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      NS        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      NS         {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='A'>
-{tmpl_var name='name'} {tmpl_var name='ttl'} A        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      A          {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='AAAA'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      AAAA        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      AAAA       {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='ALIAS'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME      {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='CAA'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      CAA       {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      CAA        {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='CNAME'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      CNAME      {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='DS'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      DS        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      DS         {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='HINFO'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      HINFO        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      HINFO      {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='LOC'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      LOC        {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='MX'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      MX    {tmpl_var name='aux'}   {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      MX     {tmpl_var name='aux'}  {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='NAPTR'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      NAPTR        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      NAPTR  {tmpl_var name='aux'} {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='PTR'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      PTR        {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='RP'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      RP        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      RP         {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='SRV'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      SRV        {tmpl_var name='aux'} {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      SRV    {tmpl_var name='aux'} {tmpl_var name='data'}
 </tmpl_if>
 <tmpl_if name="type" op='==' value='TLSA'>
 {tmpl_var name='name'} {tmpl_var name='ttl'}      TLSA       {tmpl_var name='data'}
@@ -57,7 +57,7 @@ $TTL        {tmpl_var name='ttl'}
 {tmpl_var name='name'} {tmpl_var name='ttl'}      TXT        "{tmpl_var name='data'}"
 </tmpl_if>
 <tmpl_if name="type" op='==' value='TYPE257'>
-{tmpl_var name='name'} {tmpl_var name='ttl'}      TYPE257        {tmpl_var name='data'}
+{tmpl_var name='name'} {tmpl_var name='ttl'}      TYPE257    {tmpl_var name='data'}
 </tmpl_if>
 </tmpl_loop>