diff --git a/include/llvm/Analysis/DataStructure/DSGraph.h b/include/llvm/Analysis/DataStructure/DSGraph.h
index a0d06ad..d6e4788 100644
--- a/include/llvm/Analysis/DataStructure/DSGraph.h
+++ b/include/llvm/Analysis/DataStructure/DSGraph.h
@@ -454,8 +454,7 @@
   ///
   /// The CloneFlags member controls various aspects of the cloning process.
   ///
-  void cloneInto(const DSGraph &G,
-                 ReturnNodesTy &OldReturnNodes, NodeMapTy &OldNodeMap,
+  void cloneInto(const DSGraph &G, NodeMapTy &OldNodeMap,
                  unsigned CloneFlags = 0);
 
   /// getFunctionArgumentsForCall - Given a function that is currently in this
diff --git a/lib/Analysis/DataStructure/BottomUpClosure.cpp b/lib/Analysis/DataStructure/BottomUpClosure.cpp
index 2dae943..acb4b30 100644
--- a/lib/Analysis/DataStructure/BottomUpClosure.cpp
+++ b/lib/Analysis/DataStructure/BottomUpClosure.cpp
@@ -269,7 +269,7 @@
       if (&G != SCCGraph) {
         {
           DSGraph::NodeMapTy NodeMap;
-          SCCGraph->cloneInto(G, SCCGraph->getReturnNodes(), NodeMap);
+          SCCGraph->cloneInto(G, NodeMap);
         }
         // Update the DSInfo map and delete the old graph...
         for (DSGraph::retnodes_iterator I = G.retnodes_begin(),
@@ -413,7 +413,7 @@
             // bother merging it in again.
             if (!GI->containsFunction(*I)) {
               DSGraph::NodeMapTy NodeMap;
-              GI->cloneInto(getDSGraph(**I), GI->getReturnNodes(), NodeMap);
+              GI->cloneInto(getDSGraph(**I), NodeMap);
               ++NumBUInlines;
             }
 
diff --git a/lib/Analysis/DataStructure/CompleteBottomUp.cpp b/lib/Analysis/DataStructure/CompleteBottomUp.cpp
index bc8e04c..7b7e62f 100644
--- a/lib/Analysis/DataStructure/CompleteBottomUp.cpp
+++ b/lib/Analysis/DataStructure/CompleteBottomUp.cpp
@@ -175,8 +175,10 @@
     DSGraph *NG = Stack.back();
     ValMap[NG] = ~0U;
 
-    DSGraph::NodeMapTy NodeMap;
-    FG.cloneInto(*NG, FG.getReturnNodes(), NodeMap);
+    {
+      DSGraph::NodeMapTy NodeMap;
+      FG.cloneInto(*NG, NodeMap);
+    }
 
     // Update the DSInfo map and delete the old graph...
     for (DSGraph::retnodes_iterator I = NG->retnodes_begin();
diff --git a/lib/Analysis/DataStructure/DataStructure.cpp b/lib/Analysis/DataStructure/DataStructure.cpp
index 5cd3784..e847280 100644
--- a/lib/Analysis/DataStructure/DataStructure.cpp
+++ b/lib/Analysis/DataStructure/DataStructure.cpp
@@ -1169,14 +1169,14 @@
   : GlobalsGraph(0), ScalarMap(ECs), TD(G.TD) {
   PrintAuxCalls = false;
   NodeMapTy NodeMap;
-  cloneInto(G, ReturnNodes, NodeMap, CloneFlags);
+  cloneInto(G, NodeMap, CloneFlags);
 }
 
 DSGraph::DSGraph(const DSGraph &G, NodeMapTy &NodeMap,
                  EquivalenceClasses<GlobalValue*> &ECs)
   : GlobalsGraph(0), ScalarMap(ECs), TD(G.TD) {
   PrintAuxCalls = false;
-  cloneInto(G, ReturnNodes, NodeMap);
+  cloneInto(G, NodeMap);
 }
 
 DSGraph::~DSGraph() {
@@ -1242,8 +1242,7 @@
 ///
 /// The CloneFlags member controls various aspects of the cloning process.
 ///
-void DSGraph::cloneInto(const DSGraph &G,
-                        ReturnNodesTy &OldReturnNodes, NodeMapTy &OldNodeMap,
+void DSGraph::cloneInto(const DSGraph &G, NodeMapTy &OldNodeMap,
                         unsigned CloneFlags) {
   TIME_REGION(X, "cloneInto");
   assert(OldNodeMap.empty() && "Returned OldNodeMap should be empty!");
@@ -1306,9 +1305,9 @@
     const DSNodeHandle &Ret = I->second;
     DSNodeHandle &MappedRet = OldNodeMap[Ret.getNode()];
     DSNode *MappedRetN = MappedRet.getNode();
-    OldReturnNodes.insert(std::make_pair(I->first,
-                          DSNodeHandle(MappedRetN,
-                                       MappedRet.getOffset()+Ret.getOffset())));
+    ReturnNodes.insert(std::make_pair(I->first,
+                                      DSNodeHandle(MappedRetN,
+                                     MappedRet.getOffset()+Ret.getOffset())));
   }
 }
 
diff --git a/lib/Analysis/DataStructure/EquivClassGraphs.cpp b/lib/Analysis/DataStructure/EquivClassGraphs.cpp
index 83b9d9a..a778d94 100644
--- a/lib/Analysis/DataStructure/EquivClassGraphs.cpp
+++ b/lib/Analysis/DataStructure/EquivClassGraphs.cpp
@@ -271,7 +271,7 @@
         
         // Clone this member of the equivalence class into MergedG.
         DSGraph::NodeMapTy NodeMap;    
-        MergedG.cloneInto(CBUGraph, MergedG.getReturnNodes(), NodeMap, 0);
+        MergedG.cloneInto(CBUGraph, NodeMap);
       }
       
       // Merge the return nodes of all functions together.
@@ -362,8 +362,10 @@
 
     // If the SCC found is not the same as those found in CBU, make sure to
     // merge the graphs as appropriate.
-    DSGraph::NodeMapTy NodeMap;
-    FG.cloneInto(*NG, FG.getReturnNodes(), NodeMap);
+    {
+      DSGraph::NodeMapTy NodeMap;
+      FG.cloneInto(*NG, NodeMap);
+    }
 
     // Update the DSInfo map and delete the old graph...
     for (DSGraph::retnodes_iterator I = NG->retnodes_begin();
diff --git a/lib/Analysis/DataStructure/Steensgaard.cpp b/lib/Analysis/DataStructure/Steensgaard.cpp
index 8c76189..734f26b 100644
--- a/lib/Analysis/DataStructure/Steensgaard.cpp
+++ b/lib/Analysis/DataStructure/Steensgaard.cpp
@@ -125,8 +125,7 @@
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
     if (!I->isExternal()) {
       DSGraph::NodeMapTy NodeMap;
-      ResultGraph->cloneInto(LDS.getDSGraph(*I), ResultGraph->getReturnNodes(),
-                             NodeMap, 0);
+      ResultGraph->cloneInto(LDS.getDSGraph(*I), NodeMap, 0);
     }
 
   ResultGraph->removeTriviallyDeadNodes();
