diff --git a/linux-ramdump-parser-v2/debug_image_v2.py b/linux-ramdump-parser-v2/debug_image_v2.py
index b031ecc263c7ba7dda1cc27634736cfeac96ae4d..4d8ee114ec8b58d96d1739d73d7921a799c96c09 100755
--- a/linux-ramdump-parser-v2/debug_image_v2.py
+++ b/linux-ramdump-parser-v2/debug_image_v2.py
@@ -76,7 +76,7 @@ class DebugImage_v2():
             'Parsing CPU{2} context start {0:x} end {1:x}'.format(start, end, core))
 
         regs = TZRegDump_v2()
-        if regs.init_regs(start, end, core, ram_dump) is False:
+        if regs.init_regs(version, start, end, core, ram_dump) is False:
             print_out_str('!!! Could not get registers from TZ dump')
             return
         regs.dump_core_pc(ram_dump)
diff --git a/linux-ramdump-parser-v2/watchdog_v2.py b/linux-ramdump-parser-v2/watchdog_v2.py
index e1eaa6d6413287753c1579a8986226d9d9f996b3..0d41d0d7382b8b4319b11888bbf3be530319811d 100644
--- a/linux-ramdump-parser-v2/watchdog_v2.py
+++ b/linux-ramdump-parser-v2/watchdog_v2.py
@@ -14,7 +14,7 @@ import re
 from print_out import print_out_str
 
 # (name from tz dump, corresponding T32 register, whether or not to print_out_str (the function name))
