diff --git features.module features.module
index 5c30610..ec03752 100644
--- features.module
+++ features.module
@@ -284,7 +284,7 @@ function features_include($reset = FALSE) {
     // Features provides integration on behalf of these modules.
     // The features include provides handling for the feature dependencies.
     // Note that ctools is placed last because it implements hooks "dynamically" for other modules.
-    $modules = array('features', 'block', 'context', 'field', 'filter', 'image', 'menu', 'node', 'taxonomy', 'user', 'views', 'ctools');
+    $modules = array('features', 'block', 'context', 'field', 'filter', 'image', 'menu', 'node', 'shortcut', 'taxonomy', 'user', 'views', 'ctools');
 
     foreach (array_filter($modules, 'module_exists') as $module) {
       if (!module_hook($module, 'features_api')) {
diff --git includes/features.shortcut.inc includes/features.shortcut.inc
new file mode 100644
index 0000000..d5d1331
--- /dev/null
+++ includes/features.shortcut.inc
@@ -0,0 +1,89 @@
+<?php
+// $Id$
+
+/**
+ * Implements hook_features_api().
+ */
+function shortcut_features_api() {
+  return array(
+    'shortcut_set' => array(
+      'name' => t('Shortcut set'),
+      'feature_source' => TRUE,
+      'default_hook' => 'shortcut_default_set',
+      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+    ),
+  );
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function shortcut_set_features_export($data, &$export, $module_name = '') {
+  $export['dependencies']['features'] = 'features';
+  $export['dependencies']['shortcut'] = 'shortcut';
+
+  $map = features_get_default_map('menu_links', 'menu_links_features_identifier');
+  foreach ($data as $shortcut_set_name) {
+    $shortcut_set = shortcut_set_load($shortcut_set_name);
+    foreach ($shortcut_set->links as $link) {
+      $identifier = menu_links_features_identifier($link);
+
+      // If this link is provided by a different module, add it as a dependency.
+      if (isset($map[$identifier]) && $map[$identifier] != $module_name) {
+        $export['dependencies'][$map[$identifier]] = $map[$identifier];
+      }
+      else {
+        $export['features']['menu_links'][$identifier] = $identifier;
+      }
+    }
+    $export['features']['shortcut_set'][$shortcut_set_name] = $shortcut_set_name;
+  }
+  return array();
+}
+
+/**
+ * Implements hook_features_export_options().
+ */
+function shortcut_set_features_export_options() {
+  $options = array();
+  foreach (shortcut_sets() as $set) {
+    $options[$set->set_name] = $set->title;
+  }
+  return $options;
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function shortcut_set_features_export_render($module_name, $data, $export = NULL) {
+  $code = array();
+  $code[] = '  $shortcut_sets = array();';
+  foreach ($data as $name) {
+    $shortcut_set = shortcut_set_load($name);
+
+    // Don't export links, these are handled separately.
+    unset ($shortcut_set->links);
+    $code[] = "  \$shortcut_sets['{$name}'] = " . features_var_export($shortcut_set, '  ') .";";
+  }
+  $code[] = "  return \$shortcut_sets;";
+  $code = implode("\n", $code);
+  return array('shortcut_default_set' => $code);
+}
+
+/**
+ * Implementation of hook_features_export_revert().
+ */
+function shortcut_set_features_revert($module) {
+  shortcut_set_features_rebuild($module);
+}
+
+/**
+ * Implementation of hook_features_export_rebuild().
+ */
+function shortcut_set_features_rebuild($module) {
+  if ($defaults = features_get_default('shortcut_set', $module)) {
+    foreach ($defaults as $shortcut_set) {
+      shortcut_set_save($shortcut_set);
+    }
+  }
+}
