diff --git a/lib/Analysis/BasicStore.cpp b/lib/Analysis/BasicStore.cpp
index 1528456..24ec7f0 100644
--- a/lib/Analysis/BasicStore.cpp
+++ b/lib/Analysis/BasicStore.cpp
@@ -16,6 +16,7 @@
 #include "clang/Analysis/PathSensitive/GRState.h"
 #include "llvm/ADT/ImmutableMap.h"
 #include "llvm/Support/Compiler.h"
+#include "llvm/Support/Streams.h"
 
 using namespace clang;
 
@@ -42,7 +43,10 @@
   
   static inline VarBindingsTy GetVarBindings(Store store) {
     return VarBindingsTy(static_cast<const VarBindingsTy::TreeTy*>(store));
-  }  
+  }
+
+  virtual void print(Store store, std::ostream& Out,
+                     const char* nl, const char *sep);
 };  
   
 } // end anonymous namespace
@@ -234,3 +238,20 @@
   }
   return St;
 }
+
+void BasicStoreManager::print(Store store, std::ostream& Out,
+                              const char* nl, const char *sep) {
+      
+  VarBindingsTy B = GetVarBindings(store);
+  Out << "Variables:" << nl;
+  
+  bool isFirst = true;
+  
+  for (VarBindingsTy::iterator I=B.begin(), E=B.end(); I != E; ++I) {
+    if (isFirst) isFirst = false;
+    else Out << nl;
+    
+    Out << ' ' << I.getKey()->getName() << " : ";
+    I.getData().print(Out);
+  }
+}
diff --git a/lib/Analysis/GRState.cpp b/lib/Analysis/GRState.cpp
index e4022a2..23467e2 100644
--- a/lib/Analysis/GRState.cpp
+++ b/lib/Analysis/GRState.cpp
@@ -238,26 +238,15 @@
 //  State pretty-printing.
 //===----------------------------------------------------------------------===//
 
-void GRState::print(std::ostream& Out, Printer** Beg, Printer** End,
+void GRState::print(std::ostream& Out, StoreManager& StoreMgr,
+                    Printer** Beg, Printer** End,
                     const char* nl, const char* sep) const {
-
-  // Print Variable Bindings
-  Out << "Variables:" << nl;
   
-  bool isFirst = true;
-  
-  for (vb_iterator I = vb_begin(), E = vb_end(); I != E; ++I) {        
-    
-    if (isFirst) isFirst = false;
-    else Out << nl;
-    
-    Out << ' ' << I.getKey()->getName() << " : ";
-    I.getData().print(Out);
-  }
+  // Print the store.
+  StoreMgr.print(getStore(), Out, nl, sep);
   
   // Print Subexpression bindings.
-  
-  isFirst = true;
+  bool isFirst = true;
   
   for (seb_iterator I = seb_begin(), E = seb_end(); I != E; ++I) {        
     
@@ -274,7 +263,6 @@
   }
   
   // Print block-expression bindings.
-  
   isFirst = true;
   
   for (beb_iterator I = beb_begin(), E = beb_end(); I != E; ++I) {      
@@ -341,7 +329,7 @@
 void GRStateRef::print(std::ostream& Out, const char* nl, const char* sep)const{
   GRState::Printer **beg = Mgr->Printers.empty() ? 0 : &Mgr->Printers[0];
   GRState::Printer **end = !beg ? 0 : beg + Mgr->Printers.size();  
-  St->print(Out, beg, end, nl, sep);
+  St->print(Out, *Mgr->StMgr, beg, end, nl, sep);
 }
 
 //===----------------------------------------------------------------------===//
