diff --git a/twitter_username.module b/twitter_username.module
index 1ac5ccb..bdf2a47 100644
--- a/twitter_username.module
+++ b/twitter_username.module
@@ -162,7 +162,103 @@ function twitter_username_field_formatter_info() {
       'label' => t("Twitter username, as link"),
       'field types' => array('twitter_username'),
     ),
+    'twitter_username_follow_button' => array(
+      'label' => t("Twitter username, as Follow Button"),
+      'field types' => array('twitter_username'),
+      'settings' => array(
+        'data_show_count' => "false",
+        'data_show_screen_name' => 'true',
+        'data_dnt' => 'false',
+        'data_width' => '',
+        'data_align' => 'left',
+        'data_size' => '',
+      ),
+    ),
+  );
+}
+
+/**
+ * Implements hook_field_formatter_settings_summary().
+ */
+function twitter_username_field_formatter_settings_summary($field, $instance, $view_mode) {
+  $display = $instance['display'][$view_mode];
+  $settings = $display['settings'];
+  $summary = t('Show Followers Count: @show_count', array('@show_count' => $settings['data_show_count']));
+  $summary .= '<br />' . t('Show Screen Name: @show_screen_name', array('@show_screen_name' => $settings['data_show_screen_name']));
+  $summary .= '<br />' . t('Opt-out of tailoring Twitter: @dnt', array('@dnt' => $settings['data_dnt']));
+  $summary .= '<br />' . t('Width & Alignment: @width, @align', array('@width' => $settings['data_width'], '@align' => $settings['data_align']));
+  $summary .= '<br />' . t('Size: @size', array('@size' => $settings['data_size']));
+  return $summary;
+}
+
+/**
+ * Implements hook_field_formatter_settings_form().
+ */
+function twitter_username_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
+  $display = $instance['display'][$view_mode];
+  $settings = $display['settings'];
+
+  $element = array(
+    'data_width' => array(
+      '#title' => t('Width'),
+      '#description' => t('You can specify the width of the Follow Button by setting a value here (in <em>pixels</em> "100px" or <em>percentage</em> "75%").'),
+      '#type' => 'textfield',
+      '#default_value' => $settings['data_width'],
+      '#empty_option' => '',
+    ),
+    'data_show_count' => array(
+      '#title' => 'Followers count display',
+      '#description' => t('By default, the User\'s followers count is not displayed with the Follow Button. You can enable this feature here by changing this to <em>Yes</em>.'),
+      '#type' => 'select',
+      '#options' => array(
+        'false' => t('No'),
+        'true' => t('Yes'),
+      ),
+      '#default_value' => $settings['data_show_count'],
+    ),
+    'data_align' => array(
+      '#title' => 'Alignment',
+      '#description' => t('You can specify the alignment of the Follow Button setting this to <em>left</em> or <em>right</em>.'),
+      '#type' => 'select',
+      '#options' => array(
+        'left' => t('Left'),
+        'right' => t('Right'),
+      ),
+      '#default_value' => $settings['data_align'],
+    ),
+    'data_show_screen_name' => array(
+      '#title' => 'Show Screen Name',
+      '#description' => t('The user\'s screen name shows up by default, but you can opt not to show the screen name in the button. You can hide the screen name by changing this to <em>No</em>'),
+      '#type' => 'select',
+      '#options' => array(
+        'false' => t('No'),
+        'true' => t('Yes'),
+      ),
+      '#default_value' => $settings['data_show_screen_name'],
+    ),
+    'data_size' => array(
+      '#title' => 'Button Size',
+      '#description' => t('The size of the button can render in either <em>medium</em>, which is the default size, or in <em>large</em>.'),
+      '#type' => 'select',
+      '#options' => array(
+        'medium' => t('Medium'),
+        'large' => t('Large'),
+      ),
+      '#default_value' => $settings['data_size'],
+    ),
+    'data_dnt' => array(
+      '#title' => 'Opt-out of tailoring Twitter',
+      '#description' => t('Twitter buttons on your site can help us tailor content and suggestions for Twitter users. If you want to opt-out of this feature, set the optional data-dnt parameter to be true. <a href="https://support.twitter.com/articles/20169421">Learn more about tailoring Twitter</a>.'),
+      '#type' => 'select',
+      '#options' => array(
+        'false' => t('No'),
+        'true' => t('Yes'),
+      ),
+      '#default_value' => $settings['data_dnt'],
+    ),
   );
+
+  return $element;
 }
 
 /**
@@ -170,9 +266,46 @@ function twitter_username_field_formatter_info() {
  */
 function twitter_username_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
   $element = array();
+  global $language;
+
+  $twitter_username = $entity->field_twitter_username['und'][0]['twitter_username'];
+  $twitter_username = check_plain($twitter_username);
+
   foreach ($items as $delta => $item) {
-    $element[$delta]['#markup'] = theme('twitter_username_formatter_' . $display['type'], array('element' => $item));
+    if($display['type'] == 'twitter_username_follow_button') {
+      $follow_button_js = '!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");';
+      $element[$delta] = array(
+        '#theme' => 'link',
+        '#text' => "@" . $twitter_username,
+        '#path' => 'https://twitter.com/' . $twitter_username,
+        '#options' => array(
+          'attributes' => array(
+            'class' => array('twitter-follow-button'),
+            'data-lang' => $language->language,
+            'data-show-count' => $display['settings']['data_show_count'],
+            'data-show-screen-name' => $display['settings']['data_show_screen_name'],
+            'data-dnt' => $display['settings']['data_dnt'],
+            'data-width' => $display['settings']['data_width'],
+            'data-align' => $display['settings']['data_align'],
+            'data-size' => $display['settings']['data_size'],
+          ),
+          'html' => FALSE,
+        ),
+        '#attached' => array(
+          'js' => array(
+            $follow_button_js => array(
+              'type' => 'inline',
+              'scope' => 'footer',
+            ),
+          ),
+        ),
+      );
+    }
+    else {
+      $element[$delta]['#markup'] = theme('twitter_username_formatter_' . $display['type'], array('element' => $item));
+    }
   }
+
   return $element;
 }
 
@@ -188,6 +321,10 @@ function twitter_username_theme() {
     'twitter_username_formatter_twitter_username_link' => array(
       'variables' => array('element' => NULL),
     ),
+    'twitter_username_formatter_twitter_username_follow_button' => array(
+      'variables' => array('element' => NULL),
+      'render element' => 'element',
+    ),
   );
 }
 
@@ -200,4 +337,3 @@ function theme_twitter_username_formatter_twitter_username_link($vars) {
   $twitter_username = check_plain($vars['element']['twitter_username']);
   return l("@" . $twitter_username, 'http://twitter.com/' . $twitter_username);
 }
-
