diff --git a/lib/Analysis/IPA/CallGraph.cpp b/lib/Analysis/IPA/CallGraph.cpp
index 244c35e..04b8c2d 100644
--- a/lib/Analysis/IPA/CallGraph.cpp
+++ b/lib/Analysis/IPA/CallGraph.cpp
@@ -16,6 +16,7 @@
 #include "llvm/Method.h"
 #include "llvm/iOther.h"
 #include "llvm/iTerminators.h"
+#include "llvm/Support/InstIterator.h"// FIXME: CallGraph should use method uses
 #include "Support/STLExtras.h"
 #include <algorithm>
 
@@ -46,8 +47,7 @@
   if (!M->hasInternalLinkage())
     Root->addCalledMethod(Node);
 
-  for (Method::inst_iterator I = M->inst_begin(), E = M->inst_end();
-       I != E; ++I) {
+  for (inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) {
     // Dynamic calls will cause Null nodes to be created
     if (CallInst *CI = dyn_cast<CallInst>(*I))
       Node->addCalledMethod(getNodeFor(CI->getCalledMethod()));
@@ -138,8 +138,7 @@
     return (cgn->begin() == cgn->end());
   }
 
-  for (Method::const_inst_iterator I = M->inst_begin(), E = M->inst_end();
-       I != E; ++I)
+  for (const_inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I)
     if ((*I)->getOpcode() == Instruction::Call)
       return false;
   return true;
diff --git a/lib/Analysis/IPA/FindUnsafePointerTypes.cpp b/lib/Analysis/IPA/FindUnsafePointerTypes.cpp
index bc09292..0179cbb 100644
--- a/lib/Analysis/IPA/FindUnsafePointerTypes.cpp
+++ b/lib/Analysis/IPA/FindUnsafePointerTypes.cpp
@@ -22,6 +22,7 @@
 #include "llvm/Instruction.h"
 #include "llvm/Method.h"
 #include "llvm/Module.h"
+#include "llvm/Support/InstIterator.h"
 #include "Support/CommandLine.h"
 
 AnalysisID FindUnsafePointerTypes::ID(AnalysisID::create<FindUnsafePointerTypes>());
@@ -58,8 +59,7 @@
   for (Module::iterator MI = Mod->begin(), ME = Mod->end();
        MI != ME; ++MI) {
     const Method *M = *MI;  // We don't need/want write access
-    for (Method::const_inst_iterator I = M->inst_begin(), E = M->inst_end();
-         I != E; ++I) {
+    for (const_inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) {
       const Instruction *Inst = *I;
       const Type *ITy = Inst->getType();
       if (ITy->isPointerType() && !UnsafeTypes.count((PointerType*)ITy))
diff --git a/lib/Analysis/IPA/FindUsedTypes.cpp b/lib/Analysis/IPA/FindUsedTypes.cpp
index b876e5e..e02429a 100644
--- a/lib/Analysis/IPA/FindUsedTypes.cpp
+++ b/lib/Analysis/IPA/FindUsedTypes.cpp
@@ -11,6 +11,7 @@
 #include "llvm/DerivedTypes.h"
 #include "llvm/Module.h"
 #include "llvm/Method.h"
+#include "llvm/Support/InstIterator.h"
 
 AnalysisID FindUsedTypes::ID(AnalysisID::create<FindUsedTypes>());
 AnalysisID FindUsedTypes::IncludeSymbolTableID(AnalysisID::create<FindUsedTypes>());
@@ -59,7 +60,7 @@
     // Loop over all of the instructions in the method, adding their return type
     // as well as the types of their operands.
     //
-    for (Method::const_inst_iterator II = M->inst_begin(), IE = M->inst_end();
+    for (const_inst_iterator II = inst_begin(M), IE = inst_end(M);
          II != IE; ++II) {
       const Instruction *I = *II;
       const Type *Ty = I->getType();
diff --git a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
index a1a2dba..b83359f 100644
--- a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
+++ b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
@@ -9,6 +9,7 @@
 #include "BBLiveVar.h"
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/BasicBlock.h"
+#include "llvm/Support/CFG.h"
 #include "Support/PostOrderIterator.h"
 #include "Support/SetOperations.h"
 #include <iostream>
diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp
index 9b34095..876161d 100644
--- a/lib/Analysis/LoopInfo.cpp
+++ b/lib/Analysis/LoopInfo.cpp
@@ -9,7 +9,7 @@
 
 #include "llvm/Analysis/LoopInfo.h"
 #include "llvm/Analysis/Dominators.h"
-#include "llvm/BasicBlock.h"
+#include "llvm/Support/CFG.h"
 #include "Support/DepthFirstIterator.h"
 #include <algorithm>
 
diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp
index aad6e1c..33e14e9 100644
--- a/lib/Analysis/PostDominators.cpp
+++ b/lib/Analysis/PostDominators.cpp
@@ -7,6 +7,7 @@
 #include "llvm/Analysis/Dominators.h"
 #include "llvm/Transforms/UnifyMethodExitNodes.h"
 #include "llvm/Method.h"
+#include "llvm/Support/CFG.h"
 #include "Support/DepthFirstIterator.h"
 #include "Support/STLExtras.h"
 #include "Support/SetOperations.h"
diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h
index 8a7297a..a5b3b7a 100644
--- a/lib/Bytecode/Reader/ReaderInternals.h
+++ b/lib/Bytecode/Reader/ReaderInternals.h
@@ -10,6 +10,7 @@
 #include "llvm/Bytecode/Primitives.h"
 #include "llvm/SymTabValue.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/Instruction.h"
 #include "llvm/DerivedTypes.h"
 #include <map>
diff --git a/lib/Bytecode/Writer/SlotCalculator.cpp b/lib/Bytecode/Writer/SlotCalculator.cpp
index 4738f71..43a4591 100644
--- a/lib/Bytecode/Writer/SlotCalculator.cpp
+++ b/lib/Bytecode/Writer/SlotCalculator.cpp
@@ -171,7 +171,7 @@
   SC_DEBUG("Inserting Instructions:\n");
 
   // Add all of the instructions to the type planes...
-  for_each(M->inst_begin(), M->inst_end(),
+  for_each(inst_begin(M), inst_end(M),
 	   bind_obj(this, &SlotCalculator::insertValue));
 
   if (M->hasSymbolTable() && !IgnoreNamedNodes) {
diff --git a/lib/CodeGen/InstrSched/SchedPriorities.cpp b/lib/CodeGen/InstrSched/SchedPriorities.cpp
index 1d49831..ef9f9e4 100644
--- a/lib/CodeGen/InstrSched/SchedPriorities.cpp
+++ b/lib/CodeGen/InstrSched/SchedPriorities.cpp
@@ -20,6 +20,7 @@
 
 #include "SchedPriorities.h"
 #include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Support/CFG.h"
 #include "Support/PostOrderIterator.h"
 #include <iostream>
 using std::cerr;
diff --git a/lib/CodeGen/InstrSelection/InstrForest.cpp b/lib/CodeGen/InstrSelection/InstrForest.cpp
index 29090e0..b11d71e 100644
--- a/lib/CodeGen/InstrSelection/InstrForest.cpp
+++ b/lib/CodeGen/InstrSelection/InstrForest.cpp
@@ -189,15 +189,18 @@
 
 InstrForest::InstrForest(Method *M)
 {
-  for (Method::inst_iterator I = M->inst_begin(); I != M->inst_end(); ++I)
-    this->buildTreeForInstruction(*I);
+  for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) {
+    BasicBlock *BB = *MI;
+    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
+      buildTreeForInstruction(*I);
+  }
 }
 
 InstrForest::~InstrForest()
 {
   for (std::hash_map<const Instruction*,InstructionNode*>::iterator I = begin();
        I != end(); ++I)
-      delete (*I).second;
+      delete I->second;
 }
 
 void
diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp
index 3ff3e8c..4bb17f1 100644
--- a/lib/CodeGen/MachineFunction.cpp
+++ b/lib/CodeGen/MachineFunction.cpp
@@ -12,6 +12,7 @@
 #include "llvm/Target/MachineFrameInfo.h"
 #include "llvm/Target/MachineCacheInfo.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/iOther.h"
 #include <limits.h>
 
@@ -56,11 +57,11 @@
   
   unsigned int maxSize = 0;
   
-  for (Method::const_inst_iterator I=method->inst_begin(),E=method->inst_end();
-       I != E; ++I)
-    if ((*I)->getOpcode() == Instruction::Call)
-      {
-        CallInst* callInst = cast<CallInst>(*I);
+  for (Method::const_iterator MI=method->begin(), ME=method->end();
+       MI != ME; ++MI) {
+    const BasicBlock *BB = *MI;
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I)
+      if (CallInst *callInst = dyn_cast<CallInst>(*I)) {
         unsigned int numOperands = callInst->getNumOperands() - 1;
         int numExtra = (int) numOperands - frameInfo.getNumFixedOutgoingArgs();
         if (numExtra <= 0)
@@ -84,7 +85,7 @@
         if (maxSize < sizeForThisCall)
           maxSize = sizeForThisCall;
       }
-  
+  }
   return maxSize;
 }
 
diff --git a/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp b/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
index 7302baa..3295176 100644
--- a/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
+++ b/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
@@ -3,6 +3,7 @@
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "Support/SetOperations.h"
 #include <iostream>
 using std::cerr;
diff --git a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
index 18d019e..c78b971 100644
--- a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
+++ b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
@@ -18,6 +18,7 @@
 #include "llvm/Analysis/LoopInfo.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/MachineFrameInfo.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/Method.h"
 #include "llvm/Type.h"
 #include <iostream>
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp
index 0fad829..9f6317f 100644
--- a/lib/ExecutionEngine/Interpreter/Execution.cpp
+++ b/lib/ExecutionEngine/Interpreter/Execution.cpp
@@ -1034,10 +1034,12 @@
 
   // Iterate over all of the instructions...
   unsigned InstNum = 0;
-  for (Method::inst_iterator MI = M->inst_begin(), ME = M->inst_end();
-       MI != ME; ++MI) {
-    Instruction *I = *MI;                          // For each instruction...
-    I->addAnnotation(new InstNumber(++InstNum, getValueSlot(I))); // Add Annote
+  for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) {
+    BasicBlock *BB = *MI;
+    for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE; ++II){
+      Instruction *I = *II;          // For each instruction... Add Annote
+      I->addAnnotation(new InstNumber(++InstNum, getValueSlot(I)));
+    }
   }
 }
 
diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.h b/lib/ExecutionEngine/Interpreter/Interpreter.h
index ffe1001..050b7d3 100644
--- a/lib/ExecutionEngine/Interpreter/Interpreter.h
+++ b/lib/ExecutionEngine/Interpreter/Interpreter.h
@@ -13,6 +13,7 @@
 
 #include "llvm/Module.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "Support/DataTypes.h"
 #include "llvm/Assembly/CachedWriter.h"
 
diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp
index e162252..f265bb0 100644
--- a/lib/Linker/LinkModules.cpp
+++ b/lib/Linker/LinkModules.cpp
@@ -12,6 +12,7 @@
 #include "llvm/Transforms/Linker.h"
 #include "llvm/Module.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/GlobalVariable.h"
 #include "llvm/SymbolTable.h"
 #include "llvm/DerivedTypes.h"
@@ -337,13 +338,16 @@
   // in the Source method as operands.  Loop through all of the operands of the
   // methods and patch them up to point to the local versions...
   //
-  for (Method::inst_iterator I = Dest->inst_begin(), E = Dest->inst_end();
-       I != E; ++I) {
-    Instruction *Inst = *I;
-
-    for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end();
-         OI != OE; ++OI)
-      *OI = RemapOperand(*OI, LocalMap, &GlobalMap);
+  for (Method::iterator BI = Dest->begin(), BE = Dest->end();
+       BI != BE; ++BI) {
+    BasicBlock *BB = *BI;
+    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
+      Instruction *Inst = *I;
+      
+      for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end();
+           OI != OE; ++OI)
+        *OI = RemapOperand(*OI, LocalMap, &GlobalMap);
+    }
   }
 
   return false;
diff --git a/lib/Target/SparcV9/InstrSched/SchedPriorities.cpp b/lib/Target/SparcV9/InstrSched/SchedPriorities.cpp
index 1d49831..ef9f9e4 100644
--- a/lib/Target/SparcV9/InstrSched/SchedPriorities.cpp
+++ b/lib/Target/SparcV9/InstrSched/SchedPriorities.cpp
@@ -20,6 +20,7 @@
 
 #include "SchedPriorities.h"
 #include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Support/CFG.h"
 #include "Support/PostOrderIterator.h"
 #include <iostream>
 using std::cerr;
diff --git a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp
index 29090e0..b11d71e 100644
--- a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp
+++ b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp
@@ -189,15 +189,18 @@
 
 InstrForest::InstrForest(Method *M)
 {
-  for (Method::inst_iterator I = M->inst_begin(); I != M->inst_end(); ++I)
-    this->buildTreeForInstruction(*I);
+  for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) {
+    BasicBlock *BB = *MI;
+    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
+      buildTreeForInstruction(*I);
+  }
 }
 
 InstrForest::~InstrForest()
 {
   for (std::hash_map<const Instruction*,InstructionNode*>::iterator I = begin();
        I != end(); ++I)
-      delete (*I).second;
+      delete I->second;
 }
 
 void
diff --git a/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp b/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
index a1a2dba..b83359f 100644
--- a/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
+++ b/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
@@ -9,6 +9,7 @@
 #include "BBLiveVar.h"
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/BasicBlock.h"
+#include "llvm/Support/CFG.h"
 #include "Support/PostOrderIterator.h"
 #include "Support/SetOperations.h"
 #include <iostream>
diff --git a/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp b/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
index 7302baa..3295176 100644
--- a/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
+++ b/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
@@ -3,6 +3,7 @@
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "Support/SetOperations.h"
 #include <iostream>
 using std::cerr;
diff --git a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
index 18d019e..c78b971 100644
--- a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
+++ b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
@@ -18,6 +18,7 @@
 #include "llvm/Analysis/LoopInfo.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/MachineFrameInfo.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/Method.h"
 #include "llvm/Type.h"
 #include <iostream>
diff --git a/lib/Target/SparcV9/SparcV9TargetMachine.cpp b/lib/Target/SparcV9/SparcV9TargetMachine.cpp
index 14be992..b026ccd 100644
--- a/lib/Target/SparcV9/SparcV9TargetMachine.cpp
+++ b/lib/Target/SparcV9/SparcV9TargetMachine.cpp
@@ -19,6 +19,7 @@
 #include "llvm/CodeGen/RegisterAllocation.h"
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/PassManager.h"
 #include <iostream>
 using std::cerr;
@@ -229,7 +230,11 @@
   }
 
   bool runOnMethod(Method *M) {
-    for_each(M->inst_begin(), M->inst_end(), freeMachineCode);
+    for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI)
+      for (BasicBlock::iterator I = (*MI)->begin(), E = (*MI)->end();
+           I != E; ++I)
+        freeMachineCode(*I);
+
     // Don't destruct MachineCodeForMethod - The global printer needs it
     //MachineCodeForMethod::destruct(M);
     return false;
diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp
index 71c5067..7f71cf1 100644
--- a/lib/Transforms/Scalar/ADCE.cpp
+++ b/lib/Transforms/Scalar/ADCE.cpp
@@ -13,6 +13,7 @@
 #include "llvm/Analysis/Writer.h"
 #include "llvm/iTerminators.h"
 #include "llvm/iPHINode.h"
+#include "llvm/Support/CFG.h"
 #include "Support/STLExtras.h"
 #include "Support/DepthFirstIterator.h"
 #include <algorithm>
@@ -156,10 +157,12 @@
 
 #ifdef DEBUG_ADCE
   cerr << "Current Method: X = Live\n";
-  for (Method::inst_iterator IL = M->inst_begin(); IL != M->inst_end(); ++IL) {
-    if (LiveSet.count(*IL)) cerr << "X ";
-    cerr << *IL;
-  }
+  for (Method::iterator I = M->begin(), E = M->end(); I != E; ++I)
+    for (BasicBlock::iterator BI = (*I)->begin(), BE = (*I)->end();
+         BI != BE; ++BI) {
+      if (LiveSet.count(*BI)) cerr << "X ";
+      cerr << *BI;
+    }
 #endif
 
   // After the worklist is processed, recursively walk the CFG in depth first
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp
index d06c197..59442ea 100644
--- a/lib/Transforms/Scalar/IndVarSimplify.cpp
+++ b/lib/Transforms/Scalar/IndVarSimplify.cpp
@@ -11,6 +11,7 @@
 #include "llvm/iPHINode.h"
 #include "llvm/iOther.h"
 #include "llvm/Type.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/ConstantVals.h"
 #include "Support/STLExtras.h"
 
