diff --git includes/versioncontrol_theme.inc includes/versioncontrol_theme.inc
new file mode 100644
index 0000000..4f07ff9
--- /dev/null
+++ includes/versioncontrol_theme.inc
@@ -0,0 +1,39 @@
+<?php
+// $Id$
+/**
+ * @file
+ * Theme functions for Version Control API.
+ */
+
+/**
+ * Return a rendered visual diffstat.
+ */
+function theme_versioncontrol_diffstat($places, $result) {
+  $output = '';
+  for ($i = 0; $i++, $i <= $places;) {
+    if ($result['add'] != 0) {
+      $output .= theme('versioncontrol_diffstat_addition');
+      $result['add']--;
+      continue;
+    }
+    if ($result['remove'] != 0) {
+      $output .= theme('versioncontrol_diffstat_removal');
+      $result['remove']--;
+      continue;
+    }
+    $output .= theme('versioncontrol_diffstat_no_op');
+  }
+  return '<span class="versioncontrol-diffstat">'. $output .'</span>';
+}
+
+function theme_versioncontrol_diffstat_addition() {
+  return '<span class="plus">+</span>';
+}
+
+function theme_versioncontrol_diffstat_removal() {
+  return '<span class="minus">-</span>';
+}
+
+function theme_versioncontrol_diffstat_no_op() {
+  return '<span class="no-op"> </span>';
+}
diff --git includes/views/handlers/versioncontrol_handler_field_item_revision_visual_diffstat.inc includes/views/handlers/versioncontrol_handler_field_item_revision_visual_diffstat.inc
new file mode 100644
index 0000000..27c0f2e
--- /dev/null
+++ includes/views/handlers/versioncontrol_handler_field_item_revision_visual_diffstat.inc
@@ -0,0 +1,92 @@
+<?php
+// $Id$
+
+/**
+ * Views Field handler to provide visual diffstat representation of changes to
+ * a specific file.
+ */
+class versioncontrol_handler_field_item_revision_visual_diffstat extends views_handler_field {
+  function construct() {
+    parent::construct();
+    $this->additional_fields['line_changes_added'] = 'line_changes_added';
+    $this->additional_fields['line_changes_removed'] = 'line_changes_removed';
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+    $form['places'] = array(
+      '#type' => 'select',
+      '#title' => t('Select how many places should be displayed'),
+      '#options' => array(3 => 3, 5 => 5, 7 => 7, 9 => 9),
+      '#default_value' => $this->options['places'],
+    );
+  }
+
+  function query() {
+    $this->ensure_my_table();
+    $this->add_additional_fields();
+  }
+
+  function render($values) {
+    $places = $this->options['places'];
+
+    // Calculate total and actual percentages
+    $added = $values->{$this->aliases['line_changes_added']};
+    $removed = $values->{$this->aliases['line_changes_removed']};
+    $total = $added + $removed;
+    if ($total != 0) {
+      $add_percentage = $added / $total;
+      $remove_percentage = $removed / $total;
+    }
+
+    // Determine if we need to calculate adjusted percentages
+    $adjust_perentages = ($total > $places) ? TRUE : FALSE;
+
+    // Determine is deletion or addition ONLY
+    $single_operation = ($added == 0 || $removed == 0) ? TRUE : FALSE;
+
+    // If we are only showing additions or deletions, or we have less changes
+    // to show than places, just display without using percentages.
+    if ($single_operation || !$adjust_perentages) {
+      $result = array('add' => $added, 'remove' => $removed);
+    } else {
+      // Adjust percentages so that if too close to 50%, they are rounded down
+      $this->adjust_percentages($places, $add_percentage);
+      $this->adjust_percentages($places, $remove_percentage);
+
+      $add = round($add_percentage * $places);
+      $remove = round($remove_percentage * $places);
+
+      $result = array('add' => $add, 'remove' => $remove);
+    }
+
+    return theme('versioncontrol_diffstat', $places, $result);
+  }
+
+  function adjust_percentages($places, &$percentage) {
+    // Calculate percentages, deviation and range
+    $place_percentage = 1 / $places;
+    $deviation = $place_percentage / 2;
+
+    // Calculate center percentages for items close to 50%
+    $lower = .5 - $deviation;
+    $upper = .5 + $deviation;
+    if ($percentage >= $lower && $percentage < $upper) {
+      if ($percentage <= .5) {
+        $percentage = $percentage - $deviation;
+      }
+      else {
+        $percentage = $percentage + $deviation;
+      }
+      return;
+    }
+
+    // Caclulate edge percentages, for items close to 100%
+    $lower =  $deviation;
+    $upper =  1 - $deviation;
+    if ($percentage >= $upper || $percentage < $lower) {
+      $percentage = $percentage - $deviation;
+      return;
+    }
+  }
+}
diff --git includes/views/versioncontrol.views.inc includes/views/versioncontrol.views.inc
index 89d820e..99e7da1 100755
--- includes/views/versioncontrol.views.inc
+++ includes/views/versioncontrol.views.inc
@@ -549,6 +549,14 @@ function versioncontrol_views_data() {
       'handler' => 'views_handler_sort',
     ),
   );
+  $data['versioncontrol_item_revisions']['visual_diffstat'] = array(
+    'title' => t('Visual diffstat'),
+    'help' => t('A visual represtation of the stasitics representing the difference between revisions of a file.'),
+    'field' => array(
+      'handler' => 'versioncontrol_handler_field_item_revision_visual_diffstat',
+      'click sortable' => FALSE,
+    ),
+  );
   return $data;
 }
 
@@ -590,6 +598,9 @@ function versioncontrol_views_handlers() {
       'versioncontrol_handler_field_item_revision_action' => array(
         'parent' => 'views_handler_field',
       ),
+      'versioncontrol_handler_field_item_revision_visual_diffstat' => array(
+        'parent' => 'views_handler_field',
+      ),
       // filter handlers
       'versioncontrol_handler_filter_operation_type' => array(
         'parent' => 'views_handler_filter_in_operator',
diff --git versioncontrol.module versioncontrol.module
index 226b3da..e91fcdd 100644
--- versioncontrol.module
+++ versioncontrol.module
@@ -126,6 +126,22 @@ function versioncontrol_theme() {
   $theme['versioncontrol_user_statistics_account'] = array(
     'arguments' => array('user_stats'),
   );
+  $theme['versioncontrol_diffstat'] = array(
+    'arguments' => array('places', 'results'),
+    'file' => 'includes/versioncontrol_theme.inc'
+  );
+  $theme['versioncontrol_diffstat_addition'] = array(
+    'arguments' => array(),
+    'file' => 'includes/versioncontrol_theme.inc'
+  );
+  $theme['versioncontrol_diffstat_removal'] = array(
+    'arguments' => array(),
+    'file' => 'includes/versioncontrol_theme.inc'
+  );
+  $theme['versioncontrol_diffstat_no_op'] = array(
+    'arguments' => array(),
+    'file' => 'includes/versioncontrol_theme.inc'
+  );
   return $theme;
 }
 
