diff --git a/lib/Analysis/Environment.cpp b/lib/Analysis/Environment.cpp
index 7f6fbd3..570a38f 100644
--- a/lib/Analysis/Environment.cpp
+++ b/lib/Analysis/Environment.cpp
@@ -12,7 +12,9 @@
 //===----------------------------------------------------------------------===//
 
 #include "clang/Analysis/PathSensitive/Environment.h"
+#include "clang/Analysis/Analyses/LiveVariables.h"
 #include "llvm/ADT/ImmutableMap.h"
+#include "llvm/Support/Streams.h"
 
 using namespace clang;
 
@@ -103,3 +105,49 @@
 
   return isBlkExpr ? AddBlkExpr(Env, E, V) : AddSubExpr(Env, E, V);
 }
+
+Environment 
+EnvironmentManager::RemoveDeadBindings(Environment Env, 
+                                       Stmt* Loc,
+                                       const LiveVariables& Liveness,
+                                       StoreManager::DeclRootsTy& DRoots,
+                                       StoreManager::LiveSymbolsTy& LSymbols) {
+  // Drop bindings for subexpressions.
+  Env = RemoveSubExprBindings(Env);
+
+  // Iterate over the block-expr bindings.
+  for (Environment::beb_iterator I = Env.beb_begin(), E = Env.beb_end(); 
+       I != E; ++I) {
+    Expr* BlkExpr = I.getKey();
+
+    if (Liveness.isLive(Loc, BlkExpr)) {
+      RVal X = I.getData();
+
+      // If the block expr's value is the address of some Decl, then mark that
+      // Decl.
+      if (isa<lval::DeclVal>(X)) {
+        lval::DeclVal LV = cast<lval::DeclVal>(X);
+        DRoots.push_back(LV.getDecl());
+      }
+
+      // Mark all symbols in the block expr's value.
+      for (RVal::symbol_iterator SI = X.symbol_begin(), SE = X.symbol_end();
+           SI != SE; ++SI) {
+        LSymbols.insert(*SI);
+      }
+    } else {
+      // The block expr is dead.
+      RVal X = I.getData();
+
+      // Do not misclean LogicalExpr or ConditionalOperator.
+      // Why is it dead? Should look at LiveVariables.
+
+      if (X.isUndef() && cast<UndefinedVal>(X).getData())
+        continue;
+
+      Env = RemoveBlkExpr(Env, BlkExpr);
+    }
+  }
+
+  return Env;
+}
diff --git a/lib/Analysis/GRState.cpp b/lib/Analysis/GRState.cpp
index c9494fe..1cee484 100644
--- a/lib/Analysis/GRState.cpp
+++ b/lib/Analysis/GRState.cpp
@@ -88,40 +88,8 @@
   
   GRState NewSt = *St;
 
-  // FIXME: Put this in environment.
-  // Clean up the environment.
-  
-  // Drop bindings for subexpressions.
-  NewSt.Env = EnvMgr.RemoveSubExprBindings(NewSt.Env);
-  
-  // Iterate over the block-expr bindings.
-
-  for (GRState::beb_iterator I = St->beb_begin(), E = St->beb_end();
-                                                    I!=E ; ++I) {    
-    Expr* BlkExpr = I.getKey();
-    
-    if (Liveness.isLive(Loc, BlkExpr)) {
-      RVal X = I.getData();
-      
-      if (isa<lval::DeclVal>(X)) {
-        lval::DeclVal LV = cast<lval::DeclVal>(X);
-        DRoots.push_back(LV.getDecl());
-      }
-      
-      for (RVal::symbol_iterator SI = X.symbol_begin(), SE = X.symbol_end(); 
-                                                        SI != SE; ++SI) {        
-        LSymbols.insert(*SI);
-      }
-    }
-    else {
-      RVal X = I.getData();
-      
-      if (X.isUndef() && cast<UndefinedVal>(X).getData())
-        continue;
-      
-      NewSt.Env = EnvMgr.RemoveBlkExpr(NewSt.Env, BlkExpr);
-    }
-  }
+  NewSt.Env = EnvMgr.RemoveDeadBindings(NewSt.Env, Loc, Liveness, 
+                                        DRoots, LSymbols);
 
   // Clean up the store.
   DSymbols.clear();