-sysdbg_cpu64_register_names = [
+sysdbg_cpu64_register_names_default = [
     ('x0', 'x0', False),
     ('x1', 'x1', False),
     ('x2', 'x2', False),
@@ -64,7 +64,7 @@ sysdbg_cpu64_register_names = [
     ('__reserved4', '__reserved4', False),
 ]
 
-sysdbg_cpu64_ctxt_regs_type = ''.join([
+sysdbg_cpu64_ctxt_regs_type_default = ''.join([
     'Q',  # x0
     'Q',  # x1
     'Q',  # x2
@@ -114,7 +114,7 @@ sysdbg_cpu64_ctxt_regs_type = ''.join([
     'Q',  # __reserved4
 ])
 
-sysdbg_cpu32_register_names = [
+sysdbg_cpu32_register_names_default = [
     ('r0', 'r0', False),
     ('r1', 'r1', False),
     ('r2', 'r2', False),
@@ -158,7 +158,7 @@ sysdbg_cpu32_register_names = [
     ('__reserved4', '__reserved4', False),
 ]
 
-sysdbg_cpu32_ctxt_regs_type = ''.join([
+sysdbg_cpu32_ctxt_regs_type_default = ''.join([
     'Q',  # r0
     'Q',  # r1
     'Q',  # r2
@@ -202,6 +202,106 @@ sysdbg_cpu32_ctxt_regs_type = ''.join([
     'Q',  # __reserved4
 ])
 
+sysdbg_cpu64_register_names_v1_3 = [
+    ('x0', 'x0', False),
+    ('x1', 'x1', False),
+    ('x2', 'x2', False),
+    ('x3', 'x3', False),
+    ('x4', 'x4', False),
+    ('x5', 'x5', False),
+    ('x6', 'x6', False),
+    ('x7', 'x7', False),
+    ('x8', 'x8', False),
+    ('x9', 'x9', False),
+    ('x10', 'x10', False),
+    ('x11', 'x11', False),
+    ('x12', 'x12', False),
+    ('x13', 'x13', False),
+    ('x14', 'x14', False),
+    ('x15', 'x15', False),
+    ('x16', 'x16', False),
+    ('x17', 'x17', False),
+    ('x18', 'x18', False),
+    ('x19', 'x19', False),
+    ('x20', 'x20', False),
+    ('x21', 'x21', False),
+    ('x22', 'x22', False),
+    ('x23', 'x23', False),
+    ('x24', 'x24', False),
+    ('x25', 'x25', False),
+    ('x26', 'x26', False),
+    ('x27', 'x27', False),
+    ('x28', 'x28', False),
+    ('x29', 'x29', False),
+    ('x30', 'x30', True),
+    ('pc', 'pc', True),
+    ('currentEL', None, False),
+    ('sp_el3', 'sp_el3', False),
+    ('elr_el3', 'elr_el3', True),
+    ('spsr_el3', 'spsr_el3', False),
+    ('sp_el2', 'sp_el2', False),
+    ('elr_el2', 'elr_el2', True),
+    ('spsr_el2', 'spsr_el2', False),
+    ('sp_el1', 'sp_el1', False),
+    ('elr_el1', 'elr_el1', True),
+    ('spsr_el1', 'spsr_el1', False),
+    ('sp_el0', 'sp_el0', False),
+    ('cpumerrsr_el1', 'cpumerrsr_el1', False),
+    ('l2merrsr_el1', 'l2merrsr_el1', False),
+    ('__reserved1', '__reserved1', False),
+    ('__reserved2', '__reserved2', False),
+]
+
+sysdbg_cpu64_ctxt_regs_type_v1_3 = ''.join([
+    'Q',  # x0
+    'Q',  # x1
+    'Q',  # x2
+    'Q',  # x3
+    'Q',  # x4
+    'Q',  # x5
+    'Q',  # x6
+    'Q',  # x7
+    'Q',  # x8
+    'Q',  # x9
+    'Q',  # x10
+    'Q',  # x11
+    'Q',  # x12
+    'Q',  # x13
+    'Q',  # x14
+    'Q',  # x15
+    'Q',  # x16
+    'Q',  # x17
+    'Q',  # x18
+    'Q',  # x19
+    'Q',  # x20
+    'Q',  # x21
+    'Q',  # x22
+    'Q',  # x23
+    'Q',  # x24
+    'Q',  # x25
+    'Q',  # x26
+    'Q',  # x27
+    'Q',  # x28
+    'Q',  # x29
+    'Q',  # x30
+    'Q',  # pc
+    'Q',  # currentEL
+    'Q',  # sp_el3
+    'Q',  # elr_el3
+    'Q',  # spsr_el3
+    'Q',  # sp_el2
+    'Q',  # elr_el2
+    'Q',  # spsr_el2
+    'Q',  # sp_el1
+    'Q',  # elr_el1
+    'Q',  # spsr_el1
+    'Q',  # sp_el0
+    'Q',  # cpumerrsr_el1
+    'Q',  # l2merrsr_el1
+    'Q',  # __reserved1
+    'Q',  # __reserved2
+])
+
 cpu_name = (
     'Invalid',
     'A53',
@@ -209,23 +309,40 @@ cpu_name = (
     'Hydra',
 )
 
+sysdbg_cpu64_register_names = {}
+sysdbg_cpu64_ctxt_regs_type = {}
+sysdbg_cpu32_register_names = {}
+sysdbg_cpu32_ctxt_regs_type = {}
+
+sysdbg_cpu64_register_names['default'] = sysdbg_cpu64_register_names_default
+sysdbg_cpu64_ctxt_regs_type['default'] = sysdbg_cpu64_ctxt_regs_type_default
+sysdbg_cpu32_register_names['default'] = sysdbg_cpu32_register_names_default
+sysdbg_cpu32_ctxt_regs_type['default'] = sysdbg_cpu32_ctxt_regs_type_default
+
+# Version 1.3
+sysdbg_cpu64_register_names['1.3'] = sysdbg_cpu64_register_names_v1_3
+sysdbg_cpu64_ctxt_regs_type['1.3'] = sysdbg_cpu64_ctxt_regs_type_v1_3
+
 class TZCpuCtx_v2():
 
-    def __init__(self, regs_t, ramdump):
+    def __init__(self, version, regs_t, ramdump):
         i = 0
         self.regs = {}
+        self.version = version
+        if ramdump.arm64:
+            register_name = sysdbg_cpu64_register_names[self.version]
+        else:
+            register_name = sysdbg_cpu32_register_names[self.version]
+
         for r in regs_t:
-            if ramdump.arm64:
-                self.regs[sysdbg_cpu64_register_names[i][0]] = r
-            else:
-                self.regs[sysdbg_cpu32_register_names[i][0]] = r
+            self.regs[register_name[i][0]] = r
             i += 1
 
     def print_regs(self, outfile, ramdump):
         if ramdump.arm64:
-            register_names = sysdbg_cpu64_register_names
+            register_names = sysdbg_cpu64_register_names[self.version]
         else:
-            register_names = sysdbg_cpu32_register_names
+            register_names = sysdbg_cpu32_register_names[self.version]
         for reg_name, t32_name, print_pc in register_names:
             if re.match('(.*)reserved(.*)', reg_name):
                 continue
@@ -254,6 +371,7 @@ class TZRegDump_v2():
     def __init__(self):
         self.core_regs = None
         self.sec_regs = None
+        self.version = 0
         self.start_addr = 0
         self.end_addr = 0
         self.core = 0
@@ -303,11 +421,20 @@ class TZRegDump_v2():
         ram_dump.unwind.unwind_backtrace(bt, fp, pc, lr, '')
         print_out_str('')
 
-    def init_regs(self, start_addr, end_addr, core, ram_dump):
+    def init_regs(self, version, start_addr, end_addr, core, ram_dump):
         self.start_addr = start_addr
         self.end_addr = end_addr
         self.core = core
 
+        self.version = '{0}.{1}'.format(version >> 4, version & 0xF)
+        if ram_dump.arm64:
+            register_names = sysdbg_cpu64_register_names
+        else:
+            register_names = sysdbg_cpu32_register_names
+
+        if self.version not in register_names:
+            self.version = 'default'
+
         # uint32 status[4]; -- status fields
         # sdi_cpu_ctxt_regs_type cpu_regs; -- ctxt for all cpus
         # sdi_cpu_ctxt_regs_type __reserved3; -- secure ctxt
@@ -317,19 +444,19 @@ class TZRegDump_v2():
 
         if ram_dump.arm64:
             sc_regs = ram_dump.read_string(
-                self.start_addr, sysdbg_cpu64_ctxt_regs_type, False)
-            self.start_addr += struct.calcsize(sysdbg_cpu64_ctxt_regs_type)
+                self.start_addr, sysdbg_cpu64_ctxt_regs_type[self.version], False)
+            self.start_addr += struct.calcsize(sysdbg_cpu64_ctxt_regs_type[self.version])
             sc_secure = ram_dump.read_string(
-               self.start_addr, sysdbg_cpu64_ctxt_regs_type , False)
-            self.start_addr += struct.calcsize(sysdbg_cpu64_ctxt_regs_type)
+               self.start_addr, sysdbg_cpu64_ctxt_regs_type[self.version] , False)
+            self.start_addr += struct.calcsize(sysdbg_cpu64_ctxt_regs_type[self.version])
         else:
             sc_regs = ram_dump.read_string(
-                self.start_addr, sysdbg_cpu32_ctxt_regs_type, False)
-            self.start_addr += struct.calcsize(sysdbg_cpu32_ctxt_regs_type)
+                self.start_addr, sysdbg_cpu32_ctxt_regs_type[self.version], False)
+            self.start_addr += struct.calcsize(sysdbg_cpu32_ctxt_regs_type[self.version])
             sc_secure = ram_dump.read_string(
-                self.start_addr, sysdbg_cpu32_ctxt_regs_type , False)
-            self.start_addr += struct.calcsize(sysdbg_cpu32_ctxt_regs_type)
+                self.start_addr, sysdbg_cpu32_ctxt_regs_type[self.version] , False)
+            self.start_addr += struct.calcsize(sysdbg_cpu32_ctxt_regs_type[self.version])
 
-        self.core_regs = TZCpuCtx_v2(sc_regs, ram_dump)
-        self.sec_regs = TZCpuCtx_v2(sc_secure, ram_dump)
+        self.core_regs = TZCpuCtx_v2(self.version, sc_regs, ram_dump)
+        self.sec_regs = TZCpuCtx_v2(self.version, sc_secure, ram_dump)
         return True