diff --git a/bootstrap.info b/bootstrap.info
index 8632244..a574210 100644
--- a/bootstrap.info
+++ b/bootstrap.info
@@ -81,8 +81,35 @@ settings[bootstrap_region_well-footer] = ''
 
 ; Anchors
 ; --------------
-settings[bootstrap_anchors_fix] = 1
-settings[bootstrap_anchors_smooth_scrolling] = 1
+settings[bootstrap_anchor] = 1
+settings[bootstrap_anchor_container] = 1
+settings[bootstrap_anchor_duration] = 300
+settings[bootstrap_anchor_exclude] = '.element-invisible, [data-anchor-ignore], [data-dismiss], [data-slide], [data-toggle]:not([data-toggle="anchor"])'
+settings[bootstrap_anchor_find_named] = 0
+settings[bootstrap_anchor_generate_id] = 1
+settings[bootstrap_anchor_history] = 'append'
+settings[bootstrap_anchor_icon] = '<span class="glyphicon glyphicon-link" aria-hidden="true"></span>'
+settings[bootstrap_anchor_link_selector] = 'a[href*="#"], [data-toggle="anchor"]'
+settings[bootstrap_anchor_links] = 'a[href*="#"], [data-toggle="anchor"]'
+settings[bootstrap_anchor_normalize_id] = 1;
+settings[bootstrap_anchor_normalize_id_separator] = '-'
+settings[bootstrap_anchor_normalize_id_convert_camel] = 1
+settings[bootstrap_anchor_normalize_id_convert_case] = 'lower'
+settings[bootstrap_anchor_normalize_id_convert] = '/[\s_.(){}\[\]]/g'
+settings[bootstrap_anchor_normalize_id_strip] = '/[^\w-]/gi'
+settings[bootstrap_anchor_normalize_id_single_separator] = 1
+settings[bootstrap_anchor_normalize_id_trim] = 1
+settings[bootstrap_anchor_normalize_id_max_length] = 32
+settings[bootstrap_anchor_offset] = 20
+settings[bootstrap_anchor_onhashchange] = 1
+settings[bootstrap_anchor_onload] = 1
+settings[bootstrap_anchor_placement] = 'auto left'
+settings[bootstrap_anchor_selector] = '.region-content h2, .region-content h3, .region-content h4'
+settings[bootstrap_anchor_template] = '<span class="anchor-link" role="tooltip"><a href="#anchor"></a></span>'
+settings[bootstrap_anchor_trigger] = "anchors: 'hover focus', links: 'click'"
+settings[bootstrap_anchor_unique_id] = 1
+settings[bootstrap_anchor_viewport] = "body"
+
 
 ; Forms
 ; --------------
@@ -128,7 +155,7 @@ settings[bootstrap_cdn_custom_css] = '//cdn.jsdelivr.net/bootstrap/3.3.2/css/boo
 settings[bootstrap_cdn_custom_css_min] = '//cdn.jsdelivr.net/bootstrap/3.3.2/css/bootstrap.min.css'
 settings[bootstrap_cdn_custom_js] = '//cdn.jsdelivr.net/bootstrap/3.3.2/js/bootstrap.js'
 settings[bootstrap_cdn_custom_js_min] = '//cdn.jsdelivr.net/bootstrap/3.3.2/js/bootstrap.min.js'
-settings[bootstrap_cdn_jsdelivr_version] = '3.3.2'
+settings[bootstrap_cdn_jsdelivr_version] = '3.3.4'
 settings[bootstrap_cdn_jsdelivr_theme] = 'bootstrap'
 
 ; Global
diff --git a/includes/alter.inc b/includes/alter.inc
index 485b347..dad340e 100644
--- a/includes/alter.inc
+++ b/includes/alter.inc
@@ -328,9 +328,40 @@ function bootstrap_js_alter(&$js) {
   }
 
   // Add Bootstrap settings.
