diff --git a/client/src/cmdhf14b.c b/client/src/cmdhf14b.c
index 3150da049..7288c3251 100644
--- a/client/src/cmdhf14b.c
+++ b/client/src/cmdhf14b.c
@@ -789,23 +789,24 @@ static void print_ct_blocks(uint8_t *data, size_t len) {
 
 static void print_sr_blocks(uint8_t *data, size_t len) {
 
-    size_t blocks = len / ST25TB_SR_BLOCK_SIZE;
+    size_t blocks = (len / ST25TB_SR_BLOCK_SIZE) -1 ;
+    uint8_t * systemblock = data + blocks * ST25TB_SR_BLOCK_SIZE ;
     uint8_t chipid = get_st_chipid(data);
     PrintAndLogEx(SUCCESS, _GREEN_("%s") " tag", get_st_chip_model(chipid));
 
-    PrintAndLogEx(DEBUG, "systemblock : %s", sprint_hex(data + (blocks * 4), 4));
-    PrintAndLogEx(DEBUG, "   otp lock : %02x %02x", data[(blocks * 4)], data[(blocks * 4) + 1]);
+    PrintAndLogEx(DEBUG, "systemblock : %s", sprint_hex(systemblock, ST25TB_SR_BLOCK_SIZE));
+    PrintAndLogEx(DEBUG, "   otp lock : %02x %02x", *systemblock, *(systemblock + 1));
 
     print_hdr();
 
-    for (int i = 0; i <= blocks; i++) {
+    for (int i = 0; i < blocks; i++) {
         PrintAndLogEx(INFO,
                       "%3d/0x%02X | %s | %s | %s",
                       i,
                       i,
-                      sprint_hex(data + (i * 4), 4),
-                      get_st_lock_info(chipid, data + (blocks * 4), i),
-                      sprint_ascii(data + (i * 4), 4)
+                      sprint_hex(data + (i * ST25TB_SR_BLOCK_SIZE), ST25TB_SR_BLOCK_SIZE),
+                      get_st_lock_info(chipid, systemblock, i),
+                      sprint_ascii(data + (i * ST25TB_SR_BLOCK_SIZE), ST25TB_SR_BLOCK_SIZE)
                      );
     }
 
@@ -813,9 +814,9 @@ static void print_sr_blocks(uint8_t *data, size_t len) {
                   "%3d/0x%02X | %s | %s | %s",
                   0xFF,
                   0xFF,
-                  sprint_hex(data + (0xFF * 4), 4),
-                  get_st_lock_info(chipid, data + (blocks * 4), 0xFF),
-                  sprint_ascii(data + (0xFF * 4), 4)
+                  sprint_hex(systemblock, ST25TB_SR_BLOCK_SIZE),
+                  get_st_lock_info(chipid, systemblock, 0xFF),
+                  sprint_ascii(systemblock, ST25TB_SR_BLOCK_SIZE)
                  );
 
     print_footer();
@@ -1405,18 +1406,18 @@ static int CmdHF14BDump(const char *Cmd) {
         // 1 = 4096
         // 2 = 512
         uint8_t cardtype = get_st_cardsize(card.uid);
-        uint8_t blocks = 0;
+        uint8_t lastblock = 0;
         uint16_t cardsize = 0;
 
         switch (cardtype) {
             case 2:
-                cardsize = (512 / 8) + 4;
-                blocks = 0x0F;
+                cardsize = (512 / 8) + ST25TB_SR_BLOCK_SIZE;
+                lastblock = 0x0F;
                 break;
             case 1:
             default:
-                cardsize = (4096 / 8) + 4;
-                blocks = 0x7F;
+                cardsize = (4096 / 8) + ST25TB_SR_BLOCK_SIZE;
+                lastblock = 0x7F;
                 break;
         }
 
@@ -1486,15 +1487,15 @@ static int CmdHF14BDump(const char *Cmd) {
                 // last read
                 if (blocknum == 0xFF) {
                     // we reserved space for this block after 0x0F and 0x7F,  ie 0x10, 0x80
-                    memcpy(data + (blocks * 4), recv, 4);
+                    memcpy(data + ((lastblock+1) * ST25TB_SR_BLOCK_SIZE), recv, ST25TB_SR_BLOCK_SIZE);
                     break;
                 }
-                memcpy(data + (blocknum * 4), recv, 4);
+                memcpy(data + (blocknum * ST25TB_SR_BLOCK_SIZE), recv, ST25TB_SR_BLOCK_SIZE);
 
 
                 retry = 0;
                 blocknum++;
-                if (blocknum > blocks) {
+                if (blocknum > lastblock) {
                     // read config block
                     blocknum = 0xFF;
                 }
@@ -1521,8 +1522,8 @@ static int CmdHF14BDump(const char *Cmd) {
             FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen);
         }
 
-        size_t datalen = (blocks + 1) * 4;
-        pm3_save_dump(filename, data, datalen, jsf14b, 4);
+        size_t datalen = (lastblock + 2) * ST25TB_SR_BLOCK_SIZE;
+        pm3_save_dump(filename, data, datalen, jsf14b, ST25TB_SR_BLOCK_SIZE);
     }
 
     return switch_off_field_14b();