diff --git a/mccabe.py b/mccabe.py
index eceafe6..6291320 100644
--- a/mccabe.py
+++ b/mccabe.py
@@ -162,32 +162,29 @@
 
     def visitLoop(self, node):
         name = "Loop %d" % node.lineno
-
-        if self.graph is None:
-            # global loop
-            self.graph = PathGraph(name, name, node.lineno)
-            pathnode = PathNode(name)
-            self.tail = pathnode
-            self.dispatch_list(node.body)
-            self.graphs["%s%s" % (self.classname, name)] = self.graph
-            self.reset()
-        else:
-            pathnode = self.appendPathNode(name)
-            self.tail = pathnode
-            self.dispatch_list(node.body)
-            bottom = PathNode("", look='point')
-            self.graph.connect(self.tail, bottom)
-            self.graph.connect(pathnode, bottom)
-            self.tail = bottom
-
-        # TODO: else clause in node.orelse
+        self._inner1(node, name)
 
     visitFor = visitWhile = visitLoop
 
     def visitIf(self, node):
         name = "If %d" % node.lineno
-        pathnode = self.appendPathNode(name)
+        self._inner1(node, name)
+
+    def _inner1(self, node, name):
+        if self.graph is None:
+            # global loop
+            self.graph = PathGraph(name, name, node.lineno)
+            pathnode = PathNode(name)
+            self._inner2(node, pathnode)
+            self.graphs["%s%s" % (self.classname, name)] = self.graph
+            self.reset()
+        else:
+            pathnode = self.appendPathNode(name)
+            self._inner2(node, pathnode)
+
+    def _inner2(self, node, pathnode):
         loose_ends = []
+        self.tail = pathnode
         self.dispatch_list(node.body)
         loose_ends.append(self.tail)
         if node.orelse:
diff --git a/test_mccabe.py b/test_mccabe.py
index 1b9fc9c..6887c7c 100644
--- a/test_mccabe.py
+++ b/test_mccabe.py
@@ -45,6 +45,15 @@
 """
 
 
+for_else = """\
+def f(mylist):
+    for i in mylist:
+        print(i)
+    else:
+        print(None)
+"""
+
+
 recursive = """\
 def f(n):
     if n > 4:
@@ -106,7 +115,12 @@
 
     def test_for_loop_snippet(self):
         complexity = get_complexity_number(for_loop, self.strio)
-        # The for loop doesn't add an execution path, yet is counted.
+        # The for loop doesn't add an execution path
+        self.assertEqual(complexity, 1)
+
+    def test_for_else_snippet(self):
+        complexity = get_complexity_number(for_else, self.strio)
+        # The for loop doesn't add an execution path, but its `else` does
         self.assertEqual(complexity, 2)
 
     def test_recursive_snippet(self):