+  if (bootstrap_setting('anchor_normalize_id')) {
+    $normalize_setting = array(
+      'separator' => bootstrap_setting('anchor_normalize_id_separator'),
+      'convertCamel' => bootstrap_setting('anchor_normalize_id_convert_camel'),
+      'convertCase' => bootstrap_setting('anchor_normalize_id_convert_case'),
+      'convert' => bootstrap_setting('anchor_normalize_id_convert'),
+      'strip' => bootstrap_setting('anchor_normalize_id_strip'),
+      'singleSeparator' => bootstrap_setting('anchor_normalize_id_single_separator'),
+      'trim' => bootstrap_setting('anchor_normalize_id_trim'),
+      'maxLength' => bootstrap_setting('anchor_normalize_id_max_length'),
+    );
+  }
+  else {
+    $normalize_setting = 0;
+  }
   $js['settings']['data'][]['bootstrap'] = array(
-    'anchorsFix' => bootstrap_setting('anchors_fix'),
-    'anchorsSmoothScrolling' => bootstrap_setting('anchors_smooth_scrolling'),
+    'anchor' => array(
+      'anchorIgnore' => bootstrap_setting('anchor_exclude'),
+      'anchorContainer' => bootstrap_setting('anchor_container'),
+      'anchorDuration' => (int) bootstrap_setting('anchor_duration'),
+      'anchorFindNamed' => bootstrap_setting('anchor_find_named'),
+      'anchorGenerateId' => bootstrap_setting('anchor_generate_id'),
+      'anchorHistory' => bootstrap_setting('anchor_history'),
+      'anchorIcon' => bootstrap_setting('anchor_icon'),
+      'anchorLinks' => bootstrap_setting('anchor_links'),
+      'anchorNormalizeId' => $normalize_setting,
+      'anchorUniqueId' => bootstrap_setting('anchor_unique_id'),
+      'anchorOffset' => (int) bootstrap_setting('anchor_offset'),
+      'placement' => bootstrap_setting('anchor_placement'),
+      'template' => bootstrap_setting('anchor_template'),
+      'selector' => bootstrap_setting('anchor_selector'),
+      'trigger' => implode(' ', array_filter(array_values((array) bootstrap_setting('anchor_trigger')))),
+      'viewport' => bootstrap_setting('anchor_viewport'),
+    ),
     'formHasError' => (int) bootstrap_setting('forms_has_error_value_toggle'),
     'popoverEnabled' => bootstrap_setting('popover_enabled'),
     'popoverOptions' => array(
@@ -371,6 +402,19 @@ function bootstrap_js_alter(&$js) {
 }
 
 /**
+ * Implements hook_page_alter().
+ */
+function bootstrap_page_alter() {
+  // Load necessary libraries.
+  if (module_exists('libraries')) {
+    // Bootstrap anchor plugin.
+    if (bootstrap_setting('anchor')) {
+      libraries_load('bootstrap-anchor');
+    }
+  }
+}
+
+/**
  * Implements hook_icon_bundle_list_alter().
  */
 function bootstrap_icon_bundle_list_alter(&$build, $bundle) {
@@ -383,6 +427,43 @@ function bootstrap_icon_bundle_list_alter(&$build, $bundle) {
 }
 
 /**
+ * Implements hook_library_alter().
+ */
+function bootstrap_library_alter(&$libraries) {
+  // Add bootstrap-anchor library support.
+  if ($files = _bootstrap_file_scan_directory(DRUPAL_ROOT . '/sites', '`bootstrap-anchor(\.min)?\.(css|js)`')) {
+    $libraries['bootstrap-anchor'] = array(
+      'title' => 'Bootstrap Anchor',
+      'website' => 'http://bootstrap-anchor.com',
+      'version' => NULL,
+      'css' => array(),
+      'js' => array(),
+      'min' => array(
+        'css' => array(),
+        'js' => array(),
+      ),
+    );
+    $library = &$libraries['bootstrap-anchor'];
+    foreach ($files as $file) {
+      $uri = str_replace(DRUPAL_ROOT . '/', '', $file->uri);
+      foreach (array('css', 'js') as $type) {
+        if (preg_match("`\\.min\\.$type$`", $uri)) {
+          $library['min'][$type][$uri] = array('data' => $uri);
+        }
+        else if (preg_match("`\\.$type$`", $uri)) {
+          $library[$type][$uri] = array('data' => $uri);
+        }
+      }
+    }
+    foreach (array('css', 'js') as $type) {
+      if (variable_get("preprocess_$type") && $library['min'][$type]) {
+        $library[$type] = $library['min'][$type];
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_menu_local_tasks_alter().
  */
 function bootstrap_menu_local_tasks_alter(&$data, &$router_item, $root_path) {
diff --git a/includes/common.inc b/includes/common.inc
index daf0634..039adc7 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -31,16 +31,17 @@ function bootstrap_element_smart_description(&$element, &$target = NULL, $input_
     $enabled = bootstrap_setting('tooltip_enabled') && bootstrap_setting('forms_smart_descriptions');
   }
 
-  // Immediately return if "simple" tooltip descriptions are not enabled.
-  if (!$enabled) {
-    return FALSE;
-  }
-
   // Allow a different element to attach the tooltip.
   if (!isset($target)) {
     $target = &$element;
   }
 
+  // Immediately return if "smart form descriptions" are not enabled or the
+  // element or target element has explicitly disabled it.
+  if (!$enabled || ((isset($element['#smart_description']) || isset($target['#smart_description'])) && (empty($element['#smart_description']) || empty($target['#smart_description'])))) {
+    return;
+  }
+
   // Retrieve the length limit for smart descriptions.
   if (!isset($length)) {
     $length = (int) bootstrap_setting('forms_smart_descriptions_limit');
@@ -62,7 +63,7 @@ function bootstrap_element_smart_description(&$element, &$target = NULL, $input_
 
   $html = FALSE;
   $type = !empty($element['#type']) ? $element['#type'] : FALSE;
-  if (!$input_only || !empty($target['#input']) || !empty($element['#smart_description']) || !empty($target['#smart_description'])) {
+  if (!$input_only || !empty($target['#input'])) {
     if (!empty($element['#description']) && empty($target['#attributes']['title']) && empty($target['#attributes']['data-toggle'])) {
       if (_bootstrap_is_simple_string($element['#description'], $length, $allowed_tags, $html)) {
         // Default property (on the element itself).
@@ -327,6 +328,19 @@ function bootstrap_setting($name, $theme = NULL, $prefix = 'bootstrap') {
       }
       break;
 
+    case 'bootstrap_anchor':
+      $deprecated = theme_get_setting('bootstrap_anchors_fix', $theme);
+      if (isset($deprecated)) {
+        $setting = (int) !empty($deprecated);
+      }
+      break;
+
+    case 'bootstrap_anchor_smooth':
+      $deprecated = theme_get_setting('bootstrap_anchors_smooth_scrolling', $theme);
+      if (isset($deprecated)) {
+        $setting = (int) !empty($deprecated);
+      }
+      break;
   }
   return $setting;
 }
diff --git a/includes/libraries.inc b/includes/libraries.inc
new file mode 100644
index 0000000..dcd1b11
--- /dev/null
+++ b/includes/libraries.inc
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @file
+ * libraries.inc
+ */
+
+/**
+ * Implements hook_libraries_info().
+ */
+function bootstrap_libraries_info() {
+  $libraries['bootstrap-anchor'] = array(
+    'name' => 'Bootstrap Anchor',
+    'vendor url' => 'http://bootstrap-anchor.com',
+    'download url' => 'http://bootstrap-anchor.com#download',
+    'callbacks' => array(
+      'pre-detect' => array('bootstrap_libraries_pre_detect'),
+      'pre-load' => array('bootstrap_libraries_pre_load'),
+    ),
+  );
+  return $libraries;
+}
+
+/**
+ * Callback for detecting plugin files and how they were installed.
+ *
+ * @param array $library
+ *   The library array, passed by reference.
+ */
+function bootstrap_libraries_pre_detect(&$library) {
+  $name = $library['machine name'];
+  $path = $library['library path'];
+
+  // Detect if there is a distribution folder.
+  if (file_exists("$path/dist")) {
+    $path .= '/dist';
+    $library['path'] = 'dist';
+  }
+
+  // Find the plugin files.
+  $files = array('css' => array(), 'js' => array(), 'min' => array('css' => array(), 'js' => array()));
+  foreach (_bootstrap_file_scan_directory($path, "`$name(\\.min)?\\.(css|js)$`") as $file) {
+    foreach (array('css', 'js') as $type) {
+      $filename = str_replace("$path/", '', $file->uri);
+      $options = array(
+        'group' => $type === 'js' ? JS_THEME : CSS_THEME,
+        'scope' => $type === 'js' ? 'footer' : 'header',
+        'weight' => 100,
+      );
+      if (preg_match("/min\\.$type$/", $file->uri)) {
+        $files['min'][$type][$filename] = $options;
+      }
+      else if (preg_match("/$type$/", $file->uri)) {
+        $files[$type][$filename] = $options;
+      }
+    }
+  }
+  $library['files'] = $files;
+
+  // Retrieve first JS file for use in helping to extract the plugin version.
+  $js = array_keys($files['js']);
+  if (empty($js)) {
+    $js = array_keys($files['min']['js']);
+  }
+  if (!empty($js)) {
+    $path = preg_replace('`^' . preg_quote($library['library path']) . '/?`', '', $path);
+    $filename = !empty($path) ? "$path/${js[0]}" : $js[0];
+    $library['version arguments'] = array(
+      'file' => $filename,
+      'pattern' => '/v([0-9a-zA-Z\.-]+)/',
+    );
+  }
+}
+
+/**
+ * Callback determining whether or not to load minified files, if they exist.
+ *
+ * @param array $library
+ *   The library array, passed by reference.
+ */
+function bootstrap_libraries_pre_load(&$library) {
+  foreach (array('css', 'js') as $type) {
+    if (!empty($library['files']['min'][$type]) && variable_get("preprocess_$type")) {
+      $library['files'][$type] = $library['files']['min'][$type];
+    }
+  }
+}
diff --git a/js/bootstrap.admin.js b/js/bootstrap.admin.js
index b49754e..ec9b5f5 100644
--- a/js/bootstrap.admin.js
+++ b/js/bootstrap.admin.js
@@ -61,8 +61,8 @@
       // Javascript.
       $context.find('#edit-javascript').drupalSetSummary(function () {
         var summary = [];
-        if ($context.find('input[name="bootstrap_anchors_fix"]').is(':checked')) {
-          summary.push(Drupal.t('Anchors'));
+        if ($context.find('input[name="bootstrap_anchor"]').is(':checked')) {
+          summary.push(Drupal.t('Bootstrap Anchor'));
         }
         if ($context.find('input[name="bootstrap_popover_enabled"]').is(':checked')) {
           summary.push(Drupal.t('Popovers'));
diff --git a/js/bootstrap.js b/js/bootstrap.js
index ab424aa..549c028 100644
--- a/js/bootstrap.js
+++ b/js/bootstrap.js
@@ -129,90 +129,14 @@ var Drupal = Drupal || {};
   };
 
   /**
-   * Anchor fixes.
+   * Bootstrap Anchor plugin.
    */
-  var $scrollableElement = $();
-  Drupal.behaviors.bootstrapAnchors = {
+  Drupal.behaviors.bootstrapAnchor = {
     attach: function(context, settings) {
-      var i, elements = ['html', 'body'];
-      if (!$scrollableElement.length) {
-        for (i = 0; i < elements.length; i++) {
-          var $element = $(elements[i]);
-          if ($element.scrollTop() > 0) {
-            $scrollableElement = $element;
-            break;
-          }
-          else {
-            $element.scrollTop(1);
-            if ($element.scrollTop() > 0) {
-              $element.scrollTop(0);
-              $scrollableElement = $element;
-              break;
-            }
-          }
-        }
+      // Bind the click event to the defined plugin selector.
+      if ($.fn.anchor && settings.bootstrap && settings.bootstrap.anchor && settings.bootstrap.anchor.selector && settings.bootstrap.anchor.selector.length) {
+        $(document).anchor(settings.bootstrap.anchor);
       }
-      if (!settings.bootstrap || !settings.bootstrap.anchorsFix) {
-        return;
-      }
-      var anchors = $(context).find('a').toArray();
-      for (i = 0; i < anchors.length; i++) {
-        if (!anchors[i].scrollTo) {
-          this.bootstrapAnchor(anchors[i]);
-        }
-      }
-      $scrollableElement.once('bootstrap-anchors', function () {
-        $scrollableElement.on('click.bootstrap-anchors', 'a[href*="#"]:not([data-toggle],[data-target],[data-slide])', function(e) {
-          if (this.scrollTo) {
-            this.scrollTo(e);
-          }
-        });
-      });
-    },
-    bootstrapAnchor: function (element) {
-      element.validAnchor = element.nodeName === 'A' && (location.hostname === element.hostname || !element.hostname) && (element.hash.replace(/#/,'').length > 0);
-      element.scrollTo = function(event) {
-        var attr = 'id';
-        var $target = $(element.hash);
-        // Check for anchors that use the name attribute instead.
-        if (!$target.length) {
-          attr = 'name';
-          $target = $('[name="' + element.hash.replace('#', '') + '"]');
-        }
-        // Immediately stop if no anchors are found.
-        if (!this.validAnchor && !$target.length) {
-          return;
-        }
-        // Anchor is valid, continue if there is an offset.
-        var offset = $target.offset().top - parseInt($scrollableElement.css('paddingTop'), 10) - parseInt($scrollableElement.css('marginTop'), 10);
-        if (offset > 0) {
-          if (event) {
-            event.preventDefault();
-          }
-          var $fakeAnchor = $('<div/>')
-            .addClass('element-invisible')
-            .attr(attr, $target.attr(attr))
-            .css({
-              position: 'absolute',
-              top: offset + 'px',
-              zIndex: -1000
-            })
-            .appendTo($scrollableElement);
-          $target.removeAttr(attr);
-          var complete = function () {
-            location.hash = element.hash;
-            $fakeAnchor.remove();
-            $target.attr(attr, element.hash.replace('#', ''));
-          };
-          if (Drupal.settings.bootstrap.anchorsSmoothScrolling) {
-            $scrollableElement.animate({ scrollTop: offset, avoidTransforms: true }, 400, complete);
-          }
-          else {
-            $scrollableElement.scrollTop(offset);
-            complete();
-          }
-        }
-      };
     }
   };
 
diff --git a/starterkits/less/less/overrides.less b/starterkits/less/less/overrides.less
index b6f12ad..00067b3 100644
--- a/starterkits/less/less/overrides.less
+++ b/starterkits/less/less/overrides.less
@@ -13,6 +13,13 @@
           box-shadow: @shadow;
 }
 
+.opacity(@opacity) {
+  opacity: @opacity;
+  // IE8 filter
+  @opacity-ie: (@opacity * 100);
+  filter: ~"alpha(opacity=@{opacity-ie})";
+}
+
 html {
   &.overlay-open .navbar-fixed-top {
     z-index: 400;
@@ -434,7 +441,7 @@ ul li.leaf {
 }
 
 // Views AJAX pager.
-ul.pagination li > a {
+.pagination ul > li > a {
   &.progress-disabled {
     float: left;
   }
@@ -796,3 +803,26 @@ div.features-export-list {
     }
   }
 }
+
+
+// @todo Remove once moved upstream.
+.anchor-wrapper {
+  position: relative;
+}
+.anchor-link {
+  font-size: 80%;
+  position: absolute;
+  a {
+    .opacity(.5);
+    color: inherit;
+    &:hover {
+      .opacity(1)
+    }
+  }
+  &.left {
+    padding-right: .25em;
+  }
+  &.right {
+    padding-left: .25em;
+  }
+}
diff --git a/template.php b/template.php
index dadb5af..2d4a592 100755
--- a/template.php
+++ b/template.php
@@ -69,3 +69,8 @@ drupal_static_reset('element_info');
  * they are properly detected when drupal_alter() is invoked.
  */
 bootstrap_include('bootstrap', 'includes/alter.inc');
+
+/**
+ * Provide libraries support.
+ */
+bootstrap_include('bootstrap', 'includes/libraries.inc');
diff --git a/theme-settings.php b/theme-settings.php
index 12a3ecb..697a424 100644
--- a/theme-settings.php
+++ b/theme-settings.php
@@ -339,29 +339,323 @@ function bootstrap_form_system_theme_settings_alter(&$form, $form_state, $form_i
   );
 
   // Anchors.
-  $form['javascript']['anchors'] = array(
+  $form['javascript']['anchor'] = array(
     '#type' => 'fieldset',
     '#title' => t('Anchors'),
     '#collapsible' => TRUE,
     '#collapsed' => TRUE,
+    '#description' => t('Integrates the <a href="!url" target="_blank">Bootstrap Anchor</a> plugin to help navigate to the target elements on a page. This is useful for determining the proper position of an anchor when a fixed navbar or administration menu is used that increases the page margins or padding. It also provides quick anchor links for certain elements, like headings.', array(
+      '!url' => 'http://bootstrap-anchor.com',
+    )),
+  );
+  $form['javascript']['anchor']['bootstrap_anchor'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Enable the Bootstrap Anchor plugin'),
+    '#default_value' => bootstrap_setting('anchor', $theme),
+  );
+
+  $form['javascript']['anchor']['bootstrap_anchor_selector'] = array(
+    '#default_value' => bootstrap_setting('anchor_selector', $theme),
+    '#title' => t('Auto-bind selectors'),
+    '#description' => t('Automatically binds the plugin to the <code>document</code> and then delegates the plugin to the provided selectors. To disable this feature, remove the selectors and manually invoke the plugin by placing the following code in a custom script: <code>$(".selector").anchor(options)</code>'),
+    '#smart_description' => FALSE,
+    '#type' => 'textfield',
+    '#maxlength' => NULL,
+    '#states' => array(
+      'visible' => array(
+        ':input[name="bootstrap_anchor"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+  $form['javascript']['anchor']['auto_bind'] = array(
+    '#type' => 'fieldset',
+    '#tree' => FALSE,
+    '#title' => t('Auto-bind options'),
+    '#description' => t('The following options are unique to the plugin delegation process and are used in assisting when the plugin is automatically bound to the <code>document</code>. They cannot be overridden except through this interface and any element that provides an equivalent data attribute value will be ignored.'),
+    '#states' => array(
+      'visible' => array(
+        ':input[name="bootstrap_anchor"]' => array('checked' => TRUE),
+        ':input[name="bootstrap_anchor_selector"]' => array('!value' => ''),
+      ),
+    ),
   );
-  $form['javascript']['anchors']['bootstrap_anchors_fix'] = array(
+  $form['javascript']['anchor']['auto_bind']['bootstrap_anchor_onload'] = array(
     '#type' => 'checkbox',
-    '#title' => t('Fix anchor positions'),
-    '#default_value' => bootstrap_setting('anchors_fix', $theme),
-    '#description' => t('Ensures anchors are correctly positioned only when there is margin or padding detected on the BODY element. This is useful when fixed navbar or administration menus are used.'),
+    '#title' => t('Scroll to anchor on page load'),
+    '#default_value' => bootstrap_setting('anchor_onload', $theme),
+    '#description' => t('Automatically scrolls to the proper anchor designated by the hash (fragment) in the URL, if any, on page load.'),
   );
-  $form['javascript']['anchors']['bootstrap_anchors_smooth_scrolling'] = array(
+  $form['javascript']['anchor']['auto_bind']['bootstrap_anchor_onhashchange'] = array(
     '#type' => 'checkbox',
-    '#title' => t('Enable smooth scrolling'),
-    '#default_value' => bootstrap_setting('anchors_smooth_scrolling', $theme),
-    '#description' => t('Animates page by scrolling to an anchor link target smoothly when clicked.'),
+    '#title' => t('Scroll to anchor on hash change'),
+    '#default_value' => bootstrap_setting('anchor_onhashchange', $theme),
+    '#description' => t('Automatically scrolls to the proper anchor designated by the hash (fragment) in the URL, if any, when it changes.'),
+  );
+
+  $form['javascript']['anchor']['options'] = array(
+    '#type' => 'fieldset',
+    '#tree' => FALSE,
+    '#title' => t('Global options'),
+    '#description' => t('The following are global options. Any element can independently override the global default by appending the option name to a !data attribute. Example: !data-html.', array(
+      '!data' => '<code>data-</code>',
+      '!data-html' => '<code>data-html="true"</code>',
+    )),
     '#states' => array(
-      'invisible' => array(
-        ':input[name="bootstrap_anchors_fix"]' => array('checked' => FALSE),
+      'visible' => array(
+        ':input[name="bootstrap_anchor"]' => array('checked' => TRUE),
+        ':input[name="bootstrap_anchor_selector"]' => array('!value' => ''),
       ),
     ),
   );
+  $form['javascript']['anchor']['options']['appearance'] = array(
+    '#type' => 'container',
+    '#tree' => FALSE,
+    '#title' => t('Anchor appearance'),
+    '#description' => t(''),
+  );
+  $form['javascript']['anchor']['options']['appearance']['bootstrap_anchor_duration'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Scroll duration'),
+    '#default_value' => bootstrap_setting('anchor_duration', $theme),
+    '#description' => t('Duration of the animation scroll event.'),
+    '#smart_dscription' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['appearance']['bootstrap_anchor_icon'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Anchor icon'),
+    '#default_value' => bootstrap_setting('anchor_icon', $theme),
+    '#description' => t('Default anchor icon markup. (' . _bootstrap_icon('link') . ')'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['appearance']['bootstrap_anchor_template'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Anchor template'),
+    '#default_value' => bootstrap_setting('anchor_template', $theme),
+    '#description' => t("Base HTML to use when creating the anchor tooltip. The anchor tooltip's <code>icon</code> option will be injected into the link (<code>&lt;a&gt;</code> element)."),
+    '#smart_description' => FALSE,
+  );
+  $options = drupal_map_assoc(array(
+    'top',
+    'bottom',
+    'left',
+    'right',
+    'auto',
+    'auto top',
+    'auto bottom',
+    'auto left',
+    'auto right',
+  ));
+  $form['javascript']['anchor']['options']['appearance']['bootstrap_anchor_placement'] = array(
+    '#type' => 'select',
+    '#title' => t('Anchor icon placement'),
+    '#default_value' => bootstrap_setting('anchor_placement', $theme),
+    '#description' => t('Where to position the anchor. When "auto" is specified, it will dynamically reorient the anchor. For example, if placement is "auto left", the popover will display to the left when possible, otherwise it will display right.'),
+    '#options' => $options,
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['appearance']['bootstrap_anchor_offset'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Anchor icon offset'),
+    '#default_value' => bootstrap_setting('anchor_offset', $theme),
+    '#description' => t('Vertical offset of the anchor.'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_exclude'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Exclude selectors'),
+    '#default_value' => bootstrap_setting('anchor_exclude', $theme),
+    '#description' => t('Elements matching any of these selectors are always excluded and will be ignored by the plugin.'),
+    '#smart_description' => FALSE,
+    '#maxlength' => NULL,
+    '#field_prefix' => ':not(',
+    '#field_suffix' => ')',
+    '#input_group' => TRUE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_unique_id'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Unique Anchors'),
+    '#default_value' => bootstrap_setting('anchor_unique_id', $theme),
+    '#description' => t('Rewrite anchor IDs to be unique.'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_container'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Anchor Container'),
+    '#default_value' => bootstrap_setting('anchor_container', $theme),
+    '#description' => t('Restricts anchors to a container.'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_generate_id'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Anchor Generate ID'),
+    '#default_value' => bootstrap_setting('anchor_generate_id', $theme),
+    '#description' => t('If the target element is considered an anchor and does not have an <code>id</code> attribute (or <code>name</code> attribute if the element is <code>&lt;a&gt;</code>), then an anchor ID can automatically be generated by the text contents of the target element. If the target element does not have any text content and no ID can be generated, then the anchor is considered to be invalid and will not be shown.'),
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Normalize IDs'),
+    '#default_value' => bootstrap_setting('anchor_normalize_id', $theme),
+    '#description' => t('Normalizes generated anchor IDs to be more human readable and consistent with other anchors on the page.'),
+    '#smart_description' => FALSE,
+    '#states' => array(
+      'visible' => array(
+        ':input[name="bootstrap_anchor_generate_id"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id_group'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Normalize IDs options'),
+    '#tree' => FALSE,
+    '#states' => array(
+      'visible' => array(
+        ':input[name="bootstrap_anchor_normalize_id"]' => array('checked' => TRUE),
+        ':input[name="bootstrap_anchor_generate_id"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id_group']['bootstrap_anchor_normalize_id_separator'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Separator'),
+    '#default_value' => bootstrap_setting('anchor_normalize_id_separator', $theme),
+    '#description' => t('The character to use when converting or replacing characters.'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id_group']['bootstrap_anchor_normalize_id_convert_camel'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Convert camel case'),
+    '#default_value' => bootstrap_setting('anchor_normalize_id_convert_camel', $theme),
+    '#description' => t('Places a separator before uppercase letters.'),
+  );
+  $options = array(
+    'lowercase' => t('Lowercase'),
+    'uppercase' => t('Uppercase'),
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id_group']['bootstrap_anchor_normalize_id_case'] = array(
+    '#type' => 'select',
+    '#title' => t('Convert case'),
+    '#default_value' => bootstrap_setting('anchor_normalize_id_case', $theme),
+    '#options' => $options,
+    '#description' => t('Converts the case.'),
+    '#smart_description' => FALSE,
+    '#states' => array(
+      'visible' => array(
+        ':input[name="bootstrap_anchor_normalize_id_convert_camel"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id_group']['bootstrap_anchor_normalize_id_convert'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Convert'),
+    '#default_value' => bootstrap_setting('anchor_normalize_id_convert', $theme),
+    '#description' => t('Converts matching characters to the separator. Regular expression or string. E.g., <code>/[\s_.(){}\[\]]/g</code>'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id_group']['bootstrap_anchor_normalize_id_strip'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Strip'),
+    '#default_value' => bootstrap_setting('anchor_normalize_id_strip', $theme),
+    '#description' => t('Removes matching characters, in this case: non-alphanumeric. E.g., <code>/[^\w-]/gi</code>'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id']['bootstrap_anchor_normalize_id_single_separator'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Single separator'),
+    '#default_value' => bootstrap_setting('anchor_normalize_id_single_separator', $theme),
+    '#description' => t('Ensures no concurrent separators (E.g. some--id)'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id_group']['bootstrap_anchor_normalize_id_trim'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Trim'),
+    '#default_value' => bootstrap_setting('anchor_normalize_id_trim', $theme),
+    '#description' => t('Trims beginning and ending separators (E.g. -some-id-)'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_normalize_id_group']['bootstrap_anchor_normalize_id_max_length'] = array(
+    '#type' => 'textfield',
+    '#default_value' => bootstrap_setting('anchor_normalize_id_max_length', $theme),
+    '#title' => t('Trim'),
+    '#description' => t('Limits length of the final ID.'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_find_named'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Find named anchors'),
+    '#default_value' => bootstrap_setting('anchor_find_named', $theme),
+    '#description' => t('Searches for any nearby deprecated named anchors (<code>&lt;a name="..."&gt;&lt;/a&gt;</code>) to use as the anchor ID if the target element has no id attribute present. <em>Please note there is a potential performance impact when using this option. Refer to the documentation for more information.</em>'),
+  );
+  $options = array(
+    'append' => t('Append'),
+    'replace' => t('Replace'),
+    'false' => t('Disabled'),
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_history'] = array(
+    '#type' => 'select',
+    '#title' => t('Anchor history'),
+    '#default_value' => bootstrap_setting('anchor_history', $theme),
+    '#options' => $options,
+    '#description' => t('Adjusts the browser\'s history object to either append or replace.'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_links'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Anchor links'),
+    '#default_value' => bootstrap_setting('anchor_links', $theme),
+    '#description' => t('Determines if the target element is considered an "anchor link". If the plugin is bound to the document, these are the selectors used to delegate bindings for anchor links. If no option was specified, but the plugin was initialized on normal elements, the selector used will override this option. See Usage for more details.'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_trigger'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Anchor trigger'),
+    '#default_value' => bootstrap_setting('anchor_trigger', $theme),
+    '#description' => t('How anchor tooltips and links are triggered - click | hover | focus | manual. If a string is supplied, the trigger is applied to both anchors and anchor links. You may pass multiple triggers; separate them with a space.'),
+    '#smart_description' => FALSE,
+  );
+  $form['javascript']['anchor']['options']['bootstrap_anchor_viewport'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Anchor viewport'),
+    '#default_value' => bootstrap_setting('anchor_viewport', $theme),
+    '#description' => t('Keeps the anchor tooltip within the bounds of this element. Example: !code', array(
+      '!code' => "<code>viewport: '#viewport'</code> or <code>{ \"selector\": \"#viewport\", \"padding\": 0 }</code>",
+    )),
+    '#smart_description' => FALSE,
+  );
+
+  // Check if Bootstrap Anchor is found.
+  $enable_bootstrap_anchor = TRUE;
+  if (!module_exists('libraries')) {
+    $message = t('Bootstrap Anchor not found! Please install and enable the <a class="alert-link" href="!url" target="_blank">Drupal libraries module</a> then download and save the <a class="alert-link" target="_blank" href="!anchorurl">Bootstrap Anchor distribution</a> in the <strong>sites/all/libraries</strong> directory. You may need to clear your caches.', array(
+      '!url' => 'http://www.drupal.org/project/libraries',
+      '!anchorurl' => 'http://bootstrap-anchor.com/#distribution',
+    ));
+    $enable_bootstrap_anchor = FALSE;
+  }
+  elseif (!drupal_get_library('bootstrap', 'bootstrap-anchor')) {
+    $message = t('Bootstrap Anchor not found! Please download and save the <a class="alert-link" target="_blank" href="!anchorurl">Bootstrap Anchor distribution</a> in the <strong>sites/all/libraries</strong> directory. You may need to clear your caches.', array(
+      '!url' => 'http://www.drupal.org/project/libraries',
+      '!anchorurl' => 'http://bootstrap-anchor.com/#distribution',
+    ));
+    $enable_bootstrap_anchor = FALSE;
+  }
+  if (!$enable_bootstrap_anchor) {
+    $form['javascript']['anchor']['bootstrap_anchor']['#disabled'] = TRUE;
+    $form['javascript']['anchor']['helptext'] = array(
+      '#type' => 'html_tag',
+      '#tag' => 'div',
+      '#value' => $message,
+      '#attributes' => array(
+        'class' => array(
+          'alert',
+          'alert-warning',
+        ),
+      ),
+    );
+    $form['javascript']['anchor']['bootstrap_anchor_selector']['#access'] = FALSE;
+    $form['javascript']['anchor']['auto_bind']['#access'] = FALSE;
+    $form['javascript']['anchor']['options']['#access'] = FALSE;
+  }
+
 
   // Forms.
   $form['javascript']['forms'] = array(
