diff --git a/addthis.js b/addthis.js
index 1705eee..b5b665b 100644
--- a/addthis.js
+++ b/addthis.js
@@ -8,11 +8,27 @@
           addthis.init();
         }
       );
+      // Trigger ready on ajax attach.
       if (context != window.document && window.addthis != null) {
         window.addthis.ost = 0;
         window.addthis.ready();
       }
+      // Attach on onchange
+      $('.addthis-display-type', context).change(Drupal.addThis.displayType.onChange);
     }
   };
 
+  Drupal.addThis = {
+
+    displayType: {
+      
+      onChange: function() {
+        var $trigger = $(this);
+        console.debug(this);
+      }
+      
+    }
+    
+  }
+
 }(jQuery));
diff --git a/addthis.module b/addthis.module
index 2988ac5..7c3a488 100644
--- a/addthis.module
+++ b/addthis.module
@@ -201,3 +201,94 @@ function theme_addthis_element($variables) {
   $output .= '</' . $element['#tag'] . ">\n";
   return $output;
 }
+
+/**
+ * Create a addthis settings form.
+ */
+function _addthis_settings_form($form = array(), &$form_state, $display_type = NULL, $display_settings = NULL) {
+  // Toggle variables
+  $no_js = FALSE;
+
+
+  // Default display type if not set in the parameters.
+  $display_type = (isset($display_type)) ? $display_type : 'addthis_disabled';
+  // Load setting type from the form_state.
+  if (isset($form_state['values']['addthis_settings']['type'])) {
+    $display_type = $form_state['values']['addthis_settings']['type'];
+  }
+
+  // Container used as the replace for ajax.
+  $form['#type'] = 'container';
+  $form['#attributes'] = array();
+  $form['#id'] = 'addthis_settings';
+
+  // The list of formatters
+  $formatter_options = AddThis::getInstance()->getDisplayTypes();
+  $form['type'] = array(
+    '#type' => 'select',
+    '#title' => t('Formatter for @title', array('@title' => 'AddThis block')),
+    '#title_display' => 'invisible',
+    '#options' => $formatter_options,
+    '#default_value' => $display_type,
+    '#parents' => array('addthis_settings', 'type'),
+    '#attributes' => array('class' => array('addthis-display-type')),
+  );
+
+  $form['choose'] = array(
+    '#type' => 'submit',
+    '#name' => 'Switch display',
+    '#value' => 'Switch display',
+    '#op' => 'switch_display',
+    '#submit' => array('_addthis_settings_form_submit'),
+    '#ajax' => array(
+      'callback' => '_addthis_settings_form_submit_callback',
+      'wrapper' => 'addthis_settings',
+      'name' => 'switch_display',
+    )
+  );
+  if ($no_js) {
+    unset($form['choose']['#ajax']);
+  }
+
+  // Formatter settings.
+
+  // Check the currently selected formatter, and merge persisted values for
+  // formatter settings.
+  $formatter_type = $display_type;
+
+  // Get the settings if set.
+  $settings = $display_settings;
+  $formatter_settings = field_info_formatter_settings($formatter_type);
+  $settings += $formatter_settings;
+
+  $field = array();
+  $instance = array();
+  $view_mode = 'block';
+
+  $instance['display'][$view_mode]['type'] = $formatter_type;
+  $formatter = field_info_formatter_types($formatter_type);
+  $instance['display'][$view_mode]['module'] = $formatter['module'];
+  $instance['display'][$view_mode]['settings'] = $settings;
+
+
+  $settings_form = array();
+  $function = $formatter['module'] . '_field_formatter_settings_form';
+  if (function_exists($function)) {
+    $settings_form = $function($field, $instance, $view_mode, $form, $form_state);
+    $settings_form['#tree'] = TRUE;
+    $settings_form['#parents'] = array('addthis_settings', 'settings');
+  }
+
+  $form['settings'] = $settings_form;
+
+  return $form;
+}
+
+function _addthis_settings_form_submit($form, &$form_state) {
+  $form_state['rebuild'] = TRUE;
+}
+
+function _addthis_settings_form_submit_callback($form, &$form_state) {
+  $form_state['rebuild'] = TRUE;
+  return $form['addthis_settings']['form'];
+}
diff --git a/classes/AddThis.php b/classes/AddThis.php
index 9089c8c..699a555 100644
--- a/classes/AddThis.php
+++ b/classes/AddThis.php
@@ -25,6 +25,7 @@ class AddThis {
   // Persistent variable keys
   const ADDRESSBOOK_ENABLED_KEY = 'addthis_addressbook_enabled';
   const BLOCK_WIDGET_TYPE_KEY = 'addthis_block_widget_type';
+  const BLOCK_WIDGET_SETTINGS_KEY = 'addthis_block_widget_settings';
   const BOOKMARK_URL_KEY = 'addthis_bookmark_url';
   const CLICKBACK_TRACKING_ENABLED_KEY = 'addthis_clickback_tracking_enabled';
   const CLICK_TO_OPEN_COMPACT_MENU_ENABLED_KEY = 'addthis_click_to_open_compact_menu_enabled';
@@ -295,6 +296,10 @@ class AddThis {
     return variable_get(self::BLOCK_WIDGET_TYPE_KEY, self::WIDGET_TYPE_DISABLED);
   }
 
+  public function getBlockDisplaySettings() {
+    return variable_get(self::BLOCK_WIDGET_SETTINGS_KEY, array());
+  }
+
   public function getProfileId() {
     return check_plain(variable_get(AddThis::PROFILE_ID_KEY));
   }
diff --git a/includes/addthis.block.inc b/includes/addthis.block.inc
index 62486b0..e253b3c 100644
--- a/includes/addthis.block.inc
+++ b/includes/addthis.block.inc
@@ -25,8 +25,18 @@ function addthis_block_info() {
  */
 function addthis_block_view($block_name = '') {
   if ($block_name == AddThis::BLOCK_NAME) {
+
     $widget_type = AddThis::getInstance()->getBlockDisplayType();
-    $markup = AddThis::getInstance()->getDisplayMarkup($widget_type, array('#block' => AddThis::BLOCK_NAME));
+    $widget_settings = AddThis::getInstance()->getBlockDisplaySettings();
+
+    $block_options = array(
+      '#block' => AddThis::BLOCK_NAME,
+      '#display' => array(
+        'settings' => $widget_settings,
+        )
+      );
+
+    $markup = AddThis::getInstance()->getDisplayMarkup($widget_type, $block_options);
     return array(
       'subject' => '',
       'content' => $markup,
@@ -38,18 +48,67 @@ function addthis_block_view($block_name = '') {
  * Implements hook_block_configure().
  */
 function addthis_block_configure($delta = '') {
-  $form[AddThis::BLOCK_WIDGET_TYPE_KEY] = array(
-    '#type' => 'select',
-    '#title' => t('AddThis display type'),
-    '#options' => AddThis::getInstance()->getDisplayTypes(),
-    '#default_value' => AddThis::getInstance()->getBlockDisplayType(),
-  );
-  return $form;
+  // We miss the form and form_state.
+
+  // @see field_ui_display_overview_form(). :975 - 1091
+  //drupal_get_form($form_id);
+
+  return array();
 }
 
 /**
  * Implements hook_block_save().
  */
 function addthis_block_save($delta = '', $edit = array()) {
-  variable_set(AddThis::BLOCK_WIDGET_TYPE_KEY, $edit[AddThis::BLOCK_WIDGET_TYPE_KEY]);
+  variable_set(AddThis::BLOCK_WIDGET_TYPE_KEY, $edit['addthis_settings']['type']);
+  variable_set(AddThis::BLOCK_WIDGET_SETTINGS_KEY, $edit['addthis_settings']['settings']);
+}
+
+/**
+ * Callback submit.
+ */
+function _addthis_settings_form_block_submit($form, &$form_state) {
+  $form_state['rebuild'] = TRUE;
+}
+
+/**
+ * Callback to return ajax replace part.
+ */
+function _addthis_settings_form_block_submit_callback($form, &$form_state) {
+  return $form['settings']['addthis_settings']['form'];
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function addthis_form_block_admin_configure_alter(&$form, &$form_state) {
+
+  if ($form['module']['#value'] == 'addthis' && $form['delta']['#value'] == 'addthis_block') {
+    form_load_include($form_state, 'inc', 'addthis', 'addthis.block');
+    $form['#cache'] = TRUE;
+
+    $form['settings']['addthis_settings'] = array(
+      '#type' => 'fieldset',
+      '#title' => 'Display settings',
+    );
+
+    // Retrieve settings.
+    $addthis_settings['type'] = AddThis::getInstance()->getBlockDisplayType();
+    $addthis_settings['settings'] = AddThis::getInstance()->getBlockDisplaySettings();
+
+    // Create a addthis settings form based on the available configuration.
+    $element = _addthis_settings_form(
+      isset($form['addthis_settings']['form']) ? $form['addthis_settings']['form'] : array(),
+      $form_state,
+      isset($addthis_settings['type']) ? $addthis_settings['type'] : NULL,
+      isset($addthis_settings['settings']) ? $addthis_settings['settings'] : NULL
+    );
+    $element['choose']['#submit'] = array('_addthis_settings_form_block_submit');
+    $element['choose']['#ajax']['callback'] = '_addthis_settings_form_block_submit_callback';
+    $form['settings']['addthis_settings']['form'] = $element;
+
+    array_unshift($form['#submit'], '_addthis_settings_form_block_submit');
+  }
+
+  return $form;
 }
