diff --git a/modules/fields/atom_reference/atom_reference.module b/modules/fields/atom_reference/atom_reference.module
index 70ef257..475b78e 100644
--- a/modules/fields/atom_reference/atom_reference.module
+++ b/modules/fields/atom_reference/atom_reference.module
@@ -405,3 +405,103 @@ function atom_reference_field_widget_error($element, $error, $form, &$form_state
   $name = implode('][', $element['sid']['#array_parents']);
   form_set_error($name, $error['message']);
 }
+
+/**
+ * Provide default field comparison options.
+ */
+function atom_reference_field_diff_default_options($field_type) {
+  return array(
+    'show_id' => 0,
+    'show_type' => 1,
+    'entity_title' => 'Atom',
+  );
+}
+
+/**
+ * Provide a form for setting the field comparison options.
+ */
+function atom_reference_field_diff_options_form($field_type, $settings) {
+  $options_form = array();
+  $options_form['show_id'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Show atom id'),
+    '#default_value' => $settings['show_id'],
+  );
+
+  $options_form['show_type'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Show atom type'),
+    '#default_value' => $settings['show_type'],
+  );
+
+  $options_form['entity_title'] = array(
+    '#type' => 'textfield',
+    '#title' => t('The title to use for the atom entity'),
+    '#default_value' => $settings['entity_title'],
+    '#description' => t('This can be useful if you call Atoms differently on your website, such as Resources.')
+  );
+
+  return $options_form;
+}
+
+/**
+ * Diff field callback for preloading the scald atom entities.
+ */
+function atom_reference_field_diff_view_prepare(&$old_items, &$new_items, $context) {
+  $sids = array();
+  foreach (array_merge_recursive($old_items, $new_items) as $info) {
+    $sids[$info['sid']] = $info['sid'];
+  }
+  $atoms = scald_atom_load_multiple($sids);
+
+  foreach ($old_items as $delta => $info) {
+    $old_items[$delta]['atom'] = isset($atoms[$info['sid']]) ? $atoms[$info['sid']] : NULL;
+  }
+  foreach ($new_items as $delta => $info) {
+    $new_items[$delta]['atom'] = isset($atoms[$info['sid']]) ? $atoms[$info['sid']] : NULL;
+  }
+}
+
+/**
+ * Diff field callback for parsing atom_reference field comparative values.
+ */
+function atom_reference_field_diff_view($items, $context) {
+  $instance = $context['instance'];
+  $settings = $context['settings'];
+
+  $diff_items = array();
+  foreach ($items as $delta => $item) {
+    if (!isset($item['atom'])) {
+      continue;
+    }
+
+    $diff_items[$delta] = $item['atom']->title;
+
+    if ($settings['show_id'] || $settings['show_type']) {
+      $diff_items[$delta] .= ' (';
+    }
+
+    if ($settings['show_type']) {
+      $diff_items[$delta] .= t('!type', array('!type' => ucfirst($item['atom']->type)));
+    }
+
+    if ($settings['show_id']) {
+      if ($settings['show_type']) {
+        $diff_items[$delta] .= ', ';
+      }
+      $diff_items[$delta] .= t(
+        '@entity_name ID: !id',
+        array(
+          '@entity_name' => $settings['entity_title'],
+          '!id' => $item['atom']->sid
+        )
+      );
+    }
+
+    if ($settings['show_id'] || $settings['show_type']) {
+      $diff_items[$delta] .= ')';
+    }
+  }
+
+  return $diff_items;
+}
