diff --git a/lib/Analysis/Interval.cpp b/lib/Analysis/Interval.cpp
index 97fa34e..5c68be9 100644
--- a/lib/Analysis/Interval.cpp
+++ b/lib/Analysis/Interval.cpp
@@ -8,19 +8,17 @@
 #include "llvm/Analysis/Interval.h"
 #include "llvm/BasicBlock.h"
 
-using namespace cfg;
-
 //===----------------------------------------------------------------------===//
 // Interval Implementation
 //===----------------------------------------------------------------------===//
 
 // isLoop - Find out if there is a back edge in this interval...
 //
-bool Interval::isLoop() const {
+bool cfg::Interval::isLoop() const {
   // There is a loop in this interval iff one of the predecessors of the header
   // node lives in the interval.
-  for (BasicBlock::pred_iterator I = pred_begin(HeaderNode), 
-                                 E = pred_end(HeaderNode); I != E; ++I) {
+  for (BasicBlock::pred_iterator I = HeaderNode->pred_begin(), 
+                                 E = HeaderNode->pred_end(); I != E; ++I) {
     if (contains(*I)) return true;
   }
   return false;
diff --git a/lib/Analysis/LiveVar/BBLiveVar.cpp b/lib/Analysis/LiveVar/BBLiveVar.cpp
index 210a24b..80fde4e 100644
--- a/lib/Analysis/LiveVar/BBLiveVar.cpp
+++ b/lib/Analysis/LiveVar/BBLiveVar.cpp
@@ -162,9 +162,9 @@
                               // whose POId is lower
 
 
-  cfg::pred_const_iterator PredBBI = cfg::pred_begin(BaseBB);
+  BasicBlock::pred_const_iterator PredBBI = BaseBB->pred_begin();
 
-  for( ; PredBBI != cfg::pred_end(BaseBB) ; PredBBI++) {
+  for( ; PredBBI != BaseBB->pred_end() ; PredBBI++) {
     assert( *PredBBI );       // assert that the predecessor is valid
     BBLiveVar  *PredLVBB = LVMap[*PredBBI];
 
diff --git a/lib/Analysis/LiveVar/BBLiveVar.h b/lib/Analysis/LiveVar/BBLiveVar.h
index e4d5804..55a6c3a 100644
--- a/lib/Analysis/LiveVar/BBLiveVar.h
+++ b/lib/Analysis/LiveVar/BBLiveVar.h
@@ -1,4 +1,4 @@
-/* Title:   BBLiveVar.h
+/* Title:   BBLiveVar.h                  -*- C++ -*-
    Author:  Ruchira Sasanka
    Date:    Jun 30, 01
    Purpose: This is a wrapper class for BasicBlock which is used by live 
@@ -13,7 +13,6 @@
 
 #include "llvm/BasicBlock.h"
 #include "llvm/Instruction.h"
-#include "llvm/CFG.h"
 #include "llvm/Type.h"
 #include "llvm/iOther.h"
 
diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp
index 0372141..c241646 100644
--- a/lib/Analysis/PostDominators.cpp
+++ b/lib/Analysis/PostDominators.cpp
@@ -63,7 +63,8 @@
     df_iterator<const Method*> It = df_begin(M), End = df_end(M);
     for ( ; It != End; ++It) {
       const BasicBlock *BB = *It;
-      pred_const_iterator PI = pred_begin(BB), PEnd = pred_end(BB);
+      BasicBlock::pred_const_iterator PI = BB->pred_begin(),
+                                      PEnd = BB->pred_end();
       if (PI != PEnd) {                // Is there SOME predecessor?
 	// Loop until we get to a predecessor that has had it's dom set filled
 	// in at least once.  We are guaranteed to have this because we are
@@ -114,7 +115,8 @@
     idf_iterator<const BasicBlock*> It = idf_begin(Root), End = idf_end(Root);
     for ( ; It != End; ++It) {
       const BasicBlock *BB = *It;
-      succ_const_iterator PI = succ_begin(BB), PEnd = succ_end(BB);
+      BasicBlock::succ_const_iterator PI = BB->succ_begin(),
+                                      PEnd = BB->succ_end();
       if (PI != PEnd) {                // Is there SOME predecessor?
 	// Loop until we get to a successor that has had it's dom set filled
 	// in at least once.  We are guaranteed to have this because we are
@@ -320,8 +322,8 @@
   const BasicBlock *BB = Node->getNode();
   DomSetType &S = Frontiers[BB];       // The new set to fill in...
 
-  for (succ_const_iterator SI = succ_begin(BB), SE = succ_end(BB); 
-       SI != SE; ++SI) {
+  for (BasicBlock::succ_const_iterator SI = BB->succ_begin(),
+                                       SE = BB->succ_end(); SI != SE; ++SI) {
     // Does Node immediately dominate this successor?
     if (DT[*SI]->getIDom() != Node)
       S.insert(*SI);
@@ -354,8 +356,8 @@
   DomSetType &S = Frontiers[BB];       // The new set to fill in...
   if (!Root) return S;
 
-  for (pred_const_iterator SI = pred_begin(BB), SE = pred_end(BB); 
-       SI != SE; ++SI) {
+  for (BasicBlock::pred_const_iterator SI = BB->pred_begin(),
+                                       SE = BB->pred_end(); SI != SE; ++SI) {
     // Does Node immediately dominate this predeccessor?
     if (DT[*SI]->getIDom() != Node)
       S.insert(*SI);
