diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp
index c8f54c0..f4a7ff1 100644
--- a/lib/Analysis/BugReporter.cpp
+++ b/lib/Analysis/BugReporter.cpp
@@ -148,6 +148,14 @@
     return getParentMap().getParent(S);
   }
   
+  const CFG& getCFG() {
+    return *BR.getCFG();
+  }
+  
+  const Decl& getCodeDecl() {
+    return BR.getStateManager().getCodeDecl();
+  }
+  
   ExplodedGraph<GRState>& getGraph() { return *ReportGraph; }
   NodeMapClosure& getNodeMapClosure() { return NMC; }
   ASTContext& getContext() { return BR.getContext(); }
@@ -830,6 +838,14 @@
     // Block edges.
     if (const BlockEdge *BE = dyn_cast<BlockEdge>(&P)) {
       const CFGBlock &Blk = *BE->getSrc();
+
+      // Add a special edge for the entrance into the function/method.
+      if (&Blk == &PDB.getCFG().getEntry()) {
+        FullSourceLoc L = FullSourceLoc(PDB.getCodeDecl().getLocation(), SMgr);
+        GenExtAddEdge(PD, PDB, L.getSpellingLoc(), PrevLoc);
+        continue;
+      }
+      
       if (const Stmt *Term = Blk.getTerminator()) {
         const Stmt *Cond = Blk.getTerminatorCondition();
         
@@ -859,7 +875,7 @@
       if (const Stmt* S = BE->getFirstStmt()) {        
         if (!IsControlFlowExpr(S) && !IsNestedDeclStmt(S, PDB.getParentMap())) {
           if (PrevLoc.isValid()) {
-            // Are we jumping with the same enclosing statement?          
+            // Are we jumping within the same enclosing statement?          
             if (PDB.getEnclosingStmtLocation(S) ==
                 PDB.getEnclosingStmtLocation(PrevLoc))
             continue;
