diff --git a/ife.module b/ife.module
index 5e738b6..a1d0f98 100644
--- a/ife.module
+++ b/ife.module
@@ -258,43 +258,76 @@ function ife_errors($op = 'get', $id = NULL, $message = NULL) {
   }
 }
 
-function ife_element_errors_set($element, $display) {
+function ife_element_errors_set($form, $display) {
+
   if (!isset($_SESSION['messages'])) {
     return;
   }
 
-  // Recurse through all children.
-  foreach (element_children($element) as $key) {
-    if (isset($element[$key]) && $element[$key]) {
-      ife_element_errors_set($element[$key], $display);
-    }
-  }
-
-  // Check for errors and settings
+  // Receive form errors
   $errors = form_get_errors();
-  $element_id = implode('][', $element['#parents']);
-  if (!empty($errors[$element_id])) {
-    $error_message = $errors[$element_id];
 
-    // Get error id
-    $error_id = array_search($error_message, $_SESSION['messages']['error']);
+  // Check for complexer fields, used later for proper rendering
+  $field_types_complex = array('radios' => FALSE,);
+  drupal_alter('ife_complex_types' , $field_types_complex);
 
-    if ($error_id !== FALSE) {
-      if (isset($display) && $display != 0) {
-        unset($_SESSION['messages']['error'][$error_id]);
-        $_SESSION['messages']['error'] = array_values($_SESSION['messages']['error']);
-      }
 
-      if (count($_SESSION['messages']['error']) <= 0) {
-        unset($_SESSION['messages']['error']);
-      }
+  // Go through all children of form
+  foreach (element_children($form) as $field_name) {
+
+    // Go through all the errors
+    foreach ($errors as $error_anchor => $error_message) {
+
+      // Compare if error for given field has been set.
+      if (strstr($error_anchor, $field_name . ']', true) === '') {
+
+        // Get error id
+        $error_id = array_search($error_message, $_SESSION['messages']['error']);
 
-      // Set error message in session, so it can be used in our theming.
-      ife_errors('set', $element['#id'], $error_message);
+        if ($error_id !== FALSE) {
+          if (isset($display) && $display != 0) {
+            unset($_SESSION['messages']['error'][$error_id]);
+            $_SESSION['messages']['error'] = array_values($_SESSION['messages']['error']);
+          }
+
+          if (count($_SESSION['messages']['error']) <= 0) {
+            unset($_SESSION['messages']['error']);
+          }
+
+          // Extract the latest element of field.
+          $element = $form[$field_name];
+          unset($element_id);
+          while ($element_child = element_children($element)) {
+            $element_child = array_pop($element_child);
+            $element = $element[$element_child];
+
+            // Check if a complexer type of field is used here
+            if (isset($element['#type']) &&
+              array_key_exists($element['#type'], $field_types_complex)) {
+
+              // Execute function to gain the right #id css selector
+              if (function_exists($field_types_complex[$element['#type']])) {
+                $element_id = call_user_func($field_types_complex[$element['#type']], $element);
+              }
+
+              break;
+            }
+          }
+
+          // Fill element_id with standard
+          if (!isset($element_id)) {
+            $element_id = $element['#id'];
+          }
+
+          // Set error message in session, so it can be used in our theming.
+          ife_errors('set', $element_id , $error_message);
+        }
+      }
     }
   }
 }
 
+
 /**
  * Implements hook_commerce_checkout_pane_info_alter().
  */
