diff --git a/lib/Analysis/BasicConstraintManager.cpp b/lib/Analysis/BasicConstraintManager.cpp
index 7bd22fd..ffa8a86 100644
--- a/lib/Analysis/BasicConstraintManager.cpp
+++ b/lib/Analysis/BasicConstraintManager.cpp
@@ -51,7 +51,7 @@
   GRState::IntSetTy::Factory ISetFactory;
 public:
   BasicConstraintManager(GRStateManager& statemgr) 
-    : SimpleConstraintManager(statemgr), ISetFactory(statemgr.getAllocator()) {}
+    : ISetFactory(statemgr.getAllocator()) {}
 
   const GRState* AssumeSymNE(const GRState* state, SymbolRef sym,
                              const llvm::APSInt& V);
diff --git a/lib/Analysis/RangeConstraintManager.cpp b/lib/Analysis/RangeConstraintManager.cpp
index 3b4d0c4..73c68bc 100644
--- a/lib/Analysis/RangeConstraintManager.cpp
+++ b/lib/Analysis/RangeConstraintManager.cpp
@@ -235,8 +235,7 @@
 class VISIBILITY_HIDDEN RangeConstraintManager : public SimpleConstraintManager{
   RangeSet GetRange(const GRState *state, SymbolRef sym);      
 public:
-  RangeConstraintManager(GRStateManager& statemgr) 
-      : SimpleConstraintManager(statemgr) {}
+  RangeConstraintManager() {}
 
   const GRState* AssumeSymNE(const GRState* St, SymbolRef sym,
                              const llvm::APSInt& V);
@@ -275,9 +274,8 @@
 
 } // end anonymous namespace
 
-ConstraintManager* clang::CreateRangeConstraintManager(GRStateManager& StateMgr)
-{
-  return new RangeConstraintManager(StateMgr);
+ConstraintManager* clang::CreateRangeConstraintManager(GRStateManager&) {
+  return new RangeConstraintManager();
 }
 
 const llvm::APSInt* RangeConstraintManager::getSymVal(const GRState* St,
diff --git a/lib/Analysis/SimpleConstraintManager.cpp b/lib/Analysis/SimpleConstraintManager.cpp
index 6e85889..82801eb 100644
--- a/lib/Analysis/SimpleConstraintManager.cpp
+++ b/lib/Analysis/SimpleConstraintManager.cpp
@@ -234,7 +234,7 @@
   if (!(isa<nonloc::ConcreteInt>(Idx) && isa<nonloc::ConcreteInt>(UpperBound)))
     return state;
 
-  const llvm::APSInt& Zero = getBasicVals().getZeroWithPtrWidth(false);
+  const llvm::APSInt& Zero = state->getBasicVals().getZeroWithPtrWidth(false);
   llvm::APSInt IdxV = cast<nonloc::ConcreteInt>(Idx).getValue();
   // IdxV might be too narrow.
   if (IdxV.getBitWidth() < Zero.getBitWidth())
diff --git a/lib/Analysis/SimpleConstraintManager.h b/lib/Analysis/SimpleConstraintManager.h
index bd18b6a..1e1a10d 100644
--- a/lib/Analysis/SimpleConstraintManager.h
+++ b/lib/Analysis/SimpleConstraintManager.h
@@ -20,22 +20,18 @@
 namespace clang {
 
 class SimpleConstraintManager : public ConstraintManager {
-protected:
-  GRStateManager& StateMgr;
 public:
-  SimpleConstraintManager(GRStateManager& statemgr) 
-    : StateMgr(statemgr) {}
-  virtual ~SimpleConstraintManager();
+  SimpleConstraintManager() {}
+  virtual ~SimpleConstraintManager();  
   
-  bool canReasonAbout(SVal X) const;
-  
-  virtual const GRState *Assume(const GRState *state, SVal Cond,
-                                bool Assumption);
-
   //===------------------------------------------------------------------===//
   // Common implementation for the interface provided by ConstraintManager.
   //===------------------------------------------------------------------===//
-  
+
+  bool canReasonAbout(SVal X) const;
+
+  const GRState *Assume(const GRState *state, SVal Cond, bool Assumption);
+
   const GRState *Assume(const GRState *state, Loc Cond, bool Assumption);
 
   const GRState *Assume(const GRState *state, NonLoc Cond, bool Assumption);
@@ -77,14 +73,6 @@
   const GRState *AssumeAux(const GRState *state, Loc Cond,bool Assumption);
   
   const GRState *AssumeAux(const GRState *state, NonLoc Cond, bool Assumption);
-
-  //===------------------------------------------------------------------===//
-  // FIXME: These can probably be removed now.
-  //===------------------------------------------------------------------===//
-
-private:
-  BasicValueFactory& getBasicVals() { return StateMgr.getBasicVals(); }
-  SymbolManager& getSymbolManager() const { return StateMgr.getSymbolManager(); }
 };
 
 }  // end clang namespace
