diff --git a/backreference.module b/backreference.module
index 045d8d1..6745d30 100644
--- a/backreference.module
+++ b/backreference.module
@@ -390,3 +390,96 @@ function backreference_backreference_field_symmetry_list() {
   return $list;
 }
 
+/**
+ * Implementation of hook_features_api().
+ */
+function backreference_features_api() {
+  return array(
+    'backreference' => array(
+      'name' => t('Backreference'),
+      'default_hook' => 'backreference_defaults',
+      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+    ),
+  );
+}
+
+/**
+ * Implementation of hook_features_export_options().
+ */
+function backreference_features_export_options() {
+  $options = array();
+
+  $result = db_query("SELECT * FROM {backreference_field_symmetry} ORDER BY field_left ASC");
+  while($reference = db_fetch_object($result)) {
+    $options[$reference->field_left] = $reference->field_left . " <-> " . $reference->field_right;
+  }
+
+  return $options;
+}
+
+/**
+ * Get backreference right field given left field.
+ */
+function _backreference_features_get_reference($field_left) {
+  static $cache = array();
+
+  if (! isset($cache[$field_left])) {
+    $cache[$field_left] = db_fetch_array(db_query("SELECT * FROM {backreference_field_symmetry} WHERE field_left = '%s'", $field_left));
+  }
+
+  return $cache[$field_left];
+}
+
+/**
+ * Implementation of hook_features_export().
+ */
+function backreference_features_export($data, &$export, $module_name = '') {
+  $export['dependencies']['backreference'] = 'backreference';
+
+  foreach($data as $field_left) {
+    $reference = _backreference_features_get_reference($field_left);
+    $export['features']['backreference'][$field_left] = $field_left;
+    $export['features']['backreference'][$reference['field_right']] = $reference['field_right'];
+  }
+}
+
+/**
+ * Implementation of hook_features_export_render().
+ */
+function backreference_features_export_render($module_name, $data) {
+  $code = array();
+
+  foreach ($data as $field_left) {
+    $reference = _backreference_features_get_reference($field_left);
+    $code[$field_left] = $reference;
+  }
+
+  $code = '  return ' . features_var_export($code, '  ') . ';';
+  return array('backreference_defaults' => $code);
+}
+
+/**
+ * Implementation of hook_features_revert().
+ */
+function backreference_features_revert($module) {
+  if ($defaults = features_get_default('backreference', $module)) {
+    foreach ($defaults as $field_left => $reference) {
+      db_query("DELETE FROM {backreference_field_symmetry} WHERE field_left = '%s'", $field_left);
+      drupal_write_record('backreference_field_symmetry', $reference);
+    }
+  }
+}
+
+/**
+ * Implementation of hook_features_pipe_component_alter().
+ */
+function backreference_features_pipe_content_alter(&$pipe, $data, $export, $module_name) {
+  if (! empty($data)) {
+    foreach($data as $content) {
+      list($node, $field_left) = explode("-", $content);
+      if ($reference = _backreference_features_get_reference($field_left)) {
+        $pipe['backreference'][$field_left] = $field_left;
+      }
+    }
+  }
+}
