diff --git a/tabs.admin.inc b/tabs.admin.inc
index b04aad5..866b3ea 100644
--- a/tabs.admin.inc
+++ b/tabs.admin.inc
@@ -64,6 +64,13 @@ function tabs_admin_settings() {
     '#default_value' => variable_get('tabs_descriptive_urls', 0),
     '#options' => array(t('disabled'), t('enabled')),
   );
+
+  $form['tabs_validation'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Enable Form Validation before next/previous action'),
+    '#description' => t('Activating this option the form will validate if all requiered fields are filled up in current tab panel, if one of them is blank, the feild is hightlighted as error and the action next or previous is canceled.'),
+    '#default_value' => variable_get('tabs_validation', 0),
+  );
   $form = system_settings_form($form);
   return $form;
 }
diff --git a/tabs.js b/tabs.js
index 6f29004..6ced38b 100644
--- a/tabs.js
+++ b/tabs.js
@@ -23,7 +23,7 @@ Drupal.behaviors.tabs = function (context) {
     .tabs({
       spinner: Drupal.t('Loading...'),
       // Add the 'active' class when showing tabs and remove it from siblings.
-      show: function(event, ui) {
+      show: function(event, ui) {        
         $(ui.tab).parent('li').addClass('active').siblings('li').removeClass('active');
       },
       fx: fx
@@ -69,9 +69,19 @@ Drupal.tabs.tabsNavigation = function(elt) {
         .attr('id', 'tabs-' + tabsetName + '-previous-link-' + i)
         .addClass('tabs-nav-previous')
         .click(function() {
+          //Add validation
+          if(Drupal.settings.tabs.validation) {
+              var validate = Drupal.tabs.validate(elt);
+
+              if(!validate) {
+                  Drupal.tabs.scrollTo(elt);
+                  return false;
+              }
+          }
+         
           var tabIndex = parseInt($(this).attr('id').substring($(this).attr('id').lastIndexOf('-') + 1)) -1;
           $tabs.tabs('select', tabIndex - 1);
-          Drupal.tabs.scrollTo(elt);
+
           return false;
         });
       $(this).append(link);
@@ -83,6 +93,16 @@ Drupal.tabs.tabsNavigation = function(elt) {
         .attr('id', 'tabs-' + tabsetName + '-next-button-' + i)
         .addClass('tabs-nav-next')
         .click(function() {
+          //Add validation
+          if(Drupal.settings.tabs.validation) {
+              var validate = Drupal.tabs.validate(elt);
+
+              if(!validate) {
+                  Drupal.tabs.scrollTo(elt);
+                  return false;
+              }
+          }
+          
           var tabIndex = parseInt($(this).attr('id').substring($(this).attr('id').lastIndexOf('-') + 1)) -1;
           $tabs.tabs('select', tabIndex + 1);
           Drupal.tabs.scrollTo(elt);
@@ -104,3 +124,31 @@ Drupal.tabs.scrollTo = function(elt) {
   }
 };
 
+Drupal.tabs.validate = function(elt) {
+
+    var panel = $('div.ui-tabs-panel:not(".ui-tabs-hide")',elt);
+    var items = $('.form-required',panel).parent('label').parent('.form-item');
+
+    var validate = true;
+    $('input',items).each(function(){
+
+        if($(this).val() == ''){
+            $(this).addClass('error');
+            validate = false;
+        } else {
+            $(this).removeClass('error');
+        }
+    });
+
+    $('select',items).each(function(){
+
+        if($(this).val() == '' || $(this).val() == 'label_0'){
+            $(this).addClass('error');
+            validate = false;
+        } else {
+            $(this).removeClass('error');
+        }
+    });
+
+    return validate;
+}
diff --git a/tabs.module b/tabs.module
index d6b54c4..378f8ab 100644
--- a/tabs.module
+++ b/tabs.module
@@ -152,6 +152,7 @@ function tabs_load() {
         'next_text' => variable_get('tabs_nav_next', t('next')),
         'previous_text' => variable_get('tabs_nav_prev', t('previous')),
         'navigation_titles' => (bool) variable_get('tabs_navigation_titles', 0),
+        'validation' => (bool) variable_get('tabs_validation', 0),
       )),
     'setting');
     drupal_add_css($path . '/drupal-tabs.css');

