diff --git a/js/maxlength.js b/js/maxlength.js
index 876ecf7..59417ef 100644
--- a/js/maxlength.js
+++ b/js/maxlength.js
@@ -26,6 +26,12 @@
         if ($(this).hasClass('maxlength_js_truncate_html')) {
           options['truncateHtml'] = true;
         }
+
+        var mode = $(this).attr('data-maxlength-display-mode');
+        if (typeof mode !== 'undefined' && mode != '') {
+          options['displayMode'] = mode;
+        }
+
         $(this).charCount(options);
       });
     },
@@ -252,7 +258,8 @@
       counterText: Drupal.t('Content limited to @limit characters, remaining: <strong>@remaining</strong>'),
       action: 'attach',
       enforce: false,
-      truncateHtml: false
+      truncateHtml: false,
+      displayMode: 'after'
     };
 
     var options = $.extend(defaults, options);
@@ -265,8 +272,20 @@
       return 'removed';
     }
 
+    if (options.displayMode == 'label') {
+      options.counterElement = 'span';
+      options.cssWarning = '';
+    }
+
     var counterElement = $('<' + options.counterElement + ' id="' + $(this).attr('id') + '-' + options.css + '" class="' + options.css + '"></' + options.counterElement + '>');
-    if ($(this).next('div.grippie').length) {
+
+    if (options.displayMode && options.displayMode == 'label') {
+      var labelElement = $(this).closest('.form-item').children('label');
+
+      if (labelElement) {
+        labelElement.append(counterElement);
+      }
+    } else if ($(this).next('div.grippie').length) {
       $(this).next('div.grippie').after(counterElement);
     } else {
       $(this).after(counterElement);
diff --git a/maxlength.module b/maxlength.module
index 47acde2..27b537a 100644
--- a/maxlength.module
+++ b/maxlength.module
@@ -6,6 +6,7 @@
  */
 
 define('MAXLENGTH_DEFAULT_JS_LABEL', 'Content limited to @limit characters, remaining: <strong>@remaining</strong>');
+define('MAXLENGTH_DEFAULT_DISPLAY_MODE', 'after');
 
 /**
  * Implements hook_help().
@@ -78,6 +79,17 @@ function maxlength_form_field_ui_field_edit_form_alter(&$form, &$form_state, $fo
       '#default_value' => isset($form['#instance']['widget']['settings']['maxlength_js_label_summary']) ? $form['#instance']['widget']['settings']['maxlength_js_label_summary'] : MAXLENGTH_DEFAULT_JS_LABEL,
       '#description' => t('The text used in the Javascript message under the input, where "@limit", "@remaining" and "@count" are replaced by the appropriate numbers.'),
     );
+
+    $form['instance']['widget']['settings']['maxlength_display_mode_summary'] = array(
+      '#type' => 'select',
+      '#title' => t('Where should the summary countdown be displayed?'),
+      '#options' => array(
+        'after' => t('After the element'),
+        'label' => t('Inside the label of element'),
+      ),
+      '#default_value' => isset($form['#instance']['widget']['settings']['maxlength_display_mode_summary']) ? $form['#instance']['widget']['settings']['maxlength_display_mode_summary'] : MAXLENGTH_DEFAULT_DISPLAY_MODE,
+      '#description' => t('The countdown can be displayed as a message after the field, or inside the label of the field.'),
+    );
   }
 
   // Add settings for textarea widgets.
@@ -127,6 +139,17 @@ function maxlength_form_field_ui_field_edit_form_alter(&$form, &$form_state, $fo
       '#default_value' => isset($form['#instance']['widget']['settings']['maxlength_js_label']) ? $form['#instance']['widget']['settings']['maxlength_js_label'] : MAXLENGTH_DEFAULT_JS_LABEL,
       '#description' => t('The text used in the Javascript message under the input, where "@limit", "@remaining" and "@count" are replaced by the appropriate numbers.'),
     );
+
+    $form['instance']['widget']['settings']['maxlength_display_mode'] = array(
+      '#type' => 'select',
+      '#title' => t('Where should the countdown be displayed?'),
+      '#options' => array(
+        'after' => t('After the element'),
+        'label' => t('Inside the label of element'),
+      ),
+      '#default_value' => isset($form['#instance']['widget']['settings']['maxlength_display_mode']) ? $form['#instance']['widget']['settings']['maxlength_display_mode'] : MAXLENGTH_DEFAULT_DISPLAY_MODE,
+      '#description' => t('The countdown can be displayed as a message after the field, or inside the label of the field.'),
+    );
   }
 }
 
@@ -205,6 +228,9 @@ function _maxlength_add_maxlength_attributes(&$element, $settings, $suffix = '')
   $maxlength_js_label = !empty($settings['maxlength_js_label']) ? $settings['maxlength_js_label' . $suffix] : MAXLENGTH_DEFAULT_JS_LABEL;
   $maxlength_js_label = t($maxlength_js_label);
   $element['#attributes']['maxlength_js_label'] = array($maxlength_js_label);
+
+  $maxlength_display_mode = !empty($settings['maxlength_display_mode']) ? $settings['maxlength_display_mode' . $suffix] : MAXLENGTH_DEFAULT_DISPLAY_MODE;
+  $element['#attributes']['data-maxlength-display-mode'] = $maxlength_display_mode;
 }
 
 /**
@@ -259,6 +285,7 @@ function maxlength_form_alter(&$form, &$form_state, $form_id) {
       $form['title']['#attributes']['maxlength_js_label'] = array();
       $maxlength_js_label = t(variable_get('maxlength_js_label_' . $form['#node']->type, MAXLENGTH_DEFAULT_JS_LABEL));
       $form['title']['#attributes']['maxlength_js_label'][] = $maxlength_js_label;
+      $form['title']['#attributes']['data-maxlength-display-mode'] = variable_get('maxlength_display_mode_' . $form['#node_type']->type, MAXLENGTH_DEFAULT_DISPLAY_MODE);
       maxlength_pre_render($form['title']);
     }
   }
@@ -287,6 +314,16 @@ function maxlength_form_node_type_form_alter(&$form, &$form_state, $form_id) {
       '#default_value' => variable_get('maxlength_js_label_' . $form['#node_type']->type, MAXLENGTH_DEFAULT_JS_LABEL),
       '#description' => t('The text used in the Javascript message under the input, where "@limit", "@remaining" and "@count" are replaced by the appropriate numbers.'),
     );
+    $form['submission']['maxlength_display_mode'] = array(
+      '#type' => 'select',
+      '#title' => t('Where should the countdown be displayed?'),
+      '#options' => array(
+        'after' => t('After the element'),
+        'label' => t('Inside the label of element'),
+      ),
+      '#default_value' => variable_get('maxlength_display_mode_' . $form['#node_type']->type, MAXLENGTH_DEFAULT_DISPLAY_MODE),
+      '#description' => t('The countdown can be displayed as a message after the field, or inside the label of the field.'),
+    );
   }
 }
 