diff --git a/lib/Transforms/Scalar/InductionVars.cpp b/lib/Transforms/Scalar/InductionVars.cpp
index 48982f4..bc130f0 100644
--- a/lib/Transforms/Scalar/InductionVars.cpp
+++ b/lib/Transforms/Scalar/InductionVars.cpp
@@ -26,6 +26,7 @@
 #include "llvm/SymbolTable.h"
 #include "llvm/iPHINode.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "Support/STLExtras.h"
 #include <algorithm>
 #include <iostream>
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp
index 2559066..962ca97 100644
--- a/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -18,6 +18,7 @@
 #include "llvm/Transforms/Scalar/ConstantHandling.h"
 #include "llvm/Method.h"
 #include "llvm/iMemory.h"
+#include "llvm/Support/InstIterator.h"
 #include "../TransformInternals.h"
 
 static Instruction *CombineBinOp(BinaryOperator *I) {
@@ -126,7 +127,7 @@
 
 bool InstructionCombining::doit(Method *M) {
   // Start the worklist out with all of the instructions in the method in it.
-  std::vector<Instruction*> WorkList(M->inst_begin(), M->inst_end());
+  std::vector<Instruction*> WorkList(inst_begin(M), inst_end(M));
 
   while (!WorkList.empty()) {
     Instruction *I = WorkList.back();  // Get an instruction from the worklist
diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp
index d6b7c40..ada670d 100644
--- a/lib/Transforms/Scalar/SCCP.cpp
+++ b/lib/Transforms/Scalar/SCCP.cpp
@@ -244,39 +244,36 @@
   // constants if we have found them to be of constant values.
   //
   bool MadeChanges = false;
-  for (Method::inst_iterator II = M->inst_begin(); II != M->inst_end(); ) {
-    Instruction *Inst = *II;
-    InstVal &IV = ValueState[Inst];
-    if (IV.isConstant()) {
-      Constant *Const = IV.getConstant();
-      // cerr << "Constant: " << Inst << "  is: " << Const;
+  for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) {
+    BasicBlock *BB = *MI;
+    for (BasicBlock::iterator BI = BB->begin(); BI != BB->end();) {
+      Instruction *Inst = *BI;
+      InstVal &IV = ValueState[Inst];
+      if (IV.isConstant()) {
+        Constant *Const = IV.getConstant();
+        // cerr << "Constant: " << Inst << "  is: " << Const;
 
-      // Replaces all of the uses of a variable with uses of the constant.
-      Inst->replaceAllUsesWith(Const);
+        // Replaces all of the uses of a variable with uses of the constant.
+        Inst->replaceAllUsesWith(Const);
 
-      // Remove the operator from the list of definitions...
-      Inst->getParent()->getInstList().remove(II.getInstructionIterator());
+        // Remove the operator from the list of definitions...
+        BB->getInstList().remove(BI);
 
-      // The new constant inherits the old name of the operator...
-      if (Inst->hasName() && !Const->hasName())
-        Const->setName(Inst->getName(), M->getSymbolTableSure());
+        // The new constant inherits the old name of the operator...
+        if (Inst->hasName() && !Const->hasName())
+          Const->setName(Inst->getName(), M->getSymbolTableSure());
 
-      // Delete the operator now...
-      delete Inst;
+        // Delete the operator now...
+        delete Inst;
 
-      // Incrementing the iterator in an unchecked manner could mess up the
-      // internals of 'II'.  To make sure everything is happy, tell it we might
-      // have broken it.
-      II.resyncInstructionIterator();
+        // Hey, we just changed something!
+        MadeChanges = true;
+      } else if (TerminatorInst *TI = dyn_cast<TerminatorInst>(Inst)) {
+        MadeChanges |= ConstantFoldTerminator(TI);
+      }
 
-      // Hey, we just changed something!
-      MadeChanges = true;
-      continue;   // Skip the ++II at the end of the loop here...
-    } else if (Inst->isTerminator()) {
-      MadeChanges |= ConstantFoldTerminator(cast<TerminatorInst>(Inst));
+      ++BI;
     }
-
-    ++II;
   }
 
   // Merge identical constants last: this is important because we may have just
diff --git a/lib/Transforms/Utils/Linker.cpp b/lib/Transforms/Utils/Linker.cpp
index e162252..f265bb0 100644
--- a/lib/Transforms/Utils/Linker.cpp
+++ b/lib/Transforms/Utils/Linker.cpp
@@ -12,6 +12,7 @@
 #include "llvm/Transforms/Linker.h"
 #include "llvm/Module.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/GlobalVariable.h"
 #include "llvm/SymbolTable.h"
 #include "llvm/DerivedTypes.h"
@@ -337,13 +338,16 @@
   // in the Source method as operands.  Loop through all of the operands of the
   // methods and patch them up to point to the local versions...
   //
-  for (Method::inst_iterator I = Dest->inst_begin(), E = Dest->inst_end();
-       I != E; ++I) {
-    Instruction *Inst = *I;
-
-    for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end();
-         OI != OE; ++OI)
-      *OI = RemapOperand(*OI, LocalMap, &GlobalMap);
+  for (Method::iterator BI = Dest->begin(), BE = Dest->end();
+       BI != BE; ++BI) {
+    BasicBlock *BB = *BI;
+    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
+      Instruction *Inst = *I;
+      
+      for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end();
+           OI != OE; ++OI)
+        *OI = RemapOperand(*OI, LocalMap, &GlobalMap);
+    }
   }
 
   return false;
diff --git a/lib/VMCore/Dominators.cpp b/lib/VMCore/Dominators.cpp
index aad6e1c..33e14e9 100644
--- a/lib/VMCore/Dominators.cpp
+++ b/lib/VMCore/Dominators.cpp
@@ -7,6 +7,7 @@
 #include "llvm/Analysis/Dominators.h"
 #include "llvm/Transforms/UnifyMethodExitNodes.h"
 #include "llvm/Method.h"
+#include "llvm/Support/CFG.h"
 #include "Support/DepthFirstIterator.h"
 #include "Support/STLExtras.h"
 #include "Support/SetOperations.h"
diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp
index 50fdd44..e729a65 100644
--- a/lib/VMCore/Instruction.cpp
+++ b/lib/VMCore/Instruction.cpp
@@ -5,6 +5,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Instruction.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/Method.h"
 #include "llvm/SymbolTable.h"
 
diff --git a/lib/VMCore/Linker.cpp b/lib/VMCore/Linker.cpp
index e162252..f265bb0 100644
--- a/lib/VMCore/Linker.cpp
+++ b/lib/VMCore/Linker.cpp
@@ -12,6 +12,7 @@
 #include "llvm/Transforms/Linker.h"
 #include "llvm/Module.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/GlobalVariable.h"
 #include "llvm/SymbolTable.h"
 #include "llvm/DerivedTypes.h"
@@ -337,13 +338,16 @@
   // in the Source method as operands.  Loop through all of the operands of the
   // methods and patch them up to point to the local versions...
   //
-  for (Method::inst_iterator I = Dest->inst_begin(), E = Dest->inst_end();
-       I != E; ++I) {
-    Instruction *Inst = *I;
-
-    for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end();
-         OI != OE; ++OI)
-      *OI = RemapOperand(*OI, LocalMap, &GlobalMap);
+  for (Method::iterator BI = Dest->begin(), BE = Dest->end();
+       BI != BE; ++BI) {
+    BasicBlock *BB = *BI;
+    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
+      Instruction *Inst = *I;
+      
+      for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end();
+           OI != OE; ++OI)
+        *OI = RemapOperand(*OI, LocalMap, &GlobalMap);
+    }
   }
 
   return false;
