diff --git a/core/includes/menu.inc b/core/includes/menu.inc
index 84bd0d1..a468a84 100644
--- a/core/includes/menu.inc
+++ b/core/includes/menu.inc
@@ -2175,7 +2175,10 @@ function menu_contextual_links($module, $parent_path, $args) {
   // Performance: If the current user does not have access to any links for this
   // router path and no other module added further links, we assign FALSE here
   // to skip the entire process the next time the same router path is requested.
-  if (empty($links)) {
+  // However, don't do this for the node router item as it's possible to
+  // have multiple nodes on one page where permissions are different.
+  // See http://drupal.org/node/1425280 for more info.
+  if (empty($links) && $parent_path != 'node') {
     $path_empty[$parent_path] = TRUE;
   }
 
diff --git a/core/modules/contextual/contextual.info b/core/modules/contextual/contextual.info
index a006377..041f2e3 100644
--- a/core/modules/contextual/contextual.info
+++ b/core/modules/contextual/contextual.info
@@ -3,3 +3,4 @@ description = Provides contextual links to perform actions related to elements o
 package = Core
 version = VERSION
 core = 8.x
+files[] = contextual.test
diff --git a/core/modules/contextual/contextual.test b/core/modules/contextual/contextual.test
new file mode 100644
index 0000000..9fa1a5f
--- /dev/null
+++ b/core/modules/contextual/contextual.test
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Tests for contextual.module.
+ */
+
+/**
+ * Tests contextual links on node lists with different permissions.
+ */
+class ContextualNodeListTest extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Contextual links on node lists',
+      'description' => 'Tests if contextual links are showing on the front page depending on permissions.',
+      'group' => 'Contextual',
+    );
+  }
+
+  function setUp() {
+    parent::setUp(array('contextual'));
+    $web_user = $this->drupalCreateUser(array('access contextual links', 'edit any article content'));
+    $this->drupalLogin($web_user);
+  }
+
+  /**
+   * Creates an article node, a page node and another article node promoted to
+   * the front page and ensures the contextual links are displaying.
+   */
+  function testFrontPage() {
+    // Promote nodes to the front page. One article node the user can edit, one
+    // page node he can not edit and another article node he can edit.
+    $node1 = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
+    $node2 = $this->drupalCreateNode(array('type' => 'page', 'promote' => 1));
+    $node3 = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
+
+    // Now, on the front page, all article nodes should have contextual edit
+    // links. The page node in between should not.
+    $this->drupalGet('node');
+    $this->assertRaw('node/' . $node1->nid . '/edit', 'Edit link for oldest article node showing.');
+    $this->assertNoRaw('node/' . $node2->nid . '/edit', 'No edit link for page nodes.');
+    $this->assertRaw('node/' . $node3->nid . '/edit', 'Edit link for most recent article node showing.');
+  }
+}
