diff --git a/linux-ramdump-parser-v2/parsers/rtb.py b/linux-ramdump-parser-v2/parsers/rtb.py
index 9a0c99d27ab4a8b7afc03d93bff179c1beef5c0a..143d77ccdab600a374a3989ae6984483721a49bd 100755
--- a/linux-ramdump-parser-v2/parsers/rtb.py
+++ b/linux-ramdump-parser-v2/parsers/rtb.py
@@ -136,6 +136,13 @@ class RTB(RamParser):
         rtbout.write('[{0}] : {1} interrupt {2:x} handled from addr {3:x} {4} {5}\n'.format(
             timestamp, logtype, data, caller, func, line).encode('ascii', 'ignore'))
 
+    def next_rtb_entry(self, index, step_size, mask):
+        unused_buffer_size = (mask + 1) % step_size
+        #check for wraparound
+        if ((index + step_size + unused_buffer_size) & mask) < (index & mask):
+            return (index + step_size + unused_buffer_size) & mask
+        return (index + step_size) & mask
+
     def parse(self):
         rtb = self.ramdump.addr_lookup('msm_rtb')
         if rtb is None:
@@ -175,7 +182,7 @@ class RTB(RamParser):
             next_ptr = 0
             next_entry = 0
             while True:
-                next_entry = (last + step_size) & mask
+                next_entry = self.next_rtb_entry(last, step_size, mask)
                 last_ptr = rtb_read_ptr + last * rtb_entry_size + idx_offset
                 next_ptr = rtb_read_ptr + next_entry * \
                     rtb_entry_size + idx_offset
@@ -210,7 +217,7 @@ class RTB(RamParser):
                         getattr(RTB, func)(self, rtb_out, ptr, name_str)
                 if next_entry == last:
                     stop = 1
-                next_entry = (next_entry + step_size) & mask
+                next_entry = self.next_rtb_entry(next_entry, step_size, mask)
                 if (stop == 1):
                     break
             print_out_str('Wrote RTB to msm_rtb{0}.txt'.format(i))