diff --git a/lbry/wallet/header.py b/lbry/wallet/header.py
index 0daf49cc1..2fa066cdf 100644
--- a/lbry/wallet/header.py
+++ b/lbry/wallet/header.py
@@ -311,12 +311,15 @@ class Headers:
                 headers = headers[:(len(headers) // self.header_size) * self.header_size]
             for header_hash, header in self._iterate_headers(height, headers):
                 height = header['block_height']
-                if height:
+                if previous_header_hash:
                     if header['prev_block_hash'] != previous_header_hash:
                         fail = True
-                else:
+                elif height == 0:
                     if header_hash != self.genesis_hash:
                         fail = True
+                else:
+                    # for sanity and clarity, since it is the only way we can end up here
+                    assert start_height > 0 and height == start_height
                 if fail:
                     log.warning("Header file corrupted at height %s, truncating it.", height - 1)
                     def __truncate(at_height):
diff --git a/tests/unit/wallet/test_headers.py b/tests/unit/wallet/test_headers.py
index 425d825e3..5ebb333c3 100644
--- a/tests/unit/wallet/test_headers.py
+++ b/tests/unit/wallet/test_headers.py
@@ -143,6 +143,9 @@ class TestHeaders(AsyncioTestCase):
         self.assertEqual(7, headers.height)
         await headers.connect(len(headers), HEADERS[block_bytes(8):])
         self.assertEqual(19, headers.height)
+        # verify from middle
+        await headers.repair(start_height=10)
+        self.assertEqual(19, headers.height)
 
     async def test_misalignment_triggers_repair_on_open(self):
         headers = Headers(':memory:')