=== modified file 'modules/node.module'
--- modules/node.module	
+++ modules/node.module	
@@ -346,11 +346,8 @@ function node_load($param = array(), $re
   }
 
   $arguments = array();
+  $cachable = $revision == NULL;
   if (is_numeric($param)) {
-    $cachable = $revision == NULL;
-    if ($cachable && isset($nodes[$param])) {
-      return $nodes[$param];
-    }
     $cond = 'n.nid = %d';
     $arguments[] = $param;
   }
@@ -362,6 +359,9 @@ function node_load($param = array(), $re
     }
     $cond = implode(' AND ', $cond);
   }
+  if ($cachable && ((is_numeric($param) && isset($nodes[$param])) || isset($param['nid']) && isset($nodes[$param['nid']]))) {
+    return is_numeric($param) ? $nodes[$param] : $nodes[$param['nid']];
+  }
 
   // Retrieve the node.
   if ($revision) {
@@ -373,6 +373,9 @@ function node_load($param = array(), $re
   }
 
   if ($node->nid) {
+    if (isset($nodes[$node->nid])) {
+      return $nodes[$node->nid];
+    }
     // Call the node specific callback (if any) and piggy-back the
     // results to the node or overwrite some values.
     if ($extra = node_invoke($node, 'load')) {
@@ -389,7 +392,7 @@ function node_load($param = array(), $re
   }
 
   if ($cachable) {
-    $nodes[$param] = $node;
+    $nodes[$node->nid] = $node;
   }
 
   return $node;
