diff --git a/core/includes/common.inc b/core/includes/common.inc
index b4012d8287c9d77bb381d53581ee0c0ec8e5c909..9da67ac903120c2b21e573d4708dad224def25fb 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -7367,11 +7367,7 @@ function drupal_flush_all_caches() {
   system_rebuild_theme_data();
   drupal_theme_rebuild();
 
-  // @todo D8: Split cache flushing from rebuilding.
-  // @see http://drupal.org/node/996236
-  if (module_exists('node')) {
-    node_types_rebuild();
-  }
+  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 748e792749b269e93469462ba5b2725b01e8becf..221ad605a4ea1d9a03926428652cde9da74e9134 100644
--- a/core/includes/module.inc
+++ b/core/includes/module.inc
@@ -520,6 +520,11 @@ 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')
@@ -544,6 +549,12 @@ 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 9ae18754827927c31f3531593d12ed492f4a5d6d..1fac2352140c180bbf9da662806da8b4745796aa 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', 'user');
+    $_GET['q'] = variable_get('site_frontpage', 'node');
   }
   $_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', 'user'));
+    $is_front_page = ($_GET['q'] == variable_get('site_frontpage', 'node'));
   }
 
   return $is_front_page;
@@ -323,7 +323,7 @@ function drupal_match_path($path, $patterns) {
     $replacements = array(
       '|',
       '.*',
-      '\1' . preg_quote(variable_get('site_frontpage', 'user'), '/') . '\2'
+      '\1' . preg_quote(variable_get('site_frontpage', 'node'), '/') . '\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 f370800e8318d9732fd9cee5fb1536ac8ebe1c61..15984ad1476fccaf2dbd57d6f8f69c55fcd154f5 100644
--- a/core/modules/book/book.info
+++ b/core/modules/book/book.info
@@ -3,7 +3,6 @@ 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 db6dc2c0d9a919c85b22c8349e76c15bc011cf30..606f46d5c89a03fdbd68582d2b4fede26f480b95 100644
--- a/core/modules/comment/comment.info
+++ b/core/modules/comment/comment.info
@@ -3,7 +3,6 @@ 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/forum/forum.info b/core/modules/forum/forum.info
index f202f9e0d57d9ff6879ac201ec1069ff7cebd93d..cb6e3e76e19c03110f94ae2ecc3d8d70bd9e3275 100644
--- a/core/modules/forum/forum.info
+++ b/core/modules/forum/forum.info
@@ -1,6 +1,5 @@
 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 6f7322e6538f35abd809d8aa4223233493586e4b..773a52df98fe711909d25d1a196067cc6d6a5c81 100644
--- a/core/modules/help/help.module
+++ b/core/modules/help/help.module
@@ -43,10 +43,7 @@ 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>';
-      // 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 .= '<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/node/node.info b/core/modules/node/node.info
index 33b5dd2457b14c98bf5da9b5dcf34472b46c2f0e..2e410ed7a4b7298704f2e13bc09317fbda429648 100644
--- a/core/modules/node/node.info
+++ b/core/modules/node/node.info
@@ -5,6 +5,7 @@ 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.module b/core/modules/node/node.module
index a182e90b20913229cf327641990e89832a91a859..57607cd8270327b5cd9f17309556297b6f0f9ec4 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -4079,28 +4079,6 @@ 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 8f62c017a73fb44b7c9910b52d4174ffd8fc9221..5433d3e5042e644dcfbcf2992181de9ad2a3c5cf 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', 'user'), $type);
+    $type = str_replace('<front>', variable_get('site_frontpage', 'node'), $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 dbdd6213b03db651d4e2a36bd3a2f89b21a635e5..de6ac250cee65412a8ccc11b177d2ad5d2c5b198 100644
--- a/core/modules/poll/poll.info
+++ b/core/modules/poll/poll.info
@@ -3,6 +3,5 @@ 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 87a6dac5ff0ae77b7d4824cd808d1bd78eb0bb3c..b168815f8f565d75f58f23fae7c7dbe005587dfa 100644
--- a/core/modules/rdf/tests/rdf_test.info
+++ b/core/modules/rdf/tests/rdf_test.info
@@ -4,4 +4,3 @@ 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 7aee9c9ca0686ddf5a18538036b6d0db968c586f..60ee6be8ddf02a14072edaded0c989b8056b264c 100644
--- a/core/modules/shortcut/shortcut.install
+++ b/core/modules/shortcut/shortcut.install
@@ -13,19 +13,18 @@ function shortcut_install() {
   // Create an initial default shortcut set.
   $shortcut_set = new stdClass();
   $shortcut_set->title = $t('Default');
-  $shortcut_set->links = array();
-  if (module_exists('node')) {
-    $shortcut_set->links[] = array(
+  $shortcut_set->links = array(
+    array(
       'link_path' => 'node/add',
       'link_title' => $t('Add content'),
       'weight' => -20,
-    );
-    $shortcut_set->links[] = array(
+    ),
+    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 934847f13bdbfa891360096cfe6e66050fff28ab..6e55fbdf0f8ace853818c6a6090ecf2fcacd3894 100644
--- a/core/modules/simpletest/tests/database_test.test
+++ b/core/modules/simpletest/tests/database_test.test
@@ -19,12 +19,7 @@ class DatabaseTestCase extends DrupalWebTestCase {
   protected $profile = 'testing';
 
   function setUp() {
-    $modules = func_get_args();
-    if (isset($modules[0]) && is_array($modules[0])) {
-      $modules = $modules[0];
-    }
-    $modules[] = 'database_test';
-    parent::setUp($modules);
+    parent::setUp('database_test');
 
     $schema['test'] = drupal_get_schema('test');
     $schema['test_people'] = drupal_get_schema('test_people');
@@ -382,6 +377,10 @@ class DatabaseFetch2TestCase extends DatabaseTestCase {
     );
   }
 
+  function setUp() {
+    parent::setUp();
+  }
+
   // Confirm that we can fetch a record into an indexed array explicitly.
   function testQueryFetchNum() {
     $records = array();
@@ -2219,14 +2218,24 @@ class DatabaseSelectComplexTestCase2 extends DatabaseTestCase {
   }
 
   function setUp() {
-    parent::setUp(array('node_access_test'));
+    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();
   }
 
   /**
    * Test that we can join on a query.
    */
   function testJoinSubquery() {
-    $acct = $this->drupalCreateUser();
+    $acct = $this->drupalCreateUser(array('access content'));
     $this->drupalLogin($acct);
 
     $query = db_select('test_task', 'tt', array('target' => 'slave'));
@@ -2745,10 +2754,6 @@ class DatabaseRegressionTestCase extends DatabaseTestCase {
     );
   }
 
-  function setUp() {
-    parent::setUp(array('node'));
-  }
-
   /**
    * Regression test for #310447.
    *
@@ -3040,6 +3045,10 @@ class DatabaseBasicSyntaxTestCase extends DatabaseTestCase {
     );
   }
 
+  function setUp() {
+    parent::setUp('database_test');
+  }
+
   /**
    * Test for string concatenation.
    */
@@ -3137,6 +3146,10 @@ class DatabaseInvalidDataTestCase extends DatabaseTestCase {
     );
   }
 
+  function setUp() {
+    parent::setUp('database_test');
+  }
+
   /**
    * Traditional SQL database systems abort inserts when invalid data is encountered.
    */
@@ -3206,6 +3219,10 @@ 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 0482482a199ae4ddb2022ad91e72df724f9d88df..b47e37978212e330422d7bd93c2a559e659bbdad 100644
--- a/core/modules/simpletest/tests/theme.test
+++ b/core/modules/simpletest/tests/theme.test
@@ -66,8 +66,7 @@ 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.
-    variable_set('site_frontpage', 'node');
-    $_GET['q'] = 'node';
+    $_GET['q'] = variable_get('site_frontpage', 'node');
     $suggestions = theme_get_suggestions(explode('/', $_GET['q']), 'page');
     // Set it back to not annoy the batch runner.
     $_GET['q'] = $q;
diff --git a/core/modules/simpletest/tests/theme_test.module b/core/modules/simpletest/tests/theme_test.module
index 2a2552aede40640e53c3d8937e1ec93e96c9ef36..400902d3ac7b205d88d6b5b2591711ca24defe50 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 callback' => TRUE,
+    'access arguments' => array('access content'),
     'theme callback' => '_theme_custom_theme',
     'type' => MENU_CALLBACK,
   );
   $items['theme-test/alter'] = array(
     'title' => 'Suggestion',
     'page callback' => '_theme_test_alter',
-    'access callback' => TRUE,
+    'access arguments' => array('access content'),
     'theme callback' => '_theme_custom_theme',
     'type' => MENU_CALLBACK,
   );
diff --git a/core/modules/syslog/syslog.module b/core/modules/syslog/syslog.module
index 7c7bf40b74b7491a36f465718fcd4e360f6d2ea1..c4ee382528892a67980e328b83aefa63596427d9 100644
--- a/core/modules/syslog/syslog.module
+++ b/core/modules/syslog/syslog.module
@@ -6,15 +6,6 @@
  */
 
 if (defined('LOG_LOCAL0')) {
-  /**
-   * Sets the proper logging facility.
-   *
-   * Note that LOG_LOCAL0 through LOG_LOCAL7 are not available on Windows, so we
-   * check for availability. If LOG_LOCAL0 is defined by the PHP environment, we
-   * set that as the default; if not, we use LOG_USER.
-   *
-   * @see http://php.net/manual/function.syslog.php
-   */
   define('DEFAULT_SYSLOG_FACILITY', LOG_LOCAL0);
 }
 else {
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 6c1a9ab5597f9b7822d38d3734bd367ff4718b56..6dca80b88b723940fb66a0b15be66f71db6ef9d6 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -1487,7 +1487,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') != 'user' ? drupal_get_path_alias(variable_get('site_frontpage', 'user')) : ''),
+    '#default_value' => (variable_get('site_frontpage')!='node'?drupal_get_path_alias(variable_get('site_frontpage', 'node')):''),
     '#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 +1497,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 +1535,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 "user".
-    form_set_value($form['front_page']['site_frontpage'], 'user', $form_state);
+    // Set to default "node".
+    form_set_value($form['front_page']['site_frontpage'], 'node', $form_state);
   }
   else {
     // Get the normal path of the front page.
diff --git a/profiles/minimal/minimal.info b/profiles/minimal/minimal.info
index f2219481d2890bc47a110689d1847ab4a552d729..c384680a3d9eb92e075954849f608e70a5c2d2a9 100644
--- a/profiles/minimal/minimal.info
+++ b/profiles/minimal/minimal.info
@@ -2,7 +2,6 @@ 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 d5b85c5f23dd5fd1ed4b4345e9c85c5be76922d2..6c56aecd2e85d9850501196954341f77fc6cc867 100644
--- a/profiles/minimal/minimal.install
+++ b/profiles/minimal/minimal.install
@@ -72,9 +72,6 @@ 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 e21c18c89e2b0fb5a3f976332842135b1b33fc4b..56e43086a839dd44f6e1cda3e31d3f3901130c2e 100644
--- a/profiles/standard/standard.info
+++ b/profiles/standard/standard.info
@@ -2,7 +2,6 @@ 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 f8a73ce66da8ef5b7bfe94687cbebe709e760d29..9195ad949e1daf53eafda9adffeb855760965c39 100644
--- a/profiles/standard/standard.install
+++ b/profiles/standard/standard.install
@@ -199,9 +199,6 @@ 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 19092d424020deedd4c90c3168c6f382390b753d..192704d75191541436c4fde16a004a86de2460e2 100644
--- a/profiles/testing/testing.install
+++ b/profiles/testing/testing.install
@@ -8,4 +8,8 @@
 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'));
 }