diff --git a/vud.module b/vud.module
index 901d4d3..37750de 100644
--- a/vud.module
+++ b/vud.module
@@ -29,20 +29,20 @@ function vud_menu() {
     'weight' => -10,
   );
 
-  $items['vote/%/%/%/%/%/%'] = array(
+  $items['vote/%/%/%/%/%/%/%'] = array(
     'title'            => 'Vote',
     'page callback'    => 'vud_vote',
-    'page arguments'   => array(1, 2, 3, 4, 5, 6),
+    'page arguments'   => array(1, 2, 3, 4, 5, 6, 7),
     'access callback'  => 'vud_access_callback',
     'access arguments' => array('use vote up/down', 1, 2, 3, 4),
     'type'             => MENU_CALLBACK,
     'file'             => 'vud.theme.inc',
   );
 
-  $items['votereset/%/%/%/%/%'] = array(
+  $items['votereset/%/%/%/%/%/%'] = array(
     'title'            => 'Reset vote',
     'page callback'    => 'vud_reset',
-    'page arguments'   => array(1, 2, 3, 4, 5),
+    'page arguments'   => array(1, 2, 3, 4, 5, 6),
     'access callback'  => 'vud_access_callback',
     'access arguments' => array('reset vote up/down votes', 1, 2, 3, 4),
     'type'             => MENU_CALLBACK,
@@ -66,7 +66,7 @@ function vud_menu() {
 function vud_help($path, $arg) {
   switch ($path) {
     case 'admin/help#vud':
-      $output = '<p>'. t('Provides a configurable up/down voting widget for other modules to use.') .'</p>';
+      $output = '<p>' . t('Provides a configurable up/down voting widget for other modules to use.') . '</p>';
       return $output;
   }
 }
diff --git a/vud.theme.inc b/vud.theme.inc
index 70117b9..0c1d9ae 100644
--- a/vud.theme.inc
+++ b/vud.theme.inc
@@ -9,6 +9,8 @@ define('VUD_WIDGET_MESSAGE_ERROR', 0);
 define('VUD_WIDGET_MESSAGE_DENIED', 1);
 
 define('VUD_REQUIRED_CTOOLS_API', '2.0-alpha');
+define('VUD_UPPER_LIMIT', 1);
+define('VUD_LOWER_LIMIT', -1);
 
 /**
  * Implements hook_ctools_plugin_type().
@@ -75,7 +77,7 @@ function vud_theme() {
   return array(
     'vud_widget' => array(
       'function'  => 'vud_widget_proxy',
-      'variables' => array('entity_id' => NULL, 'type' => NULL, 'tag' => NULL, 'widget_theme' => NULL, 'readonly' => NULL, 'widget_message_code' => NULL),
+      'variables' => array('entity_id' => NULL, 'type' => NULL, 'tag' => NULL, 'widget_theme' => NULL, 'readonly' => NULL, 'widget_message_code' => NULL, 'field_name' => NULL, 'is_incremental' => NULL),
     ),
     'vud_votes' => array(
       'function'  => 'vud_votes_proxy',
@@ -163,6 +165,7 @@ function vud_widget_proxy($variables) {
 
   $type = $variables['type'];
   $entity_id = $variables['entity_id'];
+  $field_name = $variables['field_name'];  
   $tag = $variables['tag'];
   $widget_theme = $variables['widget_theme'];
   $readonly = $variables['readonly'];
@@ -197,8 +200,24 @@ function vud_widget_proxy($variables) {
 
     if (!$readonly) {
 
-      $up_access = $user_vote <= 0;
-      $down_access = $user_vote >= 0;
+      $is_incremental = isset($variables['is_incremental']) ? $variables['is_incremental'] : 0;
+
+      // if is incremental get the upper and lower limits from the field instance
+      if ($is_incremental) {
+        // costly, however entities are cached
+        // this is the only way to get the values as the only variables are from the path when using ajax
+        $entities = entity_load($type, array($entity_id));
+        $instance = field_info_instance($type, $field_name, $entities[$entity_id]->type);
+        $upper_value = $instance['settings']['advance_settings']['multiple_votes']['vote_upper_limit'];
+        $lower_value = $instance['settings']['advance_settings']['multiple_votes']['vote_lower_limit'];
+      }
+      else {
+        $upper_value = VUD_UPPER_LIMIT;
+        $lower_value = VUD_LOWER_LIMIT;
+      }
+
+      $up_access = $user_vote < $upper_value;
+      $down_access = $user_vote > $lower_value;
       $reset_access = ($user_vote != 0) && vud_access_callback('reset vote up/down votes', $type, $entity_id, NULL, $tag);
 
       if (!$up_access && !$down_access) {
@@ -232,18 +251,18 @@ function vud_widget_proxy($variables) {
   if (!$readonly) {
     // Widget has link(s).
     if ($up_access) {
-      $token_up = drupal_get_token("vote/$type/$entity_id/1/$tag/$widget_theme");
-      $variables['link_up'] = url("vote/$type/$entity_id/1/$tag/$widget_theme/$token_up/nojs");
+      $token_up = drupal_get_token("vote/$type/$entity_id/1/$tag/$widget_theme/$field_name/$is_incremental");
+      $variables['link_up'] = url("vote/$type/$entity_id/1/$tag/$widget_theme/$field_name/$token_up/nojs/$is_incremental");
       $variables['link_class_up'] .= ' use-ajax';
     }
     if ($down_access) {
-      $token_down = drupal_get_token("vote/$type/$entity_id/-1/$tag/$widget_theme");
-      $variables['link_down'] = url("vote/$type/$entity_id/-1/$tag/$widget_theme/$token_down/nojs");
+      $token_down = drupal_get_token("vote/$type/$entity_id/-1/$tag/$widget_theme/$field_name/$is_incremental");
+      $variables['link_down'] = url("vote/$type/$entity_id/-1/$tag/$widget_theme/$field_name/$token_down/nojs/$is_incremental");
       $variables['link_class_down'] .= ' use-ajax';
     }
     if ($reset_access) {
-      $token_reset = drupal_get_token("votereset/$type/$entity_id/$tag/$widget_theme");
-      $variables['link_reset'] = url("votereset/$type/$entity_id/$tag/$widget_theme/$token_reset");
+      $token_reset = drupal_get_token("votereset/$type/$entity_id/$tag/$widget_theme/$field_name/$is_incremental");
+      $variables['link_reset'] = url("votereset/$type/$entity_id/$tag/$widget_theme/$field_name/$token_reset/nojs/$is_incremental");
       $variables['link_class_reset'] .= ' use-ajax';
     }
   }
@@ -299,7 +318,7 @@ function vud_widget_proxy($variables) {
 
   if ($vote_result > 0) {
     $variables['class'] = 'positive';
-    $variables['points'] = '+'. $vote_result;
+    $variables['points'] = '+' . $vote_result;
   }
   else {
     $variables['points'] = $vote_result;
@@ -342,7 +361,7 @@ function vud_votes_proxy($variables) {
 
   if ($vote_result > 0) {
     $variables['class'] = 'positive';
-    $variables['points'] = '+'. $vote_result;
+    $variables['points'] = '+' . $vote_result;
   }
   else {
     $variables['points'] = $vote_result;
@@ -395,9 +414,9 @@ function vud_add_files($type, $plugin) {
 /**
  * Function for the main voting handler with Ajax support.
  */
-function vud_vote($type, $entity_id, $value, $tag, $widget, $token, $ajax = 'ajax') {
+function vud_vote($type, $entity_id, $value, $tag, $widget, $field_name, $token, $ajax = 'ajax', $is_incremental = 0) {
   // If the user is anonymous we don't need to check for a token.
-  if (!is_numeric($value) || !drupal_valid_token($token, "vote/$type/$entity_id/$value/$tag/$widget", TRUE)) {
+  if (!is_numeric($value) || !drupal_valid_token($token, "vote/$type/$entity_id/$value/$tag/$widget/$field_name/$is_incremental", TRUE)) {
     return MENU_ACCESS_DENIED;
   }
 
@@ -422,6 +441,10 @@ function vud_vote($type, $entity_id, $value, $tag, $widget, $token, $ajax = 'aja
       array('@type' => $type, '@content_id' => $content_id, '@value' => $value, '@tag' => $tag, '@token' => $token));
     return;
   }
+  //If Incremental (multiple votes) is true, then add the previous votes to the value.
+  if ($is_incremental) {
+    $value += $casted_vote;
+  }
 
   $vote['value'] = $value;
   $vote['value_type'] = 'points';
@@ -447,10 +470,12 @@ function vud_vote($type, $entity_id, $value, $tag, $widget, $token, $ajax = 'aja
     }
     else {
       $variables = array(
-        'entity_id' =>$entity_id,
+        'entity_id' => $entity_id,
         'type' => $type,
         'tag' => $tag,
         'widget_theme' => $widget,
+        'field_name' => $field_name,
+        'is_incremental' => $is_incremental,
       );
       if (!empty($plugin['widget template'])) {
         $commands[] = ajax_command_replace("#widget-$type-$entity_id", theme('vud_widget', $variables));
@@ -472,8 +497,8 @@ function vud_vote($type, $entity_id, $value, $tag, $widget, $token, $ajax = 'aja
 /**
  * Function for the reset handler with Ajax support.
  */
-function vud_reset($type, $entity_id, $tag, $widget, $token, $ajax = 'ajax') {
-  if (drupal_valid_token($token, "votereset/$type/$entity_id/$tag/$widget", TRUE)) {
+function vud_reset($type, $entity_id, $tag, $widget, $field_name, $token, $ajax = 'ajax', $is_incremental = 0) {
+  if (drupal_valid_token($token, "votereset/$type/$entity_id/$tag/$widget/$field_name/$is_incremental", TRUE)) {
     $criteria = array(
       'entity_type' => $type,
       'entity_id' => $entity_id,
@@ -499,10 +524,12 @@ function vud_reset($type, $entity_id, $tag, $widget, $token, $ajax = 'ajax') {
       }
       else {
         $variables = array(
-          'entity_id' =>$entity_id,
+          'entity_id' => $entity_id,
           'type' => $type,
           'tag' => $tag,
           'widget_theme' => $widget,
+          'field_name' => $field_name,
+          'is_incremental' => $is_incremental,
         );
         if (!empty($plugin['widget template'])) {
           $commands[] = ajax_command_replace("#widget-$type-$entity_id", theme('vud_widget', $variables));
diff --git a/vud_field/vud_field.install b/vud_field/vud_field.install
index d0f28f7..d9bfedb 100644
--- a/vud_field/vud_field.install
+++ b/vud_field/vud_field.install
@@ -25,3 +25,28 @@ function vud_field_field_schema($field) {
     ),
   );
 }
+/**
+ * For existing field, need to add default field values for
+ * the new multiple vote advance settings.
+ */
+function vud_field_update_7100() {
+  $fields = field_read_fields(array('type' => 'vud_field'));
+  foreach ($fields as $field) {
+    // Iterate through the instances of the field.
+    $instances = field_read_instances(array('field_name' => $field['field_name']));
+    foreach ($instances as $instance) {
+      // If the widget type is select, lets change it.
+      if (!isset($instance['settings']['advance_settings'])) {
+        $instance['settings']['advance_settings'] = array(
+          'multiple_votes' => array(
+            'is_incremental' => 0,
+            'vote_upper_limit' => VUD_UPPER_LIMIT,
+            'vote_lower_limit' => VUD_LOWER_LIMIT,
+          ),
+        );
+        // Update the instance
+        field_update_instance($instance);
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/vud_field/vud_field.module b/vud_field/vud_field.module
index 9553e7d..88631c4 100644
--- a/vud_field/vud_field.module
+++ b/vud_field/vud_field.module
@@ -47,7 +47,40 @@ function vud_field_field_instance_settings_form($field, $instance) {
     '#default_value' => isset($instance['settings']['votingapi_tag']) ? $instance['settings']['votingapi_tag'] : variable_get('vud_tag', 'vote'),
     '#description'   => t('The Voting API tag that votes will be tagged with.'),
   );
-
+  $form['advance_settings'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Advance Settings'),
+      '#description' => t('By default, you do not have to touch the advance settings'),
+  );
+  $form['advance_settings']['multiple_votes'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Allow multiple votes'),
+      '#description' => t(''),
+      '#collapsed' => TRUE,
+      '#collapsible' => TRUE,
+  );
+  $form['advance_settings']['multiple_votes']['is_incremental'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Allow votes to be incremental'),
+      '#description' => t('By Default votes are either +1 or -1.  This allow the user to vote multiple time, within the defined limits below'),
+      '#default_value' => isset($instance['settings']['advance_settings']['multiple_votes']['is_incremental']) ? $instance['settings']['advance_settings']['multiple_votes']['is_incremental'] : 0,
+  );
+  $form['advance_settings']['multiple_votes']['vote_upper_limit'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Vote Upper Limit'),
+      '#description' => t('The limit the user can upvote this field to.'),
+      '#default_value' => isset($instance['settings']['advance_settings']['multiple_votes']['vote_upper_limit']) ? $instance['settings']['advance_settings']['multiple_votes']['vote_upper_limit'] : VUD_UPPER_LIMIT,
+      '#required' => TRUE,
+      '#size' => 3,
+  );
+  $form['advance_settings']['multiple_votes']['vote_lower_limit'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Vote Lower Limit'),
+      '#description' => t('The limit the user can downvote this field to.'),
+      '#default_value' => isset($instance['settings']['advance_settings']['multiple_votes']['vote_lower_limit']) ? $instance['settings']['advance_settings']['multiple_votes']['vote_lower_limit'] : VUD_LOWER_LIMIT,
+      '#required' => TRUE,
+      '#size' => 3,
+  );
   return $form;
 }
 
@@ -126,7 +159,7 @@ function vud_field_theme() {
 }
 
 /**
- * Implementation of hook_field_formatter_info().
+ * Implements of hook_field_formatter_info().
  */
 function vud_field_field_formatter_info() {
   return array(
@@ -157,10 +190,12 @@ function vud_field_field_formatter_view($entity_type, $entity, $field, $instance
   $elements = array();
   foreach ($items as $delta => $item) {
     $variables = $variables_template;
+    $variables['vud_widget_variables']['is_incremental'] = $instance['settings']['advance_settings']['multiple_votes']['is_incremental'];
     $variables['vud_widget_variables']['widget_theme'] = $instance['settings']['vud_widget'];
     $variables['vud_widget_variables']['tag'] = $instance['settings']['votingapi_tag'];
+    $variables['vud_widget_variables']['field_name'] = $instance['field_name'];
     $elements[$delta] = array(
-      '#markup' => theme('vud_field_formatter_'. $display['type'], $variables),
+      '#markup' => theme('vud_field_formatter_' . $display['type'], $variables),
     );
   }
 
