diff --git a/core/includes/common.inc b/core/includes/common.inc
index c117d43e4d39574cca3c5bceb71618f08b42d4d6..58e4c082fea504a5574b688e6e6da4072e32c798 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -7367,7 +7367,11 @@ function drupal_flush_all_caches() {
   system_rebuild_theme_data();
   drupal_theme_rebuild();
 
-  node_types_rebuild();
+  // @todo D8: Split cache flushing from rebuilding.
+  // @see http://drupal.org/node/996236
+  if (module_exists('node')) {
+    node_types_rebuild();
+  }
   // node_menu() defines menu items based on node types so it needs to come
   // after node types are rebuilt.
   menu_rebuild();
diff --git a/core/includes/module.inc b/core/includes/module.inc
index f61436e8c56da58a3081cfd75993fb49c98d8578..1a52a8046d343c8fb68db0e4168b2ada91dad3dd 100644
--- a/core/includes/module.inc
+++ b/core/includes/module.inc
@@ -520,11 +520,6 @@ function module_disable($module_list, $disable_dependents = TRUE) {
 
   foreach ($module_list as $module) {
     if (module_exists($module)) {
-      // Check if node_access table needs rebuilding.
-      if (!node_access_needs_rebuild() && module_hook($module, 'node_grants')) {
-        node_access_needs_rebuild(TRUE);
-      }
-
       module_load_install($module);
       module_invoke($module, 'disable');
       db_update('system')
@@ -549,12 +544,6 @@ function module_disable($module_list, $disable_dependents = TRUE) {
     registry_update();
     _system_update_bootstrap_status();
   }
-
-  // If there remains no more node_access module, rebuilding will be
-  // straightforward, we can do it right now.
-  if (node_access_needs_rebuild() && count(module_implements('node_grants')) == 0) {
-    node_access_rebuild();
-  }
 }
 
 /**
diff --git a/core/includes/path.inc b/core/includes/path.inc
index 1fac2352140c180bbf9da662806da8b4745796aa..9ae18754827927c31f3531593d12ed492f4a5d6d 100644
--- a/core/includes/path.inc
+++ b/core/includes/path.inc
@@ -16,7 +16,7 @@ function drupal_path_initialize() {
   // Ensure $_GET['q'] is set before calling drupal_normal_path(), to support
   // path caching with hook_url_inbound_alter().
   if (empty($_GET['q'])) {
-    $_GET['q'] = variable_get('site_frontpage', 'node');
+    $_GET['q'] = variable_get('site_frontpage', 'user');
   }
   $_GET['q'] = drupal_get_normal_path($_GET['q']);
 }
@@ -292,7 +292,7 @@ function drupal_is_front_page() {
   if (!isset($is_front_page)) {
     // As drupal_path_initialize updates $_GET['q'] with the 'site_frontpage' path,
     // we can check it against the 'site_frontpage' variable.
-    $is_front_page = ($_GET['q'] == variable_get('site_frontpage', 'node'));
+    $is_front_page = ($_GET['q'] == variable_get('site_frontpage', 'user'));
   }
 
   return $is_front_page;
@@ -323,7 +323,7 @@ function drupal_match_path($path, $patterns) {
     $replacements = array(
       '|',
       '.*',
-      '\1' . preg_quote(variable_get('site_frontpage', 'node'), '/') . '\2'
+      '\1' . preg_quote(variable_get('site_frontpage', 'user'), '/') . '\2'
     );
     $patterns_quoted = preg_quote($patterns, '/');
     $regexps[$patterns] = '/^(' . preg_replace($to_replace, $replacements, $patterns_quoted) . ')$/';
diff --git a/core/modules/book/book.info b/core/modules/book/book.info
index 15984ad1476fccaf2dbd57d6f8f69c55fcd154f5..f370800e8318d9732fd9cee5fb1536ac8ebe1c61 100644
--- a/core/modules/book/book.info
+++ b/core/modules/book/book.info
@@ -3,6 +3,7 @@ description = Allows users to create and organize related content in an outline.
 package = Core
 version = VERSION
 core = 8.x
+dependencies[] = node
 files[] = book.test
 configure = admin/content/book/settings
 stylesheets[all][] = book.theme.css
diff --git a/core/modules/comment/comment.info b/core/modules/comment/comment.info
index 606f46d5c89a03fdbd68582d2b4fede26f480b95..db6dc2c0d9a919c85b22c8349e76c15bc011cf30 100644
--- a/core/modules/comment/comment.info
+++ b/core/modules/comment/comment.info
@@ -3,6 +3,7 @@ description = Allows users to comment on and discuss published content.
 package = Core
 version = VERSION
 core = 8.x
+dependencies[] = node
 dependencies[] = text
 dependencies[] = entity
 files[] = comment.entity.inc
diff --git a/core/modules/field_ui/field_ui.test b/core/modules/field_ui/field_ui.test
index adfd90012d92a0de57c3206f22a3f1dce6874ce8..c2e3a9820cc3aa49dc6166c6c4fd88c289d8768f 100644
--- a/core/modules/field_ui/field_ui.test
+++ b/core/modules/field_ui/field_ui.test
@@ -18,6 +18,7 @@ class FieldUITestCase extends DrupalWebTestCase {
     if (isset($modules[0]) && is_array($modules[0])) {
       $modules = $modules[0];
     }
+    $modules[] = 'node';
     $modules[] = 'field_ui';
     $modules[] = 'field_test';
     $modules[] = 'taxonomy';
diff --git a/core/modules/forum/forum.info b/core/modules/forum/forum.info
index cb6e3e76e19c03110f94ae2ecc3d8d70bd9e3275..f202f9e0d57d9ff6879ac201ec1069ff7cebd93d 100644
--- a/core/modules/forum/forum.info
+++ b/core/modules/forum/forum.info
@@ -1,5 +1,6 @@
 name = Forum
 description = Provides discussion forums.
+dependencies[] = node
 dependencies[] = taxonomy
 dependencies[] = comment
 package = Core
diff --git a/core/modules/help/help.module b/core/modules/help/help.module
index 773a52df98fe711909d25d1a196067cc6d6a5c81..6f7322e6538f35abd809d8aa4223233493586e4b 100644
--- a/core/modules/help/help.module
+++ b/core/modules/help/help.module
@@ -43,7 +43,10 @@ function help_help($path, $arg) {
       $output .= '<li>' . t('<strong>Configure your website</strong> Once logged in, visit the <a href="@admin">administration section</a>, where you can <a href="@config">customize and configure</a> all aspects of your website.', array('@admin' => url('admin'), '@config' => url('admin/config'))) . '</li>';
       $output .= '<li>' . t('<strong>Enable additional functionality</strong> Next, visit the <a href="@modules">module list</a> and enable features which suit your specific needs. You can find additional modules in the <a href="@download_modules">Drupal modules download section</a>.', array('@modules' => url('admin/modules'), '@download_modules' => 'http://drupal.org/project/modules')) . '</li>';
       $output .= '<li>' . t('<strong>Customize your website design</strong> To change the "look and feel" of your website, visit the <a href="@themes">themes section</a>. You may choose from one of the included themes or download additional themes from the <a href="@download_themes">Drupal themes download section</a>.', array('@themes' => url('admin/appearance'), '@download_themes' => 'http://drupal.org/project/themes')) . '</li>';
-      $output .= '<li>' . t('<strong>Start posting content</strong> Finally, you can <a href="@content">add new content</a> for your website.', array('@content' => url('node/add'))) . '</li>';
+      // Display a link to the create content page if Node module is enabled.
+      if (module_exists('node')) {
+        $output .= '<li>' . t('<strong>Start posting content</strong> Finally, you can <a href="@content">add new content</a> for your website.', array('@content' => url('node/add'))) . '</li>';
+      }
       $output .= '</ol>';
       $output .= '<p>' . t('For more information, refer to the specific topics listed in the next section or to the <a href="@handbook">online Drupal handbooks</a>. You may also post at the <a href="@forum">Drupal forum</a> or view the wide range of <a href="@support">other support options</a> available.', array('@help' => url('admin/help'), '@handbook' => 'http://drupal.org/handbooks', '@forum' => 'http://drupal.org/forum', '@support' => 'http://drupal.org/support')) . '</p>';
       return $output;
diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index 7f80634f8bd324b4253598dd2a2357136e6a612a..50555ffb26cbb5d1bad74e00617c57a81f0fb420 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -73,9 +73,11 @@ function locale_uninstall() {
     variable_del("locale_language_providers_weight_$type");
   }
 
-  foreach (node_type_get_types() as $type => $content_type) {
-    $setting = variable_del("language_content_type_$type");
-  }
+  // Remove all node type language variables. Node module might have been
+  // enabled, but may be disabled, so use a wildcard delete.
+  db_delete('variable')
+    ->condition('name', db_like('language_content_type_') . '%', 'LIKE')
+    ->execute();
 }
 
 /**
diff --git a/core/modules/node/node.info b/core/modules/node/node.info
index 2e410ed7a4b7298704f2e13bc09317fbda429648..33b5dd2457b14c98bf5da9b5dcf34472b46c2f0e 100644
--- a/core/modules/node/node.info
+++ b/core/modules/node/node.info
@@ -5,7 +5,6 @@ version = VERSION
 core = 8.x
 files[] = node.module
 files[] = node.test
-required = TRUE
 dependencies[] = entity
 configure = admin/structure/types
 stylesheets[all][] = node.css
diff --git a/core/modules/node/node.install b/core/modules/node/node.install
index 654624cd2169bcc7d942970c180f4522ef8c9a4f..d4e8cd03c0913b9940271ad1a4d54e54ac6defcb 100644
--- a/core/modules/node/node.install
+++ b/core/modules/node/node.install
@@ -443,6 +443,38 @@ function node_install() {
     ->execute();
 }
 
+/**
+ * Implements hook_uninstall().
+ */
+function node_uninstall() {
+  // Delete node type variables.
+  $types = db_query('SELECT type FROM {node_type}')->fetchCol();
+  foreach ($types as $type) {
+    db_delete('variable')
+      ->condition(db_or()
+        ->condition('name', 'node_preview_' . $type)
+        ->condition('name', 'node_options_' . $type)
+        ->condition('name', 'node_submitted_' . $type)
+        ->condition('name', 'node_permissions_' . $type)
+      )
+      ->execute();
+  }
+
+  // Delete node search ranking variables.
+  // @see node_ranking(), _node_rankings()
+  variable_del('node_rank_relevance');
+  variable_del('node_rank_sticky');
+  variable_del('node_rank_promote');
+  variable_del('node_rank_recent');
+
+  // Delete remaining general module variables.
+  variable_del('node_access_needs_rebuild');
+  variable_del('node_admin_theme');
+  variable_del('node_cron_last');
+  variable_del('node_recent_block_count');
+  variable_del('default_nodes_main');
+}
+
 /**
  * Fetches node types directly from the database.
  *
@@ -469,3 +501,30 @@ function _update_7000_node_get_types() {
   }
   return $node_types;
 }
+
+/**
+ * @addtogroup updates-7.x-to-8.x
+ * @{
+ */
+
+/**
+ * Set 'node' as front page path if it implicitly was before.
+ *
+ * Node module became optional. The default front page path was changed to
+ * 'user'. Since 'node' was the implicit default front page path previously and
+ * may not have been explicitly configured as such, this update ensures that the
+ * old implicit default is still the default.
+ *
+ * @see http://drupal.org/node/375397
+ */
+function node_update_8000() {
+  $front_page = variable_get('site_frontpage');
+  if (!isset($front_page)) {
+    variable_set('site_frontpage', 'node');
+  }
+}
+
+/**
+ * @} End of "addtogroup updates-7.x-to-8.x"
+ * The next series of updates should start at 9000.
+ */
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 2910e1aca35425181344309756c311770ea974b8..6da41c251cff8f942900d973dac9b3efeeb753c4 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -2895,6 +2895,31 @@ function node_search_validate($form, &$form_state) {
   }
 }
 
+/**
+ * Implements hook_form_FORM_ID_alter().
+ *
+ * Alters the theme form to use the admin theme on node editing.
+ *
+ * @see node_form_system_themes_admin_form_submit()
+ */
+function node_form_system_themes_admin_form_alter(&$form, &$form_state, $form_id) {
+  $form['admin_theme']['node_admin_theme'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Use the administration theme when editing or creating content'),
+    '#default_value' => variable_get('node_admin_theme', '0'),
+  );
+  $form['#submit'][] = 'node_form_system_themes_admin_form_submit';
+}
+
+/**
+ * Form submission handler for system_themes_admin_form().
+ *
+ * @see node_form_system_themes_admin_form_alter()
+ */
+function node_form_system_themes_admin_form_submit($form, &$form_state) {
+  variable_set('node_admin_theme', $form_state['values']['node_admin_theme']);
+}
+
 /**
  * @defgroup node_access Node access rights
  * @{
@@ -4080,6 +4105,28 @@ function node_modules_enabled($modules) {
   }
 }
 
+/**
+ * Implements hook_modules_disabled().
+ */
+function node_modules_disabled($modules) {
+  // Check whether any of the disabled modules implemented hook_node_grants(),
+  // in which case the node access table needs to be rebuilt.
+  foreach ($modules as $module) {
+    // At this point, the module is already disabled, but its code is still
+    // loaded in memory. Module functions must no longer be called. We only
+    // check whether a hook implementation function exists and do not invoke it.
+    if (!node_access_needs_rebuild() && module_hook($module, 'node_grants')) {
+      node_access_needs_rebuild(TRUE);
+    }
+  }
+
+  // If there remains no more node_access module, rebuilding will be
+  // straightforward, we can do it right now.
+  if (node_access_needs_rebuild() && count(module_implements('node_grants')) == 0) {
+    node_access_rebuild();
+  }
+}
+
 /**
  * Controller class for nodes.
  *
diff --git a/core/modules/overlay/overlay.module b/core/modules/overlay/overlay.module
index 5433d3e5042e644dcfbcf2992181de9ad2a3c5cf..8f62c017a73fb44b7c9910b52d4174ffd8fc9221 100644
--- a/core/modules/overlay/overlay.module
+++ b/core/modules/overlay/overlay.module
@@ -635,7 +635,7 @@ function overlay_overlay_parent_initialize() {
   // Let the client side know which paths are administrative.
   $paths = path_get_admin_paths();
   foreach ($paths as &$type) {
-    $type = str_replace('<front>', variable_get('site_frontpage', 'node'), $type);
+    $type = str_replace('<front>', variable_get('site_frontpage', 'user'), $type);
   }
   drupal_add_js(array('overlay' => array('paths' => $paths)), 'setting');
   // Pass along the Ajax callback for rerendering sections of the parent window.
diff --git a/core/modules/poll/poll.info b/core/modules/poll/poll.info
index de6ac250cee65412a8ccc11b177d2ad5d2c5b198..dbdd6213b03db651d4e2a36bd3a2f89b21a635e5 100644
--- a/core/modules/poll/poll.info
+++ b/core/modules/poll/poll.info
@@ -3,5 +3,6 @@ description = Allows your site to capture votes on different topics in the form
 package = Core
 version = VERSION
 core = 8.x
+dependencies[] = node
 files[] = poll.test
 stylesheets[all][] = poll.css
diff --git a/core/modules/rdf/tests/rdf_test.info b/core/modules/rdf/tests/rdf_test.info
index b168815f8f565d75f58f23fae7c7dbe005587dfa..87a6dac5ff0ae77b7d4824cd808d1bd78eb0bb3c 100644
--- a/core/modules/rdf/tests/rdf_test.info
+++ b/core/modules/rdf/tests/rdf_test.info
@@ -4,3 +4,4 @@ package = Testing
 version = VERSION
 core = 8.x
 hidden = TRUE
+dependencies[] = rdf
diff --git a/core/modules/shortcut/shortcut.install b/core/modules/shortcut/shortcut.install
index 60ee6be8ddf02a14072edaded0c989b8056b264c..7aee9c9ca0686ddf5a18538036b6d0db968c586f 100644
--- a/core/modules/shortcut/shortcut.install
+++ b/core/modules/shortcut/shortcut.install
@@ -13,18 +13,19 @@ function shortcut_install() {
   // Create an initial default shortcut set.
   $shortcut_set = new stdClass();
   $shortcut_set->title = $t('Default');
-  $shortcut_set->links = array(
-    array(
+  $shortcut_set->links = array();
+  if (module_exists('node')) {
+    $shortcut_set->links[] = array(
       'link_path' => 'node/add',
       'link_title' => $t('Add content'),
       'weight' => -20,
-    ),
-    array(
+    );
+    $shortcut_set->links[] = array(
       'link_path' => 'admin/content',
       'link_title' => $t('Find content'),
       'weight' => -19,
-    ),
-  );
+    );
+  }
   // If Drupal is being installed, rebuild the menu before saving the shortcut
   // set, to make sure the links defined above can be correctly saved. (During
   // installation, the menu might not have been built at all yet, or it might
diff --git a/core/modules/simpletest/tests/database_test.test b/core/modules/simpletest/tests/database_test.test
index f54c5d56b9ce3bbb6ef8443af2c0249dfa4f6a3f..16c09c654c4fb3e9257bba878d0da10ce885ef1a 100644
--- a/core/modules/simpletest/tests/database_test.test
+++ b/core/modules/simpletest/tests/database_test.test
@@ -19,7 +19,12 @@ class DatabaseTestCase extends DrupalWebTestCase {
   protected $profile = 'testing';
 
   function setUp() {
-    parent::setUp('database_test');
+    $modules = func_get_args();
+    if (isset($modules[0]) && is_array($modules[0])) {
+      $modules = $modules[0];
+    }
+    $modules[] = 'database_test';
+    parent::setUp($modules);
 
     $schema['test'] = drupal_get_schema('test');
     $schema['test_people'] = drupal_get_schema('test_people');
@@ -377,10 +382,6 @@ class DatabaseFetch2TestCase extends DatabaseTestCase {
     );
   }
 
-  function setUp() {
-    parent::setUp();
-  }
-
   // Confirm that we can fetch a record into an indexed array explicitly.
   function testQueryFetchNum() {
     $records = array();
@@ -2218,24 +2219,14 @@ class DatabaseSelectComplexTestCase2 extends DatabaseTestCase {
   }
 
   function setUp() {
-    DrupalWebTestCase::setUp('database_test', 'node_access_test');
-
-    $schema['test'] = drupal_get_schema('test');
-    $schema['test_people'] = drupal_get_schema('test_people');
-    $schema['test_one_blob'] = drupal_get_schema('test_one_blob');
-    $schema['test_two_blobs'] = drupal_get_schema('test_two_blobs');
-    $schema['test_task'] = drupal_get_schema('test_task');
-
-    $this->installTables($schema);
-
-    $this->addSampleData();
+    parent::setUp(array('node_access_test'));
   }
 
   /**
    * Test that we can join on a query.
    */
   function testJoinSubquery() {
-    $acct = $this->drupalCreateUser(array('access content'));
+    $acct = $this->drupalCreateUser();
     $this->drupalLogin($acct);
 
     $query = db_select('test_task', 'tt', array('target' => 'slave'));
@@ -2754,6 +2745,10 @@ class DatabaseRegressionTestCase extends DatabaseTestCase {
     );
   }
 
+  function setUp() {
+    parent::setUp(array('node'));
+  }
+
   /**
    * Regression test for #310447.
    *
@@ -3045,10 +3040,6 @@ class DatabaseBasicSyntaxTestCase extends DatabaseTestCase {
     );
   }
 
-  function setUp() {
-    parent::setUp('database_test');
-  }
-
   /**
    * Test for string concatenation.
    */
@@ -3146,10 +3137,6 @@ class DatabaseInvalidDataTestCase extends DatabaseTestCase {
     );
   }
 
-  function setUp() {
-    parent::setUp('database_test');
-  }
-
   /**
    * Traditional SQL database systems abort inserts when invalid data is encountered.
    */
@@ -3219,10 +3206,6 @@ class DatabaseQueryTestCase extends DatabaseTestCase {
     );
   }
 
