diff --git a/lib/CodeGen/InstrSelection/InstrSelection.cpp b/lib/CodeGen/InstrSelection/InstrSelection.cpp
index 677bef7..a2e9bb6 100644
--- a/lib/CodeGen/InstrSelection/InstrSelection.cpp
+++ b/lib/CodeGen/InstrSelection/InstrSelection.cpp
@@ -176,9 +176,9 @@
 {
   // for all basic blocks in function
   //
-  for (Function::iterator BB = F.begin(); BB != F.end(); ++BB) {
-    BasicBlock::InstListType &InstList = BB->getInstList();
-    for (BasicBlock::iterator IIt = InstList.begin();
+  MachineFunction &MF = MachineFunction::get(&F);
+  for (MachineFunction::iterator BB = MF.begin(); BB != MF.end(); ++BB) {
+    for (BasicBlock::iterator IIt = BB->getBasicBlock()->begin();
          PHINode *PN = dyn_cast<PHINode>(&*IIt); ++IIt) {
       // FIXME: This is probably wrong...
       Value *PhiCpRes = new PHINode(PN->getType(), "PhiCp:");
@@ -208,11 +208,7 @@
       
       vector<MachineInstr*> mvec;
       Target.getRegInfo().cpValue2Value(PhiCpRes, PN, mvec);
-      
-      // get an iterator to machine instructions in the BB
-      MachineBasicBlock& bbMvec = MachineBasicBlock::get(BB);
-      
-      bbMvec.insert(bbMvec.begin(), mvec.begin(), mvec.end());
+      BB->insert(BB->begin(), mvec.begin(), mvec.end());
     }  // for each Phi Instr in BB
   } // for all BBs in function
 }
@@ -229,21 +225,29 @@
   Instruction *TermInst = (Instruction*)BB->getTerminator();
   MachineCodeForInstruction &MC4Term = MachineCodeForInstruction::get(TermInst);
   MachineInstr *FirstMIOfTerm = MC4Term.front();
-  
   assert (FirstMIOfTerm && "No Machine Instrs for terminator");
-  
-  MachineBasicBlock &bbMvec = MachineBasicBlock::get(BB);
+
+  MachineFunction &MF = MachineFunction::get(BB->getParent());
+  MachineBasicBlock *MBB;
+
+  // FIXME: if PHI instructions existed in the machine code, this would be
+  // unnecesary.
+  for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I)
+    if (I->getBasicBlock() == BB) {
+      MBB = I;
+      break;
+    }
 
   // find the position of first machine instruction generated by the
   // terminator of this BB
   MachineBasicBlock::iterator MCIt =
-    std::find(bbMvec.begin(), bbMvec.end(), FirstMIOfTerm);
+    std::find(MBB->begin(), MBB->end(), FirstMIOfTerm);
 
-  assert( MCIt != bbMvec.end() && "Start inst of terminator not found");
+  assert(MCIt != MBB->end() && "Start inst of terminator not found");
   
   // insert the copy instructions just before the first machine instruction
   // generated for the terminator
-  bbMvec.insert(MCIt, CpVec.begin(), CpVec.end());
+  MBB->insert(MCIt, CpVec.begin(), CpVec.end());
 }
 
 
