diff --git a/lib/Analysis/LiveVar/BBLiveVar.cpp b/lib/Analysis/LiveVar/BBLiveVar.cpp
index 0ecf96c..b194994 100644
--- a/lib/Analysis/LiveVar/BBLiveVar.cpp
+++ b/lib/Analysis/LiveVar/BBLiveVar.cpp
@@ -1,6 +1,7 @@
 #include "llvm/Analysis/LiveVar/BBLiveVar.h"
 #include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
 #include "llvm/CodeGen/MachineInstr.h"
+#include "llvm/BasicBlock.h"
 
 /// BROKEN: Should not include sparc stuff directly into here
 #include "../../Target/Sparc/SparcInternals.h"  //  Only for PHI defn
@@ -123,8 +124,8 @@
 //-----------------------------------------------------------------------------
 void  BBLiveVar::addDef(const Value *Op) 
 {
-  DefSet.add( Op );     // operand is a def - so add to def set
-  InSet.remove( Op);    // this definition kills any uses
+  DefSet.insert(Op);     // operand is a def - so add to def set
+  InSet.erase(Op);    // this definition kills any uses
   InSetChanged = true; 
 
   if( DEBUG_LV > 1) {   
@@ -138,8 +139,8 @@
 //-----------------------------------------------------------------------------
 void  BBLiveVar::addUse(const Value *Op) 
 {
-  InSet.add( Op );      // An operand is a use - so add to use set
-  OutSet.remove( Op );  // remove if there is a def below this use
+  InSet.insert(Op);   // An operand is a use - so add to use set
+  OutSet.erase(Op);   // remove if there is a def below this use
   InSetChanged = true; 
 
   if( DEBUG_LV > 1) {   // debug msg of level 2
diff --git a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
index 5de35ff..77c8c54 100644
--- a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
+++ b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
@@ -11,6 +11,7 @@
 
 #include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
 #include "llvm/CodeGen/MachineInstr.h"
+#include "llvm/BasicBlock.h"
 #include "Support/PostOrderIterator.h"
 #include <iostream>
 using std::cout;
diff --git a/lib/Analysis/LiveVar/LiveVarSet.cpp b/lib/Analysis/LiveVar/LiveVarSet.cpp
index 8623aa8..9243d05 100644
--- a/lib/Analysis/LiveVar/LiveVarSet.cpp
+++ b/lib/Analysis/LiveVar/LiveVarSet.cpp
@@ -12,13 +12,13 @@
 void LiveVarSet::applyTranferFuncForMInst(const MachineInstr *MInst) {
   for (MachineInstr::val_const_op_iterator OpI(MInst); !OpI.done(); ++OpI) {
     if (OpI.isDef())      // kill only if this operand is a def
-         remove(*OpI);        // this definition kills any uses
+      insert(*OpI);        // this definition kills any uses
   }
 
   // do for implicit operands as well
   for ( unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) {
     if (MInst->implicitRefIsDefined(i))
-      remove(MInst->getImplicitRef(i));
+      erase(MInst->getImplicitRef(i));
   }
 
 
@@ -26,12 +26,12 @@
     if ((*OpI)->getType()->isLabelType()) continue; // don't process labels
     
     if (!OpI.isDef())      // add only if this operand is a use
-       add(*OpI);            // An operand is a use - so add to use set
+      insert(*OpI);            // An operand is a use - so add to use set
   }
 
   // do for implicit operands as well
   for (unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) {
     if (!MInst->implicitRefIsDefined(i))
-      add(MInst->getImplicitRef(i));
+      insert(MInst->getImplicitRef(i));
   }
 }
diff --git a/lib/Analysis/LiveVar/ValueSet.cpp b/lib/Analysis/LiveVar/ValueSet.cpp
index d176d9e..8bf0b4d 100644
--- a/lib/Analysis/LiveVar/ValueSet.cpp
+++ b/lib/Analysis/LiveVar/ValueSet.cpp
@@ -1,16 +1,16 @@
 
 #include "llvm/Analysis/LiveVar/ValueSet.h"
 #include "llvm/ConstantVals.h"
+#include <algorithm>
 #include <iostream>
 using std::cerr;
 using std::endl;
 using std::pair;
 using std::hash_set;
 
-void printValue( const Value *const v)  // func to print a Value 
-{
+void printValue(const Value *v) { // func to print a Value 
   if (v->hasName())
-    cerr << v << "(" << ((*v).getName()) << ") ";
+    cerr << v << "(" << v->getName() << ") ";
   else if (Constant *C = dyn_cast<Constant>(v))
     cerr << v << "(" << C->getStrValue() << ") ";
   else
@@ -20,15 +20,14 @@
 
 //---------------- Method implementations --------------------------
                                              // for performing two set unions
-bool ValueSet::setUnion( const ValueSet *const set1) {   
-  const_iterator set1it;
+bool ValueSet::setUnion( const ValueSet *set1) {   
   pair<iterator, bool> result;
   bool changed = false;
 
-  for( set1it = set1->begin() ; set1it != set1->end(); ++set1it) {  
+  for(const_iterator set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
                                              // for all all elements in set1
-    result = insert( *set1it );              // insert to this set
-      if( result.second == true) changed = true;
+    result = insert(*set1it);                // insert to this set
+    if(result.second == true) changed = true;
   }
 
   return changed;
