diff --git a/plugins/views_plugin_display_system.inc b/plugins/views_plugin_display_system.inc
index eada0fb..856af16 100644
--- a/plugins/views_plugin_display_system.inc
+++ b/plugins/views_plugin_display_system.inc
@@ -164,6 +164,9 @@ class views_plugin_display_system extends views_plugin_display {
           continue;
         }
         $child = &$callbacks[$child_path];
+        // Get this first, as we want to know if this existed before parent and
+        // default values are merged.
+        $file = isset($child['file']);
         // Copy all properties from the original parent that will be replaced
         // with new values.
         // This typically resets 'access arguments', etc.
@@ -175,6 +178,15 @@ class views_plugin_display_system extends views_plugin_display {
         // combined with $items[$path] + $defaults, but are separated for
         // documentation purposes and clarity.)
         $child += array_intersect_key($parent, $defaults);
+
+        // Unset the child 'file' property if its implementing module doesn't
+        // match it's parent and it didn't have a 'file' preoperty specified
+        // before. Otherwise, for example, example_module could inherit a 'file'
+        // property of 'node.admin.inc', so the actual include path would be
+        // something like .../modules/example_module/node.admin.inc.
+        if (!$file && ($child['module'] != $parent['module'])) {
+          unset($child['file']);
+        }
         // Last catch-22, insert new default properties and their default values
         // for the child, which may not be defined on the original parent.
         // This typically inserts 'access callback', which can be omitted in
@@ -184,6 +196,7 @@ class views_plugin_display_system extends views_plugin_display {
         $child += $defaults;
       }
     }
+
     // If the original parent path already existed, copy over its remaining
     // properties.
     $items[$path] += $parent;
diff --git a/tests/admin_views.test b/tests/admin_views.test
index abdb7fa..7ffa639 100644
--- a/tests/admin_views.test
+++ b/tests/admin_views.test
@@ -86,6 +86,10 @@ class AdminViewsSystemDisplayTestCase extends AdminViewsWebTestCase {
     );
   }
 
+  function setUp() {
+    parent::setUp(array('node', 'comment', 'admin_views_test'));
+  }
+
   /**
    * Tests proper inheritance of router item properties.
    */
@@ -102,6 +106,12 @@ class AdminViewsSystemDisplayTestCase extends AdminViewsWebTestCase {
       $this->clickLink($link);
       $this->assertResponse(200);
     }
+
+    // Test that child page callbacks of a system display work.
+    $this->drupalGet('admin/content/admin_views_test');
+    $this->assertResponse(200);
+    $this->assertTitle('Administration views test | Drupal');
+    $this->assertText('Administration views test page callback');
   }
 }
 
diff --git a/tests/admin_views_test/admin_views_test.info b/tests/admin_views_test/admin_views_test.info
new file mode 100644
index 0000000..7e8698b
--- /dev/null
+++ b/tests/admin_views_test/admin_views_test.info
@@ -0,0 +1,7 @@
+name = Administration views test
+description = Administration views test module
+core = 7.x
+package = administration
+hidden = TRUE
+
+dependencies[] admin_views
diff --git a/tests/admin_views_test/admin_views_test.module b/tests/admin_views_test/admin_views_test.module
new file mode 100644
index 0000000..6f83cc9
--- /dev/null
+++ b/tests/admin_views_test/admin_views_test.module
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * Administration views test module.
+ */
+
+/**
+ * Implements hook_menu().
+ */
+function admin_views_test_menu() {
+  $items = array();
+
+  $items['admin/content/admin_views_test'] = array(
+    'title' => 'Administration views test',
+    'description' => 'Administration views test',
+    'page callback' => 'admin_views_test_page_callback',
+    'access callback' => TRUE,
+  );
+
+  return $items;
+}
+
+/**
+ * Test page callback.
+ */
+function admin_views_test_page_callback() {
+  return 'Administration views test page callback';
+}
