diff --git a/includes/workflow_fields.features.inc b/includes/workflow_fields.features.inc
new file mode 100644
index 0000000..b2625af
--- /dev/null
+++ b/includes/workflow_fields.features.inc
@@ -0,0 +1,134 @@
+<?php
+/**
+ * @file
+ * Features-related code for workflow_fields.
+ */
+
+/**
+ * Implements component_features_export_options().
+ */
+function workflow_fields_config_features_export_options() {
+  $options = array();
+  $query = 'SELECT type, entity FROM {workflow_fields} GROUP BY type';
+  $results = db_query($query)->fetchAll();
+
+  foreach ($results as $result) {
+    $option_key = $result->type . '|' . $result->entity;
+    $option_value = $result->entity . ': ' . $result->type;
+    $options[$option_key] = $option_value;
+  }
+
+  return $options;
+}
+
+/**
+ * Implements component_features_export().
+ */
+function workflow_fields_config_features_export($data, &$export, $module_name) {
+  $export['dependencies']['workflow_fields'] = 'workflow_fields';
+  foreach ($data as $component) {
+    $export['features']['workflow_fields_config'][$component] = $component;
+  }
+}
+
+/**
+ * Implements component_features_export_render().
+ */
+function workflow_fields_config_features_export_render($module_name, $data, $export = NULL) {
+  $code = array();
+
+  $code[] = '  $workflow_fields = array();';
+
+  foreach ($data as $config) {
+    list($type, $entity) = explode('|', $config);
+    $sid_fields = workflow_fields_config_get_sid_fields($type, $entity);
+
+    $code[] = "  \$workflow_fields['$entity']['$type'] = array(";
+
+    foreach ($sid_fields as $sid => $fields) {
+      $code[] = "    '$sid' => array(";
+
+      foreach ($fields as $field_permissions) {
+        $code[] = "      '{$field_permissions->name}'  => array(";
+        $code[] = "        'visible_roles' => '{$field_permissions->visible_roles}',";
+        $code[] = "        'editable_roles' => '{$field_permissions->editable_roles}',";
+        $code[] = "        'required_roles' => '{$field_permissions->required_roles}',";
+        $code[] = "      ),";
+      }
+
+      $code[] = "    ),";
+    }
+
+    $code[] = "  );";
+  }
+  $code[] = '  return $workflow_fields;';
+  $code = implode("\n", $code);
+  return array('workflow_fields_config_default_config' => $code);
+}
+
+/**
+ * Implements component_features_rebuild().
+ */
+function workflow_fields_config_features_rebuild($module) {
+  $items = module_invoke($module, 'workflow_fields_config_default_config');
+
+  if (!empty($items)) {
+    foreach ($items as $entity => $types) {
+      foreach ($types as $type => $sids) {
+        foreach ($sids as $sid => $fields) {
+          foreach ($fields as $field => $permissions) {
+            workflow_fields_config_save_configuration($entity, $type, $sid, $field, $permissions);
+          }
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Implements component_features_revert().
+ */
+function workflow_fields_config_features_revert($module) {
+  workflow_fields_config_features_rebuild($module);
+}
+
+/**
+ * Gets all workflow_fields configuration for the given entity/type pair.
+ */
+function workflow_fields_config_get_sid_fields($type, $entity) {
+  $sid_fields = array();
+  $query = 'SELECT sid FROM {workflow_fields} WHERE type = :type AND entity = :entity GROUP BY sid';
+  $replacements = array(
+    ':type' => $type,
+    ':entity' => $entity,
+  );
+  $result = db_query($query, $replacements);
+  $rows = $result->fetchCol();
+
+  foreach ($rows as $sid) {
+    $query = 'SELECT name, visible_roles, editable_roles, required_roles from workflow_fields where sid=:sid';
+    $replacements = array(':sid' => $sid);
+    $result = db_query($query, $replacements);
+    $fields = $result->fetchAll();
+    $sid_fields[$sid] = $fields;
+  }
+
+  return $sid_fields;
+}
+
+/**
+ * Saves a single entry on the workflow_fields table.
+ */
+function workflow_fields_config_save_configuration($entity, $type, $sid, $field, $permissions) {
+  $query = 'INSERT INTO {workflow_fields} (entity, type, sid, name, visible_roles, editable_roles, required_roles) VALUES (:entity, :type, :sid, :name, :vroles, :eroles, :rroles)';
+  $replacements = array(
+    ':entity' => $entity,
+    ':type' => $type,
+    ':sid' => $sid,
+    ':name' => $field,
+    ':vroles' => $permissions['visible_roles'],
+    ':eroles' => $permissions['editable_roles'],
+    ':rroles' => $permissions['required_roles'],
+  );
+  db_query($query, $replacements);
+}
diff --git a/workflow_fields.module b/workflow_fields.module
index d6f5404..8ee8002 100644
--- a/workflow_fields.module
+++ b/workflow_fields.module
@@ -33,6 +33,21 @@ function workflow_fields_permission() {
 }
 
 /**
+ * Implements hook_features_api().
+ */
+function workflow_fields_features_api() {
+  return array(
+    'workflow_fields_config' => array(
+      'name' => 'Workflow Fields Configuration',
+      'file' => drupal_get_path('module', 'workflow_fields') . '/includes/workflow_fields.features.inc',
+      'default_hook' => 'workflow_fields_config_default_config',
+      'feature_source' => TRUE,
+      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+    ),
+  );
+}
+
+/**
  * Administration form that renders a table listing of the fields for workflow's content type.
  */
 function workflow_fields_form_workflow_admin_ui_form($form, &$form_state, $workflow, $sid) {
