diff --git a/linux-ramdump-parser-v2/debug_image_v2.py b/linux-ramdump-parser-v2/debug_image_v2.py
index 81e54907f5663a985d5fa654577c37075504450b..51539703c26f8c1c671ad02367f14143594d9328 100755
--- a/linux-ramdump-parser-v2/debug_image_v2.py
+++ b/linux-ramdump-parser-v2/debug_image_v2.py
@@ -31,7 +31,7 @@ from tlbdumplib import lookup_tlb_type
 from vsens import VsensData
 
 MEMDUMPV2_MAGIC = 0x42445953
-MAX_NUM_ENTRIES = 0x130
+MAX_NUM_ENTRIES = 0x140
 TRACE_EVENT_FL_TRACEPOINT = 0x40
 
 class client(object):
@@ -54,11 +54,13 @@ class client(object):
     MSM_DUMP_DATA_L2_TLB = 0x120
     MSM_DUMP_DATA_LLC_CACHE = 0x121
     MSM_DUMP_DATA_SCANDUMP = 0xEB
+    MSM_DUMP_DATA_SCANDUMP_PER_CPU = 0x130
     MSM_DUMP_DATA_MAX = MAX_NUM_ENTRIES
 
 # Client functions will be executed in top-to-bottom order
 client_types = [
     ('MSM_DUMP_DATA_SCANDUMP', 'parse_scandump'),
+    ('MSM_DUMP_DATA_SCANDUMP_PER_CPU', 'parse_scandump'),
     ('MSM_DUMP_DATA_CPU_CTX', 'parse_cpu_ctx'),
     ('MSM_DUMP_DATA_L1_INST_TLB', 'parse_tlb_common'),
     ('MSM_DUMP_DATA_L1_DATA_TLB', 'parse_tlb_common'),
@@ -100,25 +102,36 @@ class DebugImage_v2():
             self.event_class = 'struct ftrace_event_class'
 
     def parse_scandump(self, version, start, end, client_id, ram_dump):
-        scandump_file_prefix = "scandump"
+        scandump_file_prefix = "scandump_core"
+        core_bin_prefix = "core"
         try:
             scan_wrapper_path = local_settings.scandump_parser_path
         except AttributeError:
             print_out_str('Could not find scandump_parser_path . Please define scandump_parser_path in local_settings')
             return
-        output = os.path.join(ram_dump.outdir, scandump_file_prefix)
-        input = os.path.join(ram_dump.outdir, "vv_msg_4_header.bin")
-        print_out_str(
-            'Parsing scandump context start {0:x} end {1:x} {2} {3}'.format(start, end, output, input))
         if ram_dump.arm64:
             arch = "aarch64"
+        if client_id == client.MSM_DUMP_DATA_SCANDUMP:
+            output = os.path.join(ram_dump.outdir, scandump_file_prefix)
+            input = os.path.join(ram_dump.outdir, "core.bin")
+        elif client_id >= client.MSM_DUMP_DATA_SCANDUMP_PER_CPU:
+            core_num = client_id & 0xF
+            output = '{0}_{1:x}'.format(scandump_file_prefix, core_num)
+            output = os.path.join(ram_dump.outdir, output)
+
+            input_filename = '{0}_{1:x}.bin'.format(core_bin_prefix, core_num)
+            input = os.path.join(ram_dump.outdir, input_filename)
+        print_out_str(
+            'Parsing scandump context start {0:x} end {1:x} {2} {3}'.format(start, end, output, input))
         header_bin = ram_dump.open_file(input)
+
         it = range(start, end)
         for i in it:
             val = ram_dump.read_byte(i, False)
             header_bin.write(struct.pack("<B", val))
         header_bin.close()
         subprocess.call('python {0} -d {1} -o {2} -f {3}'.format(scan_wrapper_path, input, output, arch))
+        return
 
     def parse_cpu_ctx(self, version, start, end, client_id, ram_dump):
         core = client_id - client.MSM_DUMP_DATA_CPU_CTX
@@ -504,6 +517,8 @@ class DebugImage_v2():
                     client.MSM_DUMP_DATA_L2_CACHE + i] = 'MSM_DUMP_DATA_L2_CACHE'
                 self.dump_data_id_lookup_table[
                     client.MSM_DUMP_DATA_ETM_REG + i] = 'MSM_DUMP_DATA_ETM_REG'
+                self.dump_data_id_lookup_table[
+                    client.MSM_DUMP_DATA_SCANDUMP_PER_CPU + i] = 'MSM_DUMP_DATA_SCANDUMP_PER_CPU'
 
         for i in range(0, 4):
                 self.dump_data_id_lookup_table[