diff --git a/components/address.inc b/components/address.inc
index 5d8728b..8dc7163 100644
--- a/components/address.inc
+++ b/components/address.inc
@@ -438,7 +438,7 @@ function _address_ajax_callback($form, $form_state) {
 
   $errors = array();
   $postal_code = $values['postal_code'];
-  _address_validate_postal_code($postal_code, FALSE, $errors);
+  _address_validate_postal_code($postal_code, $errors);
   if ($form_state['triggering_element']['#webform_component']['extra']['internal_postal_codes'] == TRUE) {
     $internal_postal_codes = explode(',', $form_state['triggering_element']['#webform_component']['extra']['internal_postal_codes_list']);
     _address_validate_internal_postal_codes($postal_code, $internal_postal_codes, $errors);
@@ -447,7 +447,7 @@ function _address_ajax_callback($form, $form_state) {
     $house_number = $values['house_number'];
     $house_letter = $values['house_letter'];
     $house_number_addition = $values['house_number_addition'];
-    _address_validate_house_number($house_number, FALSE, $errors);
+    _address_validate_house_number($house_number, $errors);
     _address_validate_house_letter($house_letter, $errors);
     _address_validate_house_number_addition($house_number_addition, $errors);
   }
@@ -807,67 +807,59 @@ function dvg_webform_components_address_validate_addresscheck($element, &$form_s
 
   $errors = array();
   $postal_code = $element['postal_code']['#value'];
-  _address_validate_postal_code($postal_code, $element['postal_code']['#webform_component']['required'], $errors);
+  _address_validate_postal_code($postal_code, $errors);
 
   if ($element['#webform_component']['extra']['internal_postal_codes'] == TRUE) {
     $internal_postal_codes = explode(',', $element['#webform_component']['extra']['internal_postal_codes_list']);
     _address_validate_internal_postal_codes($postal_code, $internal_postal_codes, $errors);
   }
 
-  if (!empty($component['#webform_component']['extra']['po_box'])) {
+  if (!empty($element['#webform_component']['extra']['po_box'])) {
     $po_box = $element['po_box']['#value'];
+    _address_validate_po_box($element, $po_box);
   }
   else {
     $house_number = $element['house_number']['#value'];
     $house_letter = $element['house_letter']['#value'];
     $house_number_addition = $element['house_number_addition']['#value'];
-    _address_validate_house_number($house_number, $element['house_number']['#webform_component']['required'], $errors);
+    _address_validate_house_number($house_number, $errors);
     _address_validate_house_letter($house_letter, $errors);
     _address_validate_house_number_addition($house_number_addition, $errors);
-  }
 
-  if (isset($po_box)) {
-    _address_validate_po_box($element, $po_box, $element['#webform_component']['required']);
-  }
-  if ($element['#webform_component']['extra']['addresscheck'] == 'none') {
-    $street_name = $element['street_name']['#value'];
-    $city = $element['city']['#value'];
-    _address_validate_street_name($element, $street_name, $element['#webform_component']['required']);
-    _address_validate_city($element, $city, $element['#webform_component']['required']);
-  }
-  elseif ($element['#webform_component']['extra']['city_options'] != 'select' && !$element['#webform_component']['extra']['po_box']) {
     $service = $element['#webform_component']['extra']['addresscheck'];
-    if (empty($errors) && !empty($postal_code) && !empty($house_number)) {
-      // Perform the lookup once again.
-      $data = _address_autofill($postal_code, $house_number, $house_letter, $house_number_addition, $service);
-      // React on the provided information.
-      if (empty($errors) && (empty($data) || (empty($data['street']) || empty($data['city'])))) {
-        switch ($service) {
-          case 'postcodenl';
-            $errors[] = t('This address is not available in the Netherlands.');
-            break;
-
-          case 'stuf-bg';
-            $errors[] = t('This address is not available in %site.', array('%site' => variable_get('site_name', 'this site')));
-            break;
-
-          case 'stuf-bg-only-zipcode-housenumber';
-            $errors[] = t('This address is not available in %site.', array('%site' => variable_get('site_name', 'this site')));
-            break;
+    if ($service != 'none' && $element['#webform_component']['extra']['city_options'] != 'select') {
+      if (empty($errors) && !empty($postal_code) && !empty($house_number)) {
+        // Perform the lookup once again.
+        $data = _address_autofill($postal_code, $house_number, $house_letter, $house_number_addition, $service);
+        // React on the provided information.
+        if (empty($errors) && (empty($data) || (empty($data['street']) || ($data['city'])))) {
+          switch ($service) {
+            case 'postcodenl';
+              $errors[] = t('This address is not available in the Netherlands.');
+              break;
+
+            case 'stuf-bg';
+              $errors[] = t('This address is not available in %site.', array('%site' => variable_get('site_name', 'this site')));
+              break;
+
+            case 'stuf-bg-only-zipcode-housenumber';
+              $errors[] = t('This address is not available in %site.', array('%site' => variable_get('site_name', 'this site')));
+              break;
+          }
+        }
+        else {
+          // Fill the street_name and city if incorrect.
+          $field_parents = $element['#parents'];
+          $field_parents[] = 'street_name';
+          drupal_array_set_nested_value($form_state['input'], $field_parents, $data['street'], TRUE);
+          drupal_array_set_nested_value($form_state['values'], $field_parents, $data['street'], TRUE);
+          $element['street_name']['#value'] = $data['street'];
+          $field_parents = $element['#parents'];
+          $field_parents[] = 'city';
+          drupal_array_set_nested_value($form_state['input'], $field_parents, $data['city'], TRUE);
+          drupal_array_set_nested_value($form_state['values'], $field_parents, $data['city'], TRUE);
+          $element['city']['#value'] = $data['city'];
         }
-      }
-      else {
-        // Fill the street_name and city if incorrect.
-        $field_parents = $element['#parents'];
-        $field_parents[] = 'street_name';
-        drupal_array_set_nested_value($form_state['input'], $field_parents, $data['street'], TRUE);
-        drupal_array_set_nested_value($form_state['values'], $field_parents, $data['street'], TRUE);
-        $element['street_name']['#value'] = $data['street'];
-        $field_parents = $element['#parents'];
-        $field_parents[] = 'city';
-        drupal_array_set_nested_value($form_state['input'], $field_parents, $data['city'], TRUE);
-        drupal_array_set_nested_value($form_state['values'], $field_parents, $data['city'], TRUE);
-        $element['city']['#value'] = $data['city'];
       }
     }
   }
@@ -895,7 +887,7 @@ function dvg_webform_components_address_validate_addresscheck($element, &$form_s
 /**
  * Postal code validation and space removal.
  */
-function _address_validate_postal_code(&$postal_code, $required, &$errors) {
+function _address_validate_postal_code(&$postal_code, &$errors) {
   $postal_code = trim(str_replace(' ', '', $postal_code));
   if (!empty($postal_code)) {
     preg_match('/^([1-9][0-9]{3}) ?([A-Za-z]{2})$/', $postal_code, $matches);
@@ -907,9 +899,6 @@ function _address_validate_postal_code(&$postal_code, $required, &$errors) {
       $errors[] = t('Invalid postal code. Postal codes in the Netherlands are like "9999 AA". They never start with zero and the letters are never "SS", "SD", or "SA".');
     }
   }
-  elseif ($required) {
-    $errors[] = t('Please enter a postal code.');
-  }
 }
 
 /**
@@ -936,14 +925,11 @@ function _address_validate_list_internal_postal_codes($element, &$form_state) {
 /**
  * Validation handler for house number.
  */
-function _address_validate_house_number($house_number, $required, &$errors) {
+function _address_validate_house_number($house_number, &$errors) {
   $value = trim($house_number);
   if (!empty($value) && !preg_match('/^[1-9]{1}[0-9]{0,4}$/i', $value)) {
     $errors[] = t('The house number has to be an integer in the range 1 till 99999');
   }
-  elseif (empty($value) && $required) {
-    $errors[] = t('Please enter a house number.');
-  }
 }
 
 /**
@@ -969,7 +955,7 @@ function _address_validate_house_number_addition($house_number_addition, &$error
 /**
  * Validation handler for po box number.
  */
-function _address_validate_po_box($element, $po_box, $required) {
+function _address_validate_po_box($element, $po_box) {
   $value = trim($po_box);
   if (!empty($value) && !preg_match('/^[1-9]{1}[0-9]{0,4}$/i', $value)) {
     $errors = t('The PO box has to be an integer in the range 1 till 99999');
@@ -977,38 +963,6 @@ function _address_validate_po_box($element, $po_box, $required) {
     array_shift($form_keys);
     form_set_error('submitted][' . implode('][', $form_keys), $errors);
   }
-  elseif (empty($value) && $required) {
-    $errors = t('Please enter a PO box number.');
-    $form_keys = $element['street_block']['#parents'];
-    array_shift($form_keys);
-    form_set_error('submitted][' . implode('][', $form_keys), $errors);
-  }
-}
-
-/**
- * Validation handler for street name.
- */
-function _address_validate_street_name($element, $street_name, $required) {
-  $value = trim($street_name);
-  if (empty($value) && $required) {
-    $errors = t('!name field is required.', array('!name' => t('Street name')));
-    $form_keys = $element['street_block']['#parents'];
-    array_shift($form_keys);
-    form_set_error('submitted][' . implode('][', $form_keys), $errors);
-  }
-}
-
-/**
- * Validation handler for city.
- */
-function _address_validate_city($element, $city, $required) {
-  $value = trim($city);
-  if (empty($value) && $required) {
-    $errors = t('!name field is required.', array('!name' => t('City')));
-    $form_keys = $element['city_block']['#parents'];
-    array_shift($form_keys);
-    form_set_error('submitted][' . implode('][', $form_keys), $errors);
-  }
 }
 
 /**
diff --git a/dvg_webform_components.module b/dvg_webform_components.module
index 59c1935..464ac35 100644
--- a/dvg_webform_components.module
+++ b/dvg_webform_components.module
@@ -165,6 +165,8 @@ function _dvg_webform_components_webform_validator($form, &$form_state) {
   $old_messages = array();
   if (!empty($_SESSION['messages']['error'])) {
     $old_messages = $_SESSION['messages']['error'];
+    // Clear messages as they will be reset if necessary at the end.
+    unset($_SESSION['messages']['error']);
   }
 
   $form_errors = form_get_errors();
@@ -176,7 +178,7 @@ function _dvg_webform_components_webform_validator($form, &$form_state) {
     foreach ($form_errors as $key => $message) {
       $parts = explode('][', $key);
       $last_part = array_pop($parts);
-      // Set all adres errors on their matching parent.
+      // Set all address errors on their matching parent.
       if (in_array($last_part, _dvg_webform_components_custom_validator_components())) {
         if ($last_part != 'block') {
           // Set empty message on the element for highlighting the element.
