diff --git a/elements.module b/elements.module
index 557c67e..e60ce1c 100644
--- a/elements.module
+++ b/elements.module
@@ -64,6 +64,12 @@ function elements_elements() {
   $types['password'] = array(
     '#process' => array('form_process_placeholder'),
   );
+  $types['horizontal_tabs'] = array(
+    '#theme_wrappers' => array('horizontal_tabs'),
+    '#default_tab' => '',
+    '#tabs' => array(),
+    '#process' => array('form_process_placeholder'),
+  );
   return $types;
 }
 
@@ -100,6 +106,10 @@ function elements_theme() {
       'arguments' => array('element' => NULL),
       'file' => 'elements.theme.inc',
     ),
+    'horizontal_tabs' => array(
+      'arguments' => array('element' => NULL),
+      'file' => 'elements.theme.inc',
+    ),
   );
 }
 
diff --git a/elements.theme.inc b/elements.theme.inc
index 26c55dd..2dc67d5 100644
--- a/elements.theme.inc
+++ b/elements.theme.inc
@@ -239,3 +239,68 @@ function theme_rangefield($element) {
   $output = _elements_theme_form_element_wrapper($element, $output);
   return $output;
 }
+
+/**
+ * Returns HTML for horizontal tabs element within it's panes.
+ *
+ * @param $element
+ *   An associative array containing the properties of the element.
+ *   Properties used: #title, #value, #description, #size, #maxlength,
+ *   #placeholder, #min, #max, #step, #required, #attributes.
+ *
+ * @ingroup themeable
+ */
+function theme_horizontal_tabs($element) {
+  drupal_add_css(drupal_get_path('module', 'elements') . '/css/horizontal-tabs.css');
+
+  $output = '<h3 class="element-invisible">';
+  $output .= isset($element['#title']) ? t($element['#title']) : t('Horizontal Tabs');
+  $output .= '</h3>';
+  $output .= '<div class="form-horizontal-tabs">';
+  $tabs_panes = '<div class="tabs-panes">';
+  $tabs = '<div class="tabs clear-block"><ul class="tabs primary">';
+
+  // Prefix needs in case for has few tabs elements.
+  $form_element_prefix = reset($element['#parents']);
+
+  $default_tab = $form_element_prefix . '_' . $element['#default_tab'];
+  // If javaScript is turned off tie logic to pure links, not to anchor links.
+  // If javaScript is turned off tie logic to pure links, not to anchor links.
+  if (isset($_COOKIE['has_js'])) {
+    // We don't need to add our JS if it doesn't work.
+    drupal_add_js(drupal_get_path('module', 'elements') . '/js/horizontal-tabs.js');
+    $link_prefix = "#";
+  }
+  else {
+    $link_prefix = "?tab=";
+    if (isset($_GET['tab']) && isset($element['#tabs'][$_GET['tab']])) {
+      $default_tab = $form_element_prefix . '_' . $_GET['tab'];
+    }
+  }
+
+  foreach ($element['#tabs'] as $tab_id => $tab_name) {
+    $pane_class = '';
+    $link_class = '';
+    if ($default_tab != $form_element_prefix . '_' . $tab_id) {
+      $pane_class = 'hidden ';
+    }
+    else {
+      $link_class = 'active';
+    }
+    $tabs .= '<li>' . l($tab_name, $link_prefix . $form_element_prefix . '_' . $tab_id, array(
+        'attributes' => array('class' => $link_class),
+        'external' => TRUE,
+      )
+    ) . '</li>';
+    $tabs_panes .= '<div id="' . $form_element_prefix . '_' . $tab_id . '" class="' . $pane_class . 'tabs-pane">' . $element[$tab_id]['#children'] . '</div>';
+  }
+  $tabs_panes .= '</div>';
+  $tabs .= '</ul></div>';
+
+  $output .= $tabs;
+  $output .= $tabs_panes;
+  $output .= '</div>';
+
+  return $output;
+}
+
