diff --git a/features.module b/features.module
index 5a42eb5..148f0b1 100644
--- a/features.module
+++ b/features.module
@@ -385,7 +385,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', 'locale', 'menu', 'node', 'taxonomy', 'user', 'views', 'ctools');
+    $modules = array('features', 'block', 'context', 'field', 'filter', 'image', 'locale', 'menu', 'node', 'taxonomy', 'user', 'views', 'ctools', 'system');
 
     foreach (array_filter($modules, 'module_exists') as $module) {
       module_load_include('inc', 'features', "includes/features.$module");
diff --git a/includes/features.system.inc b/includes/features.system.inc
new file mode 100644
index 0000000..36d45de
--- /dev/null
+++ b/includes/features.system.inc
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * Implements hook_features_api().
+ */
+function system_features_api() {
+  return array(
+    'system' => array(
+      'name' => t('System (modules and themes)'),
+      'default_hook' => 'features_system_defaults',
+      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+      'feature_source' => TRUE,
+    ),
+  );
+}
+
+/**
+ * Implements hook_features_export_options().
+ */
+function system_features_export_options() {
+  return array(
+    'modules' => t('Enabled modules'),
+  );
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function system_features_export($data, &$export, $module_name = '') {
+  $pipe = array();
+  foreach ($data as $component_name) {
+    if ($component_name == 'modules') {
+      $export['features']['system']['modules'] = 'modules';
+    }
+  }
+  return $pipe;
+}
+
+function _system_features_get_modules($feature_module = NULL) {
+  $modules = module_list();
+  if (!empty($feature_module) && !in_array($feature_module, $modules)) {
+    $modules[$feature_module] = $feature_module;
+  }
+  asort($modules);
+  return $modules;
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function system_features_export_render($module, $data, $export = NULL) {
+  $code = array();
+  $code[] = '  $system = array();';
+  $code[] = '';
+
+  foreach ($data as $name) {
+    if ($name == 'modules') {
+      $system_export = features_var_export(_system_features_get_modules(), '  ');
+      $code[] = "  \$system['modules'] = {$system_export};";
+    }
+  }
+
+  $code[] = '';
+  $code[] = '  return $system;';
+  $code = implode("\n", $code);
+  return array('features_system_defaults' => $code);
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function system_features_revert($module) {
+  $data = features_get_default('system', $module);
+  if (!empty($data['modules'])) {
+    $current_enabled_modules = module_list();
+    if ($enable_modules = array_diff_key($data['modules'], $current_enabled_modules)) {
+      module_enable($enable_modules);
+    }
+    if ($disable_modules = array_diff_key($current_enabled_modules, $data['modules'])) {
+      module_disable($disable_modules);
+    }
+  }
+}
