diff --git a/menu_block.features.inc b/menu_block.features.inc
new file mode 100644
index 0000000..7ca092e
--- /dev/null
+++ b/menu_block.features.inc
@@ -0,0 +1,85 @@
+<?php
+
+define('MENU_BLOCK_FEATURES_PREFIX', 'menu_block__');
+
+function _menu_block_features_real_delta($delta) {
+  $strlen = strlen(MENU_BLOCK_FEATURES_PREFIX);
+  return strpos($delta, MENU_BLOCK_FEATURES_PREFIX) === 0 ? substr($delta, $strlen) : $delta;
+}
+
+/**
+ * Implements hook_features_export_options().
+ */
+function menu_block_features_export_options() {
+  module_load_include('inc', 'menu_block', 'menu_block.admin');
+  $deltas = variable_get('menu_block_ids', array());
+
+  // Less simple.
+  $blocks = array();
+  foreach ($deltas as $delta) {
+    $config = menu_block_get_config($delta);
+    $blocks[MENU_BLOCK_FEATURES_PREFIX . $delta] = _menu_block_format_title($config);
+  }
+
+  ksort($blocks);
+  return $blocks;
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function menu_block_features_export($data, &$export, $module_name = '') {
+  $pipe = array();
+
+  $export['dependencies']['features'] = 'features';
+  $export['dependencies']['menu_block'] = 'menu_block';
+  $export['features']['menu_block'] = $data;
+
+  return $pipe;
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function menu_block_features_export_render($module, $data) {
+  ksort($data);
+
+  $code = array();
+  foreach ($data as $delta) {
+    $real_delta = _menu_block_features_real_delta($delta);
+    $config = menu_block_get_config($real_delta);
+    $config['exported_to_code'] = TRUE;
+    $code[$delta] = $config;
+  }
+
+  $code = "  return ". features_var_export($code, '  ') .";";
+
+  return array('menu_block_features_default' => $code);
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function menu_block_features_revert($module) {
+  menu_block_features_rebuild($module);
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function menu_block_features_rebuild($module) {
+  $blocks = module_invoke($module, 'menu_block_features_default');
+
+  $block_ids = variable_get('menu_block_ids', array());
+  $block_ids = array_combine($block_ids, $block_ids);
+  foreach ($blocks as $delta => $block) {
+    $real_delta = _menu_block_features_real_delta($delta);
+
+    unset($block['exported_to_code']);
+    $block['parent'] = $block['menu_name'] . ':' . $block['parent_mlid'];
+    menu_block_block_save($real_delta, $block);
+
+    $block_ids[$real_delta] = $real_delta;
+  }
+  variable_set('menu_block_ids', array_values($block_ids));
+}
diff --git a/menu_block.module b/menu_block.module
index 782d09c..1a5b8f9 100644
--- a/menu_block.module
+++ b/menu_block.module
@@ -736,3 +736,17 @@ function book_menu_block_get_sort_menus() {
     '/^book\-toc\-.+/' => t('Book navigation'),
   );
 }
+
+/**
+ * Implements hook_features_api().
+ */
+function menu_block_features_api() {
+  return array(
+    'menu_block' => array(
+      'name' => t('Menu block'),
+      'feature_source' => TRUE,
+      'default_hook' => 'menu_block_features_default',
+      'file' => drupal_get_path('module', 'menu_block') . '/menu_block.features.inc',
+    ),
+  );
+}
