diff --git a/uc_extra_fields_pane.features.inc b/uc_extra_fields_pane.features.inc
new file mode 100644
index 0000000000000000000000000000000000000000..bff44d5bad3292e43a7005ad8e9b9176c227c9c3
--- /dev/null
+++ b/uc_extra_fields_pane.features.inc
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * Implementation of hook_features_api().
+ */
+function uc_extra_fields_pane_features_api() {
+  return array(
+    'uc_extra_fields_pane_field' => array(
+      'name' => t('Ubercart fields field'),
+      'feature_source' => TRUE,
+      'default_hook' => 'uc_extra_fields_pane_default_fields',
+      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+    ),
+  );
+}
+
+/**
+ * Implementation of hook_features_export().
+ */
+function uc_extra_fields_pane_field_features_export($data, &$export, $module_name = '') {
+  $export['dependencies']['features'] = 'features';
+  $export['dependencies']['uc_extra_fields_pane'] = 'uc_extra_fields_pane';
+  foreach ($data as $field) {
+    $export['features']['uc_extra_fields_pane_field'][$field] = $field;
+  }
+  return array();
+}
+
+/**
+ * Implementation of hook_features_export_options().
+ */
+function uc_extra_fields_pane_field_features_export_options() {
+  $fields = array();
+  // Query DB directly instead of going through a Profile module function as
+  // the Profile module doesn't provide a good function for this purpose...
+  $db_result = db_query('SELECT db_name, label FROM {uc_extra_fields}');
+  while ($field = db_fetch_object($db_result)) {
+    $fields[$field->db_name] = $field->label;
+  }
+  return $fields;
+}
+
+/**
+ * Implementation of hook_features_export_render().
+ */
+function uc_extra_fields_pane_field_features_export_render($module, $data) {
+  $code = array();
+  $code[] = '  $uc_extra_fields_pane_fields = array();';
+  $code[] = '';
+
+  foreach ($data as $name) {
+    $db_result = db_query("SELECT * FROM {uc_extra_fields} WHERE db_name = '%s'", $name);
+    if ($field = db_fetch_array($db_result)) {
+      unset($field['field_id']);
+      $field['display_settings'] = unserialize($field['display_settings']);
+      $code[] = "  \$uc_extra_fields_pane_fields['{$name}'] = " . features_var_export($field) .";";
+    }
+  }
+  $code[] = "return \$uc_extra_fields_pane_fields;";
+  $code = implode("\n", $code);
+  return array('uc_extra_fields_pane_default_fields' => $code);
+}
+
+/**
+ * Implementation of hook_features_revert().
+ */
+function uc_extra_fields_pane_field_features_revert($module) {
+  uc_extra_fields_pane_field_features_rebuild($module);
+}
+
+/**
+ * Implementation of hook_features_rebuild().
+ */
+function uc_extra_fields_pane_field_features_rebuild($module) {
+  if ($defaults = features_get_default('uc_extra_fields_pane_field', $module)) {
+    foreach ($defaults as $field) {
+      // If the field doesn't exist in the DB at the moment then insert it.
+      if (db_result(db_query("SELECT COUNT(*) FROM {uc_extra_fields} WHERE db_name = '%s'", $field['db_name'])) == 0) {
+        drupal_write_record('uc_extra_fields', $field);
+      }
+      // If the field exists, then update it.
+      else {
+        drupal_write_record('uc_extra_fields', $field, 'db_name');
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/uc_extra_fields_pane.module b/uc_extra_fields_pane.module
index 878ce90c99626f188d1227daab8c4d63cf0064a6..ded5d8a2b3f0c182f5020df56368e203cf67a5a6 100644
--- a/uc_extra_fields_pane.module
+++ b/uc_extra_fields_pane.module
@@ -71,6 +71,15 @@ spl_autoload_register('uc_extra_fields_pane_load_class');
 // -------------------------------------------------------------------
 
 /**
+ * Implementation of hook_init().
+ */
+function uc_extra_fields_pane_init() {
+  if (module_exists('features')) {
+    module_load_include('features.inc', 'uc_extra_fields_pane');
+  }
+}
+
+/**
  * Implementation of hook_help().
  * @param string $path
  * @param array $arg
