diff --git a/lib/Analysis/ValueState.cpp b/lib/Analysis/ValueState.cpp
index 097969b..23c93ae 100644
--- a/lib/Analysis/ValueState.cpp
+++ b/lib/Analysis/ValueState.cpp
@@ -49,7 +49,7 @@
   ValueState NewSt = *St;
   
   // Drop bindings for subexpressions.
-  NewSt.SubExprBindings = EXFactory.GetEmptyMap();
+  NewSt.Env = EnvMgr.RemoveSubExprBindings(NewSt.Env);
   
   // Iterate over the block-expr bindings.
 
@@ -76,7 +76,7 @@
       if (X.isUndef() && cast<UndefinedVal>(X).getData())
         continue;
       
-      NewSt.BlockExprBindings = Remove(NewSt, BlkExpr);
+      NewSt.Env = EnvMgr.RemoveBlkExpr(NewSt.Env, BlkExpr);
     }
   }
 
@@ -258,6 +258,7 @@
   return getPersistentState(NewSt);
 }
 
+// FIXME: This should all go into the environment.
 RVal ValueStateManager::GetRVal(ValueState* St, Expr* E) {
 
   for (;;) {
@@ -321,13 +322,7 @@
     break;
   }
   
-  ValueState::ExprBindingsTy::data_type* T = St->SubExprBindings.lookup(E);
-  
-  if (T)
-    return *T;
-  
-  T = St->BlockExprBindings.lookup(E);
-  return T ? *T : UnknownVal();
+  return St->LookupExpr(E);
 }
 
 RVal ValueStateManager::GetBlkExprRVal(ValueState* St, Expr* E) {
@@ -344,10 +339,8 @@
       return NonLVal::MakeVal(BasicVals, cast<IntegerLiteral>(E));
     }
       
-    default: {
-      ValueState::ExprBindingsTy::data_type* T=St->BlockExprBindings.lookup(E);    
-      return T ? *T : UnknownVal();
-    }
+    default:
+      return St->getEnvironment().LookupBlkExpr(E);
   }
 }
 
@@ -364,9 +357,9 @@
       ValueState NewSt = *St;
       
       if (isBlkExpr)
-        NewSt.BlockExprBindings = EXFactory.Remove(NewSt.BlockExprBindings, E);
+        NewSt.Env = EnvMgr.RemoveBlkExpr(NewSt.Env, E);
       else
-        NewSt.SubExprBindings = EXFactory.Remove(NewSt.SubExprBindings, E);
+        NewSt.Env = EnvMgr.RemoveSubExpr(NewSt.Env, E);
       
       return getPersistentState(NewSt);
     }
@@ -376,12 +369,10 @@
   
   ValueState NewSt = *St;
   
-  if (isBlkExpr) {
-    NewSt.BlockExprBindings = EXFactory.Add(NewSt.BlockExprBindings, E, V);
-  }
-  else {
-    NewSt.SubExprBindings = EXFactory.Add(NewSt.SubExprBindings, E, V);
-  }
+  if (isBlkExpr)
+    NewSt.Env = EnvMgr.AddBlkExpr(NewSt.Env, E, V);
+  else
+    NewSt.Env = EnvMgr.AddSubExpr(NewSt.Env, E, V);
 
   return getPersistentState(NewSt);
 }
@@ -437,10 +428,10 @@
 ValueState* ValueStateManager::getInitialState() {
 
   // Create a state with empty variable bindings.
-  ValueState StateImpl(EXFactory.GetEmptyMap(),
-                           VBFactory.GetEmptyMap(),
-                           CNEFactory.GetEmptyMap(),
-                           CEFactory.GetEmptyMap());
+  ValueState StateImpl(EnvMgr.getInitialEnvironment(),
+                       VBFactory.GetEmptyMap(),
+                       CNEFactory.GetEmptyMap(),
+                       CEFactory.GetEmptyMap());
   
   return getPersistentState(StateImpl);
 }
