diff --git a/tweetbutton.module b/tweetbutton.module
index 400cf0b..7b2c379 100644
--- a/tweetbutton.module
+++ b/tweetbutton.module
@@ -119,21 +119,6 @@ function tweetbutton_field_widget_form(&$form, &$form_state, $field, $instance,
 }
 
 /**
- * Implementation of hook_field_presave() 
- */
-function tweetbutton_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
-  if ($field['type'] == 'tweetbutton') {
-    foreach ($items as $delta => $item) {
-      $data = array($entity_type => $entity);
-      $option = array('clear' => TRUE);
-      $items[$delta]['text'] = !empty($items[$delta]['text'])? token_replace($items[$delta]['text'], $data, $option): $entity->title;
-      $items[$delta]['account'] = !empty($items[$delta]['account'])? token_replace($items[$delta]['account'], $data, $option): '';
-    }
-  }
-}
-
-
-/**
  * Implementation of hook_field_formatter_info()
  */
 function tweetbutton_field_formatter_info() {
@@ -194,33 +179,30 @@ function tweetbutton_field_formatter_settings_summary($field, $instance, $view_m
  * Implements hook_field_formatter_view().
  */
 function tweetbutton_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, &$items, $display) {
-  $settings = $display['settings'];
 
   $delta = 0;
-  switch ($display['type']) {
-    case 'tweetbutton_formatter_button_vertical':
-      $button_type = 'vertical';
-      break;
-    case 'tweetbutton_formatter_button_horizontal':
-      $button_type = 'horizontal';
-      break;
-    case 'tweetbutton_formatter_button_none':
-      $button_type = 'none';
-      break;
-  }
+  $type_map = array(
+    'tweetbutton_formatter_button_vertical' => 'vertical',
+    'tweetbutton_formatter_button_horizontal' => 'horizontal',
+    'tweetbutton_formatter_button_none' => 'none',
+  );
+  $button_type = $type_map[$display['type']];
 
+  // Override empty items with the instance default settings. Note that this
+  // will still allow to leave both fields blank in order to use the site wide
+  // settings.
   if (empty($items)) {
     $items[$delta] = array(
-      'text' => '',
-      'account' => ''
-    );  
+      'text' => $instance['settings']['tweet_text'],
+      'account' => $instance['settings']['author_twitter'],
+    );
   }
 
   $uri = entity_uri($entity_type, $entity);
   $element[$delta] = array(
     '#theme' => 'tweetbutton_tweet_display',
     '#options' => array(
-      'size'            => $settings['size'],
+      'size'            => $display['settings']['size'],
       'type'            => $button_type,
       'account'         => $items[$delta]['account'],
       'tweet_text'      => $items[$delta]['text'],
@@ -336,7 +318,7 @@ function tweetbutton_block_view($delta = '') {
  * @return 
  *   List of attributes to be rendered for twitter tweetbutton
  */
-function tweetbutton_tweet_get_attributes($options = array()) {
+function tweetbutton_tweet_get_attributes($options = array(), $entity_type, $entity) {
   global $language;
   
   $default_option = array(
@@ -369,15 +351,21 @@ function tweetbutton_tweet_get_attributes($options = array()) {
     $options['url'] = $url;
   }
   
-  
+  // Filter for empty values and fill in defaults.
+  $options = array_filter($options);
   $options += $default_option;
-  
+
+  // Replace tokens
+  $data = array($entity_type => $entity);
+  $options['tweet_text'] = token_replace($options['tweet_text'], $data, array('clear' => TRUE));
+  $options['account'] = token_replace($options['account'], $data, array('clear' => TRUE));
+
   $attributes =  array(
     'data-size'    => $options['size'],
     'data-count'   => $options['type'],
     'data-via'     => $options['account'],
     'data-related' => $options['rel_account'] . ':' . $options['rel_desc'],
-    'data-text'    => $options['tweet_text'],
+    'data-text'    => $options['tweet_text'] ? $options['tweet_text'] : check_plain($entity->title),
     'data-counturl'=> $options['count_url'],
     'data-url'     => $options['url'],
     'data-lang'    => $options['language'] == 'auto' ? $language->language : $options['language'],
@@ -392,7 +380,7 @@ function theme_tweetbutton_tweet_display($variables) {
   $script_url = url('http://platform.twitter.com/widgets.js', array('external' => TRUE, 'https' => TRUE));
   drupal_add_js($script_url, array('type' => 'external', 'scope' => 'footer'));
   $options = $variables['options'];
-  $attributes = tweetbutton_tweet_get_attributes($options);
+  $attributes = tweetbutton_tweet_get_attributes($options, $variables['entity_type'], $variables['entity']);
  
   $tweetbutton_label = isset($options['tweetbutton_label'])? $options['tweetbutton_label']: t('Tweet');
   $tweet_link = l($tweetbutton_label, 'http://twitter.com/share', array('attributes' => $attributes, 'external' => TRUE, 'https' => TRUE));
@@ -414,7 +402,7 @@ function tweetbutton_follow_get_attributes($options) {
   $options += $default_options;
   
   $attributes = array(
-    'data-show-count'       => $options['show_count']? 'true': 'false',
+    'data-show-count'       => $options['show_count'],
     'data-show-screen-name' => $options['show_screen_name'],
     'data-size'             => $options['size'],
     'data-lang'             => $options['language'] == 'auto' ? $language->language : $options['language'],
@@ -475,4 +463,4 @@ function theme_tweetbutton_hashtag_display($variables) {
   
   $hash_link = l($hash_text, 'http://twitter.com/intent/tweet', array('query' => $query, 'attributes' => $attributes, 'external' => TRUE, 'https' => TRUE));
   return '<div class="tweetbutton-hashtag tweetbutton">' . $hash_link . '</div>';
-}
\ No newline at end of file
+}
