Retain spacing between disabled and enabled lines.
diff --git a/ChangeLog b/ChangeLog
index 082eeb2..09394c5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-09-10  Bill Wendling  <[email protected]>
+
+	* yapf/yapflib/reformatter.py: Retain spacing between disabled and
+	enabled lines.
+	* yapftests/yapf_test.py: Add testcase.
+
 2015-09-09  Bill Wendling  <[email protected]>
 
 	* yapf/yapflib/format_decision_style.py: Split only at start of named
diff --git a/yapf/yapflib/reformatter.py b/yapf/yapflib/reformatter.py
index c9b13b4..d106c70 100644
--- a/yapf/yapflib/reformatter.py
+++ b/yapf/yapflib/reformatter.py
@@ -64,7 +64,7 @@
       if prev_uwline and prev_uwline.disable:
         # Keep the vertical spacing between a disabled and enabled formatting
         # region.
-        _RetainVerticalSpacing(uwline, prev_uwline)
+        _RetainVerticalSpacingBetweenTokens(uwline.first, prev_uwline.last)
 
     if (_LineContainsI18n(uwline) or uwline.disable or
         _LineHasContinuationMarkers(uwline)):
@@ -115,22 +115,27 @@
   cur_lineno = 0
   prev_lineno = 0
   for cur_tok in cur_uwline.tokens:
-    if prev_tok is not None:
-      if prev_tok.is_string:
-        prev_lineno = prev_tok.lineno + prev_tok.value.count('\n')
-      else:
-        prev_lineno = prev_tok.lineno
-
-      if cur_tok.is_comment:
-        cur_lineno = cur_tok.lineno - cur_tok.value.count('\n')
-      else:
-        cur_lineno = cur_tok.lineno
-
-    num_newlines = cur_lineno - prev_lineno
-    cur_tok.AdjustNewlinesBefore(num_newlines)
+    _RetainVerticalSpacingBetweenTokens(cur_tok, prev_tok)
     prev_tok = cur_tok
 
 
+def _RetainVerticalSpacingBetweenTokens(cur_tok, prev_tok):
+  if prev_tok is None:
+    return
+
+  if prev_tok.is_string:
+    prev_lineno = prev_tok.lineno + prev_tok.value.count('\n')
+  else:
+    prev_lineno = prev_tok.lineno
+
+  if cur_tok.is_comment:
+    cur_lineno = cur_tok.lineno - cur_tok.value.count('\n')
+  else:
+    cur_lineno = cur_tok.lineno
+
+  cur_tok.AdjustNewlinesBefore(cur_lineno - prev_lineno)
+
+
 def _EmitLineUnformatted(state):
   """Emit the line without formatting.
 
diff --git a/yapftests/yapf_test.py b/yapftests/yapf_test.py
index a14f10b..c53449d 100644
--- a/yapftests/yapf_test.py
+++ b/yapftests/yapf_test.py
@@ -756,6 +756,30 @@
     self.assertYapfReformats(unformatted_code, expected_formatted_code,
                              extra_options=['--lines', '10-18'])
 
+  def testRetainVerticalFormattingBetweenDisabledAndEnabledLines(self):
+    unformatted_code = textwrap.dedent(u"""\
+        class A(object):
+            def aaaaaaaaaaaaa(self):
+                c = bbbbbbbbb.ccccccccc('challenge', 0, 1, 10)
+                self.assertEqual(
+                    ('ddddddddddddddddddddddddd',
+             'eeeeeeeeeeeeeeeeeeeeeeeee.%s' %
+                     c.ffffffffffff),
+             gggggggggggg.hhhhhhhhh(c, c.ffffffffffff))
+                iiiii = jjjjjjjjjjjjjj.iiiii
+        """)
+    expected_formatted_code = textwrap.dedent(u"""\
+        class A(object):
+            def aaaaaaaaaaaaa(self):
+                c = bbbbbbbbb.ccccccccc('challenge', 0, 1, 10)
+                self.assertEqual(
+                    ('ddddddddddddddddddddddddd', 'eeeeeeeeeeeeeeeeeeeeeeeee.%s' %
+                     c.ffffffffffff), gggggggggggg.hhhhhhhhh(c, c.ffffffffffff))
+                iiiii = jjjjjjjjjjjjjj.iiiii
+        """)
+    self.assertYapfReformats(unformatted_code, expected_formatted_code,
+                             extra_options=['--lines', '4-7'])
+
 
 class BadInputTest(unittest.TestCase):
   """Test yapf's behaviour when passed bad input."""