diff --git a/lib/VMCore/Pass.cpp b/lib/VMCore/Pass.cpp
index c18ff0a..b6e222d 100644
--- a/lib/VMCore/Pass.cpp
+++ b/lib/VMCore/Pass.cpp
@@ -9,6 +9,7 @@
 #include "llvm/PassManager.h"
 #include "llvm/Module.h"
 #include "llvm/Method.h"
+#include "llvm/BasicBlock.h"
 #include "Support/STLExtras.h"
 #include <algorithm>
 
diff --git a/lib/VMCore/SlotCalculator.cpp b/lib/VMCore/SlotCalculator.cpp
index 4738f71..43a4591 100644
--- a/lib/VMCore/SlotCalculator.cpp
+++ b/lib/VMCore/SlotCalculator.cpp
@@ -171,7 +171,7 @@
   SC_DEBUG("Inserting Instructions:\n");
 
   // Add all of the instructions to the type planes...
-  for_each(M->inst_begin(), M->inst_end(),
+  for_each(inst_begin(M), inst_end(M),
 	   bind_obj(this, &SlotCalculator::insertValue));
 
   if (M->hasSymbolTable() && !IgnoreNamedNodes) {
diff --git a/tools/analyze/analyze.cpp b/tools/analyze/analyze.cpp
index 112bfcc..5f3e52e 100644
--- a/tools/analyze/analyze.cpp
+++ b/tools/analyze/analyze.cpp
@@ -28,6 +28,7 @@
 #include "llvm/Analysis/LoopInfo.h"
 #include "llvm/Analysis/FindUnsafePointerTypes.h"
 #include "llvm/Analysis/FindUsedTypes.h"
+#include "llvm/Support/InstIterator.h"
 #include "Support/CommandLine.h"
 #include <algorithm>
 #include <iostream>
@@ -119,8 +120,7 @@
 struct IndVars : public MethodPass {
   void doit(Method *M) {
     cfg::LoopInfo &LI = getAnalysis<cfg::LoopInfo>();
-    for (Method::inst_iterator I = M->inst_begin(), E = M->inst_end();
-         I != E; ++I)
+    for (inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I)
       if (PHINode *PN = dyn_cast<PHINode>(*I)) {
         InductionVariable IV(PN, &LI);
         if (IV.InductionType != InductionVariable::Unknown)
@@ -137,8 +137,7 @@
 struct Exprs : public MethodPass {
   static void doit(Method *M) {
     cout << "Classified expressions for: " << M->getName() << "\n";
-    Method::inst_iterator I = M->inst_begin(), E = M->inst_end();
-    for (; I != E; ++I) {
+    for (inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) {
       cout << *I;
       
       if ((*I)->getType() == Type::VoidTy) continue;
diff --git a/tools/dis/dis.cpp b/tools/dis/dis.cpp
index 11e67c4..3495465 100644
--- a/tools/dis/dis.cpp
+++ b/tools/dis/dis.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Assembly/Writer.h"
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Method.h"
+#include "llvm/Support/CFG.h"
 #include "Support/DepthFirstIterator.h"
 #include "Support/PostOrderIterator.h"
 #include "Support/CommandLine.h"
diff --git a/tools/llvm-dis/dis.cpp b/tools/llvm-dis/dis.cpp
index 11e67c4..3495465 100644
--- a/tools/llvm-dis/dis.cpp
+++ b/tools/llvm-dis/dis.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Assembly/Writer.h"
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Method.h"
+#include "llvm/Support/CFG.h"
 #include "Support/DepthFirstIterator.h"
 #include "Support/PostOrderIterator.h"
 #include "Support/CommandLine.h"
diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp
index 11e67c4..3495465 100644
--- a/tools/llvm-dis/llvm-dis.cpp
+++ b/tools/llvm-dis/llvm-dis.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Assembly/Writer.h"
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Method.h"
+#include "llvm/Support/CFG.h"
 #include "Support/DepthFirstIterator.h"
 #include "Support/PostOrderIterator.h"
 #include "Support/CommandLine.h"
