diff --git a/interface/lib/classes/validate_client.inc.php b/interface/lib/classes/validate_client.inc.php
index 0f90a5b3d1c5b706ffdc4f12ad35175df645b249..198701bc4cde14f3dcca5a089e2e395f5e610e41 100644
--- a/interface/lib/classes/validate_client.inc.php
+++ b/interface/lib/classes/validate_client.inc.php
@@ -136,7 +136,85 @@ class validate_client {
 		}
 	}
 
+	function check_vat_id ($field_name, $field_value, $validator){
+		global $app, $page;
+		
+		$vatid = trim($field_value);
+		if(isset($app->remoting_lib->primary_id)) {
+			$country = $app->remoting_lib->dataRecord['country'];
+		} else {
+			$country = $page->dataRecord['country'];
+		}
+		
+		// check if country is member of EU
+		$country_details = $app->db->queryOneRecord("SELECT * FROM country WHERE iso = '".$country."'");
+		if($country_details['eu'] == 'y' && $vatid != ''){
+		
+			$vatid = preg_replace('/\s+/', '', $vatid);
+			$vatid = str_replace(array('.', '-', ','), '', $vatid);
+			$cc = substr($vatid, 0, 2);
+			$vn = substr($vatid, 2);
+
+			// Test if the country of the VAT-ID matches the country of the customer
+			if($country != ''){
+				if(strtoupper($cc) != $country){
+					$errmsg = $validator['errmsg'];
+					if(isset($app->tform->wordbook[$errmsg])) {
+						return $app->tform->wordbook[$errmsg]."<br>\r\n";
+					} else {
+						return $errmsg."<br>\r\n";
+					}
+				}
+			}
 
+			$client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");
+
+			if($client){
+				$params = array('countryCode' => $cc, 'vatNumber' => $vn);
+				try{
+					$r = $client->checkVat($params);
+					if($r->valid == true){
+					} else {
+						$errmsg = $validator['errmsg'];
+							if(isset($app->tform->wordbook[$errmsg])) {
+								return $app->tform->wordbook[$errmsg]."<br>\r\n";
+							} else {
+								return $errmsg."<br>\r\n";
+							}
+					}
+
+					// This foreach shows every single line of the returned information
+					/*
+					foreach($r as $k=>$prop){
+						echo $k . ': ' . $prop;
+					}
+					*/
+
+				} catch(SoapFault $e) {
+					//echo 'Error, see message: '.$e->faultstring;
+					switch ($e->faultstring) {
+						case 'INVALID_INPUT':
+							$errmsg = $validator['errmsg'];
+							if(isset($app->tform->wordbook[$errmsg])) {
+								return $app->tform->wordbook[$errmsg]."<br>\r\n";
+							} else {
+								return $errmsg."<br>\r\n";
+							}
+							break;
+						// the following cases shouldn't be the user's fault, so we return no error
+						case 'SERVICE_UNAVAILABLE':
+						case 'MS_UNAVAILABLE':
+						case 'TIMEOUT':
+						case 'SERVER_BUSY':
+							break;
+					}
+				}
+			} else {
+				// Connection to host not possible, europe.eu down?
+				// this shouldn't be the user's fault, so we return no error
+			}
+		}
+	}
 
 
 }
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 362545256f54860e541716c93f0bc7a91c733a60..8d2ce89855339e565e0d24ad50feba3020041c9d 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -367,7 +367,12 @@ $form["tabs"]['address'] = array (
 			'width'  => '30',
 			'maxlength' => '255',
 			'rows'  => '',
-			'cols'  => ''
+			'cols'  => '',
+			'validators' => array (  0 => array ( 'type' => 'CUSTOM',
+					'class' => 'validate_client',
+					'function' => 'check_vat_id',
+					'errmsg'=> 'invalid_vat_id'),
+				),
 		),
 		'company_id' => array (
 			'datatype' => 'VARCHAR',
diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php
index 8efedf710d30fd7aaa84934c62ded69e21abac93..b70c765386759e6affd609f51fa9bd15c0dde346 100644
--- a/interface/web/client/form/reseller.tform.php
+++ b/interface/web/client/form/reseller.tform.php
@@ -364,7 +364,12 @@ $form["tabs"]['address'] = array (
 			'width'  => '30',
 			'maxlength' => '255',
 			'rows'  => '',
-			'cols'  => ''
+			'cols'  => '',
+			'validators' => array (  0 => array ( 'type' => 'CUSTOM',
+					'class' => 'validate_client',
+					'function' => 'check_vat_id',
+					'errmsg'=> 'invalid_vat_id'),
+				),
 		),
 		'company_id' => array (
 			'datatype' => 'VARCHAR',
diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng
index e5ba066ee89c31c095f86cab93dfa43082f89552..7ee7226d8cc780c7e6f22c35ac8effe9aa034c90 100644
--- a/interface/web/client/lib/lang/de_client.lng
+++ b/interface/web/client/lib/lang/de_client.lng
@@ -110,7 +110,7 @@ $wb['limit_webdav_user_error_notint'] = 'Das WebDAV Benutzer Limit muss eine Zah
 $wb['limit_backup_txt'] = 'Backupfunktion verfügbar';
 $wb['limit_dns_slave_zone_error_notint'] = 'Das Secondary DNS Zonen Limit muss eine Zahl sein.';
 $wb['customer_no_txt'] = 'Kundennummer';
-$wb['vat_id_txt'] = 'USt-ID';
+$wb['vat_id_txt'] = 'USt.-ID';
 $wb['required_fields_txt'] = '* Benötigte Felder';
 $wb['limit_mailmailinglist_txt'] = 'Max. Anzahl an Mailinglisten';
 $wb['limit_mailmailinglist_error_notint'] = 'Das Mailinglisten Limit muss eine Zahl sein.';
@@ -176,4 +176,5 @@ $wb['limit_database_quota_error_notint'] = 'Das Datenbank-quota muß eine Nummer
 $wb['reseller_txt'] = 'Reseller';
 $wb['btn_save_txt'] = 'Speichern';
 $wb['btn_cancel_txt'] = 'Abbrechen';
+$wb['invalid_vat_id'] = 'Die USt.-ID ist ungültig.';
 ?>
diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng
index 1595e567b951dc4da9da07e1182984faf8aa4731..541b5d2dd18879d2c87f371d7565e610d18cbeb3 100644
--- a/interface/web/client/lib/lang/de_reseller.lng
+++ b/interface/web/client/lib/lang/de_reseller.lng
@@ -106,7 +106,7 @@ $wb['limit_dns_slave_zone_txt'] = 'Max. Anzahl an Secondary DNS Zonen';
 $wb['limit_dns_slave_zone_error_notint'] = 'Das Secondary DNS Zonen Limit muss eine Zahl sein.';
 $wb['limit_dns_record_error_notint'] = 'Das DNS Eintrag Limit muss eine Zahl sein.';
 $wb['customer_no_txt'] = 'Kundennummer';
-$wb['vat_id_txt'] = 'USt-ID';
+$wb['vat_id_txt'] = 'USt.-ID';
 $wb['required_fields_txt'] = '* Benötigte Felder';
 $wb['limit_webdav_user_txt'] = 'Max. Anzahl an WebDAV Benutzern';
 $wb['limit_webdav_user_error_notint'] = 'Das WebDAV Benutzer Limit muss eine Zahl sein.';
@@ -160,4 +160,5 @@ $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
 $wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
+$wb['invalid_vat_id'] = 'Die USt.-ID ist ungültig.';
 ?>
diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng
index 225b304d6339505a685660f4f10ee3ea54a4d4e8..e7e634bf08d749ce7658c371dbdd6d23dd3124ff 100644
--- a/interface/web/client/lib/lang/en_client.lng
+++ b/interface/web/client/lib/lang/en_client.lng
@@ -179,4 +179,5 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n
 $wb['reseller_txt'] = 'Reseller';
 $wb['btn_save_txt'] = "Save";
 $wb['btn_cancel_txt'] = "Cancel";
+$wb['invalid_vat_id'] = 'The VAT ID is invalid.';
 ?>
diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng
index b94c30e86098d290f29066624c0adbae5fbd04bb..e23657c0556ee875e02afa1fe6db8c35a69c4fc6 100644
--- a/interface/web/client/lib/lang/en_reseller.lng
+++ b/interface/web/client/lib/lang/en_reseller.lng
@@ -178,4 +178,5 @@ $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
 $wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than "custom" is selected.';
+$wb['invalid_vat_id'] = 'The VAT ID is invalid.';
 ?>