diff --git a/include/clang/Analysis/FlowSensitive/DataflowSolver.h b/include/clang/Analysis/FlowSensitive/DataflowSolver.h
index 15f7107..7a19c19 100644
--- a/include/clang/Analysis/FlowSensitive/DataflowSolver.h
+++ b/include/clang/Analysis/FlowSensitive/DataflowSolver.h
@@ -159,7 +159,7 @@
 
     if (I != M.end()) {
       TF.getVal().copyValues(I->second);
-      ProcessBlock(B, recordStmtValues);
+      ProcessBlock(B, recordStmtValues, AnalysisDirTag());
     }
   }
   
@@ -192,7 +192,7 @@
     while (!WorkList.isEmpty()) {
       const CFGBlock* B = WorkList.dequeue();
       ProcessMerge(cfg,B);
-      ProcessBlock(B, recordStmtValues);
+      ProcessBlock(B, recordStmtValues, AnalysisDirTag());
       UpdateEdges(cfg,B,TF.getVal());
     }
   }
@@ -230,11 +230,23 @@
     
     // Set the data for the block.
     D.getBlockDataMap()[B].copyValues(V);
-  }
-  
+  }  
 
   /// ProcessBlock - Process the transfer functions for a given block.
-  void ProcessBlock(const CFGBlock* B, bool recordStmtValues) {
+  void ProcessBlock(const CFGBlock* B, bool recordStmtValues,
+                    dataflow::forward_analysis_tag) {
+    
+    for (StmtItr I=ItrTraits::StmtBegin(B), E=ItrTraits::StmtEnd(B); I!=E;++I)
+      ProcessStmt(*I, recordStmtValues, AnalysisDirTag());
+    
+    if (Stmt* Term = (Stmt*) B->getTerminator()) TF.VisitTerminator(Term);  
+  }
+  
+  void ProcessBlock(const CFGBlock* B, bool recordStmtValues,
+                    dataflow::backward_analysis_tag) {
+    
+    if (Stmt* Term = (Stmt*) B->getTerminator()) TF.VisitTerminator(Term);
+
     for (StmtItr I=ItrTraits::StmtBegin(B), E=ItrTraits::StmtEnd(B); I!=E;++I)
       ProcessStmt(*I, recordStmtValues, AnalysisDirTag());
   }
diff --git a/lib/Analysis/LiveVariables.cpp b/lib/Analysis/LiveVariables.cpp
index b704b2d..4cef30c 100644
--- a/lib/Analysis/LiveVariables.cpp
+++ b/lib/Analysis/LiveVariables.cpp
@@ -73,7 +73,8 @@
   void VisitAssign(BinaryOperator* B);
   void VisitDeclStmt(DeclStmt* DS);
   void VisitUnaryOperator(UnaryOperator* U);
-  void Visit(Stmt *S);
+  void Visit(Stmt *S);  
+  void VisitTerminator(Stmt* S); 
 };
       
 void TransferFuncs::Visit(Stmt *S) {
@@ -90,6 +91,23 @@
     // For block-level expressions, mark that they are live.
     LiveState(S,AD) = Alive;
 }
+  
+void TransferFuncs::VisitTerminator(Stmt* S) {
+  return;
+  
+  for (Stmt::child_iterator I = S->child_begin(), E = S->child_end();
+       I != E; ++I) {
+    
+    Stmt* Child = *I;
+    if (!Child) continue;
+    
+    if (getCFG().isBlkExpr(Child)) {
+      LiveState(Child, AD) = Alive;
+      return;  // Only one "condition" expression.
+    }
+  }
+}
+
 
 void TransferFuncs::VisitDeclRefExpr(DeclRefExpr* DR) {
   if (VarDecl* V = dyn_cast<VarDecl>(DR->getDecl())) 
diff --git a/lib/Analysis/UninitializedValues.cpp b/lib/Analysis/UninitializedValues.cpp
index 3edf04d..d5c697a 100644
--- a/lib/Analysis/UninitializedValues.cpp
+++ b/lib/Analysis/UninitializedValues.cpp
@@ -75,6 +75,8 @@
   
   bool Visit(Stmt *S);
   bool BlockStmt_VisitExpr(Expr* E);
+    
+  void VisitTerminator(Stmt* T) { Visit(T); }
   
   BlockVarDecl* FindBlockVarDecl(Stmt* S);
 };
