diff --git a/lib/Analysis/DataStructure/BottomUpClosure.cpp b/lib/Analysis/DataStructure/BottomUpClosure.cpp
index 1a3f480..d57b618 100644
--- a/lib/Analysis/DataStructure/BottomUpClosure.cpp
+++ b/lib/Analysis/DataStructure/BottomUpClosure.cpp
@@ -150,16 +150,10 @@
     if (Inlined) {
       Graph->maskIncompleteMarkers();
       Graph->markIncompleteNodes();
-      Graph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true);
+      Graph->removeDeadNodes(/*KeepAllGlobals*/ true);
     }
   } while (Inlined && !FCs.empty());
 
-#if 0
-  Graph->maskIncompleteMarkers();
-  Graph->markIncompleteNodes();
-  Graph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true);
-#endif
-
   DEBUG(std::cerr << "  [BU] Done inlining: " << F.getName() << " ["
         << Graph->getGraphSize() << "+" << Graph->getFunctionCalls().size()
         << "]\n");
diff --git a/lib/Analysis/DataStructure/DataStructure.cpp b/lib/Analysis/DataStructure/DataStructure.cpp
index 630ec5f..f1fce0f 100644
--- a/lib/Analysis/DataStructure/DataStructure.cpp
+++ b/lib/Analysis/DataStructure/DataStructure.cpp
@@ -981,10 +981,7 @@
 // from the caller's graph entirely.  This is only appropriate to use when
 // inlining graphs.
 //
-void DSGraph::removeDeadNodes(bool KeepAllGlobals, bool KeepCalls) {
-  assert((!KeepAllGlobals || KeepCalls) &&  // FIXME: This should be an enum!
-         "KeepAllGlobals without KeepCalls is meaningless");
-
+void DSGraph::removeDeadNodes(bool KeepAllGlobals) {
   // Reduce the amount of work we have to do...
   removeTriviallyDeadNodes(KeepAllGlobals);
 
@@ -994,19 +991,17 @@
   std::set<DSNode*> Alive;
 
   // If KeepCalls, mark all nodes reachable by call nodes as alive...
-  if (KeepCalls) {
-    for (unsigned i = 0, e = FunctionCalls.size(); i != e; ++i) {
-      for (unsigned j = 0, e = FunctionCalls[i].getNumPtrArgs(); j != e; ++j)
-        markAlive(FunctionCalls[i].getPtrArg(j).getNode(), Alive);
-      markAlive(FunctionCalls[i].getRetVal().getNode(), Alive);
-      markAlive(FunctionCalls[i].getCallee().getNode(), Alive);
-    }
-    for (unsigned i = 0, e = AuxFunctionCalls.size(); i != e; ++i) {
-      for (unsigned j = 0, e = AuxFunctionCalls[i].getNumPtrArgs(); j != e; ++j)
-        markAlive(AuxFunctionCalls[i].getPtrArg(j).getNode(), Alive);
-      markAlive(AuxFunctionCalls[i].getRetVal().getNode(), Alive);
-      markAlive(AuxFunctionCalls[i].getCallee().getNode(), Alive);
-    }
+  for (unsigned i = 0, e = FunctionCalls.size(); i != e; ++i) {
+    for (unsigned j = 0, e = FunctionCalls[i].getNumPtrArgs(); j != e; ++j)
+      markAlive(FunctionCalls[i].getPtrArg(j).getNode(), Alive);
+    markAlive(FunctionCalls[i].getRetVal().getNode(), Alive);
+    markAlive(FunctionCalls[i].getCallee().getNode(), Alive);
+  }
+  for (unsigned i = 0, e = AuxFunctionCalls.size(); i != e; ++i) {
+    for (unsigned j = 0, e = AuxFunctionCalls[i].getNumPtrArgs(); j != e; ++j)
+      markAlive(AuxFunctionCalls[i].getPtrArg(j).getNode(), Alive);
+    markAlive(AuxFunctionCalls[i].getRetVal().getNode(), Alive);
+    markAlive(AuxFunctionCalls[i].getCallee().getNode(), Alive);
   }
 
   // Mark all nodes reachable by scalar nodes as alive...
@@ -1022,7 +1017,7 @@
   // Of course, if KeepAllGlobals is specified, they would be live already.
 
   if (!KeepAllGlobals)
-    markGlobalsAlive(*this, Alive, !KeepCalls);
+    markGlobalsAlive(*this, Alive, false);
 
   // Loop over all unreachable nodes, dropping their references...
   vector<DSNode*> DeadNodes;
@@ -1157,7 +1152,7 @@
   if (CloneCalls)
     GlobalsGraph->cloneCalls(Graph);
 
-  GlobalsGraph->removeDeadNodes(/*KeepAllGlobals*/ true, /*KeepCalls*/ true);
+  GlobalsGraph->removeDeadNodes(/*KeepAllGlobals*/ true);
 #endif
 }
 
diff --git a/lib/Analysis/DataStructure/Local.cpp b/lib/Analysis/DataStructure/Local.cpp
index 3df4fd4..e159a60 100644
--- a/lib/Analysis/DataStructure/Local.cpp
+++ b/lib/Analysis/DataStructure/Local.cpp
@@ -134,7 +134,7 @@
   markIncompleteNodes();
 
   // Remove any nodes made dead due to merging...
-  removeDeadNodes(true, true);
+  removeDeadNodes(true);
 }
 
 
diff --git a/lib/Analysis/DataStructure/Steensgaard.cpp b/lib/Analysis/DataStructure/Steensgaard.cpp
index 5ee4dc4..6dc2bda 100644
--- a/lib/Analysis/DataStructure/Steensgaard.cpp
+++ b/lib/Analysis/DataStructure/Steensgaard.cpp
@@ -194,7 +194,7 @@
   ResultGraph->markIncompleteNodes(false);
 
   // Remove any nodes that are dead after all of the merging we have done...
-  ResultGraph->removeDeadNodes(true, true);
+  ResultGraph->removeDeadNodes(true);
 
   DEBUG(print(std::cerr, &M));
   return false;
diff --git a/lib/Analysis/DataStructure/TopDownClosure.cpp b/lib/Analysis/DataStructure/TopDownClosure.cpp
index ee559d6..b4b43f7 100644
--- a/lib/Analysis/DataStructure/TopDownClosure.cpp
+++ b/lib/Analysis/DataStructure/TopDownClosure.cpp
@@ -180,8 +180,7 @@
       CG.maskIncompleteMarkers();
       CG.markIncompleteNodes(/*markFormals*/ !F.hasInternalLinkage()
                              /*&& FIXME: NEED TO CHECK IF ALL CALLERS FOUND!*/);
-      CG.removeDeadNodes(false, true) ;///*KeepAllGlobals*/ false, true);
-      ///*KeepCalls*/ false);
+      CG.removeDeadNodes(/*KeepAllGlobals*/ false);
     }
 
   DEBUG(std::cerr << "  [TD] Done inlining into callees for: " << F.getName()
