diff --git a/ChangeLog b/ChangeLog
index 082eeb2..09394c5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-09-10  Bill Wendling  <morbo@google.com>
+
+	* yapf/yapflib/reformatter.py: Retain spacing between disabled and
+	enabled lines.
+	* yapftests/yapf_test.py: Add testcase.
+
 2015-09-09  Bill Wendling  <morbo@google.com>
 
 	* 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."""
