diff --git a/core/includes/install.inc b/core/includes/install.inc
index 023e204..b768007 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -866,8 +866,11 @@ function drupal_check_module($module) {
  * a normal Drupal module .info file. For example:
  * - name: The real name of the installation profile for display purposes.
  * - description: A brief description of the profile.
- * - dependencies: An array of shortnames of other modules that this install
- *   profile requires.
+ * - dependencies: An array of shortnames of modules that this install profile
+ *   requires. These modules cannot be disabled later.
+ * - recommends: An array of shortnames of modules that this install profile
+ *   should enable (if found) during installation. These modules can be disabled
+ *   later.
  *
  * Additional, less commonly-used information that can appear in a profile.info
  * file but not in a normal Drupal module .info file includes:
@@ -891,6 +894,7 @@ function drupal_check_module($module) {
  *    description = Start fresh, with only a few modules enabled.
  *    dependencies[] = block
  *    dependencies[] = dblog
+ *    recommends[] = views
  * @endcode
  *
  * @param $profile
@@ -908,6 +912,7 @@ function install_profile_info($profile, $langcode = 'en') {
     // Set defaults for module info.
     $defaults = array(
       'dependencies' => array(),
+      'recommends' => array(),
       'description' => '',
       'distribution_name' => 'Drupal',
       'version' => NULL,
@@ -920,6 +925,7 @@ function install_profile_info($profile, $langcode = 'en') {
     $info['dependencies'] = array_unique(array_merge(
       drupal_required_modules(),
       $info['dependencies'],
+      $info['recommends'],
       ($langcode != 'en' && !empty($langcode) ? array('locale') : array()))
     );
 
diff --git a/core/includes/module.inc b/core/includes/module.inc
index 75ec5b8..4b9db63 100644
--- a/core/includes/module.inc
+++ b/core/includes/module.inc
@@ -296,22 +296,46 @@ function system_list_reset() {
  *     without this module.
  */
 function _module_build_dependencies($files) {
+  $dependencies_graph = array();
+  $recommendations_graph = array();
+
   foreach ($files as $filename => $file) {
-    $graph[$file->name]['edges'] = array();
+    $dependencies_graph[$file->name]['edges'] = array();
+    $recommendations_graph[$file->name]['edges'] = array();
+
+    // Add information about dependencies to a graph.
     if (isset($file->info['dependencies']) && is_array($file->info['dependencies'])) {
       foreach ($file->info['dependencies'] as $dependency) {
         $dependency_data = drupal_parse_dependency($dependency);
-        $graph[$file->name]['edges'][$dependency_data['name']] = $dependency_data;
+        $dependencies_graph[$file->name]['edges'][$dependency_data['name']] = $dependency_data;
+      }
+    }
+
+    // Add information about recommendations to a graph.
+    if (isset($file->info['recommends']) && is_array($file->info['recommends'])) {
+      foreach ($file->info['recommends'] as $recommendation) {
+        $recommendation_data = drupal_parse_dependency($recommendation);
+        $recommendations_graph[$file->name]['edges'][$recommendation_data['name']] = $recommendation_data;
       }
     }
   }
-  $graph_object = new Graph($graph);
-  $graph = $graph_object->searchAndSort();
-  foreach ($graph as $module => $data) {
+
+  $dependencies_graph_object = new Graph($dependencies_graph);
+  $dependencies_graph = $dependencies_graph_object->searchAndSort();
+  foreach ($dependencies_graph as $module => $data) {
     $files[$module]->required_by = isset($data['reverse_paths']) ? $data['reverse_paths'] : array();
     $files[$module]->requires = isset($data['paths']) ? $data['paths'] : array();
     $files[$module]->sort = $data['weight'];
   }
+
+  $recommendations_graph_object = new Graph($recommendations_graph);
+  $recommendations_graph = $recommendations_graph_object->searchAndSort();
+  foreach ($recommendations_graph as $module => $data) {
+    $files[$module]->recommended_by = isset($data['reverse_paths']) ? $data['reverse_paths'] : array();
+    $files[$module]->recommends = isset($data['paths']) ? $data['paths'] : array();
+    $files[$module]->sort = $data['weight'];
+  }
+
   return $files;
 }
 
diff --git a/core/modules/aggregator/aggregator.info b/core/modules/aggregator/aggregator.info
index 5954a87..9ace78c 100644
--- a/core/modules/aggregator/aggregator.info
+++ b/core/modules/aggregator/aggregator.info
@@ -6,3 +6,4 @@ core = 8.x
 configure = admin/config/services/aggregator/settings
 stylesheets[all][] = aggregator.theme.css
 dependencies[] = file
+recommends[] = views
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 1f191ac..1bdb0fc 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -436,8 +436,8 @@ function system_requirements($phase) {
     $profile = drupal_get_profile();
     $files = system_rebuild_module_data();
     foreach ($files as $module => $file) {
-      // Ignore disabled modules and installation profiles.
-      if (!$file->status || $module == $profile) {
+      // Ignore disabled modules.
+      if (!$file->status) {
         continue;
       }
       // Check the module's PHP version.
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 074aa31..1aa9433 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -2778,6 +2778,7 @@ function _system_rebuild_module_data() {
   // Set defaults for module info.
   $defaults = array(
     'dependencies' => array(),
+    'recommends' => array(),
     'description' => '',
     'package' => 'Other',
     'version' => NULL,
@@ -2875,6 +2876,7 @@ function system_rebuild_module_data() {
     // retrieve them without having to rebuild or scan the filesystem.
     state()->set('system.module.files', $files);
   }
+drupal_set_message('<pre>' . print_r($modules_cache, TRUE) . '</pre>');
   return $modules_cache;
 }
 
diff --git a/core/profiles/minimal/minimal.info b/core/profiles/minimal/minimal.info
index 545e85c..fb7cc96 100644
--- a/core/profiles/minimal/minimal.info
+++ b/core/profiles/minimal/minimal.info
@@ -2,6 +2,6 @@ name = Minimal
 description = Build a custom site without pre-configured functionality. Suitable for advanced users.
 version = VERSION
 core = 8.x
-dependencies[] = node
-dependencies[] = block
-dependencies[] = dblog
+recommends[] = node
+recommends[] = block
+recommends[] = dblog
diff --git a/core/profiles/standard/standard.info b/core/profiles/standard/standard.info
index 18136bc..2d5b1b1 100644
--- a/core/profiles/standard/standard.info
+++ b/core/profiles/standard/standard.info
@@ -2,25 +2,25 @@ name = Standard
 description = Install with commonly used features pre-configured.
 version = VERSION
 core = 8.x
-dependencies[] = node
-dependencies[] = block
-dependencies[] = color
-dependencies[] = comment
-dependencies[] = contextual
-dependencies[] = help
-dependencies[] = image
-dependencies[] = menu
-dependencies[] = number
-dependencies[] = options
-dependencies[] = path
-dependencies[] = taxonomy
-dependencies[] = dblog
-dependencies[] = search
-dependencies[] = shortcut
-dependencies[] = toolbar
-dependencies[] = overlay
-dependencies[] = field_ui
-dependencies[] = file
-dependencies[] = rdf
-dependencies[] = views
-dependencies[] = views_ui
+recommends[] = node
+recommends[] = block
+recommends[] = color
+recommends[] = comment
+recommends[] = contextual
+recommends[] = help
+recommends[] = image
+recommends[] = menu
+recommends[] = number
+recommends[] = options
+recommends[] = path
+recommends[] = taxonomy
+recommends[] = dblog
+recommends[] = search
+recommends[] = shortcut
+recommends[] = toolbar
+recommends[] = overlay
+recommends[] = field_ui
+recommends[] = file
+recommends[] = rdf
+recommends[] = views
+recommends[] = views_ui