-  function setUp() {
-    parent::setUp('database_test');
-  }
-
   /**
    * Test that we can specify an array of values in the query by simply passing in an array.
    */
diff --git a/core/modules/simpletest/tests/theme.test b/core/modules/simpletest/tests/theme.test
index b47e37978212e330422d7bd93c2a559e659bbdad..6980b191b08fa6b1daa07016ab9f0787b0ed8cac 100644
--- a/core/modules/simpletest/tests/theme.test
+++ b/core/modules/simpletest/tests/theme.test
@@ -66,7 +66,8 @@ class ThemeUnitTest extends DrupalWebTestCase {
     $q = $_GET['q'];
     // Set $_GET['q'] to node because theme_get_suggestions() will query it to
     // see if we are on the front page.
-    $_GET['q'] = variable_get('site_frontpage', 'node');
+    variable_set('site_frontpage', 'node');
+    $_GET['q'] = 'node';
     $suggestions = theme_get_suggestions(explode('/', $_GET['q']), 'page');
     // Set it back to not annoy the batch runner.
     $_GET['q'] = $q;
@@ -264,7 +265,7 @@ class ThemeFunctionsTestCase extends DrupalWebTestCase {
     // Required to verify the "active" class in expected links below, and
     // because the current path is different when running tests manually via
     // simpletest.module ('batch') and via the testing framework ('').
-    $_GET['q'] = variable_get('site_frontpage', 'node');
+    $_GET['q'] = variable_get('site_frontpage', 'user');
 
     // Verify that a list of links is properly rendered.
     $variables = array();
diff --git a/core/modules/simpletest/tests/theme_test.module b/core/modules/simpletest/tests/theme_test.module
index 400902d3ac7b205d88d6b5b2591711ca24defe50..2a2552aede40640e53c3d8937e1ec93e96c9ef36 100644
--- a/core/modules/simpletest/tests/theme_test.module
+++ b/core/modules/simpletest/tests/theme_test.module
@@ -26,14 +26,14 @@ function theme_test_menu() {
   $items['theme-test/suggestion'] = array(
     'title' => 'Suggestion',
     'page callback' => '_theme_test_suggestion',
-    'access arguments' => array('access content'),
+    'access callback' => TRUE,
     'theme callback' => '_theme_custom_theme',
     'type' => MENU_CALLBACK,
   );
   $items['theme-test/alter'] = array(
     'title' => 'Suggestion',
     'page callback' => '_theme_test_alter',
-    'access arguments' => array('access content'),
+    'access callback' => TRUE,
     'theme callback' => '_theme_custom_theme',
     'type' => MENU_CALLBACK,
   );
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 6dca80b88b723940fb66a0b15be66f71db6ef9d6..4a359be901ccd4877fe190b9ecf4816e1fb0e789 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -260,11 +260,6 @@ function system_themes_admin_form($form, &$form_state, $theme_options) {
     '#description' => t('Choose "Default theme" to always use the same theme as the rest of the site.'),
     '#default_value' => variable_get('admin_theme', 0),
   );
-  $form['admin_theme']['node_admin_theme'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Use the administration theme when editing or creating content'),
-    '#default_value' => variable_get('node_admin_theme', '0'),
-  );
   $form['admin_theme']['actions'] = array('#type' => 'actions');
   $form['admin_theme']['actions']['submit'] = array(
     '#type' => 'submit',
@@ -279,7 +274,6 @@ function system_themes_admin_form($form, &$form_state, $theme_options) {
 function system_themes_admin_form_submit($form, &$form_state) {
   drupal_set_message(t('The configuration options have been saved.'));
   variable_set('admin_theme', $form_state['values']['admin_theme']);
-  variable_set('node_admin_theme', $form_state['values']['node_admin_theme']);
 }
 
 /**
@@ -1487,7 +1481,7 @@ function system_site_information_settings() {
   $form['front_page']['site_frontpage'] = array(
     '#type' => 'textfield',
     '#title' => t('Default front page'),
-    '#default_value' => (variable_get('site_frontpage')!='node'?drupal_get_path_alias(variable_get('site_frontpage', 'node')):''),
+    '#default_value' => (variable_get('site_frontpage') != 'user' ? drupal_get_path_alias(variable_get('site_frontpage', 'user')) : ''),
     '#size' => 40,
     '#description' => t('Optionally, specify a relative URL to display as the front page.  Leave blank to display the default content feed.'),
     '#field_prefix' => url(NULL, array('absolute' => TRUE)) . (variable_get('clean_url', 0) ? '' : '?q='),
@@ -1497,8 +1491,8 @@ function system_site_information_settings() {
     '#default_value' => variable_get('default_nodes_main', 10),
     '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30)),
     '#description' => t('The maximum number of posts displayed on overview pages such as the front page.'),
-    '#access' => (variable_get('site_frontpage')=='node'),
-  );  
+    '#access' => (variable_get('site_frontpage') == 'node'),
+  );
   $form['error_page'] = array(
     '#type' => 'fieldset',
     '#title' => t('Error pages'),
@@ -1535,8 +1529,8 @@ function system_site_information_settings_validate($form, &$form_state) {
   }
   // Check for empty front page path.
   if (empty($form_state['values']['site_frontpage'])) {
-    // Set to default "node".
-    form_set_value($form['front_page']['site_frontpage'], 'node', $form_state);
+    // Set to default "user".
+    form_set_value($form['front_page']['site_frontpage'], 'user', $form_state);
   }
   else {
     // Get the normal path of the front page.
diff --git a/profiles/minimal/minimal.info b/profiles/minimal/minimal.info
index c384680a3d9eb92e075954849f608e70a5c2d2a9..f2219481d2890bc47a110689d1847ab4a552d729 100644
--- a/profiles/minimal/minimal.info
+++ b/profiles/minimal/minimal.info
@@ -2,6 +2,7 @@ name = Minimal
 description = Start with only a few modules enabled.
 version = VERSION
 core = 8.x
+dependencies[] = node
 dependencies[] = block
 dependencies[] = dblog
 files[] = minimal.profile
diff --git a/profiles/minimal/minimal.install b/profiles/minimal/minimal.install
index 6c56aecd2e85d9850501196954341f77fc6cc867..d5b85c5f23dd5fd1ed4b4345e9c85c5be76922d2 100644
--- a/profiles/minimal/minimal.install
+++ b/profiles/minimal/minimal.install
@@ -72,6 +72,9 @@ function minimal_install() {
   }
   $query->execute();
 
+  // Set front page to "node".
+  variable_set('site_frontpage', 'node');
+
   // Allow visitor account creation, but with administrative approval.
   variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
 
diff --git a/profiles/standard/standard.info b/profiles/standard/standard.info
index 56e43086a839dd44f6e1cda3e31d3f3901130c2e..e21c18c89e2b0fb5a3f976332842135b1b33fc4b 100644
--- a/profiles/standard/standard.info
+++ b/profiles/standard/standard.info
@@ -2,6 +2,7 @@ name = Standard
 description = Install with commonly used features pre-configured.
 version = VERSION
 core = 8.x
+dependencies[] = node
 dependencies[] = block
 dependencies[] = color
 dependencies[] = comment
diff --git a/profiles/standard/standard.install b/profiles/standard/standard.install
index 99657797a2ecb35efdbd759310b4115768e6b699..e570c184c4da3bc34b5d1ee3a59aff4f19e5a6da 100644
--- a/profiles/standard/standard.install
+++ b/profiles/standard/standard.install
@@ -199,6 +199,9 @@ function standard_install() {
   }
   $query->execute();
 
+  // Set front page to "node".
+  variable_set('site_frontpage', 'node');
+
   // Insert default pre-defined node types into the database. For a complete
   // list of available node type attributes, refer to the node type API
   // documentation at: http://api.drupal.org/api/HEAD/function/hook_node_info.
diff --git a/profiles/testing/testing.install b/profiles/testing/testing.install
index 192704d75191541436c4fde16a004a86de2460e2..19092d424020deedd4c90c3168c6f382390b753d 100644
--- a/profiles/testing/testing.install
+++ b/profiles/testing/testing.install
@@ -8,8 +8,4 @@
 function testing_install() {
   // Allow visitor account creation, but with administrative approval.
   variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
-
-  // Enable default permissions for system roles.
-  user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access content'));
-  user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access content'));
 }