diff --git commitlog/commitlog.module commitlog/commitlog.module
index 8d1bd77..c007259 100644
--- commitlog/commitlog.module
+++ commitlog/commitlog.module
@@ -23,31 +23,60 @@ function commitlog_menu() {
     'access arguments' => array($view_access),
     'type' => MENU_SUGGESTED_ITEM,
   );
+  $items['commitlog/feed'] = array(
+    'title' => 'Commit messages',
+    'page callback' => 'commitlog_operations_page',
+    'page arguments' => array('global', 'feed'),
+    'access arguments' => array($view_access),
+    'type' => MENU_SUGGESTED_ITEM,
+  );
   $items['commitlog/repository/%'] = array(
     'title' => 'Commit messages',
     'page callback' => 'commitlog_operations_page',
-    'page arguments' => array('repository', 2),
+    'page arguments' => array('repository', 'page', 2),
+    'access arguments' => array($view_access),
+    'type' => MENU_SUGGESTED_ITEM,
+  );
+  $items['commitlog/repository/%/feed'] = array(
+    'title' => 'Commit messages',
+    'page callback' => 'commitlog_operations_page',
+    'page arguments' => array('repository', 'feed', 2),
     'access arguments' => array($view_access),
     'type' => MENU_SUGGESTED_ITEM,
   );
   $items['commitlog/author/%'] = array(
     'title' => 'Commit messages',
     'page callback' => 'commitlog_operations_page',
-    'page arguments' => array('author', 2),
+    'page arguments' => array('author', 'page', 2),
+    'access arguments' => array($view_access),
+    'type' => MENU_SUGGESTED_ITEM,
+  );
+  $items['commitlog/author/%/feed'] = array(
+    'title' => 'Commit messages',
+    'page callback' => 'commitlog_operations_page',
+    'page arguments' => array('author', 'feed', 2),
     'access arguments' => array($view_access),
     'type' => MENU_SUGGESTED_ITEM,
   );
   $items['commitlog/commit/%/%'] = array(
     'title' => 'Commit',
     'page callback' => 'commitlog_operations_page',
-    'page arguments' => array('commit', 2, 3),
+    'page arguments' => array('commit', 'page', 2, 3),
     'access arguments' => array($view_access),
     'type' => MENU_SUGGESTED_ITEM,
   );
   $items['user/%user/track/code'] = array(
     'title' => 'Commits',
     'page callback' => 'commitlog_operations_page',
-    'page arguments' => array('user', 1),
+    'page arguments' => array('user', 'page', 1),
+    'access arguments' => array($view_access),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 2,
+  );
+  $items['user/%user/track/code/feed'] = array(
+    'title' => 'Commits',
+    'page callback' => 'commitlog_operations_page',
+    'page arguments' => array('user', 'feed', 1),
     'access arguments' => array($view_access),
     'type' => MENU_LOCAL_TASK,
     'weight' => 2,
@@ -97,32 +126,34 @@ function commitlog_ctools_plugin_directory($module, $plugin) {
 /**
  * Page callback for the 'commitlog' family of menu paths.
  *
- * @param $type
- *   What type of commit log listing we're creating.  Supported types are 'author' and 'repository'.
+ * @param $view_type
+ *   What type of commit log listing we're creating.  Supported types are 'author', 'commit', 'global', 'repository' and 'user'.
+ * @param $display_type
+ *   What type of display output we are creating. Supported types are 'page' and 'feed'.
  * @param $argument
  *   The argument with which to filter the view.  This is used as the first argument in the view in question.
  * @param $argument2
  *   Another argument to filter the view.  This is used as the second argument in the view in question.
  */
-function commitlog_operations_page($type = NULL, $argument = NULL, $argument2 = NULL) {
+function commitlog_operations_page($view_type = NULL, $display_type='page', $argument = NULL, $argument2 = NULL) {
   drupal_add_css(drupal_get_path('module', 'commitlog') . '/commitlog.css', 'module');
 
   $view = '';
-  if ($type == 'author' && !is_null($argument)) {
+  if ($view_type == 'author' && !is_null($argument)) {
     $set = versioncontrol_get_views_set('user_commit_view');
     $view = $set->getViewName();
   }
-  else if ($type == 'user' && !is_null($argument)) {
+  else if ($view_type == 'user' && !is_null($argument)) {
     drupal_set_title($argument->name);
     $argument = $argument->uid;
     $set = versioncontrol_get_views_set('user_commit_view');
     $view = $set->getViewName();
   }
-  else if ($type == 'repository' && !is_null($argument)) {
+  else if ($view_type == 'repository' && !is_null($argument)) {
     $set = versioncontrol_get_views_set('repository_commit_view');
     $view = $set->getViewNameByEntity(versioncontrol_repository_load($argument));
   }
-  else if ($type == 'commit' && !is_null($argument) && !is_null($argument2)) {
+  else if ($view_type == 'commit' && !is_null($argument) && !is_null($argument2)) {
     $set = versioncontrol_get_views_set('individual_commit_view');
     $view_name = $set->getViewName();
     $view = views_get_view($view_name);
@@ -140,9 +171,29 @@ function commitlog_operations_page($type = NULL, $argument = NULL, $argument2 =
 
     return $output;
   }
-  else {
+  else { // global
     $set = versioncontrol_get_views_set('global_commit_view');
-    $view = $set->getViewName();
+    $view_name = $set->getViewName();
+
+    if ($display_type == 'feed') {
+      $view = views_get_view($view_name);
+      $view->override_path = 'commitlog/feed';
+      // Basic logic here borrowed from views_embed_view().
+      if (!$view || !$view->access('feed')) {
+        return drupal_not_found();
+      }
+      $output = $view->preview('feed');
+      $title = $view->get_title();
+      if (!empty($title)) {
+        drupal_set_title($title);
+      }
+      drupal_set_header('Content-Type: application/rss+xml; charset=utf-8');
+      print $output;
+      return;
+    }
+    else {
+      $view = $view_name;
+    }
   }
 
   return views_embed_view($view, 'default', $argument);
diff --git commitlog/includes/views/default_views/commitlog_global_commits.view.php commitlog/includes/views/default_views/commitlog_global_commits.view.php
index 2f35567..c854ca9 100644
--- commitlog/includes/views/default_views/commitlog_global_commits.view.php
+++ commitlog/includes/views/default_views/commitlog_global_commits.view.php
@@ -312,3 +312,31 @@ $handler->override_option('style_options', array(
   'grouping' => '',
   'type' => 'ul',
 ));
+$handler = $view->new_display('feed', 'Feed', 'feed');
+$handler->override_option('style_plugin', 'rss');
+$handler->override_option('style_options', array(
+  'mission_description' => FALSE,
+  'description' => '',
+));
+$handler->override_option('row_plugin', 'versioncontrol_operations_rss');
+$handler->override_option('row_options', array(
+  'relationship' => 'none',
+  'single_operation_view' => 'commitlog_individual_commit',
+));
+$handler->override_option('path', 'versioncontrol/garbage/path');
+$handler->override_option('menu', array(
+  'type' => 'none',
+  'title' => '',
+  'description' => '',
+  'weight' => 0,
+  'name' => 'navigation',
+));
+$handler->override_option('tab_options', array(
+  'type' => 'none',
+  'title' => '',
+  'description' => '',
+  'weight' => 0,
+  'name' => 'navigation',
+));
+$handler->override_option('displays', array());
+$handler->override_option('sitename_title', FALSE);
diff --git includes/versioncontrol_theme.inc includes/versioncontrol_theme.inc
index 6614781..047d8b6 100644
--- includes/versioncontrol_theme.inc
+++ includes/versioncontrol_theme.inc
@@ -39,7 +39,15 @@ function theme_versioncontrol_diffstat_no_op() {
   return '<span class="no-op"> </span>';
 }
 
-function theme_versioncontrol_view_row_operation_rss($view, $options, $item) {
-  //FIXME actuallly theme the item
-  return '<pre>' . print_r($item, 1) . '</pre>';
+/**
+ * Generate an RSS item element for one versioncontrol operation.
+ */
+function theme_versioncontrol_view_row_operation_rss($view, $options, $row, $field_alias) {
+  $output = '<item>';
+  $output .= '<title>' . $row->title . '</title>';
+  $output .= '<link>' . $row->link . '</link>';
+  $output .= '<description>' . check_plain($row->description) . '</description>';
+  $output .= empty($row->elements) ? '' : format_xml_elements($row->elements);
+  $output .= '</item>';
+  return $output;
 }
diff --git includes/views/plugins/versioncontrol_plugin_row_operation_rss.inc includes/views/plugins/versioncontrol_plugin_row_operation_rss.inc
index b78a18d..0246be2 100644
--- includes/views/plugins/versioncontrol_plugin_row_operation_rss.inc
+++ includes/views/plugins/versioncontrol_plugin_row_operation_rss.inc
@@ -6,8 +6,8 @@
  */
 
 /**
- * FIXME Plugin which performs a node_view on the resulting object
- * and formats it as an RSS item.
+ * Plugin which render the individual_commit_view on the resulting
+ * object and formats it as an RSS item.
  */
 class versioncontrol_plugin_row_operation_rss extends views_plugin_row {
   public $backends = NULL;
@@ -67,14 +67,12 @@ class versioncontrol_plugin_row_operation_rss extends views_plugin_row {
     //FIXME make sure we have these field are available!
     $repo_id = $row->versioncontrol_repositories_repo_id;
     $revision = $row->versioncontrol_operations_revision;
-    //FIXME I do not know why the next line is failing.
-    $view_output = $view->preview('default', array((string)$repo_id, (string)$vc_op_id));
+    $view_output = $view->preview('default', array($repo_id, $revision));
 
     //FIXME do not assume fields!
     $item = new stdClass();
     $item->title = $view->get_title();
-    $item->link = url(sprintf('commitlog/commit/%s/%s', $repo_id, $revision));
-    //TODO $item->readmore = $node->readmore; <- not necessary?
+    $item->link = url(sprintf('commitlog/commit/%s/%s', $repo_id, $revision), array('absolute' => TRUE));
     $item->elements = array(
       array('key' => 'pubDate', 'value' => gmdate('r', $operation->date)),
       array(
@@ -85,7 +83,7 @@ class versioncontrol_plugin_row_operation_rss extends views_plugin_row {
       ),
       array(
         'key' => 'guid',
-        'value' => 'VCOPID at link_to_indiv_commit_view',
+        'value' => t('VCS Operation !vc_op_id at !base_url', array('!vc_op_id' => $vc_op_id, '!base_url' => $base_url)),
         'attributes' => array('isPermaLink' => 'false')
       ),
     );
@@ -98,10 +96,6 @@ class versioncontrol_plugin_row_operation_rss extends views_plugin_row {
 
     $item->description = $view_output;
 
-    //FIXME just return the them output
-    $output = theme($this->theme_functions(), $this->view, $this->options, $item);
-    $output = '<pre>' . $output . '</pre>';
-    return $output;
+    return theme($this->theme_functions(), $this->view, $this->options, $item, $this->field_alias);
   }
 }
-
