diff --git a/file_metadata_table.api.php b/file_metadata_table.api.php
index 1a58fc4..c1a4fbe 100644
--- a/file_metadata_table.api.php
+++ b/file_metadata_table.api.php
@@ -16,6 +16,11 @@
  *   - 'sort' (Optional): Used to determine how the table field should be
  *       ordered when this metadata type is used for sorting.  Intended values
  *       are 'numeric' for numeric sorting, or 'string' for strcomp() sorting.
+ *   - 'formatter' (Optional): Defines the function name used to format the
+ *       metadata output for this particular metadata type. The function
+ *       defined here will be passed the complete $items array, and should
+ *       return $output suitable for including as the 'data' parameter of a
+ *       table cell (i.e. html output or a render array).
  *
  * @return array
  *   An associative array of metadata information provided by this module.
@@ -25,6 +30,7 @@ function hook_file_metadata_table_metadata_types() {
     'cid' => array(
       'title' => t('Comment ID'),
       'sort' => 'numeric',
+      'formatter' => 'project_issue_generate_cid_jumplink',
     ),
   );
 }
diff --git a/file_metadata_table.module b/file_metadata_table.module
index 98b1db4..d2e2bfc 100644
--- a/file_metadata_table.module
+++ b/file_metadata_table.module
@@ -547,27 +547,32 @@ function file_metadata_table_header($columns) {
  *   The render array or HTML value for inclusion in this cell.
  */
 function file_metadata_table_celldata($column, $item) {
-  switch ($column) {
-    case 'filename':
-      $data = theme('file_link', array('file' => (object) $item));
-      break;
+  $metadata = file_metadata_table_metadata_types();
+  if (!empty($metadata[$column]['formatter']) && function_exists($metadata[$column]['formatter'])) {
+    $data = $metadata[$column]['formatter']($item);
+  }
+  else {
+    switch ($column) {
+      case 'filename':
+        $data = theme('file_link', array('file' => (object) $item));
+        break;
 
-    case 'filesize':
-      $data = format_size($item['filesize']);
-      break;
+      case 'filesize':
+        $data = format_size($item['filesize']);
+        break;
 
-    case 'uid':
-      $data = theme('username', array('account' => user_load($item['uid'])));
-      break;
+      case 'uid':
+        $data = theme('username', array('account' => user_load($item['uid'])));
+        break;
 
-    case 'timestamp':
-      $data = format_date($item['timestamp'], 'short');
+      case 'timestamp':
+        $data = format_date($item['timestamp'], 'short');
 
-    default:
-      $data = check_plain($item[$column]);
-      break;
+      default:
+        $data = check_plain($item[$column]);
+        break;
 
+    }
   }
-
   return $data;
 }
