From 33a043ec63e65c5a497a73100d7243eda040fb86 Mon Sep 17 00:00:00 2001
From: jsteube <jens.steube@gmail.com>
Date: Tue, 7 Mar 2017 09:44:58 +0100
Subject: [PATCH] Refactored internal use of esalt from sync with number of
 salts to sync with number of digests This enables a true N esalts per salt
 feature which is required for WPA/WPA2 handling In case we need that for a
 future algorithm, just make sure to have a unique value in digest in hash
 parser. Fixes https://github.com/hashcat/hashcat/issues/1158

---
 OpenCL/inc_types.cl |    2 +
 OpenCL/m02500.cl    |  408 ++++++++--------
 OpenCL/m05300_a0.cl |   20 +-
 OpenCL/m05300_a1.cl |   20 +-
 OpenCL/m05300_a3.cl |   36 +-
 OpenCL/m05400_a0.cl |   20 +-
 OpenCL/m05400_a1.cl |   20 +-
 OpenCL/m05400_a3.cl |   36 +-
 OpenCL/m05600_a0.cl |   24 +-
 OpenCL/m05600_a1.cl |   24 +-
 OpenCL/m05600_a3.cl |   64 +--
 OpenCL/m06211.cl    |   64 +--
 OpenCL/m06212.cl    |   64 +--
 OpenCL/m06213.cl    |   64 +--
 OpenCL/m06221.cl    |   48 +-
 OpenCL/m06222.cl    |   48 +-
 OpenCL/m06223.cl    |   48 +-
 OpenCL/m06231.cl    |   64 +--
 OpenCL/m06232.cl    |   64 +--
 OpenCL/m06233.cl    |   64 +--
 OpenCL/m07100.cl    |   28 +-
 OpenCL/m07300_a0.cl |  124 ++---
 OpenCL/m07300_a1.cl |  124 ++---
 OpenCL/m07300_a3.cl |  124 ++---
 OpenCL/m07500_a0.cl |   48 +-
 OpenCL/m07500_a1.cl |   48 +-
 OpenCL/m07500_a3.cl |   24 +-
 OpenCL/m08200.cl    |   62 +--
 OpenCL/m08800.cl    |   24 +-
 OpenCL/m09400.cl    |    8 +-
 OpenCL/m09500.cl    |    8 +-
 OpenCL/m09600.cl    |    8 +-
 OpenCL/m09700_a0.cl |   20 +-
 OpenCL/m09700_a1.cl |   20 +-
 OpenCL/m09700_a3.cl |   20 +-
 OpenCL/m09710_a0.cl |   20 +-
 OpenCL/m09710_a1.cl |   20 +-
 OpenCL/m09710_a3.cl |   20 +-
 OpenCL/m09800_a0.cl |   20 +-
 OpenCL/m09800_a1.cl |   20 +-
 OpenCL/m09800_a3.cl |   20 +-
 OpenCL/m09810_a0.cl |   20 +-
 OpenCL/m09810_a1.cl |   20 +-
 OpenCL/m09810_a3.cl |   20 +-
 OpenCL/m10400_a0.cl |   52 +-
 OpenCL/m10400_a1.cl |   52 +-
 OpenCL/m10400_a3.cl |   52 +-
 OpenCL/m10410_a1.cl |   52 +-
 OpenCL/m10420_a0.cl |   52 +-
 OpenCL/m10420_a1.cl |   52 +-
 OpenCL/m10420_a3.cl |   52 +-
 OpenCL/m10500.cl    |   42 +-
 OpenCL/m10900.cl    |   28 +-
 OpenCL/m11300.cl    |   10 +-
 OpenCL/m11400_a0.cl |  280 +++++------
 OpenCL/m11400_a1.cl |  280 +++++------
 OpenCL/m11400_a3.cl | 1096 +++++++++++++++++++++----------------------
 OpenCL/m11900.cl    |   28 +-
 OpenCL/m12000.cl    |   28 +-
 OpenCL/m13100_a0.cl |   30 +-
 OpenCL/m13100_a1.cl |   20 +-
 OpenCL/m13100_a3.cl |   10 +-
 OpenCL/m13400.cl    |  178 +++----
 OpenCL/m13500_a0.cl |   92 ++--
 OpenCL/m13500_a1.cl |   92 ++--
 OpenCL/m13500_a3.cl |   92 ++--
 OpenCL/m13600.cl    |   78 +--
 OpenCL/m13751.cl    |   64 +--
 OpenCL/m13752.cl    |   64 +--
 OpenCL/m13753.cl    |   64 +--
 OpenCL/m13800_a0.cl |    4 +-
 OpenCL/m13800_a1.cl |    4 +-
 OpenCL/m13800_a3.cl |   12 +-
 OpenCL/m14611.cl    |    6 +-
 OpenCL/m14612.cl    |    6 +-
 OpenCL/m14613.cl    |    6 +-
 OpenCL/m14621.cl    |    6 +-
 OpenCL/m14622.cl    |    6 +-
 OpenCL/m14623.cl    |    6 +-
 OpenCL/m14631.cl    |    6 +-
 OpenCL/m14632.cl    |    6 +-
 OpenCL/m14633.cl    |    6 +-
 OpenCL/m14641.cl    |    6 +-
 OpenCL/m14642.cl    |    6 +-
 OpenCL/m14643.cl    |    6 +-
 OpenCL/m14700.cl    |   20 +-
 OpenCL/m14800.cl    |   30 +-
 include/interface.h |    5 +-
 src/hashes.c        |   55 +--
 src/interface.c     |  230 ++++-----
 src/opencl.c        |   13 +-
 src/potfile.c       |   24 +-
 92 files changed, 2695 insertions(+), 2786 deletions(-)

diff --git a/OpenCL/inc_types.cl b/OpenCL/inc_types.cl
index cd2b43187..0b6f00a5f 100644
--- a/OpenCL/inc_types.cl
+++ b/OpenCL/inc_types.cl
@@ -803,6 +803,8 @@ typedef struct wpa
   int  essid_reuse;
   u8   essid_len;
   u8   essid[32];
+  u32  keymic[4];
+  u32  hash[4];
 
 } wpa_t;
 
diff --git a/OpenCL/m02500.cl b/OpenCL/m02500.cl
index 215a3cd51..854c034bf 100644
--- a/OpenCL/m02500.cl
+++ b/OpenCL/m02500.cl
@@ -827,82 +827,25 @@ __kernel void m02500_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   const u32 lid = get_local_id (0);
 
-  u32 w0[4];
-  u32 w1[4];
-  u32 w2[4];
-  u32 w3[4];
-
-  w0[0] = tmps[gid].out[0];
-  w0[1] = tmps[gid].out[1];
-  w0[2] = tmps[gid].out[2];
-  w0[3] = tmps[gid].out[3];
-  w1[0] = tmps[gid].out[4];
-  w1[1] = tmps[gid].out[5];
-  w1[2] = tmps[gid].out[6];
-  w1[3] = tmps[gid].out[7];
-  w2[0] = 0;
-  w2[1] = 0;
-  w2[2] = 0;
-  w2[3] = 0;
-  w3[0] = 0;
-  w3[1] = 0;
-  w3[2] = 0;
-  w3[3] = 0;
-
-  u32 ipad[5];
-  u32 opad[5];
-
-  hmac_sha1_pad_S (w0, w1, w2, w3, ipad, opad);
-
-  w0[0] = wpa_bufs[salt_pos].pke[ 0];
-  w0[1] = wpa_bufs[salt_pos].pke[ 1];
-  w0[2] = wpa_bufs[salt_pos].pke[ 2];
-  w0[3] = wpa_bufs[salt_pos].pke[ 3];
-  w1[0] = wpa_bufs[salt_pos].pke[ 4];
-  w1[1] = wpa_bufs[salt_pos].pke[ 5];
-  w1[2] = wpa_bufs[salt_pos].pke[ 6];
-  w1[3] = wpa_bufs[salt_pos].pke[ 7];
-  w2[0] = wpa_bufs[salt_pos].pke[ 8];
-  w2[1] = wpa_bufs[salt_pos].pke[ 9];
-  w2[2] = wpa_bufs[salt_pos].pke[10];
-  w2[3] = wpa_bufs[salt_pos].pke[11];
-  w3[0] = wpa_bufs[salt_pos].pke[12];
-  w3[1] = wpa_bufs[salt_pos].pke[13];
-  w3[2] = wpa_bufs[salt_pos].pke[14];
-  w3[3] = wpa_bufs[salt_pos].pke[15];
-
-  sha1_transform_S (w0, w1, w2, w3, ipad);
-
-  w0[0] = wpa_bufs[salt_pos].pke[16];
-  w0[1] = wpa_bufs[salt_pos].pke[17];
-  w0[2] = wpa_bufs[salt_pos].pke[18];
-  w0[3] = wpa_bufs[salt_pos].pke[19];
-  w1[0] = wpa_bufs[salt_pos].pke[20];
-  w1[1] = wpa_bufs[salt_pos].pke[21];
-  w1[2] = wpa_bufs[salt_pos].pke[22];
-  w1[3] = wpa_bufs[salt_pos].pke[23];
-  w2[0] = wpa_bufs[salt_pos].pke[24];
-  w2[1] = 0x80000000;
-  w2[2] = 0;
-  w2[3] = 0;
-  w3[0] = 0;
-  w3[1] = 0;
-  w3[2] = 0;
-  w3[3] = (64 + 100) * 8;
-
-  u32 digest[5];
-
-  hmac_sha1_run_S (w0, w1, w2, w3, ipad, opad, digest);
-
+  for (u32 digest_pos = 0; digest_pos < digests_cnt; digest_pos++)
   {
-    w0[0] = swap32_S (digest[0]);
-    w0[1] = swap32_S (digest[1]);
-    w0[2] = swap32_S (digest[2]);
-    w0[3] = swap32_S (digest[3]);
-    w1[0] = 0;
-    w1[1] = 0;
-    w1[2] = 0;
-    w1[3] = 0;
+    const u32 digest_cur = digests_offset + digest_pos;
+
+    __global wpa_t *wpa = &wpa_bufs[digest_cur];
+
+    u32 w0[4];
+    u32 w1[4];
+    u32 w2[4];
+    u32 w3[4];
+
+    w0[0] = tmps[gid].out[0];
+    w0[1] = tmps[gid].out[1];
+    w0[2] = tmps[gid].out[2];
+    w0[3] = tmps[gid].out[3];
+    w1[0] = tmps[gid].out[4];
+    w1[1] = tmps[gid].out[5];
+    w1[2] = tmps[gid].out[6];
+    w1[3] = tmps[gid].out[7];
     w2[0] = 0;
     w2[1] = 0;
     w2[2] = 0;
@@ -912,149 +855,200 @@ __kernel void m02500_comp (__global pw_t *pws, __global const kernel_rule_t *rul
     w3[2] = 0;
     w3[3] = 0;
 
-    hmac_md5_pad_S (w0, w1, w2, w3, ipad, opad);
-
-    int eapol_len = wpa_bufs[salt_pos].eapol_len;
-
-    int eapol_left;
-    int eapol_off;
-
-    for (eapol_left = eapol_len, eapol_off = 0; eapol_left >= 56; eapol_left -= 64, eapol_off += 16)
-    {
-      w0[0] = wpa_bufs[salt_pos].eapol[eapol_off +  0];
-      w0[1] = wpa_bufs[salt_pos].eapol[eapol_off +  1];
-      w0[2] = wpa_bufs[salt_pos].eapol[eapol_off +  2];
-      w0[3] = wpa_bufs[salt_pos].eapol[eapol_off +  3];
-      w1[0] = wpa_bufs[salt_pos].eapol[eapol_off +  4];
-      w1[1] = wpa_bufs[salt_pos].eapol[eapol_off +  5];
-      w1[2] = wpa_bufs[salt_pos].eapol[eapol_off +  6];
-      w1[3] = wpa_bufs[salt_pos].eapol[eapol_off +  7];
-      w2[0] = wpa_bufs[salt_pos].eapol[eapol_off +  8];
-      w2[1] = wpa_bufs[salt_pos].eapol[eapol_off +  9];
-      w2[2] = wpa_bufs[salt_pos].eapol[eapol_off + 10];
-      w2[3] = wpa_bufs[salt_pos].eapol[eapol_off + 11];
-      w3[0] = wpa_bufs[salt_pos].eapol[eapol_off + 12];
-      w3[1] = wpa_bufs[salt_pos].eapol[eapol_off + 13];
-      w3[2] = wpa_bufs[salt_pos].eapol[eapol_off + 14];
-      w3[3] = wpa_bufs[salt_pos].eapol[eapol_off + 15];
-
-      md5_transform_S (w0, w1, w2, w3, ipad);
-    }
-
-    w0[0] = wpa_bufs[salt_pos].eapol[eapol_off +  0];
-    w0[1] = wpa_bufs[salt_pos].eapol[eapol_off +  1];
-    w0[2] = wpa_bufs[salt_pos].eapol[eapol_off +  2];
-    w0[3] = wpa_bufs[salt_pos].eapol[eapol_off +  3];
-    w1[0] = wpa_bufs[salt_pos].eapol[eapol_off +  4];
-    w1[1] = wpa_bufs[salt_pos].eapol[eapol_off +  5];
-    w1[2] = wpa_bufs[salt_pos].eapol[eapol_off +  6];
-    w1[3] = wpa_bufs[salt_pos].eapol[eapol_off +  7];
-    w2[0] = wpa_bufs[salt_pos].eapol[eapol_off +  8];
-    w2[1] = wpa_bufs[salt_pos].eapol[eapol_off +  9];
-    w2[2] = wpa_bufs[salt_pos].eapol[eapol_off + 10];
-    w2[3] = wpa_bufs[salt_pos].eapol[eapol_off + 11];
-    w3[0] = wpa_bufs[salt_pos].eapol[eapol_off + 12];
-    w3[1] = wpa_bufs[salt_pos].eapol[eapol_off + 13];
-    w3[2] = (64 + eapol_len) * 8;
-    w3[3] = 0;
-
-    u32 digest1[4];
-
-    hmac_md5_run_S (w0, w1, w2, w3, ipad, opad, digest1);
-
-    /**
-     * base
-     */
-
-    #define il_pos 0
-
-    const u32 r0 = digest1[DGST_R0];
-    const u32 r1 = digest1[DGST_R1];
-    const u32 r2 = digest1[DGST_R2];
-    const u32 r3 = digest1[DGST_R3];
-
-    #include COMPARE_M
-  }
-
-  {
-    w0[0] = digest[0];
-    w0[1] = digest[1];
-    w0[2] = digest[2];
-    w0[3] = digest[3];
-    w1[0] = 0;
-    w1[1] = 0;
-    w1[2] = 0;
-    w1[3] = 0;
-    w2[0] = 0;
-    w2[1] = 0;
-    w2[2] = 0;
-    w2[3] = 0;
-    w3[0] = 0;
-    w3[1] = 0;
-    w3[2] = 0;
-    w3[3] = 0;
+    u32 ipad[5];
+    u32 opad[5];
 
     hmac_sha1_pad_S (w0, w1, w2, w3, ipad, opad);
 
-    int eapol_len = wpa_bufs[salt_pos].eapol_len;
+    w0[0] = wpa->pke[ 0];
+    w0[1] = wpa->pke[ 1];
+    w0[2] = wpa->pke[ 2];
+    w0[3] = wpa->pke[ 3];
+    w1[0] = wpa->pke[ 4];
+    w1[1] = wpa->pke[ 5];
+    w1[2] = wpa->pke[ 6];
+    w1[3] = wpa->pke[ 7];
+    w2[0] = wpa->pke[ 8];
+    w2[1] = wpa->pke[ 9];
+    w2[2] = wpa->pke[10];
+    w2[3] = wpa->pke[11];
+    w3[0] = wpa->pke[12];
+    w3[1] = wpa->pke[13];
+    w3[2] = wpa->pke[14];
+    w3[3] = wpa->pke[15];
 
-    int eapol_left;
-    int eapol_off;
+    sha1_transform_S (w0, w1, w2, w3, ipad);
 
-    for (eapol_left = eapol_len, eapol_off = 0; eapol_left >= 56; eapol_left -= 64, eapol_off += 16)
+    w0[0] = wpa->pke[16];
+    w0[1] = wpa->pke[17];
+    w0[2] = wpa->pke[18];
+    w0[3] = wpa->pke[19];
+    w1[0] = wpa->pke[20];
+    w1[1] = wpa->pke[21];
+    w1[2] = wpa->pke[22];
+    w1[3] = wpa->pke[23];
+    w2[0] = wpa->pke[24];
+    w2[1] = 0x80000000;
+    w2[2] = 0;
+    w2[3] = 0;
+    w3[0] = 0;
+    w3[1] = 0;
+    w3[2] = 0;
+    w3[3] = (64 + 100) * 8;
+
+    u32 digest[5];
+
+    hmac_sha1_run_S (w0, w1, w2, w3, ipad, opad, digest);
+
+    u32 digest_final[5];
+
+    if (wpa->keyver == 1)
     {
-      w0[0] = wpa_bufs[salt_pos].eapol[eapol_off +  0];
-      w0[1] = wpa_bufs[salt_pos].eapol[eapol_off +  1];
-      w0[2] = wpa_bufs[salt_pos].eapol[eapol_off +  2];
-      w0[3] = wpa_bufs[salt_pos].eapol[eapol_off +  3];
-      w1[0] = wpa_bufs[salt_pos].eapol[eapol_off +  4];
-      w1[1] = wpa_bufs[salt_pos].eapol[eapol_off +  5];
-      w1[2] = wpa_bufs[salt_pos].eapol[eapol_off +  6];
-      w1[3] = wpa_bufs[salt_pos].eapol[eapol_off +  7];
-      w2[0] = wpa_bufs[salt_pos].eapol[eapol_off +  8];
-      w2[1] = wpa_bufs[salt_pos].eapol[eapol_off +  9];
-      w2[2] = wpa_bufs[salt_pos].eapol[eapol_off + 10];
-      w2[3] = wpa_bufs[salt_pos].eapol[eapol_off + 11];
-      w3[0] = wpa_bufs[salt_pos].eapol[eapol_off + 12];
-      w3[1] = wpa_bufs[salt_pos].eapol[eapol_off + 13];
-      w3[2] = wpa_bufs[salt_pos].eapol[eapol_off + 14];
-      w3[3] = wpa_bufs[salt_pos].eapol[eapol_off + 15];
+      w0[0] = swap32_S (digest[0]);
+      w0[1] = swap32_S (digest[1]);
+      w0[2] = swap32_S (digest[2]);
+      w0[3] = swap32_S (digest[3]);
+      w1[0] = 0;
+      w1[1] = 0;
+      w1[2] = 0;
+      w1[3] = 0;
+      w2[0] = 0;
+      w2[1] = 0;
+      w2[2] = 0;
+      w2[3] = 0;
+      w3[0] = 0;
+      w3[1] = 0;
+      w3[2] = 0;
+      w3[3] = 0;
 
-      sha1_transform_S (w0, w1, w2, w3, ipad);
+      hmac_md5_pad_S (w0, w1, w2, w3, ipad, opad);
+
+      int eapol_len = wpa->eapol_len;
+
+      int eapol_left;
+      int eapol_off;
+
+      for (eapol_left = eapol_len, eapol_off = 0; eapol_left >= 56; eapol_left -= 64, eapol_off += 16)
+      {
+        w0[0] = wpa->eapol[eapol_off +  0];
+        w0[1] = wpa->eapol[eapol_off +  1];
+        w0[2] = wpa->eapol[eapol_off +  2];
+        w0[3] = wpa->eapol[eapol_off +  3];
+        w1[0] = wpa->eapol[eapol_off +  4];
+        w1[1] = wpa->eapol[eapol_off +  5];
+        w1[2] = wpa->eapol[eapol_off +  6];
+        w1[3] = wpa->eapol[eapol_off +  7];
+        w2[0] = wpa->eapol[eapol_off +  8];
+        w2[1] = wpa->eapol[eapol_off +  9];
+        w2[2] = wpa->eapol[eapol_off + 10];
+        w2[3] = wpa->eapol[eapol_off + 11];
+        w3[0] = wpa->eapol[eapol_off + 12];
+        w3[1] = wpa->eapol[eapol_off + 13];
+        w3[2] = wpa->eapol[eapol_off + 14];
+        w3[3] = wpa->eapol[eapol_off + 15];
+
+        md5_transform_S (w0, w1, w2, w3, ipad);
+      }
+
+      w0[0] = wpa->eapol[eapol_off +  0];
+      w0[1] = wpa->eapol[eapol_off +  1];
+      w0[2] = wpa->eapol[eapol_off +  2];
+      w0[3] = wpa->eapol[eapol_off +  3];
+      w1[0] = wpa->eapol[eapol_off +  4];
+      w1[1] = wpa->eapol[eapol_off +  5];
+      w1[2] = wpa->eapol[eapol_off +  6];
+      w1[3] = wpa->eapol[eapol_off +  7];
+      w2[0] = wpa->eapol[eapol_off +  8];
+      w2[1] = wpa->eapol[eapol_off +  9];
+      w2[2] = wpa->eapol[eapol_off + 10];
+      w2[3] = wpa->eapol[eapol_off + 11];
+      w3[0] = wpa->eapol[eapol_off + 12];
+      w3[1] = wpa->eapol[eapol_off + 13];
+      w3[2] = (64 + eapol_len) * 8;
+      w3[3] = 0;
+
+      hmac_md5_run_S (w0, w1, w2, w3, ipad, opad, digest_final);
+    }
+    else
+    {
+      w0[0] = digest[0];
+      w0[1] = digest[1];
+      w0[2] = digest[2];
+      w0[3] = digest[3];
+      w1[0] = 0;
+      w1[1] = 0;
+      w1[2] = 0;
+      w1[3] = 0;
+      w2[0] = 0;
+      w2[1] = 0;
+      w2[2] = 0;
+      w2[3] = 0;
+      w3[0] = 0;
+      w3[1] = 0;
+      w3[2] = 0;
+      w3[3] = 0;
+
+      hmac_sha1_pad_S (w0, w1, w2, w3, ipad, opad);
+
+      int eapol_len = wpa->eapol_len;
+
+      int eapol_left;
+      int eapol_off;
+
+      for (eapol_left = eapol_len, eapol_off = 0; eapol_left >= 56; eapol_left -= 64, eapol_off += 16)
+      {
+        w0[0] = wpa->eapol[eapol_off +  0];
+        w0[1] = wpa->eapol[eapol_off +  1];
+        w0[2] = wpa->eapol[eapol_off +  2];
+        w0[3] = wpa->eapol[eapol_off +  3];
+        w1[0] = wpa->eapol[eapol_off +  4];
+        w1[1] = wpa->eapol[eapol_off +  5];
+        w1[2] = wpa->eapol[eapol_off +  6];
+        w1[3] = wpa->eapol[eapol_off +  7];
+        w2[0] = wpa->eapol[eapol_off +  8];
+        w2[1] = wpa->eapol[eapol_off +  9];
+        w2[2] = wpa->eapol[eapol_off + 10];
+        w2[3] = wpa->eapol[eapol_off + 11];
+        w3[0] = wpa->eapol[eapol_off + 12];
+        w3[1] = wpa->eapol[eapol_off + 13];
+        w3[2] = wpa->eapol[eapol_off + 14];
+        w3[3] = wpa->eapol[eapol_off + 15];
+
+        sha1_transform_S (w0, w1, w2, w3, ipad);
+      }
+
+      w0[0] = wpa->eapol[eapol_off +  0];
+      w0[1] = wpa->eapol[eapol_off +  1];
+      w0[2] = wpa->eapol[eapol_off +  2];
+      w0[3] = wpa->eapol[eapol_off +  3];
+      w1[0] = wpa->eapol[eapol_off +  4];
+      w1[1] = wpa->eapol[eapol_off +  5];
+      w1[2] = wpa->eapol[eapol_off +  6];
+      w1[3] = wpa->eapol[eapol_off +  7];
+      w2[0] = wpa->eapol[eapol_off +  8];
+      w2[1] = wpa->eapol[eapol_off +  9];
+      w2[2] = wpa->eapol[eapol_off + 10];
+      w2[3] = wpa->eapol[eapol_off + 11];
+      w3[0] = wpa->eapol[eapol_off + 12];
+      w3[1] = wpa->eapol[eapol_off + 13];
+      w3[2] = 0;
+      w3[3] = (64 + eapol_len) * 8;
+
+      u32 digest2[5];
+
+      hmac_sha1_run_S (w0, w1, w2, w3, ipad, opad, digest_final);
     }
 
-    w0[0] = wpa_bufs[salt_pos].eapol[eapol_off +  0];
-    w0[1] = wpa_bufs[salt_pos].eapol[eapol_off +  1];
-    w0[2] = wpa_bufs[salt_pos].eapol[eapol_off +  2];
-    w0[3] = wpa_bufs[salt_pos].eapol[eapol_off +  3];
-    w1[0] = wpa_bufs[salt_pos].eapol[eapol_off +  4];
-    w1[1] = wpa_bufs[salt_pos].eapol[eapol_off +  5];
-    w1[2] = wpa_bufs[salt_pos].eapol[eapol_off +  6];
-    w1[3] = wpa_bufs[salt_pos].eapol[eapol_off +  7];
-    w2[0] = wpa_bufs[salt_pos].eapol[eapol_off +  8];
-    w2[1] = wpa_bufs[salt_pos].eapol[eapol_off +  9];
-    w2[2] = wpa_bufs[salt_pos].eapol[eapol_off + 10];
-    w2[3] = wpa_bufs[salt_pos].eapol[eapol_off + 11];
-    w3[0] = wpa_bufs[salt_pos].eapol[eapol_off + 12];
-    w3[1] = wpa_bufs[salt_pos].eapol[eapol_off + 13];
-    w3[2] = 0;
-    w3[3] = (64 + eapol_len) * 8;
-
-    u32 digest2[5];
-
-    hmac_sha1_run_S (w0, w1, w2, w3, ipad, opad, digest2);
-
     /**
-     * base
+     * final compare
      */
 
-    #define il_pos 0
-
-    const u32 r0 = digest2[DGST_R0];
-    const u32 r1 = digest2[DGST_R1];
-    const u32 r2 = digest2[DGST_R2];
-    const u32 r3 = digest2[DGST_R3];
-
-    #include COMPARE_M
+    if ((digest_final[0] == wpa->keymic[0])
+     && (digest_final[1] == wpa->keymic[1])
+     && (digest_final[2] == wpa->keymic[2])
+     && (digest_final[3] == wpa->keymic[3]))
+    {
+      mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, digest_pos, digest_cur, gid, 0);
+    }
   }
 }
diff --git a/OpenCL/m05300_a0.cl b/OpenCL/m05300_a0.cl
index c05a18342..438aa9a13 100644
--- a/OpenCL/m05300_a0.cl
+++ b/OpenCL/m05300_a0.cl
@@ -215,7 +215,7 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -224,7 +224,7 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -253,8 +253,8 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * loop
@@ -321,7 +321,7 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0[0] = s_msg_buf[off +  0];
       w0[1] = s_msg_buf[off +  1];
@@ -392,7 +392,7 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -401,7 +401,7 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -430,8 +430,8 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * digest
@@ -510,7 +510,7 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0[0] = s_msg_buf[off +  0];
       w0[1] = s_msg_buf[off +  1];
diff --git a/OpenCL/m05300_a1.cl b/OpenCL/m05300_a1.cl
index cd1156ed0..3f0ca208a 100644
--- a/OpenCL/m05300_a1.cl
+++ b/OpenCL/m05300_a1.cl
@@ -213,7 +213,7 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -222,7 +222,7 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -251,8 +251,8 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * loop
@@ -379,7 +379,7 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0[0] = s_msg_buf[off +  0];
       w0[1] = s_msg_buf[off +  1];
@@ -450,7 +450,7 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -459,7 +459,7 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -488,8 +488,8 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * digest
@@ -628,7 +628,7 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0[0] = s_msg_buf[off +  0];
       w0[1] = s_msg_buf[off +  1];
diff --git a/OpenCL/m05300_a3.cl b/OpenCL/m05300_a3.cl
index 4e25cb616..c2c0649d5 100644
--- a/OpenCL/m05300_a3.cl
+++ b/OpenCL/m05300_a3.cl
@@ -208,8 +208,8 @@ void m05300m (__local u32 *w_s, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], cons
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * loop
@@ -297,7 +297,7 @@ void m05300m (__local u32 *w_s, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], cons
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0_t[0] = s_msg_buf[off +  0];
       w0_t[1] = s_msg_buf[off +  1];
@@ -355,8 +355,8 @@ void m05300s (__local u32 *w_s, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], cons
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * digest
@@ -456,7 +456,7 @@ void m05300s (__local u32 *w_s, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], cons
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0_t[0] = s_msg_buf[off +  0];
       w0_t[1] = s_msg_buf[off +  1];
@@ -519,7 +519,7 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -528,7 +528,7 @@ __kernel void m05300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -594,7 +594,7 @@ __kernel void m05300_m08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -603,7 +603,7 @@ __kernel void m05300_m08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -669,7 +669,7 @@ __kernel void m05300_m16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -678,7 +678,7 @@ __kernel void m05300_m16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -744,7 +744,7 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -753,7 +753,7 @@ __kernel void m05300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -819,7 +819,7 @@ __kernel void m05300_s08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -828,7 +828,7 @@ __kernel void m05300_s08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -894,7 +894,7 @@ __kernel void m05300_s16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = ikepsk_bufs[salt_pos].nr_buf[i];
+    w_s[i] = ikepsk_bufs[digests_offset].nr_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -903,7 +903,7 @@ __kernel void m05300_s16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = ikepsk_bufs[salt_pos].msg_buf[i];
+    s_msg_buf[i] = ikepsk_bufs[digests_offset].msg_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
diff --git a/OpenCL/m05400_a0.cl b/OpenCL/m05400_a0.cl
index 1be564799..e8684c63d 100644
--- a/OpenCL/m05400_a0.cl
+++ b/OpenCL/m05400_a0.cl
@@ -249,7 +249,7 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -258,7 +258,7 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -287,8 +287,8 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * loop
@@ -364,7 +364,7 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0[0] = s_msg_buf[off +  0];
       w0[1] = s_msg_buf[off +  1];
@@ -435,7 +435,7 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -444,7 +444,7 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -473,8 +473,8 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * digest
@@ -562,7 +562,7 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0[0] = s_msg_buf[off +  0];
       w0[1] = s_msg_buf[off +  1];
diff --git a/OpenCL/m05400_a1.cl b/OpenCL/m05400_a1.cl
index d7de7b515..7ffe91f0b 100644
--- a/OpenCL/m05400_a1.cl
+++ b/OpenCL/m05400_a1.cl
@@ -247,7 +247,7 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -256,7 +256,7 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -285,8 +285,8 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * loop
@@ -430,7 +430,7 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0[0] = s_msg_buf[off +  0];
       w0[1] = s_msg_buf[off +  1];
@@ -501,7 +501,7 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -510,7 +510,7 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -539,8 +539,8 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * digest
@@ -696,7 +696,7 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0[0] = s_msg_buf[off +  0];
       w0[1] = s_msg_buf[off +  1];
diff --git a/OpenCL/m05400_a3.cl b/OpenCL/m05400_a3.cl
index 97f92a664..2d693aa4f 100644
--- a/OpenCL/m05400_a3.cl
+++ b/OpenCL/m05400_a3.cl
@@ -242,8 +242,8 @@ void m05400m (__local u32 *w_s, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], cons
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * loop
@@ -331,7 +331,7 @@ void m05400m (__local u32 *w_s, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], cons
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0_t[0] = s_msg_buf[off +  0];
       w0_t[1] = s_msg_buf[off +  1];
@@ -389,8 +389,8 @@ void m05400s (__local u32 *w_s, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], cons
    * salt
    */
 
-  const u32 nr_len  = ikepsk_bufs[salt_pos].nr_len;
-  const u32 msg_len = ikepsk_bufs[salt_pos].msg_len;
+  const u32 nr_len  = ikepsk_bufs[digests_offset].nr_len;
+  const u32 msg_len = ikepsk_bufs[digests_offset].msg_len;
 
   /**
    * digest
@@ -490,7 +490,7 @@ void m05400s (__local u32 *w_s, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], cons
     int left;
     int off;
 
-    for (left = ikepsk_bufs[salt_pos].msg_len, off = 0; left >= 56; left -= 64, off += 16)
+    for (left = ikepsk_bufs[digests_offset].msg_len, off = 0; left >= 56; left -= 64, off += 16)
     {
       w0_t[0] = s_msg_buf[off +  0];
       w0_t[1] = s_msg_buf[off +  1];
@@ -553,7 +553,7 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -562,7 +562,7 @@ __kernel void m05400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -628,7 +628,7 @@ __kernel void m05400_m08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -637,7 +637,7 @@ __kernel void m05400_m08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -703,7 +703,7 @@ __kernel void m05400_m16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -712,7 +712,7 @@ __kernel void m05400_m16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -778,7 +778,7 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -787,7 +787,7 @@ __kernel void m05400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -853,7 +853,7 @@ __kernel void m05400_s08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -862,7 +862,7 @@ __kernel void m05400_s08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -928,7 +928,7 @@ __kernel void m05400_s16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 16; i += lsz)
   {
-    w_s[i] = swap32_S (ikepsk_bufs[salt_pos].nr_buf[i]);
+    w_s[i] = swap32_S (ikepsk_bufs[digests_offset].nr_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -937,7 +937,7 @@ __kernel void m05400_s16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 128; i += lsz)
   {
-    s_msg_buf[i] = swap32_S (ikepsk_bufs[salt_pos].msg_buf[i]);
+    s_msg_buf[i] = swap32_S (ikepsk_bufs[digests_offset].msg_buf[i]);
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
diff --git a/OpenCL/m05600_a0.cl b/OpenCL/m05600_a0.cl
index 9c90c7dc8..856558240 100644
--- a/OpenCL/m05600_a0.cl
+++ b/OpenCL/m05600_a0.cl
@@ -296,25 +296,25 @@ __kernel void m05600_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 64; i += lsz)
   {
-    s_userdomain_buf[i] = netntlm_bufs[salt_pos].userdomain_buf[i];
+    s_userdomain_buf[i] = netntlm_bufs[digests_offset].userdomain_buf[i];
   }
 
   __local u32 s_chall_buf[256];
 
   for (u32 i = lid; i < 256; i += lsz)
   {
-    s_chall_buf[i] = netntlm_bufs[salt_pos].chall_buf[i];
+    s_chall_buf[i] = netntlm_bufs[digests_offset].chall_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
 
   if (gid >= gid_max) return;
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * base
@@ -535,25 +535,25 @@ __kernel void m05600_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 64; i += lsz)
   {
-    s_userdomain_buf[i] = netntlm_bufs[salt_pos].userdomain_buf[i];
+    s_userdomain_buf[i] = netntlm_bufs[digests_offset].userdomain_buf[i];
   }
 
   __local u32 s_chall_buf[256];
 
   for (u32 i = lid; i < 256; i += lsz)
   {
-    s_chall_buf[i] = netntlm_bufs[salt_pos].chall_buf[i];
+    s_chall_buf[i] = netntlm_bufs[digests_offset].chall_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
 
   if (gid >= gid_max) return;
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * base
diff --git a/OpenCL/m05600_a1.cl b/OpenCL/m05600_a1.cl
index b544817a2..400c3e98a 100644
--- a/OpenCL/m05600_a1.cl
+++ b/OpenCL/m05600_a1.cl
@@ -294,25 +294,25 @@ __kernel void m05600_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 64; i += lsz)
   {
-    s_userdomain_buf[i] = netntlm_bufs[salt_pos].userdomain_buf[i];
+    s_userdomain_buf[i] = netntlm_bufs[digests_offset].userdomain_buf[i];
   }
 
   __local u32 s_chall_buf[256];
 
   for (u32 i = lid; i < 256; i += lsz)
   {
-    s_chall_buf[i] = netntlm_bufs[salt_pos].chall_buf[i];
+    s_chall_buf[i] = netntlm_bufs[digests_offset].chall_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
 
   if (gid >= gid_max) return;
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * base
@@ -591,25 +591,25 @@ __kernel void m05600_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 64; i += lsz)
   {
-    s_userdomain_buf[i] = netntlm_bufs[salt_pos].userdomain_buf[i];
+    s_userdomain_buf[i] = netntlm_bufs[digests_offset].userdomain_buf[i];
   }
 
   __local u32 s_chall_buf[256];
 
   for (u32 i = lid; i < 256; i += lsz)
   {
-    s_chall_buf[i] = netntlm_bufs[salt_pos].chall_buf[i];
+    s_chall_buf[i] = netntlm_bufs[digests_offset].chall_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
 
   if (gid >= gid_max) return;
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * base
diff --git a/OpenCL/m05600_a3.cl b/OpenCL/m05600_a3.cl
index d78136908..9f4c8df3e 100644
--- a/OpenCL/m05600_a3.cl
+++ b/OpenCL/m05600_a3.cl
@@ -289,11 +289,11 @@ void m05600m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
    * prepare
    */
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * loop
@@ -495,11 +495,11 @@ void m05600s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
    * prepare
    */
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * digest
@@ -718,25 +718,25 @@ __kernel void m05600_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 64; i += lsz)
   {
-    s_userdomain_buf[i] = netntlm_bufs[salt_pos].userdomain_buf[i];
+    s_userdomain_buf[i] = netntlm_bufs[digests_offset].userdomain_buf[i];
   }
 
   __local u32 s_chall_buf[256];
 
   for (u32 i = lid; i < 256; i += lsz)
   {
-    s_chall_buf[i] = netntlm_bufs[salt_pos].chall_buf[i];
+    s_chall_buf[i] = netntlm_bufs[digests_offset].chall_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
 
   if (gid >= gid_max) return;
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * base
@@ -797,25 +797,25 @@ __kernel void m05600_m08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 64; i += lsz)
   {
-    s_userdomain_buf[i] = netntlm_bufs[salt_pos].userdomain_buf[i];
+    s_userdomain_buf[i] = netntlm_bufs[digests_offset].userdomain_buf[i];
   }
 
   __local u32 s_chall_buf[256];
 
   for (u32 i = lid; i < 256; i += lsz)
   {
-    s_chall_buf[i] = netntlm_bufs[salt_pos].chall_buf[i];
+    s_chall_buf[i] = netntlm_bufs[digests_offset].chall_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
 
   if (gid >= gid_max) return;
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * base
@@ -880,25 +880,25 @@ __kernel void m05600_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 64; i += lsz)
   {
-    s_userdomain_buf[i] = netntlm_bufs[salt_pos].userdomain_buf[i];
+    s_userdomain_buf[i] = netntlm_bufs[digests_offset].userdomain_buf[i];
   }
 
   __local u32 s_chall_buf[256];
 
   for (u32 i = lid; i < 256; i += lsz)
   {
-    s_chall_buf[i] = netntlm_bufs[salt_pos].chall_buf[i];
+    s_chall_buf[i] = netntlm_bufs[digests_offset].chall_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
 
   if (gid >= gid_max) return;
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * base
@@ -959,25 +959,25 @@ __kernel void m05600_s08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 64; i += lsz)
   {
-    s_userdomain_buf[i] = netntlm_bufs[salt_pos].userdomain_buf[i];
+    s_userdomain_buf[i] = netntlm_bufs[digests_offset].userdomain_buf[i];
   }
 
   __local u32 s_chall_buf[256];
 
   for (u32 i = lid; i < 256; i += lsz)
   {
-    s_chall_buf[i] = netntlm_bufs[salt_pos].chall_buf[i];
+    s_chall_buf[i] = netntlm_bufs[digests_offset].chall_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
 
   if (gid >= gid_max) return;
 
-  const u32 userdomain_len = netntlm_bufs[salt_pos].user_len
-                           + netntlm_bufs[salt_pos].domain_len;
+  const u32 userdomain_len = netntlm_bufs[digests_offset].user_len
+                           + netntlm_bufs[digests_offset].domain_len;
 
-  const u32 chall_len = netntlm_bufs[salt_pos].srvchall_len
-                      + netntlm_bufs[salt_pos].clichall_len;
+  const u32 chall_len = netntlm_bufs[digests_offset].srvchall_len
+                      + netntlm_bufs[digests_offset].clichall_len;
 
   /**
    * base
diff --git a/OpenCL/m06211.cl b/OpenCL/m06211.cl
index 036f93009..034a7befb 100644
--- a/OpenCL/m06211.cl
+++ b/OpenCL/m06211.cl
@@ -408,22 +408,22 @@ __kernel void m06211_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -431,22 +431,22 @@ __kernel void m06211_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 salt_buf1[16];
 
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf1[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf1[15] = esalt_bufs[salt_pos].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf1[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf1[15] = esalt_bufs[digests_offset].salt_buf[15];
 
   u32 salt_buf2[16];
 
diff --git a/OpenCL/m06212.cl b/OpenCL/m06212.cl
index 000f2c27c..7c4022081 100644
--- a/OpenCL/m06212.cl
+++ b/OpenCL/m06212.cl
@@ -408,22 +408,22 @@ __kernel void m06212_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -431,22 +431,22 @@ __kernel void m06212_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 salt_buf1[16];
 
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf1[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf1[15] = esalt_bufs[salt_pos].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf1[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf1[15] = esalt_bufs[digests_offset].salt_buf[15];
 
   u32 salt_buf2[16];
 
diff --git a/OpenCL/m06213.cl b/OpenCL/m06213.cl
index 83c3ee984..c00adcd6d 100644
--- a/OpenCL/m06213.cl
+++ b/OpenCL/m06213.cl
@@ -408,22 +408,22 @@ __kernel void m06213_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -431,22 +431,22 @@ __kernel void m06213_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 salt_buf1[16];
 
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf1[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf1[15] = esalt_bufs[salt_pos].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf1[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf1[15] = esalt_bufs[digests_offset].salt_buf[15];
 
   u32 salt_buf2[16];
 
diff --git a/OpenCL/m06221.cl b/OpenCL/m06221.cl
index eb97ee2ed..1609b0b86 100644
--- a/OpenCL/m06221.cl
+++ b/OpenCL/m06221.cl
@@ -298,22 +298,22 @@ __kernel void m06221_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -323,14 +323,14 @@ __kernel void m06221_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   // swap fehlt
 
-  salt_buf[ 0] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 0])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  salt_buf[ 1] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 2])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  salt_buf[ 2] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 4])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  salt_buf[ 3] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 6])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  salt_buf[ 4] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 8])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  salt_buf[ 5] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[10])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  salt_buf[ 6] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[12])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  salt_buf[ 7] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[14])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  salt_buf[ 0] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 0])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  salt_buf[ 1] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 2])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  salt_buf[ 2] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 4])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  salt_buf[ 3] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 6])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  salt_buf[ 4] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 8])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  salt_buf[ 5] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[10])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  salt_buf[ 6] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[12])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  salt_buf[ 7] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[14])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[15]);
   salt_buf[ 8] = 0;
   salt_buf[ 9] = 0;
   salt_buf[10] = 0;
diff --git a/OpenCL/m06222.cl b/OpenCL/m06222.cl
index 395c1287e..fddf24dce 100644
--- a/OpenCL/m06222.cl
+++ b/OpenCL/m06222.cl
@@ -298,22 +298,22 @@ __kernel void m06222_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -323,14 +323,14 @@ __kernel void m06222_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   // swap fehlt
 
-  salt_buf[ 0] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 0])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  salt_buf[ 1] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 2])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  salt_buf[ 2] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 4])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  salt_buf[ 3] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 6])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  salt_buf[ 4] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 8])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  salt_buf[ 5] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[10])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  salt_buf[ 6] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[12])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  salt_buf[ 7] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[14])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  salt_buf[ 0] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 0])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  salt_buf[ 1] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 2])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  salt_buf[ 2] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 4])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  salt_buf[ 3] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 6])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  salt_buf[ 4] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 8])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  salt_buf[ 5] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[10])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  salt_buf[ 6] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[12])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  salt_buf[ 7] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[14])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[15]);
   salt_buf[ 8] = 0;
   salt_buf[ 9] = 0;
   salt_buf[10] = 0;
diff --git a/OpenCL/m06223.cl b/OpenCL/m06223.cl
index d44cc7efc..d55d58075 100644
--- a/OpenCL/m06223.cl
+++ b/OpenCL/m06223.cl
@@ -347,22 +347,22 @@ __kernel void m06223_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -372,14 +372,14 @@ __kernel void m06223_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   // swap fehlt
 
-  salt_buf[ 0] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 0])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  salt_buf[ 1] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 2])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  salt_buf[ 2] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 4])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  salt_buf[ 3] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 6])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  salt_buf[ 4] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 8])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  salt_buf[ 5] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[10])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  salt_buf[ 6] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[12])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  salt_buf[ 7] = ((u64) swap32 (esalt_bufs[salt_pos].salt_buf[14])) << 32 | (u64) swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  salt_buf[ 0] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 0])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  salt_buf[ 1] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 2])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  salt_buf[ 2] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 4])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  salt_buf[ 3] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 6])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  salt_buf[ 4] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 8])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  salt_buf[ 5] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[10])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  salt_buf[ 6] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[12])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  salt_buf[ 7] = ((u64) swap32 (esalt_bufs[digests_offset].salt_buf[14])) << 32 | (u64) swap32 (esalt_bufs[digests_offset].salt_buf[15]);
   salt_buf[ 8] = 0;
   salt_buf[ 9] = 0;
   salt_buf[10] = 0;
diff --git a/OpenCL/m06231.cl b/OpenCL/m06231.cl
index 9385683e3..2841c421d 100644
--- a/OpenCL/m06231.cl
+++ b/OpenCL/m06231.cl
@@ -1792,22 +1792,22 @@ __kernel void m06231_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -1815,22 +1815,22 @@ __kernel void m06231_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 salt_buf1[16];
 
-  salt_buf1[ 0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 0]);
-  salt_buf1[ 1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  salt_buf1[ 2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 2]);
-  salt_buf1[ 3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  salt_buf1[ 4] = swap32 (esalt_bufs[salt_pos].salt_buf[ 4]);
-  salt_buf1[ 5] = swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  salt_buf1[ 6] = swap32 (esalt_bufs[salt_pos].salt_buf[ 6]);
-  salt_buf1[ 7] = swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  salt_buf1[ 8] = swap32 (esalt_bufs[salt_pos].salt_buf[ 8]);
-  salt_buf1[ 9] = swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  salt_buf1[10] = swap32 (esalt_bufs[salt_pos].salt_buf[10]);
-  salt_buf1[11] = swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  salt_buf1[12] = swap32 (esalt_bufs[salt_pos].salt_buf[12]);
-  salt_buf1[13] = swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  salt_buf1[14] = swap32 (esalt_bufs[salt_pos].salt_buf[14]);
-  salt_buf1[15] = swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  salt_buf1[ 0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 0]);
+  salt_buf1[ 1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  salt_buf1[ 2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 2]);
+  salt_buf1[ 3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  salt_buf1[ 4] = swap32 (esalt_bufs[digests_offset].salt_buf[ 4]);
+  salt_buf1[ 5] = swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  salt_buf1[ 6] = swap32 (esalt_bufs[digests_offset].salt_buf[ 6]);
+  salt_buf1[ 7] = swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  salt_buf1[ 8] = swap32 (esalt_bufs[digests_offset].salt_buf[ 8]);
+  salt_buf1[ 9] = swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  salt_buf1[10] = swap32 (esalt_bufs[digests_offset].salt_buf[10]);
+  salt_buf1[11] = swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  salt_buf1[12] = swap32 (esalt_bufs[digests_offset].salt_buf[12]);
+  salt_buf1[13] = swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  salt_buf1[14] = swap32 (esalt_bufs[digests_offset].salt_buf[14]);
+  salt_buf1[15] = swap32 (esalt_bufs[digests_offset].salt_buf[15]);
 
   u32 salt_buf2[16];
 
diff --git a/OpenCL/m06232.cl b/OpenCL/m06232.cl
index a2ab5fd21..883b54963 100644
--- a/OpenCL/m06232.cl
+++ b/OpenCL/m06232.cl
@@ -1542,22 +1542,22 @@ __kernel void m06232_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -1565,22 +1565,22 @@ __kernel void m06232_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 salt_buf1[16];
 
-  salt_buf1[ 0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 0]);
-  salt_buf1[ 1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  salt_buf1[ 2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 2]);
-  salt_buf1[ 3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  salt_buf1[ 4] = swap32 (esalt_bufs[salt_pos].salt_buf[ 4]);
-  salt_buf1[ 5] = swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  salt_buf1[ 6] = swap32 (esalt_bufs[salt_pos].salt_buf[ 6]);
-  salt_buf1[ 7] = swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  salt_buf1[ 8] = swap32 (esalt_bufs[salt_pos].salt_buf[ 8]);
-  salt_buf1[ 9] = swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  salt_buf1[10] = swap32 (esalt_bufs[salt_pos].salt_buf[10]);
-  salt_buf1[11] = swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  salt_buf1[12] = swap32 (esalt_bufs[salt_pos].salt_buf[12]);
-  salt_buf1[13] = swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  salt_buf1[14] = swap32 (esalt_bufs[salt_pos].salt_buf[14]);
-  salt_buf1[15] = swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  salt_buf1[ 0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 0]);
+  salt_buf1[ 1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  salt_buf1[ 2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 2]);
+  salt_buf1[ 3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  salt_buf1[ 4] = swap32 (esalt_bufs[digests_offset].salt_buf[ 4]);
+  salt_buf1[ 5] = swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  salt_buf1[ 6] = swap32 (esalt_bufs[digests_offset].salt_buf[ 6]);
+  salt_buf1[ 7] = swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  salt_buf1[ 8] = swap32 (esalt_bufs[digests_offset].salt_buf[ 8]);
+  salt_buf1[ 9] = swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  salt_buf1[10] = swap32 (esalt_bufs[digests_offset].salt_buf[10]);
+  salt_buf1[11] = swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  salt_buf1[12] = swap32 (esalt_bufs[digests_offset].salt_buf[12]);
+  salt_buf1[13] = swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  salt_buf1[14] = swap32 (esalt_bufs[digests_offset].salt_buf[14]);
+  salt_buf1[15] = swap32 (esalt_bufs[digests_offset].salt_buf[15]);
 
   u32 salt_buf2[16];
 
diff --git a/OpenCL/m06233.cl b/OpenCL/m06233.cl
index 9b633b006..d4a539816 100644
--- a/OpenCL/m06233.cl
+++ b/OpenCL/m06233.cl
@@ -1542,22 +1542,22 @@ __kernel void m06233_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   /**
    * salt
@@ -1565,22 +1565,22 @@ __kernel void m06233_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 salt_buf1[16];
 
-  salt_buf1[ 0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 0]);
-  salt_buf1[ 1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  salt_buf1[ 2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 2]);
-  salt_buf1[ 3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  salt_buf1[ 4] = swap32 (esalt_bufs[salt_pos].salt_buf[ 4]);
-  salt_buf1[ 5] = swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  salt_buf1[ 6] = swap32 (esalt_bufs[salt_pos].salt_buf[ 6]);
-  salt_buf1[ 7] = swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  salt_buf1[ 8] = swap32 (esalt_bufs[salt_pos].salt_buf[ 8]);
-  salt_buf1[ 9] = swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  salt_buf1[10] = swap32 (esalt_bufs[salt_pos].salt_buf[10]);
-  salt_buf1[11] = swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  salt_buf1[12] = swap32 (esalt_bufs[salt_pos].salt_buf[12]);
-  salt_buf1[13] = swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  salt_buf1[14] = swap32 (esalt_bufs[salt_pos].salt_buf[14]);
-  salt_buf1[15] = swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  salt_buf1[ 0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 0]);
+  salt_buf1[ 1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  salt_buf1[ 2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 2]);
+  salt_buf1[ 3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  salt_buf1[ 4] = swap32 (esalt_bufs[digests_offset].salt_buf[ 4]);
+  salt_buf1[ 5] = swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  salt_buf1[ 6] = swap32 (esalt_bufs[digests_offset].salt_buf[ 6]);
+  salt_buf1[ 7] = swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  salt_buf1[ 8] = swap32 (esalt_bufs[digests_offset].salt_buf[ 8]);
+  salt_buf1[ 9] = swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  salt_buf1[10] = swap32 (esalt_bufs[digests_offset].salt_buf[10]);
+  salt_buf1[11] = swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  salt_buf1[12] = swap32 (esalt_bufs[digests_offset].salt_buf[12]);
+  salt_buf1[13] = swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  salt_buf1[14] = swap32 (esalt_bufs[digests_offset].salt_buf[14]);
+  salt_buf1[15] = swap32 (esalt_bufs[digests_offset].salt_buf[15]);
 
   u32 salt_buf2[16];
 
diff --git a/OpenCL/m07100.cl b/OpenCL/m07100.cl
index 0ee4c70f7..bab5bbd0e 100644
--- a/OpenCL/m07100.cl
+++ b/OpenCL/m07100.cl
@@ -520,20 +520,20 @@ __kernel void m07100_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 salt_len  = salt_bufs[salt_pos].salt_len;
 
-  esalt_buf[ 0] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[ 0]), swap32_S (esalt_bufs[salt_pos].salt_buf[ 1]));
-  esalt_buf[ 1] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[ 2]), swap32_S (esalt_bufs[salt_pos].salt_buf[ 3]));
-  esalt_buf[ 2] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[ 4]), swap32_S (esalt_bufs[salt_pos].salt_buf[ 5]));
-  esalt_buf[ 3] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[ 6]), swap32_S (esalt_bufs[salt_pos].salt_buf[ 7]));
-  esalt_buf[ 4] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[ 8]), swap32_S (esalt_bufs[salt_pos].salt_buf[ 9]));
-  esalt_buf[ 5] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[10]), swap32_S (esalt_bufs[salt_pos].salt_buf[11]));
-  esalt_buf[ 6] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[12]), swap32_S (esalt_bufs[salt_pos].salt_buf[13]));
-  esalt_buf[ 7] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[14]), swap32_S (esalt_bufs[salt_pos].salt_buf[15]));
-  esalt_buf[ 8] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[16]), swap32_S (esalt_bufs[salt_pos].salt_buf[17]));
-  esalt_buf[ 9] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[18]), swap32_S (esalt_bufs[salt_pos].salt_buf[19]));
-  esalt_buf[10] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[20]), swap32_S (esalt_bufs[salt_pos].salt_buf[21]));
-  esalt_buf[11] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[22]), swap32_S (esalt_bufs[salt_pos].salt_buf[23]));
-  esalt_buf[12] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[24]), swap32_S (esalt_bufs[salt_pos].salt_buf[25]));
-  esalt_buf[13] = hl32_to_64_S (swap32_S (esalt_bufs[salt_pos].salt_buf[26]), swap32_S (esalt_bufs[salt_pos].salt_buf[27]));
+  esalt_buf[ 0] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[ 0]), swap32_S (esalt_bufs[digests_offset].salt_buf[ 1]));
+  esalt_buf[ 1] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[ 2]), swap32_S (esalt_bufs[digests_offset].salt_buf[ 3]));
+  esalt_buf[ 2] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[ 4]), swap32_S (esalt_bufs[digests_offset].salt_buf[ 5]));
+  esalt_buf[ 3] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[ 6]), swap32_S (esalt_bufs[digests_offset].salt_buf[ 7]));
+  esalt_buf[ 4] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[ 8]), swap32_S (esalt_bufs[digests_offset].salt_buf[ 9]));
+  esalt_buf[ 5] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[10]), swap32_S (esalt_bufs[digests_offset].salt_buf[11]));
+  esalt_buf[ 6] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[12]), swap32_S (esalt_bufs[digests_offset].salt_buf[13]));
+  esalt_buf[ 7] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[14]), swap32_S (esalt_bufs[digests_offset].salt_buf[15]));
+  esalt_buf[ 8] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[16]), swap32_S (esalt_bufs[digests_offset].salt_buf[17]));
+  esalt_buf[ 9] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[18]), swap32_S (esalt_bufs[digests_offset].salt_buf[19]));
+  esalt_buf[10] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[20]), swap32_S (esalt_bufs[digests_offset].salt_buf[21]));
+  esalt_buf[11] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[22]), swap32_S (esalt_bufs[digests_offset].salt_buf[23]));
+  esalt_buf[12] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[24]), swap32_S (esalt_bufs[digests_offset].salt_buf[25]));
+  esalt_buf[13] = hl32_to_64_S (swap32_S (esalt_bufs[digests_offset].salt_buf[26]), swap32_S (esalt_bufs[digests_offset].salt_buf[27]));
   esalt_buf[14] = 0;
   esalt_buf[15] = (128 + salt_len + 4) * 8;
 
diff --git a/OpenCL/m07300_a0.cl b/OpenCL/m07300_a0.cl
index eceacdcbb..1863a017c 100644
--- a/OpenCL/m07300_a0.cl
+++ b/OpenCL/m07300_a0.cl
@@ -265,7 +265,7 @@ __kernel void m07300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 esalt_len = rakp_bufs[salt_pos].salt_len;
+  const u32 esalt_len = rakp_bufs[digests_offset].salt_len;
 
   /**
    * loop
@@ -305,40 +305,40 @@ __kernel void m07300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
     for (esalt_left = esalt_size, esalt_off = 0; esalt_left >= 56; esalt_left -= 64, esalt_off += 16)
     {
-      w0[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-      w0[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-      w0[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-      w0[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-      w1[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-      w1[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-      w1[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-      w1[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-      w2[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-      w2[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-      w2[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-      w2[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-      w3[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-      w3[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
-      w3[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 14];
-      w3[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 15];
+      w0[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+      w0[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+      w0[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+      w0[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+      w1[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+      w1[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+      w1[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+      w1[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+      w2[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+      w2[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+      w2[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+      w2[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+      w3[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+      w3[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
+      w3[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 14];
+      w3[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 15];
 
       sha1_transform (w0, w1, w2, w3, ipad);
     }
 
-    w0[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-    w0[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-    w0[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-    w0[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-    w1[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-    w1[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-    w1[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-    w1[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-    w2[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-    w2[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-    w2[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-    w2[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-    w3[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-    w3[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
+    w0[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+    w0[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+    w0[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+    w0[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+    w1[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+    w1[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+    w1[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+    w1[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+    w2[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+    w2[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+    w2[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+    w2[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+    w3[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+    w3[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
     w3[2] = 0;
     w3[3] = (64 + esalt_size) * 8;
 
@@ -392,7 +392,7 @@ __kernel void m07300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 esalt_len = rakp_bufs[salt_pos].salt_len;
+  const u32 esalt_len = rakp_bufs[digests_offset].salt_len;
 
   /**
    * digest
@@ -444,40 +444,40 @@ __kernel void m07300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
     for (esalt_left = esalt_size, esalt_off = 0; esalt_left >= 56; esalt_left -= 64, esalt_off += 16)
     {
-      w0[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-      w0[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-      w0[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-      w0[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-      w1[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-      w1[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-      w1[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-      w1[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-      w2[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-      w2[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-      w2[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-      w2[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-      w3[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-      w3[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
-      w3[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 14];
-      w3[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 15];
+      w0[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+      w0[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+      w0[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+      w0[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+      w1[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+      w1[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+      w1[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+      w1[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+      w2[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+      w2[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+      w2[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+      w2[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+      w3[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+      w3[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
+      w3[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 14];
+      w3[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 15];
 
       sha1_transform (w0, w1, w2, w3, ipad);
     }
 
-    w0[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-    w0[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-    w0[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-    w0[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-    w1[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-    w1[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-    w1[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-    w1[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-    w2[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-    w2[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-    w2[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-    w2[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-    w3[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-    w3[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
+    w0[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+    w0[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+    w0[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+    w0[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+    w1[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+    w1[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+    w1[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+    w1[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+    w2[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+    w2[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+    w2[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+    w2[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+    w3[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+    w3[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
     w3[2] = 0;
     w3[3] = (64 + esalt_size) * 8;
 
diff --git a/OpenCL/m07300_a1.cl b/OpenCL/m07300_a1.cl
index b1229db9e..5d9cb9603 100644
--- a/OpenCL/m07300_a1.cl
+++ b/OpenCL/m07300_a1.cl
@@ -263,7 +263,7 @@ __kernel void m07300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 esalt_len = rakp_bufs[salt_pos].salt_len;
+  const u32 esalt_len = rakp_bufs[digests_offset].salt_len;
 
   /**
    * loop
@@ -371,40 +371,40 @@ __kernel void m07300_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
     for (esalt_left = esalt_size, esalt_off = 0; esalt_left >= 56; esalt_left -= 64, esalt_off += 16)
     {
-      w0[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-      w0[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-      w0[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-      w0[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-      w1[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-      w1[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-      w1[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-      w1[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-      w2[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-      w2[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-      w2[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-      w2[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-      w3[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-      w3[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
-      w3[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 14];
-      w3[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 15];
+      w0[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+      w0[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+      w0[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+      w0[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+      w1[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+      w1[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+      w1[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+      w1[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+      w2[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+      w2[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+      w2[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+      w2[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+      w3[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+      w3[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
+      w3[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 14];
+      w3[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 15];
 
       sha1_transform (w0, w1, w2, w3, ipad);
     }
 
-    w0[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-    w0[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-    w0[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-    w0[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-    w1[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-    w1[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-    w1[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-    w1[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-    w2[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-    w2[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-    w2[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-    w2[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-    w3[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-    w3[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
+    w0[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+    w0[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+    w0[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+    w0[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+    w1[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+    w1[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+    w1[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+    w1[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+    w2[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+    w2[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+    w2[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+    w2[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+    w3[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+    w3[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
     w3[2] = 0;
     w3[3] = (64 + esalt_size) * 8;
 
@@ -458,7 +458,7 @@ __kernel void m07300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 esalt_len = rakp_bufs[salt_pos].salt_len;
+  const u32 esalt_len = rakp_bufs[digests_offset].salt_len;
 
   /**
    * digest
@@ -578,40 +578,40 @@ __kernel void m07300_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
     for (esalt_left = esalt_size, esalt_off = 0; esalt_left >= 56; esalt_left -= 64, esalt_off += 16)
     {
-      w0[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-      w0[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-      w0[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-      w0[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-      w1[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-      w1[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-      w1[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-      w1[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-      w2[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-      w2[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-      w2[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-      w2[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-      w3[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-      w3[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
-      w3[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 14];
-      w3[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 15];
+      w0[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+      w0[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+      w0[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+      w0[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+      w1[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+      w1[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+      w1[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+      w1[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+      w2[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+      w2[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+      w2[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+      w2[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+      w3[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+      w3[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
+      w3[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 14];
+      w3[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 15];
 
       sha1_transform (w0, w1, w2, w3, ipad);
     }
 
-    w0[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-    w0[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-    w0[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-    w0[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-    w1[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-    w1[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-    w1[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-    w1[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-    w2[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-    w2[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-    w2[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-    w2[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-    w3[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-    w3[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
+    w0[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+    w0[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+    w0[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+    w0[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+    w1[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+    w1[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+    w1[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+    w1[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+    w2[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+    w2[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+    w2[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+    w2[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+    w3[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+    w3[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
     w3[2] = 0;
     w3[3] = (64 + esalt_size) * 8;
 
diff --git a/OpenCL/m07300_a3.cl b/OpenCL/m07300_a3.cl
index 08e36b6a1..2ef8c42b8 100644
--- a/OpenCL/m07300_a3.cl
+++ b/OpenCL/m07300_a3.cl
@@ -242,7 +242,7 @@ void m07300m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
    * salt
    */
 
-  const u32 esalt_len = rakp_bufs[salt_pos].salt_len;
+  const u32 esalt_len = rakp_bufs[digests_offset].salt_len;
 
   /**
    * loop
@@ -294,40 +294,40 @@ void m07300m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
 
     for (esalt_left = esalt_size, esalt_off = 0; esalt_left >= 56; esalt_left -= 64, esalt_off += 16)
     {
-      w0_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-      w0_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-      w0_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-      w0_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-      w1_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-      w1_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-      w1_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-      w1_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-      w2_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-      w2_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-      w2_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-      w2_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-      w3_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-      w3_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
-      w3_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 14];
-      w3_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 15];
+      w0_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+      w0_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+      w0_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+      w0_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+      w1_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+      w1_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+      w1_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+      w1_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+      w2_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+      w2_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+      w2_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+      w2_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+      w3_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+      w3_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
+      w3_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 14];
+      w3_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 15];
 
       sha1_transform (w0_t, w1_t, w2_t, w3_t, ipad);
     }
 
-    w0_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-    w0_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-    w0_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-    w0_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-    w1_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-    w1_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-    w1_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-    w1_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-    w2_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-    w2_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-    w2_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-    w2_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-    w3_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-    w3_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
+    w0_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+    w0_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+    w0_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+    w0_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+    w1_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+    w1_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+    w1_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+    w1_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+    w2_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+    w2_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+    w2_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+    w2_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+    w3_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+    w3_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
     w3_t[2] = 0;
     w3_t[3] = (64 + esalt_size) * 8;
 
@@ -352,7 +352,7 @@ void m07300s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
    * salt
    */
 
-  const u32 esalt_len = rakp_bufs[salt_pos].salt_len;
+  const u32 esalt_len = rakp_bufs[digests_offset].salt_len;
 
   /**
    * digest
@@ -416,40 +416,40 @@ void m07300s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
 
     for (esalt_left = esalt_size, esalt_off = 0; esalt_left >= 56; esalt_left -= 64, esalt_off += 16)
     {
-      w0_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-      w0_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-      w0_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-      w0_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-      w1_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-      w1_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-      w1_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-      w1_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-      w2_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-      w2_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-      w2_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-      w2_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-      w3_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-      w3_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
-      w3_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 14];
-      w3_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 15];
+      w0_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+      w0_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+      w0_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+      w0_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+      w1_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+      w1_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+      w1_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+      w1_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+      w2_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+      w2_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+      w2_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+      w2_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+      w3_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+      w3_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
+      w3_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 14];
+      w3_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 15];
 
       sha1_transform (w0_t, w1_t, w2_t, w3_t, ipad);
     }
 
-    w0_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  0];
-    w0_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  1];
-    w0_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  2];
-    w0_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  3];
-    w1_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  4];
-    w1_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  5];
-    w1_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off +  6];
-    w1_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off +  7];
-    w2_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off +  8];
-    w2_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off +  9];
-    w2_t[2] = rakp_bufs[salt_pos].salt_buf[esalt_off + 10];
-    w2_t[3] = rakp_bufs[salt_pos].salt_buf[esalt_off + 11];
-    w3_t[0] = rakp_bufs[salt_pos].salt_buf[esalt_off + 12];
-    w3_t[1] = rakp_bufs[salt_pos].salt_buf[esalt_off + 13];
+    w0_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  0];
+    w0_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  1];
+    w0_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  2];
+    w0_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  3];
+    w1_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  4];
+    w1_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  5];
+    w1_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off +  6];
+    w1_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off +  7];
+    w2_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off +  8];
+    w2_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off +  9];
+    w2_t[2] = rakp_bufs[digests_offset].salt_buf[esalt_off + 10];
+    w2_t[3] = rakp_bufs[digests_offset].salt_buf[esalt_off + 11];
+    w3_t[0] = rakp_bufs[digests_offset].salt_buf[esalt_off + 12];
+    w3_t[1] = rakp_bufs[digests_offset].salt_buf[esalt_off + 13];
     w3_t[2] = 0;
     w3_t[3] = (64 + esalt_size) * 8;
 
diff --git a/OpenCL/m07500_a0.cl b/OpenCL/m07500_a0.cl
index f85e9bd62..29f1b80a2 100644
--- a/OpenCL/m07500_a0.cl
+++ b/OpenCL/m07500_a0.cl
@@ -580,21 +580,21 @@ __kernel void m07500_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 checksum[4];
 
-  checksum[0] = krb5pa_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5pa_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5pa_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5pa_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5pa_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5pa_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5pa_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5pa_bufs[digests_offset].checksum[3];
 
   u32 timestamp_ct[8];
 
-  timestamp_ct[0] = krb5pa_bufs[salt_pos].timestamp[0];
-  timestamp_ct[1] = krb5pa_bufs[salt_pos].timestamp[1];
-  timestamp_ct[2] = krb5pa_bufs[salt_pos].timestamp[2];
-  timestamp_ct[3] = krb5pa_bufs[salt_pos].timestamp[3];
-  timestamp_ct[4] = krb5pa_bufs[salt_pos].timestamp[4];
-  timestamp_ct[5] = krb5pa_bufs[salt_pos].timestamp[5];
-  timestamp_ct[6] = krb5pa_bufs[salt_pos].timestamp[6];
-  timestamp_ct[7] = krb5pa_bufs[salt_pos].timestamp[7];
+  timestamp_ct[0] = krb5pa_bufs[digests_offset].timestamp[0];
+  timestamp_ct[1] = krb5pa_bufs[digests_offset].timestamp[1];
+  timestamp_ct[2] = krb5pa_bufs[digests_offset].timestamp[2];
+  timestamp_ct[3] = krb5pa_bufs[digests_offset].timestamp[3];
+  timestamp_ct[4] = krb5pa_bufs[digests_offset].timestamp[4];
+  timestamp_ct[5] = krb5pa_bufs[digests_offset].timestamp[5];
+  timestamp_ct[6] = krb5pa_bufs[digests_offset].timestamp[6];
+  timestamp_ct[7] = krb5pa_bufs[digests_offset].timestamp[7];
 
   /**
    * shared
@@ -681,21 +681,21 @@ __kernel void m07500_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 checksum[4];
 
-  checksum[0] = krb5pa_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5pa_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5pa_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5pa_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5pa_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5pa_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5pa_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5pa_bufs[digests_offset].checksum[3];
 
   u32 timestamp_ct[8];
 
-  timestamp_ct[0] = krb5pa_bufs[salt_pos].timestamp[0];
-  timestamp_ct[1] = krb5pa_bufs[salt_pos].timestamp[1];
-  timestamp_ct[2] = krb5pa_bufs[salt_pos].timestamp[2];
-  timestamp_ct[3] = krb5pa_bufs[salt_pos].timestamp[3];
-  timestamp_ct[4] = krb5pa_bufs[salt_pos].timestamp[4];
-  timestamp_ct[5] = krb5pa_bufs[salt_pos].timestamp[5];
-  timestamp_ct[6] = krb5pa_bufs[salt_pos].timestamp[6];
-  timestamp_ct[7] = krb5pa_bufs[salt_pos].timestamp[7];
+  timestamp_ct[0] = krb5pa_bufs[digests_offset].timestamp[0];
+  timestamp_ct[1] = krb5pa_bufs[digests_offset].timestamp[1];
+  timestamp_ct[2] = krb5pa_bufs[digests_offset].timestamp[2];
+  timestamp_ct[3] = krb5pa_bufs[digests_offset].timestamp[3];
+  timestamp_ct[4] = krb5pa_bufs[digests_offset].timestamp[4];
+  timestamp_ct[5] = krb5pa_bufs[digests_offset].timestamp[5];
+  timestamp_ct[6] = krb5pa_bufs[digests_offset].timestamp[6];
+  timestamp_ct[7] = krb5pa_bufs[digests_offset].timestamp[7];
 
   /**
    * shared
diff --git a/OpenCL/m07500_a1.cl b/OpenCL/m07500_a1.cl
index c061647e6..4fa0eb06e 100644
--- a/OpenCL/m07500_a1.cl
+++ b/OpenCL/m07500_a1.cl
@@ -578,21 +578,21 @@ __kernel void m07500_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 checksum[4];
 
-  checksum[0] = krb5pa_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5pa_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5pa_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5pa_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5pa_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5pa_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5pa_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5pa_bufs[digests_offset].checksum[3];
 
   u32 timestamp_ct[8];
 
-  timestamp_ct[0] = krb5pa_bufs[salt_pos].timestamp[0];
-  timestamp_ct[1] = krb5pa_bufs[salt_pos].timestamp[1];
-  timestamp_ct[2] = krb5pa_bufs[salt_pos].timestamp[2];
-  timestamp_ct[3] = krb5pa_bufs[salt_pos].timestamp[3];
-  timestamp_ct[4] = krb5pa_bufs[salt_pos].timestamp[4];
-  timestamp_ct[5] = krb5pa_bufs[salt_pos].timestamp[5];
-  timestamp_ct[6] = krb5pa_bufs[salt_pos].timestamp[6];
-  timestamp_ct[7] = krb5pa_bufs[salt_pos].timestamp[7];
+  timestamp_ct[0] = krb5pa_bufs[digests_offset].timestamp[0];
+  timestamp_ct[1] = krb5pa_bufs[digests_offset].timestamp[1];
+  timestamp_ct[2] = krb5pa_bufs[digests_offset].timestamp[2];
+  timestamp_ct[3] = krb5pa_bufs[digests_offset].timestamp[3];
+  timestamp_ct[4] = krb5pa_bufs[digests_offset].timestamp[4];
+  timestamp_ct[5] = krb5pa_bufs[digests_offset].timestamp[5];
+  timestamp_ct[6] = krb5pa_bufs[digests_offset].timestamp[6];
+  timestamp_ct[7] = krb5pa_bufs[digests_offset].timestamp[7];
 
   /**
    * shared
@@ -729,21 +729,21 @@ __kernel void m07500_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 checksum[4];
 
-  checksum[0] = krb5pa_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5pa_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5pa_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5pa_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5pa_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5pa_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5pa_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5pa_bufs[digests_offset].checksum[3];
 
   u32 timestamp_ct[8];
 
-  timestamp_ct[0] = krb5pa_bufs[salt_pos].timestamp[0];
-  timestamp_ct[1] = krb5pa_bufs[salt_pos].timestamp[1];
-  timestamp_ct[2] = krb5pa_bufs[salt_pos].timestamp[2];
-  timestamp_ct[3] = krb5pa_bufs[salt_pos].timestamp[3];
-  timestamp_ct[4] = krb5pa_bufs[salt_pos].timestamp[4];
-  timestamp_ct[5] = krb5pa_bufs[salt_pos].timestamp[5];
-  timestamp_ct[6] = krb5pa_bufs[salt_pos].timestamp[6];
-  timestamp_ct[7] = krb5pa_bufs[salt_pos].timestamp[7];
+  timestamp_ct[0] = krb5pa_bufs[digests_offset].timestamp[0];
+  timestamp_ct[1] = krb5pa_bufs[digests_offset].timestamp[1];
+  timestamp_ct[2] = krb5pa_bufs[digests_offset].timestamp[2];
+  timestamp_ct[3] = krb5pa_bufs[digests_offset].timestamp[3];
+  timestamp_ct[4] = krb5pa_bufs[digests_offset].timestamp[4];
+  timestamp_ct[5] = krb5pa_bufs[digests_offset].timestamp[5];
+  timestamp_ct[6] = krb5pa_bufs[digests_offset].timestamp[6];
+  timestamp_ct[7] = krb5pa_bufs[digests_offset].timestamp[7];
 
   /**
    * shared
diff --git a/OpenCL/m07500_a3.cl b/OpenCL/m07500_a3.cl
index 9ae3ccfc4..18ec48d3a 100644
--- a/OpenCL/m07500_a3.cl
+++ b/OpenCL/m07500_a3.cl
@@ -557,21 +557,21 @@ void m07500 (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[
 
   u32 checksum[4];
 
-  checksum[0] = krb5pa_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5pa_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5pa_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5pa_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5pa_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5pa_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5pa_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5pa_bufs[digests_offset].checksum[3];
 
   u32 timestamp_ct[8];
 
-  timestamp_ct[0] = krb5pa_bufs[salt_pos].timestamp[0];
-  timestamp_ct[1] = krb5pa_bufs[salt_pos].timestamp[1];
-  timestamp_ct[2] = krb5pa_bufs[salt_pos].timestamp[2];
-  timestamp_ct[3] = krb5pa_bufs[salt_pos].timestamp[3];
-  timestamp_ct[4] = krb5pa_bufs[salt_pos].timestamp[4];
-  timestamp_ct[5] = krb5pa_bufs[salt_pos].timestamp[5];
-  timestamp_ct[6] = krb5pa_bufs[salt_pos].timestamp[6];
-  timestamp_ct[7] = krb5pa_bufs[salt_pos].timestamp[7];
+  timestamp_ct[0] = krb5pa_bufs[digests_offset].timestamp[0];
+  timestamp_ct[1] = krb5pa_bufs[digests_offset].timestamp[1];
+  timestamp_ct[2] = krb5pa_bufs[digests_offset].timestamp[2];
+  timestamp_ct[3] = krb5pa_bufs[digests_offset].timestamp[3];
+  timestamp_ct[4] = krb5pa_bufs[digests_offset].timestamp[4];
+  timestamp_ct[5] = krb5pa_bufs[digests_offset].timestamp[5];
+  timestamp_ct[6] = krb5pa_bufs[digests_offset].timestamp[6];
+  timestamp_ct[7] = krb5pa_bufs[digests_offset].timestamp[7];
 
   /**
    * loop
diff --git a/OpenCL/m08200.cl b/OpenCL/m08200.cl
index ecf2beb93..a50d6748a 100644
--- a/OpenCL/m08200.cl
+++ b/OpenCL/m08200.cl
@@ -736,47 +736,47 @@ __kernel void m08200_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   hmac_sha256_pad (w0, w1, w2, w3, ipad, opad);
 
-  int size = esalt_bufs[salt_pos].data_len;
+  int size = esalt_bufs[digests_offset].data_len;
 
   int left;
   int off;
 
   for (left = size, off = 0; left >= 56; left -= 64, off += 16)
   {
-    w0[0] = esalt_bufs[salt_pos].data_buf[off +  0];
-    w0[1] = esalt_bufs[salt_pos].data_buf[off +  1];
-    w0[2] = esalt_bufs[salt_pos].data_buf[off +  2];
-    w0[3] = esalt_bufs[salt_pos].data_buf[off +  3];
-    w1[0] = esalt_bufs[salt_pos].data_buf[off +  4];
-    w1[1] = esalt_bufs[salt_pos].data_buf[off +  5];
-    w1[2] = esalt_bufs[salt_pos].data_buf[off +  6];
-    w1[3] = esalt_bufs[salt_pos].data_buf[off +  7];
-    w2[0] = esalt_bufs[salt_pos].data_buf[off +  8];
-    w2[1] = esalt_bufs[salt_pos].data_buf[off +  9];
-    w2[2] = esalt_bufs[salt_pos].data_buf[off + 10];
-    w2[3] = esalt_bufs[salt_pos].data_buf[off + 11];
-    w3[0] = esalt_bufs[salt_pos].data_buf[off + 12];
-    w3[1] = esalt_bufs[salt_pos].data_buf[off + 13];
-    w3[2] = esalt_bufs[salt_pos].data_buf[off + 14];
-    w3[3] = esalt_bufs[salt_pos].data_buf[off + 15];
+    w0[0] = esalt_bufs[digests_offset].data_buf[off +  0];
+    w0[1] = esalt_bufs[digests_offset].data_buf[off +  1];
+    w0[2] = esalt_bufs[digests_offset].data_buf[off +  2];
+    w0[3] = esalt_bufs[digests_offset].data_buf[off +  3];
+    w1[0] = esalt_bufs[digests_offset].data_buf[off +  4];
+    w1[1] = esalt_bufs[digests_offset].data_buf[off +  5];
+    w1[2] = esalt_bufs[digests_offset].data_buf[off +  6];
+    w1[3] = esalt_bufs[digests_offset].data_buf[off +  7];
+    w2[0] = esalt_bufs[digests_offset].data_buf[off +  8];
+    w2[1] = esalt_bufs[digests_offset].data_buf[off +  9];
+    w2[2] = esalt_bufs[digests_offset].data_buf[off + 10];
+    w2[3] = esalt_bufs[digests_offset].data_buf[off + 11];
+    w3[0] = esalt_bufs[digests_offset].data_buf[off + 12];
+    w3[1] = esalt_bufs[digests_offset].data_buf[off + 13];
+    w3[2] = esalt_bufs[digests_offset].data_buf[off + 14];
+    w3[3] = esalt_bufs[digests_offset].data_buf[off + 15];
 
     sha256_transform (w0, w1, w2, w3, ipad);
   }
 
-  w0[0] = esalt_bufs[salt_pos].data_buf[off +  0];
-  w0[1] = esalt_bufs[salt_pos].data_buf[off +  1];
-  w0[2] = esalt_bufs[salt_pos].data_buf[off +  2];
-  w0[3] = esalt_bufs[salt_pos].data_buf[off +  3];
-  w1[0] = esalt_bufs[salt_pos].data_buf[off +  4];
-  w1[1] = esalt_bufs[salt_pos].data_buf[off +  5];
-  w1[2] = esalt_bufs[salt_pos].data_buf[off +  6];
-  w1[3] = esalt_bufs[salt_pos].data_buf[off +  7];
-  w2[0] = esalt_bufs[salt_pos].data_buf[off +  8];
-  w2[1] = esalt_bufs[salt_pos].data_buf[off +  9];
-  w2[2] = esalt_bufs[salt_pos].data_buf[off + 10];
-  w2[3] = esalt_bufs[salt_pos].data_buf[off + 11];
-  w3[0] = esalt_bufs[salt_pos].data_buf[off + 12];
-  w3[1] = esalt_bufs[salt_pos].data_buf[off + 13];
+  w0[0] = esalt_bufs[digests_offset].data_buf[off +  0];
+  w0[1] = esalt_bufs[digests_offset].data_buf[off +  1];
+  w0[2] = esalt_bufs[digests_offset].data_buf[off +  2];
+  w0[3] = esalt_bufs[digests_offset].data_buf[off +  3];
+  w1[0] = esalt_bufs[digests_offset].data_buf[off +  4];
+  w1[1] = esalt_bufs[digests_offset].data_buf[off +  5];
+  w1[2] = esalt_bufs[digests_offset].data_buf[off +  6];
+  w1[3] = esalt_bufs[digests_offset].data_buf[off +  7];
+  w2[0] = esalt_bufs[digests_offset].data_buf[off +  8];
+  w2[1] = esalt_bufs[digests_offset].data_buf[off +  9];
+  w2[2] = esalt_bufs[digests_offset].data_buf[off + 10];
+  w2[3] = esalt_bufs[digests_offset].data_buf[off + 11];
+  w3[0] = esalt_bufs[digests_offset].data_buf[off + 12];
+  w3[1] = esalt_bufs[digests_offset].data_buf[off + 13];
   w3[2] = 0;
   w3[3] = (64 + size) * 8;
 
diff --git a/OpenCL/m08800.cl b/OpenCL/m08800.cl
index a8dc8dab5..ac3fb46ce 100644
--- a/OpenCL/m08800.cl
+++ b/OpenCL/m08800.cl
@@ -1843,10 +1843,10 @@ __kernel void m08800_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
     // 3. decrypt real data, xor essiv afterwards
 
-    data[0] = androidfde_bufs[salt_pos].data[0];
-    data[1] = androidfde_bufs[salt_pos].data[1];
-    data[2] = androidfde_bufs[salt_pos].data[2];
-    data[3] = androidfde_bufs[salt_pos].data[3];
+    data[0] = androidfde_bufs[digests_offset].data[0];
+    data[1] = androidfde_bufs[digests_offset].data[1];
+    data[2] = androidfde_bufs[digests_offset].data[2];
+    data[3] = androidfde_bufs[digests_offset].data[3];
 
     iv[0] = essiv[0];
     iv[1] = essiv[1];
@@ -1920,15 +1920,15 @@ __kernel void m08800_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
     for (u32 i = 4; i < 16; i += 4)
     {
-      data[0] = androidfde_bufs[salt_pos].data[256 + i + 0];
-      data[1] = androidfde_bufs[salt_pos].data[256 + i + 1];
-      data[2] = androidfde_bufs[salt_pos].data[256 + i + 2];
-      data[3] = androidfde_bufs[salt_pos].data[256 + i + 3];
+      data[0] = androidfde_bufs[digests_offset].data[256 + i + 0];
+      data[1] = androidfde_bufs[digests_offset].data[256 + i + 1];
+      data[2] = androidfde_bufs[digests_offset].data[256 + i + 2];
+      data[3] = androidfde_bufs[digests_offset].data[256 + i + 3];
 
-      iv[0] = androidfde_bufs[salt_pos].data[256 + i + 0 - 4];
-      iv[1] = androidfde_bufs[salt_pos].data[256 + i + 1 - 4];
-      iv[2] = androidfde_bufs[salt_pos].data[256 + i + 2 - 4];
-      iv[3] = androidfde_bufs[salt_pos].data[256 + i + 3 - 4];
+      iv[0] = androidfde_bufs[digests_offset].data[256 + i + 0 - 4];
+      iv[1] = androidfde_bufs[digests_offset].data[256 + i + 1 - 4];
+      iv[2] = androidfde_bufs[digests_offset].data[256 + i + 2 - 4];
+      iv[3] = androidfde_bufs[digests_offset].data[256 + i + 3 - 4];
 
       AES128_decrypt (data, out, rdk, s_td0, s_td1, s_td2, s_td3, s_td4);
 
diff --git a/OpenCL/m09400.cl b/OpenCL/m09400.cl
index 6a779a08e..53fb84227 100644
--- a/OpenCL/m09400.cl
+++ b/OpenCL/m09400.cl
@@ -1630,10 +1630,10 @@ __kernel void m09400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 verifier[4];
 
-  verifier[0] = office2007_bufs[salt_pos].encryptedVerifier[0];
-  verifier[1] = office2007_bufs[salt_pos].encryptedVerifier[1];
-  verifier[2] = office2007_bufs[salt_pos].encryptedVerifier[2];
-  verifier[3] = office2007_bufs[salt_pos].encryptedVerifier[3];
+  verifier[0] = office2007_bufs[digests_offset].encryptedVerifier[0];
+  verifier[1] = office2007_bufs[digests_offset].encryptedVerifier[1];
+  verifier[2] = office2007_bufs[digests_offset].encryptedVerifier[2];
+  verifier[3] = office2007_bufs[digests_offset].encryptedVerifier[3];
 
   u32 data[8];
 
diff --git a/OpenCL/m09500.cl b/OpenCL/m09500.cl
index 1b6fc1e0c..be96093bd 100644
--- a/OpenCL/m09500.cl
+++ b/OpenCL/m09500.cl
@@ -1328,10 +1328,10 @@ __kernel void m09500_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 data[4];
 
-  data[0] = office2010_bufs[salt_pos].encryptedVerifier[0];
-  data[1] = office2010_bufs[salt_pos].encryptedVerifier[1];
-  data[2] = office2010_bufs[salt_pos].encryptedVerifier[2];
-  data[3] = office2010_bufs[salt_pos].encryptedVerifier[3];
+  data[0] = office2010_bufs[digests_offset].encryptedVerifier[0];
+  data[1] = office2010_bufs[digests_offset].encryptedVerifier[1];
+  data[2] = office2010_bufs[digests_offset].encryptedVerifier[2];
+  data[3] = office2010_bufs[digests_offset].encryptedVerifier[3];
 
   u32 ukeyx[4];
 
diff --git a/OpenCL/m09600.cl b/OpenCL/m09600.cl
index f8505073c..c7707631d 100644
--- a/OpenCL/m09600.cl
+++ b/OpenCL/m09600.cl
@@ -1390,10 +1390,10 @@ __kernel void m09600_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 data[4];
 
-  data[0] = office2013_bufs[salt_pos].encryptedVerifier[0];
-  data[1] = office2013_bufs[salt_pos].encryptedVerifier[1];
-  data[2] = office2013_bufs[salt_pos].encryptedVerifier[2];
-  data[3] = office2013_bufs[salt_pos].encryptedVerifier[3];
+  data[0] = office2013_bufs[digests_offset].encryptedVerifier[0];
+  data[1] = office2013_bufs[digests_offset].encryptedVerifier[1];
+  data[2] = office2013_bufs[digests_offset].encryptedVerifier[2];
+  data[3] = office2013_bufs[digests_offset].encryptedVerifier[3];
 
   u32 ukeyx[8];
 
diff --git a/OpenCL/m09700_a0.cl b/OpenCL/m09700_a0.cl
index 0829a297e..a61842f8e 100644
--- a/OpenCL/m09700_a0.cl
+++ b/OpenCL/m09700_a0.cl
@@ -633,14 +633,14 @@ __kernel void m09700_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -822,14 +822,14 @@ __kernel void m09700_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09700_a1.cl b/OpenCL/m09700_a1.cl
index bdbc7ff71..ef2836b47 100644
--- a/OpenCL/m09700_a1.cl
+++ b/OpenCL/m09700_a1.cl
@@ -631,14 +631,14 @@ __kernel void m09700_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -878,14 +878,14 @@ __kernel void m09700_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09700_a3.cl b/OpenCL/m09700_a3.cl
index 0febfdc62..fcc82fb8d 100644
--- a/OpenCL/m09700_a3.cl
+++ b/OpenCL/m09700_a3.cl
@@ -287,14 +287,14 @@ void m09700m (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -697,14 +697,14 @@ void m09700s (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09710_a0.cl b/OpenCL/m09710_a0.cl
index 721414f22..7321c02df 100644
--- a/OpenCL/m09710_a0.cl
+++ b/OpenCL/m09710_a0.cl
@@ -278,14 +278,14 @@ __kernel void m09710_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -418,14 +418,14 @@ __kernel void m09710_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09710_a1.cl b/OpenCL/m09710_a1.cl
index b3012ab88..fb2f0203c 100644
--- a/OpenCL/m09710_a1.cl
+++ b/OpenCL/m09710_a1.cl
@@ -276,14 +276,14 @@ __kernel void m09710_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -462,14 +462,14 @@ __kernel void m09710_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09710_a3.cl b/OpenCL/m09710_a3.cl
index b49870be6..2dedbc42d 100644
--- a/OpenCL/m09710_a3.cl
+++ b/OpenCL/m09710_a3.cl
@@ -253,14 +253,14 @@ void m09710m (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -364,14 +364,14 @@ void m09710s (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
    * esalt
    */
 
-  const u32 version = oldoffice01_bufs[salt_pos].version;
+  const u32 version = oldoffice01_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice01_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice01_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice01_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice01_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice01_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice01_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice01_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice01_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09800_a0.cl b/OpenCL/m09800_a0.cl
index 218516ce8..4042c5b5b 100644
--- a/OpenCL/m09800_a0.cl
+++ b/OpenCL/m09800_a0.cl
@@ -319,14 +319,14 @@ __kernel void m09800_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -519,14 +519,14 @@ __kernel void m09800_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09800_a1.cl b/OpenCL/m09800_a1.cl
index f3eb4cb2c..932536fff 100644
--- a/OpenCL/m09800_a1.cl
+++ b/OpenCL/m09800_a1.cl
@@ -317,14 +317,14 @@ __kernel void m09800_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -567,14 +567,14 @@ __kernel void m09800_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09800_a3.cl b/OpenCL/m09800_a3.cl
index 2a723b910..b4b0adcdb 100644
--- a/OpenCL/m09800_a3.cl
+++ b/OpenCL/m09800_a3.cl
@@ -291,14 +291,14 @@ void m09800m (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -459,14 +459,14 @@ void m09800s (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09810_a0.cl b/OpenCL/m09810_a0.cl
index 8df7b1b36..5b7841ab4 100644
--- a/OpenCL/m09810_a0.cl
+++ b/OpenCL/m09810_a0.cl
@@ -308,14 +308,14 @@ __kernel void m09810_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -435,14 +435,14 @@ __kernel void m09810_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09810_a1.cl b/OpenCL/m09810_a1.cl
index 748933db9..80737c2b1 100644
--- a/OpenCL/m09810_a1.cl
+++ b/OpenCL/m09810_a1.cl
@@ -306,14 +306,14 @@ __kernel void m09810_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -479,14 +479,14 @@ __kernel void m09810_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m09810_a3.cl b/OpenCL/m09810_a3.cl
index 822c08cc1..84c235496 100644
--- a/OpenCL/m09810_a3.cl
+++ b/OpenCL/m09810_a3.cl
@@ -283,14 +283,14 @@ void m09810m (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * loop
@@ -379,14 +379,14 @@ void m09810s (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
    * esalt
    */
 
-  const u32 version = oldoffice34_bufs[salt_pos].version;
+  const u32 version = oldoffice34_bufs[digests_offset].version;
 
   u32 encryptedVerifier[4];
 
-  encryptedVerifier[0] = oldoffice34_bufs[salt_pos].encryptedVerifier[0];
-  encryptedVerifier[1] = oldoffice34_bufs[salt_pos].encryptedVerifier[1];
-  encryptedVerifier[2] = oldoffice34_bufs[salt_pos].encryptedVerifier[2];
-  encryptedVerifier[3] = oldoffice34_bufs[salt_pos].encryptedVerifier[3];
+  encryptedVerifier[0] = oldoffice34_bufs[digests_offset].encryptedVerifier[0];
+  encryptedVerifier[1] = oldoffice34_bufs[digests_offset].encryptedVerifier[1];
+  encryptedVerifier[2] = oldoffice34_bufs[digests_offset].encryptedVerifier[2];
+  encryptedVerifier[3] = oldoffice34_bufs[digests_offset].encryptedVerifier[3];
 
   /**
    * digest
diff --git a/OpenCL/m10400_a0.cl b/OpenCL/m10400_a0.cl
index af8f047ed..20527608f 100644
--- a/OpenCL/m10400_a0.cl
+++ b/OpenCL/m10400_a0.cl
@@ -277,23 +277,23 @@ __kernel void m10400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * loop
@@ -453,23 +453,23 @@ __kernel void m10400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * digest
diff --git a/OpenCL/m10400_a1.cl b/OpenCL/m10400_a1.cl
index e9e77f258..4698213cd 100644
--- a/OpenCL/m10400_a1.cl
+++ b/OpenCL/m10400_a1.cl
@@ -275,23 +275,23 @@ __kernel void m10400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * loop
@@ -511,23 +511,23 @@ __kernel void m10400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * digest
diff --git a/OpenCL/m10400_a3.cl b/OpenCL/m10400_a3.cl
index 246750ba4..8006311f6 100644
--- a/OpenCL/m10400_a3.cl
+++ b/OpenCL/m10400_a3.cl
@@ -252,23 +252,23 @@ void m10400m (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   u32 p0[4];
   u32 p1[4];
@@ -418,23 +418,23 @@ void m10400s (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   u32 p0[4];
   u32 p1[4];
diff --git a/OpenCL/m10410_a1.cl b/OpenCL/m10410_a1.cl
index bed95cacf..3515bdf8d 100644
--- a/OpenCL/m10410_a1.cl
+++ b/OpenCL/m10410_a1.cl
@@ -177,23 +177,23 @@ __kernel void m10410_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * loop
@@ -319,23 +319,23 @@ __kernel void m10410_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * digest
diff --git a/OpenCL/m10420_a0.cl b/OpenCL/m10420_a0.cl
index 1dabd9b8c..7597f67a3 100644
--- a/OpenCL/m10420_a0.cl
+++ b/OpenCL/m10420_a0.cl
@@ -160,23 +160,23 @@ __kernel void m10420_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * loop
@@ -321,23 +321,23 @@ __kernel void m10420_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * digest
diff --git a/OpenCL/m10420_a1.cl b/OpenCL/m10420_a1.cl
index 6e87c00db..23bf2ee19 100644
--- a/OpenCL/m10420_a1.cl
+++ b/OpenCL/m10420_a1.cl
@@ -158,23 +158,23 @@ __kernel void m10420_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * loop
@@ -379,23 +379,23 @@ __kernel void m10420_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   /**
    * digest
diff --git a/OpenCL/m10420_a3.cl b/OpenCL/m10420_a3.cl
index 934133991..3e6412822 100644
--- a/OpenCL/m10420_a3.cl
+++ b/OpenCL/m10420_a3.cl
@@ -137,23 +137,23 @@ void m10420m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   u32 p0[4];
   u32 p1[4];
@@ -290,23 +290,23 @@ void m10420s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[4];
 
-  id_buf[0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[3] = pdf_bufs[digests_offset].id_buf[3];
 
   u32 p0[4];
   u32 p1[4];
diff --git a/OpenCL/m10500.cl b/OpenCL/m10500.cl
index f1c58a540..72d2221ac 100644
--- a/OpenCL/m10500.cl
+++ b/OpenCL/m10500.cl
@@ -295,48 +295,48 @@ __kernel void m10500_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 o_buf[8];
 
-  o_buf[0] = pdf_bufs[salt_pos].o_buf[0];
-  o_buf[1] = pdf_bufs[salt_pos].o_buf[1];
-  o_buf[2] = pdf_bufs[salt_pos].o_buf[2];
-  o_buf[3] = pdf_bufs[salt_pos].o_buf[3];
-  o_buf[4] = pdf_bufs[salt_pos].o_buf[4];
-  o_buf[5] = pdf_bufs[salt_pos].o_buf[5];
-  o_buf[6] = pdf_bufs[salt_pos].o_buf[6];
-  o_buf[7] = pdf_bufs[salt_pos].o_buf[7];
+  o_buf[0] = pdf_bufs[digests_offset].o_buf[0];
+  o_buf[1] = pdf_bufs[digests_offset].o_buf[1];
+  o_buf[2] = pdf_bufs[digests_offset].o_buf[2];
+  o_buf[3] = pdf_bufs[digests_offset].o_buf[3];
+  o_buf[4] = pdf_bufs[digests_offset].o_buf[4];
+  o_buf[5] = pdf_bufs[digests_offset].o_buf[5];
+  o_buf[6] = pdf_bufs[digests_offset].o_buf[6];
+  o_buf[7] = pdf_bufs[digests_offset].o_buf[7];
 
-  u32 P = pdf_bufs[salt_pos].P;
+  u32 P = pdf_bufs[digests_offset].P;
 
   u32 id_buf[12];
 
-  id_buf[ 0] = pdf_bufs[salt_pos].id_buf[0];
-  id_buf[ 1] = pdf_bufs[salt_pos].id_buf[1];
-  id_buf[ 2] = pdf_bufs[salt_pos].id_buf[2];
-  id_buf[ 3] = pdf_bufs[salt_pos].id_buf[3];
+  id_buf[ 0] = pdf_bufs[digests_offset].id_buf[0];
+  id_buf[ 1] = pdf_bufs[digests_offset].id_buf[1];
+  id_buf[ 2] = pdf_bufs[digests_offset].id_buf[2];
+  id_buf[ 3] = pdf_bufs[digests_offset].id_buf[3];
 
-  id_buf[ 4] = pdf_bufs[salt_pos].id_buf[4];
-  id_buf[ 5] = pdf_bufs[salt_pos].id_buf[5];
-  id_buf[ 6] = pdf_bufs[salt_pos].id_buf[6];
-  id_buf[ 7] = pdf_bufs[salt_pos].id_buf[7];
+  id_buf[ 4] = pdf_bufs[digests_offset].id_buf[4];
+  id_buf[ 5] = pdf_bufs[digests_offset].id_buf[5];
+  id_buf[ 6] = pdf_bufs[digests_offset].id_buf[6];
+  id_buf[ 7] = pdf_bufs[digests_offset].id_buf[7];
 
   id_buf[ 8] = 0;
   id_buf[ 9] = 0;
   id_buf[10] = 0;
   id_buf[11] = 0;
 
-  u32 id_len  = pdf_bufs[salt_pos].id_len;
+  u32 id_len  = pdf_bufs[digests_offset].id_len;
   u32 id_len4 = id_len / 4;
 
   u32 rc4data[2];
 
-  rc4data[0] = pdf_bufs[salt_pos].rc4data[0];
-  rc4data[1] = pdf_bufs[salt_pos].rc4data[1];
+  rc4data[0] = pdf_bufs[digests_offset].rc4data[0];
+  rc4data[1] = pdf_bufs[digests_offset].rc4data[1];
 
   u32 final_length = 68 + id_len;
 
   u32 w11 = 0x80;
   u32 w12 = 0;
 
-  if (pdf_bufs[salt_pos].enc_md != 1)
+  if (pdf_bufs[digests_offset].enc_md != 1)
   {
     w11 = 0xffffffff;
     w12 = 0x80;
diff --git a/OpenCL/m10900.cl b/OpenCL/m10900.cl
index ae69b5ee5..5ec73f69f 100644
--- a/OpenCL/m10900.cl
+++ b/OpenCL/m10900.cl
@@ -462,20 +462,20 @@ __kernel void m10900_init (__global pw_t *pws, __global const kernel_rule_t *rul
   u32 esalt_buf2[4];
   u32 esalt_buf3[4];
 
-  esalt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 0]);
-  esalt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 1]);
-  esalt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 2]);
-  esalt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 3]);
-  esalt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 4]);
-  esalt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 5]);
-  esalt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 6]);
-  esalt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 7]);
-  esalt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 8]);
-  esalt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 9]);
-  esalt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[10]);
-  esalt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[11]);
-  esalt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[12]);
-  esalt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[13]);
+  esalt_buf0[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 0]);
+  esalt_buf0[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 1]);
+  esalt_buf0[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 2]);
+  esalt_buf0[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 3]);
+  esalt_buf1[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 4]);
+  esalt_buf1[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 5]);
+  esalt_buf1[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 6]);
+  esalt_buf1[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 7]);
+  esalt_buf2[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 8]);
+  esalt_buf2[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 9]);
+  esalt_buf2[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[10]);
+  esalt_buf2[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[11]);
+  esalt_buf3[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[12]);
+  esalt_buf3[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[13]);
   esalt_buf3[2] = 0;
   esalt_buf3[3] = (64 + salt_len + 4) * 8;
 
diff --git a/OpenCL/m11300.cl b/OpenCL/m11300.cl
index ec116ae8d..dc07eace3 100644
--- a/OpenCL/m11300.cl
+++ b/OpenCL/m11300.cl
@@ -1312,14 +1312,14 @@ __kernel void m11300_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 out[4];
 
-  for (u32 i = 0; i < esalt_bufs[salt_pos].cry_master_len; i += 16)
+  for (u32 i = 0; i < esalt_bufs[digests_offset].cry_master_len; i += 16)
   {
     u32 data[4];
 
-    data[0] = swap32 (esalt_bufs[salt_pos].cry_master_buf[(i / 4) + 0]);
-    data[1] = swap32 (esalt_bufs[salt_pos].cry_master_buf[(i / 4) + 1]);
-    data[2] = swap32 (esalt_bufs[salt_pos].cry_master_buf[(i / 4) + 2]);
-    data[3] = swap32 (esalt_bufs[salt_pos].cry_master_buf[(i / 4) + 3]);
+    data[0] = swap32 (esalt_bufs[digests_offset].cry_master_buf[(i / 4) + 0]);
+    data[1] = swap32 (esalt_bufs[digests_offset].cry_master_buf[(i / 4) + 1]);
+    data[2] = swap32 (esalt_bufs[digests_offset].cry_master_buf[(i / 4) + 2]);
+    data[3] = swap32 (esalt_bufs[digests_offset].cry_master_buf[(i / 4) + 3]);
 
     AES256_decrypt (data, out, rk, s_td0, s_td1, s_td2, s_td3, s_td4);
 
diff --git a/OpenCL/m11400_a0.cl b/OpenCL/m11400_a0.cl
index eb7565eb4..588b443ac 100644
--- a/OpenCL/m11400_a0.cl
+++ b/OpenCL/m11400_a0.cl
@@ -799,41 +799,41 @@ __kernel void m11400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -841,50 +841,50 @@ __kernel void m11400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
   u32 esalt_buf2[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
-  esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
-  esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
-  esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
-  esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
-  esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
-  esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
+  esalt_buf2[ 0] = esalt_bufs[digests_offset].esalt_buf[32];
+  esalt_buf2[ 1] = esalt_bufs[digests_offset].esalt_buf[33];
+  esalt_buf2[ 2] = esalt_bufs[digests_offset].esalt_buf[34];
+  esalt_buf2[ 3] = esalt_bufs[digests_offset].esalt_buf[35];
+  esalt_buf2[ 4] = esalt_bufs[digests_offset].esalt_buf[36];
+  esalt_buf2[ 5] = esalt_bufs[digests_offset].esalt_buf[37];
   esalt_buf2[ 6] = 0;
   esalt_buf2[ 7] = 0;
   esalt_buf2[ 8] = 0;
@@ -1549,41 +1549,41 @@ __kernel void m11400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -1591,50 +1591,50 @@ __kernel void m11400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
   u32 esalt_buf2[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
-  esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
-  esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
-  esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
-  esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
-  esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
-  esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
+  esalt_buf2[ 0] = esalt_bufs[digests_offset].esalt_buf[32];
+  esalt_buf2[ 1] = esalt_bufs[digests_offset].esalt_buf[33];
+  esalt_buf2[ 2] = esalt_bufs[digests_offset].esalt_buf[34];
+  esalt_buf2[ 3] = esalt_bufs[digests_offset].esalt_buf[35];
+  esalt_buf2[ 4] = esalt_bufs[digests_offset].esalt_buf[36];
+  esalt_buf2[ 5] = esalt_bufs[digests_offset].esalt_buf[37];
   esalt_buf2[ 6] = 0;
   esalt_buf2[ 7] = 0;
   esalt_buf2[ 8] = 0;
diff --git a/OpenCL/m11400_a1.cl b/OpenCL/m11400_a1.cl
index 392787703..c498d5bd4 100644
--- a/OpenCL/m11400_a1.cl
+++ b/OpenCL/m11400_a1.cl
@@ -797,41 +797,41 @@ __kernel void m11400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -839,50 +839,50 @@ __kernel void m11400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
   u32 esalt_buf2[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
-  esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
-  esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
-  esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
-  esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
-  esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
-  esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
+  esalt_buf2[ 0] = esalt_bufs[digests_offset].esalt_buf[32];
+  esalt_buf2[ 1] = esalt_bufs[digests_offset].esalt_buf[33];
+  esalt_buf2[ 2] = esalt_bufs[digests_offset].esalt_buf[34];
+  esalt_buf2[ 3] = esalt_bufs[digests_offset].esalt_buf[35];
+  esalt_buf2[ 4] = esalt_bufs[digests_offset].esalt_buf[36];
+  esalt_buf2[ 5] = esalt_bufs[digests_offset].esalt_buf[37];
   esalt_buf2[ 6] = 0;
   esalt_buf2[ 7] = 0;
   esalt_buf2[ 8] = 0;
@@ -1605,41 +1605,41 @@ __kernel void m11400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -1647,50 +1647,50 @@ __kernel void m11400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
   u32 esalt_buf2[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
-  esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
-  esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
-  esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
-  esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
-  esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
-  esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
+  esalt_buf2[ 0] = esalt_bufs[digests_offset].esalt_buf[32];
+  esalt_buf2[ 1] = esalt_bufs[digests_offset].esalt_buf[33];
+  esalt_buf2[ 2] = esalt_bufs[digests_offset].esalt_buf[34];
+  esalt_buf2[ 3] = esalt_bufs[digests_offset].esalt_buf[35];
+  esalt_buf2[ 4] = esalt_bufs[digests_offset].esalt_buf[36];
+  esalt_buf2[ 5] = esalt_bufs[digests_offset].esalt_buf[37];
   esalt_buf2[ 6] = 0;
   esalt_buf2[ 7] = 0;
   esalt_buf2[ 8] = 0;
diff --git a/OpenCL/m11400_a3.cl b/OpenCL/m11400_a3.cl
index 5dc069faf..82a3ed2f2 100644
--- a/OpenCL/m11400_a3.cl
+++ b/OpenCL/m11400_a3.cl
@@ -759,43 +759,43 @@ void m11400m_0_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   const u32 pw_salt_len = salt_len + pw_len;
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -803,43 +803,43 @@ void m11400m_0_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
 
   const u32 digest_esalt_len = 32 + esalt_len;
 
@@ -1243,43 +1243,43 @@ void m11400m_0_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   const u32 pw_salt_len = salt_len + pw_len;
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -1287,50 +1287,50 @@ void m11400m_0_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
   u32 esalt_buf2[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
-  esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
-  esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
-  esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
-  esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
-  esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
-  esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
+  esalt_buf2[ 0] = esalt_bufs[digests_offset].esalt_buf[32];
+  esalt_buf2[ 1] = esalt_bufs[digests_offset].esalt_buf[33];
+  esalt_buf2[ 2] = esalt_bufs[digests_offset].esalt_buf[34];
+  esalt_buf2[ 3] = esalt_bufs[digests_offset].esalt_buf[35];
+  esalt_buf2[ 4] = esalt_bufs[digests_offset].esalt_buf[36];
+  esalt_buf2[ 5] = esalt_bufs[digests_offset].esalt_buf[37];
   esalt_buf2[ 6] = 0;
   esalt_buf2[ 7] = 0;
   esalt_buf2[ 8] = 0;
@@ -1841,43 +1841,43 @@ void m11400m_1_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   const u32 pw_salt_len = salt_len + pw_len;
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -1885,43 +1885,43 @@ void m11400m_1_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
 
   const u32 digest_esalt_len = 32 + esalt_len;
 
@@ -2420,43 +2420,43 @@ void m11400m_1_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   const u32 pw_salt_len = salt_len + pw_len;
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -2464,50 +2464,50 @@ void m11400m_1_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
   u32 esalt_buf2[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
-  esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
-  esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
-  esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
-  esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
-  esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
-  esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
+  esalt_buf2[ 0] = esalt_bufs[digests_offset].esalt_buf[32];
+  esalt_buf2[ 1] = esalt_bufs[digests_offset].esalt_buf[33];
+  esalt_buf2[ 2] = esalt_bufs[digests_offset].esalt_buf[34];
+  esalt_buf2[ 3] = esalt_bufs[digests_offset].esalt_buf[35];
+  esalt_buf2[ 4] = esalt_bufs[digests_offset].esalt_buf[36];
+  esalt_buf2[ 5] = esalt_bufs[digests_offset].esalt_buf[37];
   esalt_buf2[ 6] = 0;
   esalt_buf2[ 7] = 0;
   esalt_buf2[ 8] = 0;
@@ -3125,43 +3125,43 @@ void m11400s_0_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   const u32 pw_salt_len = salt_len + pw_len;
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -3169,43 +3169,43 @@ void m11400s_0_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
 
   const u32 digest_esalt_len = 32 + esalt_len;
 
@@ -3621,43 +3621,43 @@ void m11400s_0_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   const u32 pw_salt_len = salt_len + pw_len;
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -3665,50 +3665,50 @@ void m11400s_0_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
   u32 esalt_buf2[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
-  esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
-  esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
-  esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
-  esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
-  esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
-  esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
+  esalt_buf2[ 0] = esalt_bufs[digests_offset].esalt_buf[32];
+  esalt_buf2[ 1] = esalt_bufs[digests_offset].esalt_buf[33];
+  esalt_buf2[ 2] = esalt_bufs[digests_offset].esalt_buf[34];
+  esalt_buf2[ 3] = esalt_bufs[digests_offset].esalt_buf[35];
+  esalt_buf2[ 4] = esalt_bufs[digests_offset].esalt_buf[36];
+  esalt_buf2[ 5] = esalt_bufs[digests_offset].esalt_buf[37];
   esalt_buf2[ 6] = 0;
   esalt_buf2[ 7] = 0;
   esalt_buf2[ 8] = 0;
@@ -4231,43 +4231,43 @@ void m11400s_1_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   const u32 pw_salt_len = salt_len + pw_len;
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -4275,43 +4275,43 @@ void m11400s_1_0 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
 
   const u32 digest_esalt_len = 32 + esalt_len;
 
@@ -4822,43 +4822,43 @@ void m11400s_1_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len; // not a bug, we need to get it from the esalt
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len; // not a bug, we need to get it from the esalt
 
   const u32 pw_salt_len = salt_len + pw_len;
 
   u32 salt_buf0[16];
   u32 salt_buf1[16];
 
-  salt_buf0[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  salt_buf0[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  salt_buf0[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  salt_buf0[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  salt_buf0[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
-  salt_buf0[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
-  salt_buf0[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
-  salt_buf0[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
-  salt_buf0[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
-  salt_buf0[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
-  salt_buf0[10] = esalt_bufs[salt_pos].salt_buf[10];
-  salt_buf0[11] = esalt_bufs[salt_pos].salt_buf[11];
-  salt_buf0[12] = esalt_bufs[salt_pos].salt_buf[12];
-  salt_buf0[13] = esalt_bufs[salt_pos].salt_buf[13];
-  salt_buf0[14] = esalt_bufs[salt_pos].salt_buf[14];
-  salt_buf0[15] = esalt_bufs[salt_pos].salt_buf[15];
-  salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[16];
-  salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[17];
-  salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[18];
-  salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[19];
-  salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[20];
-  salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[21];
-  salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[22];
-  salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[23];
-  salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[24];
-  salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[25];
-  salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[26];
-  salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[27];
-  salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[28];
-  salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[29];
+  salt_buf0[ 0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  salt_buf0[ 1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  salt_buf0[ 2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  salt_buf0[ 3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  salt_buf0[ 4] = esalt_bufs[digests_offset].salt_buf[ 4];
+  salt_buf0[ 5] = esalt_bufs[digests_offset].salt_buf[ 5];
+  salt_buf0[ 6] = esalt_bufs[digests_offset].salt_buf[ 6];
+  salt_buf0[ 7] = esalt_bufs[digests_offset].salt_buf[ 7];
+  salt_buf0[ 8] = esalt_bufs[digests_offset].salt_buf[ 8];
+  salt_buf0[ 9] = esalt_bufs[digests_offset].salt_buf[ 9];
+  salt_buf0[10] = esalt_bufs[digests_offset].salt_buf[10];
+  salt_buf0[11] = esalt_bufs[digests_offset].salt_buf[11];
+  salt_buf0[12] = esalt_bufs[digests_offset].salt_buf[12];
+  salt_buf0[13] = esalt_bufs[digests_offset].salt_buf[13];
+  salt_buf0[14] = esalt_bufs[digests_offset].salt_buf[14];
+  salt_buf0[15] = esalt_bufs[digests_offset].salt_buf[15];
+  salt_buf1[ 0] = esalt_bufs[digests_offset].salt_buf[16];
+  salt_buf1[ 1] = esalt_bufs[digests_offset].salt_buf[17];
+  salt_buf1[ 2] = esalt_bufs[digests_offset].salt_buf[18];
+  salt_buf1[ 3] = esalt_bufs[digests_offset].salt_buf[19];
+  salt_buf1[ 4] = esalt_bufs[digests_offset].salt_buf[20];
+  salt_buf1[ 5] = esalt_bufs[digests_offset].salt_buf[21];
+  salt_buf1[ 6] = esalt_bufs[digests_offset].salt_buf[22];
+  salt_buf1[ 7] = esalt_bufs[digests_offset].salt_buf[23];
+  salt_buf1[ 8] = esalt_bufs[digests_offset].salt_buf[24];
+  salt_buf1[ 9] = esalt_bufs[digests_offset].salt_buf[25];
+  salt_buf1[10] = esalt_bufs[digests_offset].salt_buf[26];
+  salt_buf1[11] = esalt_bufs[digests_offset].salt_buf[27];
+  salt_buf1[12] = esalt_bufs[digests_offset].salt_buf[28];
+  salt_buf1[13] = esalt_bufs[digests_offset].salt_buf[29];
   salt_buf1[14] = 0;
   salt_buf1[15] = 0;
 
@@ -4866,50 +4866,50 @@ void m11400s_1_1 (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len,
    * esalt
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
 
   u32 esalt_buf0[16];
   u32 esalt_buf1[16];
   u32 esalt_buf2[16];
 
-  esalt_buf0[ 0] = esalt_bufs[salt_pos].esalt_buf[ 0];
-  esalt_buf0[ 1] = esalt_bufs[salt_pos].esalt_buf[ 1];
-  esalt_buf0[ 2] = esalt_bufs[salt_pos].esalt_buf[ 2];
-  esalt_buf0[ 3] = esalt_bufs[salt_pos].esalt_buf[ 3];
-  esalt_buf0[ 4] = esalt_bufs[salt_pos].esalt_buf[ 4];
-  esalt_buf0[ 5] = esalt_bufs[salt_pos].esalt_buf[ 5];
-  esalt_buf0[ 6] = esalt_bufs[salt_pos].esalt_buf[ 6];
-  esalt_buf0[ 7] = esalt_bufs[salt_pos].esalt_buf[ 7];
-  esalt_buf0[ 8] = esalt_bufs[salt_pos].esalt_buf[ 8];
-  esalt_buf0[ 9] = esalt_bufs[salt_pos].esalt_buf[ 9];
-  esalt_buf0[10] = esalt_bufs[salt_pos].esalt_buf[10];
-  esalt_buf0[11] = esalt_bufs[salt_pos].esalt_buf[11];
-  esalt_buf0[12] = esalt_bufs[salt_pos].esalt_buf[12];
-  esalt_buf0[13] = esalt_bufs[salt_pos].esalt_buf[13];
-  esalt_buf0[14] = esalt_bufs[salt_pos].esalt_buf[14];
-  esalt_buf0[15] = esalt_bufs[salt_pos].esalt_buf[15];
-  esalt_buf1[ 0] = esalt_bufs[salt_pos].esalt_buf[16];
-  esalt_buf1[ 1] = esalt_bufs[salt_pos].esalt_buf[17];
-  esalt_buf1[ 2] = esalt_bufs[salt_pos].esalt_buf[18];
-  esalt_buf1[ 3] = esalt_bufs[salt_pos].esalt_buf[19];
-  esalt_buf1[ 4] = esalt_bufs[salt_pos].esalt_buf[20];
-  esalt_buf1[ 5] = esalt_bufs[salt_pos].esalt_buf[21];
-  esalt_buf1[ 6] = esalt_bufs[salt_pos].esalt_buf[22];
-  esalt_buf1[ 7] = esalt_bufs[salt_pos].esalt_buf[23];
-  esalt_buf1[ 8] = esalt_bufs[salt_pos].esalt_buf[24];
-  esalt_buf1[ 9] = esalt_bufs[salt_pos].esalt_buf[25];
-  esalt_buf1[10] = esalt_bufs[salt_pos].esalt_buf[26];
-  esalt_buf1[11] = esalt_bufs[salt_pos].esalt_buf[27];
-  esalt_buf1[12] = esalt_bufs[salt_pos].esalt_buf[28];
-  esalt_buf1[13] = esalt_bufs[salt_pos].esalt_buf[29];
-  esalt_buf1[14] = esalt_bufs[salt_pos].esalt_buf[30];
-  esalt_buf1[15] = esalt_bufs[salt_pos].esalt_buf[31];
-  esalt_buf2[ 0] = esalt_bufs[salt_pos].esalt_buf[32];
-  esalt_buf2[ 1] = esalt_bufs[salt_pos].esalt_buf[33];
-  esalt_buf2[ 2] = esalt_bufs[salt_pos].esalt_buf[34];
-  esalt_buf2[ 3] = esalt_bufs[salt_pos].esalt_buf[35];
-  esalt_buf2[ 4] = esalt_bufs[salt_pos].esalt_buf[36];
-  esalt_buf2[ 5] = esalt_bufs[salt_pos].esalt_buf[37];
+  esalt_buf0[ 0] = esalt_bufs[digests_offset].esalt_buf[ 0];
+  esalt_buf0[ 1] = esalt_bufs[digests_offset].esalt_buf[ 1];
+  esalt_buf0[ 2] = esalt_bufs[digests_offset].esalt_buf[ 2];
+  esalt_buf0[ 3] = esalt_bufs[digests_offset].esalt_buf[ 3];
+  esalt_buf0[ 4] = esalt_bufs[digests_offset].esalt_buf[ 4];
+  esalt_buf0[ 5] = esalt_bufs[digests_offset].esalt_buf[ 5];
+  esalt_buf0[ 6] = esalt_bufs[digests_offset].esalt_buf[ 6];
+  esalt_buf0[ 7] = esalt_bufs[digests_offset].esalt_buf[ 7];
+  esalt_buf0[ 8] = esalt_bufs[digests_offset].esalt_buf[ 8];
+  esalt_buf0[ 9] = esalt_bufs[digests_offset].esalt_buf[ 9];
+  esalt_buf0[10] = esalt_bufs[digests_offset].esalt_buf[10];
+  esalt_buf0[11] = esalt_bufs[digests_offset].esalt_buf[11];
+  esalt_buf0[12] = esalt_bufs[digests_offset].esalt_buf[12];
+  esalt_buf0[13] = esalt_bufs[digests_offset].esalt_buf[13];
+  esalt_buf0[14] = esalt_bufs[digests_offset].esalt_buf[14];
+  esalt_buf0[15] = esalt_bufs[digests_offset].esalt_buf[15];
+  esalt_buf1[ 0] = esalt_bufs[digests_offset].esalt_buf[16];
+  esalt_buf1[ 1] = esalt_bufs[digests_offset].esalt_buf[17];
+  esalt_buf1[ 2] = esalt_bufs[digests_offset].esalt_buf[18];
+  esalt_buf1[ 3] = esalt_bufs[digests_offset].esalt_buf[19];
+  esalt_buf1[ 4] = esalt_bufs[digests_offset].esalt_buf[20];
+  esalt_buf1[ 5] = esalt_bufs[digests_offset].esalt_buf[21];
+  esalt_buf1[ 6] = esalt_bufs[digests_offset].esalt_buf[22];
+  esalt_buf1[ 7] = esalt_bufs[digests_offset].esalt_buf[23];
+  esalt_buf1[ 8] = esalt_bufs[digests_offset].esalt_buf[24];
+  esalt_buf1[ 9] = esalt_bufs[digests_offset].esalt_buf[25];
+  esalt_buf1[10] = esalt_bufs[digests_offset].esalt_buf[26];
+  esalt_buf1[11] = esalt_bufs[digests_offset].esalt_buf[27];
+  esalt_buf1[12] = esalt_bufs[digests_offset].esalt_buf[28];
+  esalt_buf1[13] = esalt_bufs[digests_offset].esalt_buf[29];
+  esalt_buf1[14] = esalt_bufs[digests_offset].esalt_buf[30];
+  esalt_buf1[15] = esalt_bufs[digests_offset].esalt_buf[31];
+  esalt_buf2[ 0] = esalt_bufs[digests_offset].esalt_buf[32];
+  esalt_buf2[ 1] = esalt_bufs[digests_offset].esalt_buf[33];
+  esalt_buf2[ 2] = esalt_bufs[digests_offset].esalt_buf[34];
+  esalt_buf2[ 3] = esalt_bufs[digests_offset].esalt_buf[35];
+  esalt_buf2[ 4] = esalt_bufs[digests_offset].esalt_buf[36];
+  esalt_buf2[ 5] = esalt_bufs[digests_offset].esalt_buf[37];
   esalt_buf2[ 6] = 0;
   esalt_buf2[ 7] = 0;
   esalt_buf2[ 8] = 0;
@@ -5569,8 +5569,8 @@ __kernel void m11400_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * main
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
-  const u32 salt_len  = esalt_bufs[salt_pos].salt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
+  const u32 salt_len  = esalt_bufs[digests_offset].salt_len;
 
   const u32 sw_1 = ((32 + esalt_len + 1) > 119);
   const u32 sw_2 = ((pw_len + salt_len)  >  55) << 1;
@@ -5659,8 +5659,8 @@ __kernel void m11400_m08 (__global pw_t *pws, __global const kernel_rule_t *rule
    * main
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
-  const u32 salt_len  = esalt_bufs[salt_pos].salt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
+  const u32 salt_len  = esalt_bufs[digests_offset].salt_len;
 
   const u32 sw_1 = ((32 + esalt_len + 1) > 119);
   const u32 sw_2 = ((pw_len + salt_len)  >  55) << 1;
@@ -5749,8 +5749,8 @@ __kernel void m11400_m16 (__global pw_t *pws, __global const kernel_rule_t *rule
    * main
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
-  const u32 salt_len  = esalt_bufs[salt_pos].salt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
+  const u32 salt_len  = esalt_bufs[digests_offset].salt_len;
 
   const u32 sw_1 = ((32 + esalt_len + 1) > 119);
   const u32 sw_2 = ((pw_len + salt_len)  >  55) << 1;
@@ -5839,8 +5839,8 @@ __kernel void m11400_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * main
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
-  const u32 salt_len  = esalt_bufs[salt_pos].salt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
+  const u32 salt_len  = esalt_bufs[digests_offset].salt_len;
 
   const u32 sw_1 = ((32 + esalt_len + 1) > 119);
   const u32 sw_2 = ((pw_len + salt_len)  >  55) << 1;
@@ -5929,8 +5929,8 @@ __kernel void m11400_s08 (__global pw_t *pws, __global const kernel_rule_t *rule
    * main
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
-  const u32 salt_len  = esalt_bufs[salt_pos].salt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
+  const u32 salt_len  = esalt_bufs[digests_offset].salt_len;
 
   const u32 sw_1 = ((32 + esalt_len + 1) > 119);
   const u32 sw_2 = ((pw_len + salt_len)  >  55) << 1;
@@ -6019,8 +6019,8 @@ __kernel void m11400_s16 (__global pw_t *pws, __global const kernel_rule_t *rule
    * main
    */
 
-  const u32 esalt_len = esalt_bufs[salt_pos].esalt_len;
-  const u32 salt_len  = esalt_bufs[salt_pos].salt_len;
+  const u32 esalt_len = esalt_bufs[digests_offset].esalt_len;
+  const u32 salt_len  = esalt_bufs[digests_offset].salt_len;
 
   const u32 sw_1 = ((32 + esalt_len + 1) > 119);
   const u32 sw_2 = ((pw_len + salt_len)  >  55) << 1;
diff --git a/OpenCL/m11900.cl b/OpenCL/m11900.cl
index 8c62d4b01..95b81a8e5 100644
--- a/OpenCL/m11900.cl
+++ b/OpenCL/m11900.cl
@@ -430,20 +430,20 @@ __kernel void m11900_init (__global pw_t *pws, __global const kernel_rule_t *rul
   u32 esalt_buf2[4];
   u32 esalt_buf3[4];
 
-  esalt_buf0[0] = esalt_bufs[salt_pos].salt_buf[ 0];
-  esalt_buf0[1] = esalt_bufs[salt_pos].salt_buf[ 1];
-  esalt_buf0[2] = esalt_bufs[salt_pos].salt_buf[ 2];
-  esalt_buf0[3] = esalt_bufs[salt_pos].salt_buf[ 3];
-  esalt_buf1[0] = esalt_bufs[salt_pos].salt_buf[ 4];
-  esalt_buf1[1] = esalt_bufs[salt_pos].salt_buf[ 5];
-  esalt_buf1[2] = esalt_bufs[salt_pos].salt_buf[ 6];
-  esalt_buf1[3] = esalt_bufs[salt_pos].salt_buf[ 7];
-  esalt_buf2[0] = esalt_bufs[salt_pos].salt_buf[ 8];
-  esalt_buf2[1] = esalt_bufs[salt_pos].salt_buf[ 9];
-  esalt_buf2[2] = esalt_bufs[salt_pos].salt_buf[10];
-  esalt_buf2[3] = esalt_bufs[salt_pos].salt_buf[11];
-  esalt_buf3[0] = esalt_bufs[salt_pos].salt_buf[12];
-  esalt_buf3[1] = esalt_bufs[salt_pos].salt_buf[13];
+  esalt_buf0[0] = esalt_bufs[digests_offset].salt_buf[ 0];
+  esalt_buf0[1] = esalt_bufs[digests_offset].salt_buf[ 1];
+  esalt_buf0[2] = esalt_bufs[digests_offset].salt_buf[ 2];
+  esalt_buf0[3] = esalt_bufs[digests_offset].salt_buf[ 3];
+  esalt_buf1[0] = esalt_bufs[digests_offset].salt_buf[ 4];
+  esalt_buf1[1] = esalt_bufs[digests_offset].salt_buf[ 5];
+  esalt_buf1[2] = esalt_bufs[digests_offset].salt_buf[ 6];
+  esalt_buf1[3] = esalt_bufs[digests_offset].salt_buf[ 7];
+  esalt_buf2[0] = esalt_bufs[digests_offset].salt_buf[ 8];
+  esalt_buf2[1] = esalt_bufs[digests_offset].salt_buf[ 9];
+  esalt_buf2[2] = esalt_bufs[digests_offset].salt_buf[10];
+  esalt_buf2[3] = esalt_bufs[digests_offset].salt_buf[11];
+  esalt_buf3[0] = esalt_bufs[digests_offset].salt_buf[12];
+  esalt_buf3[1] = esalt_bufs[digests_offset].salt_buf[13];
   esalt_buf3[2] = (64 + salt_len + 4) * 8;
   esalt_buf3[3] = 0;
 
diff --git a/OpenCL/m12000.cl b/OpenCL/m12000.cl
index ed59a765d..51df505af 100644
--- a/OpenCL/m12000.cl
+++ b/OpenCL/m12000.cl
@@ -498,20 +498,20 @@ __kernel void m12000_init (__global pw_t *pws, __global const kernel_rule_t *rul
   u32 esalt_buf2[4];
   u32 esalt_buf3[4];
 
-  esalt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 0]);
-  esalt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 1]);
-  esalt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 2]);
-  esalt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 3]);
-  esalt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 4]);
-  esalt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 5]);
-  esalt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 6]);
-  esalt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 7]);
-  esalt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 8]);
-  esalt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[ 9]);
-  esalt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[10]);
-  esalt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[11]);
-  esalt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[12]);
-  esalt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[13]);
+  esalt_buf0[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 0]);
+  esalt_buf0[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 1]);
+  esalt_buf0[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 2]);
+  esalt_buf0[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 3]);
+  esalt_buf1[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 4]);
+  esalt_buf1[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 5]);
+  esalt_buf1[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 6]);
+  esalt_buf1[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 7]);
+  esalt_buf2[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 8]);
+  esalt_buf2[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[ 9]);
+  esalt_buf2[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[10]);
+  esalt_buf2[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[11]);
+  esalt_buf3[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[12]);
+  esalt_buf3[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[13]);
   esalt_buf3[2] = 0;
   esalt_buf3[3] = (64 + salt_len + 4) * 8;
 
diff --git a/OpenCL/m13100_a0.cl b/OpenCL/m13100_a0.cl
index 02dad0c6d..8f573dccc 100644
--- a/OpenCL/m13100_a0.cl
+++ b/OpenCL/m13100_a0.cl
@@ -736,10 +736,10 @@ void m13100 (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[
 
   u32 checksum[4];
 
-  checksum[0] = krb5tgs_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5tgs_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5tgs_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5tgs_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5tgs_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5tgs_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5tgs_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5tgs_bufs[digests_offset].checksum[3];
 
   /**
    * loop
@@ -766,7 +766,7 @@ void m13100 (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[
     tmp[2] = digest[2];
     tmp[3] = digest[3];
 
-    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[salt_pos].edata2, krb5tgs_bufs[salt_pos].edata2_len, K2, checksum) == 1)
+    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[digests_offset].edata2, krb5tgs_bufs[digests_offset].edata2_len, K2, checksum) == 1)
     {
       mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
     }
@@ -816,10 +816,10 @@ __kernel void m13100_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 checksum[4];
 
-  checksum[0] = krb5tgs_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5tgs_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5tgs_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5tgs_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5tgs_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5tgs_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5tgs_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5tgs_bufs[digests_offset].checksum[3];
 
   /**
    * loop
@@ -851,7 +851,7 @@ __kernel void m13100_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
     tmp[2] = digest[2];
     tmp[3] = digest[3];
 
-    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[salt_pos].edata2, krb5tgs_bufs[salt_pos].edata2_len, K2, checksum) == 1)
+    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[digests_offset].edata2, krb5tgs_bufs[digests_offset].edata2_len, K2, checksum) == 1)
     {
       mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
     }
@@ -909,10 +909,10 @@ __kernel void m13100_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 checksum[4];
 
-  checksum[0] = krb5tgs_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5tgs_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5tgs_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5tgs_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5tgs_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5tgs_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5tgs_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5tgs_bufs[digests_offset].checksum[3];
 
   /**
    * loop
@@ -944,7 +944,7 @@ __kernel void m13100_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
     tmp[2] = digest[2];
     tmp[3] = digest[3];
 
-    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[salt_pos].edata2, krb5tgs_bufs[salt_pos].edata2_len, K2, checksum) == 1)
+    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[digests_offset].edata2, krb5tgs_bufs[digests_offset].edata2_len, K2, checksum) == 1)
     {
       mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
     }
diff --git a/OpenCL/m13100_a1.cl b/OpenCL/m13100_a1.cl
index 5cdd32c44..c6078047c 100644
--- a/OpenCL/m13100_a1.cl
+++ b/OpenCL/m13100_a1.cl
@@ -761,10 +761,10 @@ __kernel void m13100_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 checksum[4];
 
-  checksum[0] = krb5tgs_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5tgs_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5tgs_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5tgs_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5tgs_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5tgs_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5tgs_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5tgs_bufs[digests_offset].checksum[3];
 
   /**
    * loop
@@ -846,7 +846,7 @@ __kernel void m13100_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
     tmp[2] = digest[2];
     tmp[3] = digest[3];
 
-    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[salt_pos].edata2, krb5tgs_bufs[salt_pos].edata2_len, K2, checksum) == 1)
+    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[digests_offset].edata2, krb5tgs_bufs[digests_offset].edata2_len, K2, checksum) == 1)
     {
       mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
     }
@@ -903,10 +903,10 @@ __kernel void m13100_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   u32 checksum[4];
 
-  checksum[0] = krb5tgs_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5tgs_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5tgs_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5tgs_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5tgs_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5tgs_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5tgs_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5tgs_bufs[digests_offset].checksum[3];
 
   /**
    * loop
@@ -988,7 +988,7 @@ __kernel void m13100_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
     tmp[2] = digest[2];
     tmp[3] = digest[3];
 
-    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[salt_pos].edata2, krb5tgs_bufs[salt_pos].edata2_len, K2, checksum) == 1)
+    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[digests_offset].edata2, krb5tgs_bufs[digests_offset].edata2_len, K2, checksum) == 1)
     {
       mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
     }
diff --git a/OpenCL/m13100_a3.cl b/OpenCL/m13100_a3.cl
index 17a416434..9bc067e74 100644
--- a/OpenCL/m13100_a3.cl
+++ b/OpenCL/m13100_a3.cl
@@ -734,10 +734,10 @@ void m13100 (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[
 
   u32 checksum[4];
 
-  checksum[0] = krb5tgs_bufs[salt_pos].checksum[0];
-  checksum[1] = krb5tgs_bufs[salt_pos].checksum[1];
-  checksum[2] = krb5tgs_bufs[salt_pos].checksum[2];
-  checksum[3] = krb5tgs_bufs[salt_pos].checksum[3];
+  checksum[0] = krb5tgs_bufs[digests_offset].checksum[0];
+  checksum[1] = krb5tgs_bufs[digests_offset].checksum[1];
+  checksum[2] = krb5tgs_bufs[digests_offset].checksum[2];
+  checksum[3] = krb5tgs_bufs[digests_offset].checksum[3];
 
   /**
    * loop
@@ -768,7 +768,7 @@ void m13100 (__local RC4_KEY *rc4_keys, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[
     tmp[2] = digest[2];
     tmp[3] = digest[3];
 
-    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[salt_pos].edata2, krb5tgs_bufs[salt_pos].edata2_len, K2, checksum) == 1)
+    if (decrypt_and_check (&rc4_keys[lid], tmp, krb5tgs_bufs[digests_offset].edata2, krb5tgs_bufs[digests_offset].edata2_len, K2, checksum) == 1)
     {
       mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
     }
diff --git a/OpenCL/m13400.cl b/OpenCL/m13400.cl
index 077a9bd9a..78bb3dc09 100644
--- a/OpenCL/m13400.cl
+++ b/OpenCL/m13400.cl
@@ -383,7 +383,7 @@ __kernel void m13400_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
   sha256_transform (w0, w1, w2, w3, digest);
 
-  if (esalt_bufs[salt_pos].version == 2 && esalt_bufs[salt_pos].keyfile_len == 0)
+  if (esalt_bufs[digests_offset].version == 2 && esalt_bufs[digests_offset].keyfile_len == 0)
   {
     w0[0] = digest[0];
     w0[1] = digest[1];
@@ -417,7 +417,7 @@ __kernel void m13400_init (__global pw_t *pws, __global const kernel_rule_t *rul
     sha256_transform (w0, w1, w2, w3, digest);
   }
 
-  if (esalt_bufs[salt_pos].keyfile_len != 0)
+  if (esalt_bufs[digests_offset].keyfile_len != 0)
   {
     w0[0] = digest[0];
     w0[1] = digest[1];
@@ -429,15 +429,15 @@ __kernel void m13400_init (__global pw_t *pws, __global const kernel_rule_t *rul
     w1[2] = digest[6];
     w1[3] = digest[7];
 
-    w2[0] = esalt_bufs[salt_pos].keyfile[0];
-    w2[1] = esalt_bufs[salt_pos].keyfile[1];
-    w2[2] = esalt_bufs[salt_pos].keyfile[2];
-    w2[3] = esalt_bufs[salt_pos].keyfile[3];
+    w2[0] = esalt_bufs[digests_offset].keyfile[0];
+    w2[1] = esalt_bufs[digests_offset].keyfile[1];
+    w2[2] = esalt_bufs[digests_offset].keyfile[2];
+    w2[3] = esalt_bufs[digests_offset].keyfile[3];
 
-    w3[0] = esalt_bufs[salt_pos].keyfile[4];
-    w3[1] = esalt_bufs[salt_pos].keyfile[5];
-    w3[3] = esalt_bufs[salt_pos].keyfile[7];
-    w3[2] = esalt_bufs[salt_pos].keyfile[6];
+    w3[0] = esalt_bufs[digests_offset].keyfile[4];
+    w3[1] = esalt_bufs[digests_offset].keyfile[5];
+    w3[3] = esalt_bufs[digests_offset].keyfile[7];
+    w3[2] = esalt_bufs[digests_offset].keyfile[6];
 
     digest[0] = SHA256M_A;
     digest[1] = SHA256M_B;
@@ -528,14 +528,14 @@ __kernel void m13400_loop (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 key[8];
 
-  key[0] = esalt_bufs[salt_pos].transf_random_seed[0];
-  key[1] = esalt_bufs[salt_pos].transf_random_seed[1];
-  key[2] = esalt_bufs[salt_pos].transf_random_seed[2];
-  key[3] = esalt_bufs[salt_pos].transf_random_seed[3];
-  key[4] = esalt_bufs[salt_pos].transf_random_seed[4];
-  key[5] = esalt_bufs[salt_pos].transf_random_seed[5];
-  key[6] = esalt_bufs[salt_pos].transf_random_seed[6];
-  key[7] = esalt_bufs[salt_pos].transf_random_seed[7];
+  key[0] = esalt_bufs[digests_offset].transf_random_seed[0];
+  key[1] = esalt_bufs[digests_offset].transf_random_seed[1];
+  key[2] = esalt_bufs[digests_offset].transf_random_seed[2];
+  key[3] = esalt_bufs[digests_offset].transf_random_seed[3];
+  key[4] = esalt_bufs[digests_offset].transf_random_seed[4];
+  key[5] = esalt_bufs[digests_offset].transf_random_seed[5];
+  key[6] = esalt_bufs[digests_offset].transf_random_seed[6];
+  key[7] = esalt_bufs[digests_offset].transf_random_seed[7];
 
   #define KEYLEN 60
 
@@ -673,14 +673,14 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
   sha256_transform (w0, w1, w2, w3, digest);
 
   /* ...then hash final_random_seed | output */
-  if (esalt_bufs[salt_pos].version == 1)
+  if (esalt_bufs[digests_offset].version == 1)
   {
     u32 final_random_seed[4];
 
-    final_random_seed[0] = esalt_bufs[salt_pos].final_random_seed[0];
-    final_random_seed[1] = esalt_bufs[salt_pos].final_random_seed[1];
-    final_random_seed[2] = esalt_bufs[salt_pos].final_random_seed[2];
-    final_random_seed[3] = esalt_bufs[salt_pos].final_random_seed[3];
+    final_random_seed[0] = esalt_bufs[digests_offset].final_random_seed[0];
+    final_random_seed[1] = esalt_bufs[digests_offset].final_random_seed[1];
+    final_random_seed[2] = esalt_bufs[digests_offset].final_random_seed[2];
+    final_random_seed[3] = esalt_bufs[digests_offset].final_random_seed[3];
 
     w0[0] = final_random_seed[0];
     w0[1] = final_random_seed[1];
@@ -715,14 +715,14 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
     /* merkle-damgard implementation */
     u32 final_random_seed[8];
 
-    final_random_seed[0] = esalt_bufs[salt_pos].final_random_seed[0];
-    final_random_seed[1] = esalt_bufs[salt_pos].final_random_seed[1];
-    final_random_seed[2] = esalt_bufs[salt_pos].final_random_seed[2];
-    final_random_seed[3] = esalt_bufs[salt_pos].final_random_seed[3];
-    final_random_seed[4] = esalt_bufs[salt_pos].final_random_seed[4];
-    final_random_seed[5] = esalt_bufs[salt_pos].final_random_seed[5];
-    final_random_seed[6] = esalt_bufs[salt_pos].final_random_seed[6];
-    final_random_seed[7] = esalt_bufs[salt_pos].final_random_seed[7];
+    final_random_seed[0] = esalt_bufs[digests_offset].final_random_seed[0];
+    final_random_seed[1] = esalt_bufs[digests_offset].final_random_seed[1];
+    final_random_seed[2] = esalt_bufs[digests_offset].final_random_seed[2];
+    final_random_seed[3] = esalt_bufs[digests_offset].final_random_seed[3];
+    final_random_seed[4] = esalt_bufs[digests_offset].final_random_seed[4];
+    final_random_seed[5] = esalt_bufs[digests_offset].final_random_seed[5];
+    final_random_seed[6] = esalt_bufs[digests_offset].final_random_seed[6];
+    final_random_seed[7] = esalt_bufs[digests_offset].final_random_seed[7];
 
     w0[0] = final_random_seed[0];
     w0[1] = final_random_seed[1];
@@ -776,16 +776,16 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 iv[4];
 
-  iv[0] = esalt_bufs[salt_pos].enc_iv[0];
-  iv[1] = esalt_bufs[salt_pos].enc_iv[1];
-  iv[2] = esalt_bufs[salt_pos].enc_iv[2];
-  iv[3] = esalt_bufs[salt_pos].enc_iv[3];
+  iv[0] = esalt_bufs[digests_offset].enc_iv[0];
+  iv[1] = esalt_bufs[digests_offset].enc_iv[1];
+  iv[2] = esalt_bufs[digests_offset].enc_iv[2];
+  iv[3] = esalt_bufs[digests_offset].enc_iv[3];
 
   u32 out[8];
 
-  if (esalt_bufs[salt_pos].version == 1)
+  if (esalt_bufs[digests_offset].version == 1)
   {
-    if (esalt_bufs[salt_pos].algorithm == 1)
+    if (esalt_bufs[digests_offset].algorithm == 1)
     {
       /* Construct final Twofish key */
       u32 sk[4];
@@ -820,7 +820,7 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
       final_digest[6] = SHA256M_G;
       final_digest[7] = SHA256M_H;
 
-      u32 contents_len = esalt_bufs[salt_pos].contents_len;
+      u32 contents_len = esalt_bufs[digests_offset].contents_len;
 
       u32 contents_pos;
       u32 contents_off;
@@ -833,10 +833,10 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
         {
           u32 data[4];
 
-          data[0] = swap32 (esalt_bufs[salt_pos].contents[contents_off + se + 0]);
-          data[1] = swap32 (esalt_bufs[salt_pos].contents[contents_off + se + 1]);
-          data[2] = swap32 (esalt_bufs[salt_pos].contents[contents_off + se + 2]);
-          data[3] = swap32 (esalt_bufs[salt_pos].contents[contents_off + se + 3]);
+          data[0] = swap32 (esalt_bufs[digests_offset].contents[contents_off + se + 0]);
+          data[1] = swap32 (esalt_bufs[digests_offset].contents[contents_off + se + 1]);
+          data[2] = swap32 (esalt_bufs[digests_offset].contents[contents_off + se + 2]);
+          data[3] = swap32 (esalt_bufs[digests_offset].contents[contents_off + se + 3]);
 
           u32 out[4];
 
@@ -888,10 +888,10 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
       {
         u32 data[4];
 
-        data[0] = swap32 (esalt_bufs[salt_pos].contents[contents_off + 0]);
-        data[1] = swap32 (esalt_bufs[salt_pos].contents[contents_off + 1]);
-        data[2] = swap32 (esalt_bufs[salt_pos].contents[contents_off + 2]);
-        data[3] = swap32 (esalt_bufs[salt_pos].contents[contents_off + 3]);
+        data[0] = swap32 (esalt_bufs[digests_offset].contents[contents_off + 0]);
+        data[1] = swap32 (esalt_bufs[digests_offset].contents[contents_off + 1]);
+        data[2] = swap32 (esalt_bufs[digests_offset].contents[contents_off + 2]);
+        data[3] = swap32 (esalt_bufs[digests_offset].contents[contents_off + 3]);
 
         u32 out[4];
 
@@ -917,10 +917,10 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
       u32 data[4];
 
-      data[0] = swap32 (esalt_bufs[salt_pos].contents[contents_off + 0]);
-      data[1] = swap32 (esalt_bufs[salt_pos].contents[contents_off + 1]);
-      data[2] = swap32 (esalt_bufs[salt_pos].contents[contents_off + 2]);
-      data[3] = swap32 (esalt_bufs[salt_pos].contents[contents_off + 3]);
+      data[0] = swap32 (esalt_bufs[digests_offset].contents[contents_off + 0]);
+      data[1] = swap32 (esalt_bufs[digests_offset].contents[contents_off + 1]);
+      data[2] = swap32 (esalt_bufs[digests_offset].contents[contents_off + 2]);
+      data[3] = swap32 (esalt_bufs[digests_offset].contents[contents_off + 3]);
 
       u32 out[4];
 
@@ -935,7 +935,7 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
       const u32 pad_byte = out[3] >> 24;
 
-      const u32 real_len = esalt_bufs[salt_pos].contents_len - pad_byte;
+      const u32 real_len = esalt_bufs[digests_offset].contents_len - pad_byte;
 
       // we need to clear the buffer of the padding data
 
@@ -983,14 +983,14 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
       #define il_pos 0
 
-      if ( esalt_bufs[salt_pos].contents_hash[0] == final_digest[0]
-        && esalt_bufs[salt_pos].contents_hash[1] == final_digest[1]
-        && esalt_bufs[salt_pos].contents_hash[2] == final_digest[2]
-        && esalt_bufs[salt_pos].contents_hash[3] == final_digest[3]
-        && esalt_bufs[salt_pos].contents_hash[4] == final_digest[4]
-        && esalt_bufs[salt_pos].contents_hash[5] == final_digest[5]
-        && esalt_bufs[salt_pos].contents_hash[6] == final_digest[6]
-        && esalt_bufs[salt_pos].contents_hash[7] == final_digest[7])
+      if ( esalt_bufs[digests_offset].contents_hash[0] == final_digest[0]
+        && esalt_bufs[digests_offset].contents_hash[1] == final_digest[1]
+        && esalt_bufs[digests_offset].contents_hash[2] == final_digest[2]
+        && esalt_bufs[digests_offset].contents_hash[3] == final_digest[3]
+        && esalt_bufs[digests_offset].contents_hash[4] == final_digest[4]
+        && esalt_bufs[digests_offset].contents_hash[5] == final_digest[5]
+        && esalt_bufs[digests_offset].contents_hash[6] == final_digest[6]
+        && esalt_bufs[digests_offset].contents_hash[7] == final_digest[7])
         {
           mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
         }
@@ -1019,7 +1019,7 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
       final_digest[6] = SHA256M_G;
       final_digest[7] = SHA256M_H;
 
-      u32 contents_len = esalt_bufs[salt_pos].contents_len;
+      u32 contents_len = esalt_bufs[digests_offset].contents_len;
 
       u32 contents_pos;
       u32 contents_off;
@@ -1032,10 +1032,10 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
         {
           u32 data[4];
 
-          data[0] = esalt_bufs[salt_pos].contents[contents_off + se + 0];
-          data[1] = esalt_bufs[salt_pos].contents[contents_off + se + 1];
-          data[2] = esalt_bufs[salt_pos].contents[contents_off + se + 2];
-          data[3] = esalt_bufs[salt_pos].contents[contents_off + se + 3];
+          data[0] = esalt_bufs[digests_offset].contents[contents_off + se + 0];
+          data[1] = esalt_bufs[digests_offset].contents[contents_off + se + 1];
+          data[2] = esalt_bufs[digests_offset].contents[contents_off + se + 2];
+          data[3] = esalt_bufs[digests_offset].contents[contents_off + se + 3];
 
           u32 out[4];
 
@@ -1087,10 +1087,10 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
       {
         u32 data[4];
 
-        data[0] = esalt_bufs[salt_pos].contents[contents_off + 0];
-        data[1] = esalt_bufs[salt_pos].contents[contents_off + 1];
-        data[2] = esalt_bufs[salt_pos].contents[contents_off + 2];
-        data[3] = esalt_bufs[salt_pos].contents[contents_off + 3];
+        data[0] = esalt_bufs[digests_offset].contents[contents_off + 0];
+        data[1] = esalt_bufs[digests_offset].contents[contents_off + 1];
+        data[2] = esalt_bufs[digests_offset].contents[contents_off + 2];
+        data[3] = esalt_bufs[digests_offset].contents[contents_off + 3];
 
         u32 out[4];
 
@@ -1116,10 +1116,10 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
       u32 data[4];
 
-      data[0] = esalt_bufs[salt_pos].contents[contents_off + 0];
-      data[1] = esalt_bufs[salt_pos].contents[contents_off + 1];
-      data[2] = esalt_bufs[salt_pos].contents[contents_off + 2];
-      data[3] = esalt_bufs[salt_pos].contents[contents_off + 3];
+      data[0] = esalt_bufs[digests_offset].contents[contents_off + 0];
+      data[1] = esalt_bufs[digests_offset].contents[contents_off + 1];
+      data[2] = esalt_bufs[digests_offset].contents[contents_off + 2];
+      data[3] = esalt_bufs[digests_offset].contents[contents_off + 3];
 
       u32 out[4];
 
@@ -1139,7 +1139,7 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
       const u32 pad_byte = out[3] >> 24;
 
-      const u32 real_len = esalt_bufs[salt_pos].contents_len - pad_byte;
+      const u32 real_len = esalt_bufs[digests_offset].contents_len - pad_byte;
 
       // we need to clear the buffer of the padding data
 
@@ -1187,14 +1187,14 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
       #define il_pos 0
 
-      if ( esalt_bufs[salt_pos].contents_hash[0] == final_digest[0]
-        && esalt_bufs[salt_pos].contents_hash[1] == final_digest[1]
-        && esalt_bufs[salt_pos].contents_hash[2] == final_digest[2]
-        && esalt_bufs[salt_pos].contents_hash[3] == final_digest[3]
-        && esalt_bufs[salt_pos].contents_hash[4] == final_digest[4]
-        && esalt_bufs[salt_pos].contents_hash[5] == final_digest[5]
-        && esalt_bufs[salt_pos].contents_hash[6] == final_digest[6]
-        && esalt_bufs[salt_pos].contents_hash[7] == final_digest[7])
+      if ( esalt_bufs[digests_offset].contents_hash[0] == final_digest[0]
+        && esalt_bufs[digests_offset].contents_hash[1] == final_digest[1]
+        && esalt_bufs[digests_offset].contents_hash[2] == final_digest[2]
+        && esalt_bufs[digests_offset].contents_hash[3] == final_digest[3]
+        && esalt_bufs[digests_offset].contents_hash[4] == final_digest[4]
+        && esalt_bufs[digests_offset].contents_hash[5] == final_digest[5]
+        && esalt_bufs[digests_offset].contents_hash[6] == final_digest[6]
+        && esalt_bufs[digests_offset].contents_hash[7] == final_digest[7])
         {
           mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
         }
@@ -1213,10 +1213,10 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
     u32 contents_hash[4];
 
-    contents_hash[0] = esalt_bufs[salt_pos].contents_hash[0];
-    contents_hash[1] = esalt_bufs[salt_pos].contents_hash[1];
-    contents_hash[2] = esalt_bufs[salt_pos].contents_hash[2];
-    contents_hash[3] = esalt_bufs[salt_pos].contents_hash[3];
+    contents_hash[0] = esalt_bufs[digests_offset].contents_hash[0];
+    contents_hash[1] = esalt_bufs[digests_offset].contents_hash[1];
+    contents_hash[2] = esalt_bufs[digests_offset].contents_hash[2];
+    contents_hash[3] = esalt_bufs[digests_offset].contents_hash[3];
 
     AES256_decrypt (contents_hash, out, final_rk, s_td0, s_td1, s_td2, s_td3, s_td4);
 
@@ -1229,10 +1229,10 @@ __kernel void m13400_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
     #define il_pos 0
 
-    if ( esalt_bufs[salt_pos].expected_bytes[0] == out[0]
-      && esalt_bufs[salt_pos].expected_bytes[1] == out[1]
-      && esalt_bufs[salt_pos].expected_bytes[2] == out[2]
-      && esalt_bufs[salt_pos].expected_bytes[3] == out[3])
+    if ( esalt_bufs[digests_offset].expected_bytes[0] == out[0]
+      && esalt_bufs[digests_offset].expected_bytes[1] == out[1]
+      && esalt_bufs[digests_offset].expected_bytes[2] == out[2]
+      && esalt_bufs[digests_offset].expected_bytes[3] == out[3])
       {
         mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos);
       }
diff --git a/OpenCL/m13500_a0.cl b/OpenCL/m13500_a0.cl
index 60a307db1..ef4fa084c 100644
--- a/OpenCL/m13500_a0.cl
+++ b/OpenCL/m13500_a0.cl
@@ -49,41 +49,41 @@ __kernel void m13500_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
+  const u32 pc_offset = esalt_bufs[digests_offset].pc_offset;
 
   const u32 pc_offset4 = pc_offset * 4;
 
   u32 pc_digest[5];
 
-  pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
-  pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
-  pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
-  pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
-  pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
+  pc_digest[0] = esalt_bufs[digests_offset].pc_digest[0];
+  pc_digest[1] = esalt_bufs[digests_offset].pc_digest[1];
+  pc_digest[2] = esalt_bufs[digests_offset].pc_digest[2];
+  pc_digest[3] = esalt_bufs[digests_offset].pc_digest[3];
+  pc_digest[4] = esalt_bufs[digests_offset].pc_digest[4];
 
   u32 salt_buf0[4];
   u32 salt_buf1[4];
   u32 salt_buf2[4];
   u32 salt_buf3[4];
 
-  salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
-  salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
-  salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
-  salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
-  salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
-  salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
-  salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
-  salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
-  salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
-  salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
-  salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
-  salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
-  salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
-  salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
-  salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
-  salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
+  salt_buf0[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  0]);
+  salt_buf0[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  1]);
+  salt_buf0[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  2]);
+  salt_buf0[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  3]);
+  salt_buf1[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  4]);
+  salt_buf1[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  5]);
+  salt_buf1[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  6]);
+  salt_buf1[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  7]);
+  salt_buf2[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  8]);
+  salt_buf2[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  9]);
+  salt_buf2[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 10]);
+  salt_buf2[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 11]);
+  salt_buf3[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 12]);
+  salt_buf3[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 13]);
+  salt_buf3[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 14]);
+  salt_buf3[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 15]);
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len;
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len;
 
   /**
    * loop
@@ -474,41 +474,41 @@ __kernel void m13500_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
+  const u32 pc_offset = esalt_bufs[digests_offset].pc_offset;
 
   const u32 pc_offset4 = pc_offset * 4;
 
   u32 pc_digest[5];
 
-  pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
-  pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
-  pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
-  pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
-  pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
+  pc_digest[0] = esalt_bufs[digests_offset].pc_digest[0];
+  pc_digest[1] = esalt_bufs[digests_offset].pc_digest[1];
+  pc_digest[2] = esalt_bufs[digests_offset].pc_digest[2];
+  pc_digest[3] = esalt_bufs[digests_offset].pc_digest[3];
+  pc_digest[4] = esalt_bufs[digests_offset].pc_digest[4];
 
   u32 salt_buf0[4];
   u32 salt_buf1[4];
   u32 salt_buf2[4];
   u32 salt_buf3[4];
 
-  salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
-  salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
-  salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
-  salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
-  salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
-  salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
-  salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
-  salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
-  salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
-  salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
-  salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
-  salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
-  salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
-  salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
-  salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
-  salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
+  salt_buf0[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  0]);
+  salt_buf0[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  1]);
+  salt_buf0[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  2]);
+  salt_buf0[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  3]);
+  salt_buf1[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  4]);
+  salt_buf1[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  5]);
+  salt_buf1[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  6]);
+  salt_buf1[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  7]);
+  salt_buf2[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  8]);
+  salt_buf2[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  9]);
+  salt_buf2[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 10]);
+  salt_buf2[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 11]);
+  salt_buf3[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 12]);
+  salt_buf3[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 13]);
+  salt_buf3[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 14]);
+  salt_buf3[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 15]);
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len;
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len;
 
   /**
    * digest
diff --git a/OpenCL/m13500_a1.cl b/OpenCL/m13500_a1.cl
index b08309b32..e3a728142 100644
--- a/OpenCL/m13500_a1.cl
+++ b/OpenCL/m13500_a1.cl
@@ -47,41 +47,41 @@ __kernel void m13500_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
+  const u32 pc_offset = esalt_bufs[digests_offset].pc_offset;
 
   const u32 pc_offset4 = pc_offset * 4;
 
   u32 pc_digest[5];
 
-  pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
-  pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
-  pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
-  pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
-  pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
+  pc_digest[0] = esalt_bufs[digests_offset].pc_digest[0];
+  pc_digest[1] = esalt_bufs[digests_offset].pc_digest[1];
+  pc_digest[2] = esalt_bufs[digests_offset].pc_digest[2];
+  pc_digest[3] = esalt_bufs[digests_offset].pc_digest[3];
+  pc_digest[4] = esalt_bufs[digests_offset].pc_digest[4];
 
   u32 salt_buf0[4];
   u32 salt_buf1[4];
   u32 salt_buf2[4];
   u32 salt_buf3[4];
 
-  salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
-  salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
-  salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
-  salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
-  salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
-  salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
-  salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
-  salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
-  salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
-  salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
-  salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
-  salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
-  salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
-  salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
-  salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
-  salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
+  salt_buf0[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  0]);
+  salt_buf0[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  1]);
+  salt_buf0[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  2]);
+  salt_buf0[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  3]);
+  salt_buf1[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  4]);
+  salt_buf1[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  5]);
+  salt_buf1[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  6]);
+  salt_buf1[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  7]);
+  salt_buf2[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  8]);
+  salt_buf2[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  9]);
+  salt_buf2[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 10]);
+  salt_buf2[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 11]);
+  salt_buf3[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 12]);
+  salt_buf3[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 13]);
+  salt_buf3[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 14]);
+  salt_buf3[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 15]);
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len;
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len;
 
   /**
    * loop
@@ -524,41 +524,41 @@ __kernel void m13500_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
    * salt
    */
 
-  const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
+  const u32 pc_offset = esalt_bufs[digests_offset].pc_offset;
 
   const u32 pc_offset4 = pc_offset * 4;
 
   u32 pc_digest[5];
 
-  pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
-  pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
-  pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
-  pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
-  pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
+  pc_digest[0] = esalt_bufs[digests_offset].pc_digest[0];
+  pc_digest[1] = esalt_bufs[digests_offset].pc_digest[1];
+  pc_digest[2] = esalt_bufs[digests_offset].pc_digest[2];
+  pc_digest[3] = esalt_bufs[digests_offset].pc_digest[3];
+  pc_digest[4] = esalt_bufs[digests_offset].pc_digest[4];
 
   u32 salt_buf0[4];
   u32 salt_buf1[4];
   u32 salt_buf2[4];
   u32 salt_buf3[4];
 
-  salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
-  salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
-  salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
-  salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
-  salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
-  salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
-  salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
-  salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
-  salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
-  salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
-  salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
-  salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
-  salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
-  salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
-  salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
-  salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
+  salt_buf0[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  0]);
+  salt_buf0[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  1]);
+  salt_buf0[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  2]);
+  salt_buf0[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  3]);
+  salt_buf1[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  4]);
+  salt_buf1[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  5]);
+  salt_buf1[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  6]);
+  salt_buf1[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  7]);
+  salt_buf2[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  8]);
+  salt_buf2[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  9]);
+  salt_buf2[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 10]);
+  salt_buf2[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 11]);
+  salt_buf3[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 12]);
+  salt_buf3[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 13]);
+  salt_buf3[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 14]);
+  salt_buf3[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 15]);
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len;
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len;
 
   /**
    * digest
diff --git a/OpenCL/m13500_a3.cl b/OpenCL/m13500_a3.cl
index 533cf4cc3..ce683ae86 100644
--- a/OpenCL/m13500_a3.cl
+++ b/OpenCL/m13500_a3.cl
@@ -26,41 +26,41 @@ void m13500m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
    * salt
    */
 
-  const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
+  const u32 pc_offset = esalt_bufs[digests_offset].pc_offset;
 
   const u32 pc_offset4 = pc_offset * 4;
 
   u32 pc_digest[5];
 
-  pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
-  pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
-  pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
-  pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
-  pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
+  pc_digest[0] = esalt_bufs[digests_offset].pc_digest[0];
+  pc_digest[1] = esalt_bufs[digests_offset].pc_digest[1];
+  pc_digest[2] = esalt_bufs[digests_offset].pc_digest[2];
+  pc_digest[3] = esalt_bufs[digests_offset].pc_digest[3];
+  pc_digest[4] = esalt_bufs[digests_offset].pc_digest[4];
 
   u32 salt_buf0[4];
   u32 salt_buf1[4];
   u32 salt_buf2[4];
   u32 salt_buf3[4];
 
-  salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
-  salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
-  salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
-  salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
-  salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
-  salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
-  salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
-  salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
-  salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
-  salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
-  salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
-  salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
-  salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
-  salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
-  salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
-  salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
+  salt_buf0[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  0]);
+  salt_buf0[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  1]);
+  salt_buf0[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  2]);
+  salt_buf0[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  3]);
+  salt_buf1[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  4]);
+  salt_buf1[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  5]);
+  salt_buf1[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  6]);
+  salt_buf1[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  7]);
+  salt_buf2[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  8]);
+  salt_buf2[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  9]);
+  salt_buf2[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 10]);
+  salt_buf2[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 11]);
+  salt_buf3[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 12]);
+  salt_buf3[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 13]);
+  salt_buf3[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 14]);
+  salt_buf3[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 15]);
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len;
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len;
 
   const u32 pw_salt_len = pw_len + salt_len;
 
@@ -419,41 +419,41 @@ void m13500s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __gl
    * salt
    */
 
-  const u32 pc_offset = esalt_bufs[salt_pos].pc_offset;
+  const u32 pc_offset = esalt_bufs[digests_offset].pc_offset;
 
   const u32 pc_offset4 = pc_offset * 4;
 
   u32 pc_digest[5];
 
-  pc_digest[0] = esalt_bufs[salt_pos].pc_digest[0];
-  pc_digest[1] = esalt_bufs[salt_pos].pc_digest[1];
-  pc_digest[2] = esalt_bufs[salt_pos].pc_digest[2];
-  pc_digest[3] = esalt_bufs[salt_pos].pc_digest[3];
-  pc_digest[4] = esalt_bufs[salt_pos].pc_digest[4];
+  pc_digest[0] = esalt_bufs[digests_offset].pc_digest[0];
+  pc_digest[1] = esalt_bufs[digests_offset].pc_digest[1];
+  pc_digest[2] = esalt_bufs[digests_offset].pc_digest[2];
+  pc_digest[3] = esalt_bufs[digests_offset].pc_digest[3];
+  pc_digest[4] = esalt_bufs[digests_offset].pc_digest[4];
 
   u32 salt_buf0[4];
   u32 salt_buf1[4];
   u32 salt_buf2[4];
   u32 salt_buf3[4];
 
-  salt_buf0[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  0]);
-  salt_buf0[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  1]);
-  salt_buf0[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  2]);
-  salt_buf0[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  3]);
-  salt_buf1[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  4]);
-  salt_buf1[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  5]);
-  salt_buf1[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  6]);
-  salt_buf1[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  7]);
-  salt_buf2[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  8]);
-  salt_buf2[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset +  9]);
-  salt_buf2[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 10]);
-  salt_buf2[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 11]);
-  salt_buf3[0] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 12]);
-  salt_buf3[1] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 13]);
-  salt_buf3[2] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 14]);
-  salt_buf3[3] = swap32_S (esalt_bufs[salt_pos].salt_buf[pc_offset + 15]);
+  salt_buf0[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  0]);
+  salt_buf0[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  1]);
+  salt_buf0[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  2]);
+  salt_buf0[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  3]);
+  salt_buf1[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  4]);
+  salt_buf1[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  5]);
+  salt_buf1[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  6]);
+  salt_buf1[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  7]);
+  salt_buf2[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  8]);
+  salt_buf2[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset +  9]);
+  salt_buf2[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 10]);
+  salt_buf2[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 11]);
+  salt_buf3[0] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 12]);
+  salt_buf3[1] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 13]);
+  salt_buf3[2] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 14]);
+  salt_buf3[3] = swap32_S (esalt_bufs[digests_offset].salt_buf[pc_offset + 15]);
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len;
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len;
 
   const u32 pw_salt_len = pw_len + salt_len;
 
diff --git a/OpenCL/m13600.cl b/OpenCL/m13600.cl
index ea8772779..52c416713 100644
--- a/OpenCL/m13600.cl
+++ b/OpenCL/m13600.cl
@@ -272,7 +272,7 @@ __kernel void m13600_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * salt
    */
 
-  const u32 salt_len = esalt_bufs[salt_pos].salt_len;
+  const u32 salt_len = esalt_bufs[digests_offset].salt_len;
 
   u32 ipad[5];
   u32 opad[5];
@@ -291,7 +291,7 @@ __kernel void m13600_init (__global pw_t *pws, __global const kernel_rule_t *rul
   tmps[gid].opad[3] = opad[3];
   tmps[gid].opad[4] = opad[4];
 
-  const u32 mode = esalt_bufs[salt_pos].mode;
+  const u32 mode = esalt_bufs[digests_offset].mode;
 
   u32 iter_start;
   u32 iter_stop;
@@ -319,10 +319,10 @@ __kernel void m13600_init (__global pw_t *pws, __global const kernel_rule_t *rul
 
     u32 esalt_buf[16];
 
-    esalt_buf[ 0] = swap32 (esalt_bufs[salt_pos].salt_buf[0]);
-    esalt_buf[ 1] = swap32 (esalt_bufs[salt_pos].salt_buf[1]);
-    esalt_buf[ 2] = swap32 (esalt_bufs[salt_pos].salt_buf[2]);
-    esalt_buf[ 3] = swap32 (esalt_bufs[salt_pos].salt_buf[3]);
+    esalt_buf[ 0] = swap32 (esalt_bufs[digests_offset].salt_buf[0]);
+    esalt_buf[ 1] = swap32 (esalt_bufs[digests_offset].salt_buf[1]);
+    esalt_buf[ 2] = swap32 (esalt_bufs[digests_offset].salt_buf[2]);
+    esalt_buf[ 3] = swap32 (esalt_bufs[digests_offset].salt_buf[3]);
     esalt_buf[ 4] = 0;
     esalt_buf[ 5] = 0;
     esalt_buf[ 6] = 0;
@@ -389,7 +389,7 @@ __kernel void m13600_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[3] = tmps[gid].opad[3];
   opad[4] = tmps[gid].opad[4];
 
-  const u32 mode = esalt_bufs[salt_pos].mode;
+  const u32 mode = esalt_bufs[digests_offset].mode;
 
   u32 iter_start;
   u32 iter_stop;
@@ -492,7 +492,7 @@ __kernel void m13600_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 key[8] = { 0 };
 
-  const u32 mode = esalt_bufs[salt_pos].mode;
+  const u32 mode = esalt_bufs[digests_offset].mode;
 
   u32 iter_start;
   u32 iter_stop;
@@ -543,47 +543,47 @@ __kernel void m13600_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   hmac_sha1_pad (w0, w1, w2, w3, ipad, opad);
 
-  int data_len = esalt_bufs[salt_pos].data_len;
+  int data_len = esalt_bufs[digests_offset].data_len;
 
   int data_left;
   int data_off;
 
   for (data_left = data_len, data_off = 0; data_left >= 56; data_left -= 64, data_off += 16)
   {
-    w0[0] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  0]);
-    w0[1] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  1]);
-    w0[2] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  2]);
-    w0[3] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  3]);
-    w1[0] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  4]);
-    w1[1] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  5]);
-    w1[2] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  6]);
-    w1[3] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  7]);
-    w2[0] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  8]);
-    w2[1] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  9]);
-    w2[2] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 10]);
-    w2[3] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 11]);
-    w3[0] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 12]);
-    w3[1] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 13]);
-    w3[2] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 14]);
-    w3[3] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 15]);
+    w0[0] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  0]);
+    w0[1] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  1]);
+    w0[2] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  2]);
+    w0[3] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  3]);
+    w1[0] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  4]);
+    w1[1] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  5]);
+    w1[2] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  6]);
+    w1[3] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  7]);
+    w2[0] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  8]);
+    w2[1] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  9]);
+    w2[2] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 10]);
+    w2[3] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 11]);
+    w3[0] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 12]);
+    w3[1] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 13]);
+    w3[2] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 14]);
+    w3[3] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 15]);
 
     sha1_transform (w0, w1, w2, w3, ipad);
   }
 
-  w0[0] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  0]);
-  w0[1] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  1]);
-  w0[2] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  2]);
-  w0[3] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  3]);
-  w1[0] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  4]);
-  w1[1] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  5]);
-  w1[2] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  6]);
-  w1[3] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  7]);
-  w2[0] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  8]);
-  w2[1] = swap32 (esalt_bufs[salt_pos].data_buf[data_off +  9]);
-  w2[2] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 10]);
-  w2[3] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 11]);
-  w3[0] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 12]);
-  w3[1] = swap32 (esalt_bufs[salt_pos].data_buf[data_off + 13]);
+  w0[0] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  0]);
+  w0[1] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  1]);
+  w0[2] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  2]);
+  w0[3] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  3]);
+  w1[0] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  4]);
+  w1[1] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  5]);
+  w1[2] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  6]);
+  w1[3] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  7]);
+  w2[0] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  8]);
+  w2[1] = swap32 (esalt_bufs[digests_offset].data_buf[data_off +  9]);
+  w2[2] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 10]);
+  w2[3] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 11]);
+  w3[0] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 12]);
+  w3[1] = swap32 (esalt_bufs[digests_offset].data_buf[data_off + 13]);
   w3[2] = 0;
   w3[3] = (64 + data_len) * 8;
 
diff --git a/OpenCL/m13751.cl b/OpenCL/m13751.cl
index c1f95ac6f..3430253ff 100644
--- a/OpenCL/m13751.cl
+++ b/OpenCL/m13751.cl
@@ -339,22 +339,22 @@ __kernel void m13751_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   w0[0] = swap32 (w0[0]);
   w0[1] = swap32 (w0[1]);
@@ -386,22 +386,22 @@ __kernel void m13751_init (__global pw_t *pws, __global const kernel_rule_t *rul
   u32 s6[4];
   u32 s7[4];
 
-  s0[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 0]);
-  s0[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  s0[2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 2]);
-  s0[3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  s1[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 4]);
-  s1[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  s1[2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 6]);
-  s1[3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  s2[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 8]);
-  s2[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  s2[2] = swap32 (esalt_bufs[salt_pos].salt_buf[10]);
-  s2[3] = swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  s3[0] = swap32 (esalt_bufs[salt_pos].salt_buf[12]);
-  s3[1] = swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  s3[2] = swap32 (esalt_bufs[salt_pos].salt_buf[14]);
-  s3[3] = swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  s0[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 0]);
+  s0[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  s0[2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 2]);
+  s0[3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  s1[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 4]);
+  s1[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  s1[2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 6]);
+  s1[3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  s2[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 8]);
+  s2[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  s2[2] = swap32 (esalt_bufs[digests_offset].salt_buf[10]);
+  s2[3] = swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  s3[0] = swap32 (esalt_bufs[digests_offset].salt_buf[12]);
+  s3[1] = swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  s3[2] = swap32 (esalt_bufs[digests_offset].salt_buf[14]);
+  s3[3] = swap32 (esalt_bufs[digests_offset].salt_buf[15]);
   s4[0] = 0;
   s4[1] = 0x80000000;
   s4[2] = 0;
diff --git a/OpenCL/m13752.cl b/OpenCL/m13752.cl
index e48b9b282..6c461f23b 100644
--- a/OpenCL/m13752.cl
+++ b/OpenCL/m13752.cl
@@ -339,22 +339,22 @@ __kernel void m13752_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   w0[0] = swap32 (w0[0]);
   w0[1] = swap32 (w0[1]);
@@ -386,22 +386,22 @@ __kernel void m13752_init (__global pw_t *pws, __global const kernel_rule_t *rul
   u32 s6[4];
   u32 s7[4];
 
-  s0[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 0]);
-  s0[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  s0[2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 2]);
-  s0[3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  s1[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 4]);
-  s1[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  s1[2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 6]);
-  s1[3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  s2[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 8]);
-  s2[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  s2[2] = swap32 (esalt_bufs[salt_pos].salt_buf[10]);
-  s2[3] = swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  s3[0] = swap32 (esalt_bufs[salt_pos].salt_buf[12]);
-  s3[1] = swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  s3[2] = swap32 (esalt_bufs[salt_pos].salt_buf[14]);
-  s3[3] = swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  s0[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 0]);
+  s0[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  s0[2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 2]);
+  s0[3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  s1[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 4]);
+  s1[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  s1[2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 6]);
+  s1[3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  s2[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 8]);
+  s2[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  s2[2] = swap32 (esalt_bufs[digests_offset].salt_buf[10]);
+  s2[3] = swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  s3[0] = swap32 (esalt_bufs[digests_offset].salt_buf[12]);
+  s3[1] = swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  s3[2] = swap32 (esalt_bufs[digests_offset].salt_buf[14]);
+  s3[3] = swap32 (esalt_bufs[digests_offset].salt_buf[15]);
   s4[0] = 0;
   s4[1] = 0x80000000;
   s4[2] = 0;
diff --git a/OpenCL/m13753.cl b/OpenCL/m13753.cl
index 28552e640..f81dcb90c 100644
--- a/OpenCL/m13753.cl
+++ b/OpenCL/m13753.cl
@@ -339,22 +339,22 @@ __kernel void m13753_init (__global pw_t *pws, __global const kernel_rule_t *rul
    * keyfile
    */
 
-  w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
-  w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
-  w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
-  w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
-  w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
-  w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
-  w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
-  w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
-  w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
-  w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
-  w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
-  w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
-  w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
-  w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
-  w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
-  w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
+  w0[0] = u8add (w0[0], esalt_bufs[digests_offset].keyfile_buf[ 0]);
+  w0[1] = u8add (w0[1], esalt_bufs[digests_offset].keyfile_buf[ 1]);
+  w0[2] = u8add (w0[2], esalt_bufs[digests_offset].keyfile_buf[ 2]);
+  w0[3] = u8add (w0[3], esalt_bufs[digests_offset].keyfile_buf[ 3]);
+  w1[0] = u8add (w1[0], esalt_bufs[digests_offset].keyfile_buf[ 4]);
+  w1[1] = u8add (w1[1], esalt_bufs[digests_offset].keyfile_buf[ 5]);
+  w1[2] = u8add (w1[2], esalt_bufs[digests_offset].keyfile_buf[ 6]);
+  w1[3] = u8add (w1[3], esalt_bufs[digests_offset].keyfile_buf[ 7]);
+  w2[0] = u8add (w2[0], esalt_bufs[digests_offset].keyfile_buf[ 8]);
+  w2[1] = u8add (w2[1], esalt_bufs[digests_offset].keyfile_buf[ 9]);
+  w2[2] = u8add (w2[2], esalt_bufs[digests_offset].keyfile_buf[10]);
+  w2[3] = u8add (w2[3], esalt_bufs[digests_offset].keyfile_buf[11]);
+  w3[0] = u8add (w3[0], esalt_bufs[digests_offset].keyfile_buf[12]);
+  w3[1] = u8add (w3[1], esalt_bufs[digests_offset].keyfile_buf[13]);
+  w3[2] = u8add (w3[2], esalt_bufs[digests_offset].keyfile_buf[14]);
+  w3[3] = u8add (w3[3], esalt_bufs[digests_offset].keyfile_buf[15]);
 
   w0[0] = swap32 (w0[0]);
   w0[1] = swap32 (w0[1]);
@@ -386,22 +386,22 @@ __kernel void m13753_init (__global pw_t *pws, __global const kernel_rule_t *rul
   u32 s6[4];
   u32 s7[4];
 
-  s0[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 0]);
-  s0[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
-  s0[2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 2]);
-  s0[3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
-  s1[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 4]);
-  s1[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
-  s1[2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 6]);
-  s1[3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
-  s2[0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 8]);
-  s2[1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
-  s2[2] = swap32 (esalt_bufs[salt_pos].salt_buf[10]);
-  s2[3] = swap32 (esalt_bufs[salt_pos].salt_buf[11]);
-  s3[0] = swap32 (esalt_bufs[salt_pos].salt_buf[12]);
-  s3[1] = swap32 (esalt_bufs[salt_pos].salt_buf[13]);
-  s3[2] = swap32 (esalt_bufs[salt_pos].salt_buf[14]);
-  s3[3] = swap32 (esalt_bufs[salt_pos].salt_buf[15]);
+  s0[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 0]);
+  s0[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 1]);
+  s0[2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 2]);
+  s0[3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 3]);
+  s1[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 4]);
+  s1[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 5]);
+  s1[2] = swap32 (esalt_bufs[digests_offset].salt_buf[ 6]);
+  s1[3] = swap32 (esalt_bufs[digests_offset].salt_buf[ 7]);
+  s2[0] = swap32 (esalt_bufs[digests_offset].salt_buf[ 8]);
+  s2[1] = swap32 (esalt_bufs[digests_offset].salt_buf[ 9]);
+  s2[2] = swap32 (esalt_bufs[digests_offset].salt_buf[10]);
+  s2[3] = swap32 (esalt_bufs[digests_offset].salt_buf[11]);
+  s3[0] = swap32 (esalt_bufs[digests_offset].salt_buf[12]);
+  s3[1] = swap32 (esalt_bufs[digests_offset].salt_buf[13]);
+  s3[2] = swap32 (esalt_bufs[digests_offset].salt_buf[14]);
+  s3[3] = swap32 (esalt_bufs[digests_offset].salt_buf[15]);
   s4[0] = 0;
   s4[1] = 0x80000000;
   s4[2] = 0;
diff --git a/OpenCL/m13800_a0.cl b/OpenCL/m13800_a0.cl
index 9cda97330..64c608126 100644
--- a/OpenCL/m13800_a0.cl
+++ b/OpenCL/m13800_a0.cl
@@ -534,7 +534,7 @@ __kernel void m13800_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -730,7 +730,7 @@ __kernel void m13800_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
diff --git a/OpenCL/m13800_a1.cl b/OpenCL/m13800_a1.cl
index e25180dea..381dfb77d 100644
--- a/OpenCL/m13800_a1.cl
+++ b/OpenCL/m13800_a1.cl
@@ -532,7 +532,7 @@ __kernel void m13800_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -784,7 +784,7 @@ __kernel void m13800_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
diff --git a/OpenCL/m13800_a3.cl b/OpenCL/m13800_a3.cl
index aea78d7cb..99a01c42c 100644
--- a/OpenCL/m13800_a3.cl
+++ b/OpenCL/m13800_a3.cl
@@ -846,7 +846,7 @@ __kernel void m13800_m04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -903,7 +903,7 @@ __kernel void m13800_m08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -960,7 +960,7 @@ __kernel void m13800_m16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -1017,7 +1017,7 @@ __kernel void m13800_s04 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -1074,7 +1074,7 @@ __kernel void m13800_s08 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
@@ -1131,7 +1131,7 @@ __kernel void m13800_s16 (__global pw_t *pws, __global const kernel_rule_t *rule
 
   for (u32 i = lid; i < 32; i += lsz)
   {
-    s_esalt[i] = esalt_bufs[salt_pos].salt_buf[i];
+    s_esalt[i] = esalt_bufs[digests_offset].salt_buf[i];
   }
 
   barrier (CLK_LOCAL_MEM_FENCE);
diff --git a/OpenCL/m14611.cl b/OpenCL/m14611.cl
index 04a8cbcb6..4a093febe 100644
--- a/OpenCL/m14611.cl
+++ b/OpenCL/m14611.cl
@@ -462,7 +462,7 @@ __kernel void m14611_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[6]);
   salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[7]);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -560,7 +560,7 @@ __kernel void m14611_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[3] = packv (tmps, opad32, gid, 3);
   opad[4] = packv (tmps, opad32, gid, 4);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 5)
   {
@@ -691,7 +691,7 @@ __kernel void m14611_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha1_then_aes_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4);
+  luks_af_sha1_then_aes_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4);
 
   // check entropy
 
diff --git a/OpenCL/m14612.cl b/OpenCL/m14612.cl
index 63207e313..b24600c1e 100644
--- a/OpenCL/m14612.cl
+++ b/OpenCL/m14612.cl
@@ -462,7 +462,7 @@ __kernel void m14612_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[6]);
   salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[7]);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -560,7 +560,7 @@ __kernel void m14612_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[3] = packv (tmps, opad32, gid, 3);
   opad[4] = packv (tmps, opad32, gid, 4);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 5)
   {
@@ -638,7 +638,7 @@ __kernel void m14612_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha1_then_serpent_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf);
+  luks_af_sha1_then_serpent_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf);
 
   // check entropy
 
diff --git a/OpenCL/m14613.cl b/OpenCL/m14613.cl
index 0349d7efe..1c0237364 100644
--- a/OpenCL/m14613.cl
+++ b/OpenCL/m14613.cl
@@ -462,7 +462,7 @@ __kernel void m14613_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[6]);
   salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[7]);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -560,7 +560,7 @@ __kernel void m14613_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[3] = packv (tmps, opad32, gid, 3);
   opad[4] = packv (tmps, opad32, gid, 4);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 5)
   {
@@ -638,7 +638,7 @@ __kernel void m14613_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha1_then_twofish_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf);
+  luks_af_sha1_then_twofish_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf);
 
   // check entropy
 
diff --git a/OpenCL/m14621.cl b/OpenCL/m14621.cl
index ab7e04414..128bfd5a1 100644
--- a/OpenCL/m14621.cl
+++ b/OpenCL/m14621.cl
@@ -420,7 +420,7 @@ __kernel void m14621_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[6]);
   salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[7]);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -536,7 +536,7 @@ __kernel void m14621_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[6] = packv (tmps, opad32, gid, 6);
   opad[7] = packv (tmps, opad32, gid, 7);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 8)
   {
@@ -682,7 +682,7 @@ __kernel void m14621_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha256_then_aes_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4);
+  luks_af_sha256_then_aes_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4);
 
   // check entropy
 
diff --git a/OpenCL/m14622.cl b/OpenCL/m14622.cl
index 018b4b2c5..32971b0c6 100644
--- a/OpenCL/m14622.cl
+++ b/OpenCL/m14622.cl
@@ -420,7 +420,7 @@ __kernel void m14622_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[6]);
   salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[7]);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -536,7 +536,7 @@ __kernel void m14622_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[6] = packv (tmps, opad32, gid, 6);
   opad[7] = packv (tmps, opad32, gid, 7);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 8)
   {
@@ -629,7 +629,7 @@ __kernel void m14622_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha256_then_serpent_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf);
+  luks_af_sha256_then_serpent_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf);
 
   // check entropy
 
diff --git a/OpenCL/m14623.cl b/OpenCL/m14623.cl
index a3c5ec991..114841683 100644
--- a/OpenCL/m14623.cl
+++ b/OpenCL/m14623.cl
@@ -420,7 +420,7 @@ __kernel void m14623_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = swap32_S (salt_bufs[salt_pos].salt_buf[6]);
   salt_buf1[3] = swap32_S (salt_bufs[salt_pos].salt_buf[7]);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -536,7 +536,7 @@ __kernel void m14623_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[6] = packv (tmps, opad32, gid, 6);
   opad[7] = packv (tmps, opad32, gid, 7);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 8)
   {
@@ -629,7 +629,7 @@ __kernel void m14623_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha256_then_twofish_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf);
+  luks_af_sha256_then_twofish_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf);
 
   // check entropy
 
diff --git a/OpenCL/m14631.cl b/OpenCL/m14631.cl
index 474346ecf..7f59bb52c 100644
--- a/OpenCL/m14631.cl
+++ b/OpenCL/m14631.cl
@@ -413,7 +413,7 @@ __kernel void m14631_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf0[2] = hl32_to_64_S (swap32_S (salt_bufs[salt_pos].salt_buf[4]), swap32_S (salt_bufs[salt_pos].salt_buf[5]));
   salt_buf0[3] = hl32_to_64_S (swap32_S (salt_bufs[salt_pos].salt_buf[6]), swap32_S (salt_bufs[salt_pos].salt_buf[7]));
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -512,7 +512,7 @@ __kernel void m14631_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[6] = pack64v (tmps, opad64, gid, 6);
   opad[7] = pack64v (tmps, opad64, gid, 7);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 16)
   {
@@ -658,7 +658,7 @@ __kernel void m14631_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha512_then_aes_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4);
+  luks_af_sha512_then_aes_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4);
 
   // check entropy
 
diff --git a/OpenCL/m14632.cl b/OpenCL/m14632.cl
index d53477833..965430f26 100644
--- a/OpenCL/m14632.cl
+++ b/OpenCL/m14632.cl
@@ -413,7 +413,7 @@ __kernel void m14632_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf0[2] = hl32_to_64_S (swap32_S (salt_bufs[salt_pos].salt_buf[4]), swap32_S (salt_bufs[salt_pos].salt_buf[5]));
   salt_buf0[3] = hl32_to_64_S (swap32_S (salt_bufs[salt_pos].salt_buf[6]), swap32_S (salt_bufs[salt_pos].salt_buf[7]));
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -512,7 +512,7 @@ __kernel void m14632_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[6] = pack64v (tmps, opad64, gid, 6);
   opad[7] = pack64v (tmps, opad64, gid, 7);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 16)
   {
@@ -605,7 +605,7 @@ __kernel void m14632_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha512_then_serpent_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf);
+  luks_af_sha512_then_serpent_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf);
 
   // check entropy
 
diff --git a/OpenCL/m14633.cl b/OpenCL/m14633.cl
index c4ca88949..2ad798344 100644
--- a/OpenCL/m14633.cl
+++ b/OpenCL/m14633.cl
@@ -413,7 +413,7 @@ __kernel void m14633_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf0[2] = hl32_to_64_S (swap32_S (salt_bufs[salt_pos].salt_buf[4]), swap32_S (salt_bufs[salt_pos].salt_buf[5]));
   salt_buf0[3] = hl32_to_64_S (swap32_S (salt_bufs[salt_pos].salt_buf[6]), swap32_S (salt_bufs[salt_pos].salt_buf[7]));
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -512,7 +512,7 @@ __kernel void m14633_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[6] = pack64v (tmps, opad64, gid, 6);
   opad[7] = pack64v (tmps, opad64, gid, 7);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 16)
   {
@@ -605,7 +605,7 @@ __kernel void m14633_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_sha512_then_twofish_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf);
+  luks_af_sha512_then_twofish_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf);
 
   // check entropy
 
diff --git a/OpenCL/m14641.cl b/OpenCL/m14641.cl
index 9b5eded06..19c15df3d 100644
--- a/OpenCL/m14641.cl
+++ b/OpenCL/m14641.cl
@@ -634,7 +634,7 @@ __kernel void m14641_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[6];
   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[7];
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -715,7 +715,7 @@ __kernel void m14641_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[3] = packv (tmps, opad32, gid, 3);
   opad[4] = packv (tmps, opad32, gid, 4);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 5)
   {
@@ -846,7 +846,7 @@ __kernel void m14641_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_ripemd160_then_aes_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4);
+  luks_af_ripemd160_then_aes_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4);
 
   // check entropy
 
diff --git a/OpenCL/m14642.cl b/OpenCL/m14642.cl
index 4876281b4..6c2bd437c 100644
--- a/OpenCL/m14642.cl
+++ b/OpenCL/m14642.cl
@@ -634,7 +634,7 @@ __kernel void m14642_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[6];
   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[7];
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -715,7 +715,7 @@ __kernel void m14642_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[3] = packv (tmps, opad32, gid, 3);
   opad[4] = packv (tmps, opad32, gid, 4);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 5)
   {
@@ -793,7 +793,7 @@ __kernel void m14642_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_ripemd160_then_serpent_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf);
+  luks_af_ripemd160_then_serpent_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf);
 
   // check entropy
 
diff --git a/OpenCL/m14643.cl b/OpenCL/m14643.cl
index e30b75c05..230a1f951 100644
--- a/OpenCL/m14643.cl
+++ b/OpenCL/m14643.cl
@@ -634,7 +634,7 @@ __kernel void m14643_init (__global pw_t *pws, __global const kernel_rule_t *rul
   salt_buf1[2] = salt_bufs[salt_pos].salt_buf[6];
   salt_buf1[3] = salt_bufs[salt_pos].salt_buf[7];
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   /**
    * pads
@@ -715,7 +715,7 @@ __kernel void m14643_loop (__global pw_t *pws, __global const kernel_rule_t *rul
   opad[3] = packv (tmps, opad32, gid, 3);
   opad[4] = packv (tmps, opad32, gid, 4);
 
-  u32 key_size = luks_bufs[salt_pos].key_size;
+  u32 key_size = luks_bufs[digests_offset].key_size;
 
   for (u32 i = 0; i < ((key_size / 8) / 4); i += 5)
   {
@@ -793,7 +793,7 @@ __kernel void m14643_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 pt_buf[128];
 
-  luks_af_ripemd160_then_twofish_decrypt (&luks_bufs[salt_pos], &tmps[gid], pt_buf);
+  luks_af_ripemd160_then_twofish_decrypt (&luks_bufs[digests_offset], &tmps[gid], pt_buf);
 
   // check entropy
 
diff --git a/OpenCL/m14700.cl b/OpenCL/m14700.cl
index 623d6ac17..4ab78b9a5 100644
--- a/OpenCL/m14700.cl
+++ b/OpenCL/m14700.cl
@@ -1671,21 +1671,21 @@ __kernel void m14700_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 cipher[4];
 
-  cipher[0] = esalt_bufs[salt_pos].wpky[0];
-  cipher[1] = esalt_bufs[salt_pos].wpky[1];
+  cipher[0] = esalt_bufs[digests_offset].wpky[0];
+  cipher[1] = esalt_bufs[digests_offset].wpky[1];
   cipher[2] = 0;
   cipher[3] = 0;
 
   u32 lsb[8];
 
-  lsb[0] = esalt_bufs[salt_pos].wpky[8];
-  lsb[1] = esalt_bufs[salt_pos].wpky[9];
-  lsb[2] = esalt_bufs[salt_pos].wpky[6];
-  lsb[3] = esalt_bufs[salt_pos].wpky[7];
-  lsb[4] = esalt_bufs[salt_pos].wpky[4];
-  lsb[5] = esalt_bufs[salt_pos].wpky[5];
-  lsb[6] = esalt_bufs[salt_pos].wpky[2];
-  lsb[7] = esalt_bufs[salt_pos].wpky[3];
+  lsb[0] = esalt_bufs[digests_offset].wpky[8];
+  lsb[1] = esalt_bufs[digests_offset].wpky[9];
+  lsb[2] = esalt_bufs[digests_offset].wpky[6];
+  lsb[3] = esalt_bufs[digests_offset].wpky[7];
+  lsb[4] = esalt_bufs[digests_offset].wpky[4];
+  lsb[5] = esalt_bufs[digests_offset].wpky[5];
+  lsb[6] = esalt_bufs[digests_offset].wpky[2];
+  lsb[7] = esalt_bufs[digests_offset].wpky[3];
 
   for (int j = 5; j >= 0; j--)
   {
diff --git a/OpenCL/m14800.cl b/OpenCL/m14800.cl
index f0796daa5..aa2e58b3f 100644
--- a/OpenCL/m14800.cl
+++ b/OpenCL/m14800.cl
@@ -1787,11 +1787,11 @@ __kernel void m14800_init (__global pw_t *pws, __global const kernel_rule_t *rul
   u32 dpsl0[4];
   u32 dpsl1[4];
 
-  dpsl0[0] = esalt_bufs[salt_pos].dpsl[0];
-  dpsl0[1] = esalt_bufs[salt_pos].dpsl[1];
-  dpsl0[2] = esalt_bufs[salt_pos].dpsl[2];
-  dpsl0[3] = esalt_bufs[salt_pos].dpsl[3];
-  dpsl1[0] = esalt_bufs[salt_pos].dpsl[4];
+  dpsl0[0] = esalt_bufs[digests_offset].dpsl[0];
+  dpsl0[1] = esalt_bufs[digests_offset].dpsl[1];
+  dpsl0[2] = esalt_bufs[digests_offset].dpsl[2];
+  dpsl0[3] = esalt_bufs[digests_offset].dpsl[3];
+  dpsl1[0] = esalt_bufs[digests_offset].dpsl[4];
   dpsl1[1] = 0;
   dpsl1[2] = 0;
   dpsl1[3] = 0;
@@ -2228,21 +2228,21 @@ __kernel void m14800_comp (__global pw_t *pws, __global const kernel_rule_t *rul
 
   u32 cipher[4];
 
-  cipher[0] = esalt_bufs[salt_pos].wpky[0];
-  cipher[1] = esalt_bufs[salt_pos].wpky[1];
+  cipher[0] = esalt_bufs[digests_offset].wpky[0];
+  cipher[1] = esalt_bufs[digests_offset].wpky[1];
   cipher[2] = 0;
   cipher[3] = 0;
 
   u32 lsb[8];
 
-  lsb[0] = esalt_bufs[salt_pos].wpky[8];
-  lsb[1] = esalt_bufs[salt_pos].wpky[9];
-  lsb[2] = esalt_bufs[salt_pos].wpky[6];
-  lsb[3] = esalt_bufs[salt_pos].wpky[7];
-  lsb[4] = esalt_bufs[salt_pos].wpky[4];
-  lsb[5] = esalt_bufs[salt_pos].wpky[5];
-  lsb[6] = esalt_bufs[salt_pos].wpky[2];
-  lsb[7] = esalt_bufs[salt_pos].wpky[3];
+  lsb[0] = esalt_bufs[digests_offset].wpky[8];
+  lsb[1] = esalt_bufs[digests_offset].wpky[9];
+  lsb[2] = esalt_bufs[digests_offset].wpky[6];
+  lsb[3] = esalt_bufs[digests_offset].wpky[7];
+  lsb[4] = esalt_bufs[digests_offset].wpky[4];
+  lsb[5] = esalt_bufs[digests_offset].wpky[5];
+  lsb[6] = esalt_bufs[digests_offset].wpky[2];
+  lsb[7] = esalt_bufs[digests_offset].wpky[3];
 
   for (int j = 5; j >= 0; j--)
   {
diff --git a/include/interface.h b/include/interface.h
index dde14d7d1..f016657f7 100644
--- a/include/interface.h
+++ b/include/interface.h
@@ -187,6 +187,8 @@ typedef struct wpa
   int  essid_reuse;
   u8   essid_len;
   u8   essid[32];
+  u32  keymic[4];
+  u32  hash[4];
 
 } wpa_t;
 
@@ -1744,9 +1746,6 @@ char *strparser   (const u32 parser_status);
 int check_old_hccap (const char *hashfile);
 void to_hccapx_t (hashcat_ctx_t *hashcat_ctx, hccapx_t *hccapx, const u32 salt_pos, const u32 digest_pos);
 
-void wpa_essid_reuse      (hashcat_ctx_t *hashcat_ctx);
-void wpa_essid_reuse_next (hashcat_ctx_t *hashcat_ctx, const u32 salt_idx_cracked);
-
 int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_len, const u32 salt_pos, const u32 digest_pos);
 
 int     hashconfig_init               (hashcat_ctx_t *hashcat_ctx);
diff --git a/src/hashes.c b/src/hashes.c
index 58a94bd2d..0809133a6 100644
--- a/src/hashes.c
+++ b/src/hashes.c
@@ -375,11 +375,6 @@ int check_cracked (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param,
         }
       }
 
-      if (hashconfig->hash_mode == 2500)
-      {
-        wpa_essid_reuse_next (hashcat_ctx, salt_pos);
-      }
-
       if (hashes->salts_done == hashes->salts_cnt) mycracked (hashcat_ctx);
 
       check_hash (hashcat_ctx, device_param, &cracked[i]);
@@ -1262,15 +1257,6 @@ int hashes_init_stage2 (hashcat_ctx_t *hashcat_ctx)
 
     hashes_buf[0].salt = salt_buf;
 
-    if (hashconfig->esalt_size)
-    {
-      char *esalts_buf_new_ptr = ((char *) esalts_buf_new) + (salts_cnt * hashconfig->esalt_size);
-
-      memcpy (esalts_buf_new_ptr, hashes_buf[0].esalt, hashconfig->esalt_size);
-
-      hashes_buf[0].esalt = esalts_buf_new_ptr;
-    }
-
     if (hashconfig->hook_salt_size)
     {
       char *hook_salts_buf_new_ptr = ((char *) hook_salts_buf_new) + (salts_cnt * hashconfig->hook_salt_size);
@@ -1295,6 +1281,15 @@ int hashes_init_stage2 (hashcat_ctx_t *hashcat_ctx)
 
   hashes_buf[0].digest = digests_buf_new_ptr;
 
+  if (hashconfig->esalt_size)
+  {
+    char *esalts_buf_new_ptr = ((char *) esalts_buf_new) + (0 * hashconfig->esalt_size);
+
+    memcpy (esalts_buf_new_ptr, hashes_buf[0].esalt, hashconfig->esalt_size);
+
+    hashes_buf[0].esalt = esalts_buf_new_ptr;
+  }
+
   if ((user_options->username == true) || (hashconfig->opts_type & OPTS_TYPE_HASH_COPY) || (hashconfig->opts_type & OPTS_TYPE_HASH_SPLIT))
   {
     hash_info[0] = hashes_buf[0].hash_info;
@@ -1314,15 +1309,6 @@ int hashes_init_stage2 (hashcat_ctx_t *hashcat_ctx)
 
         hashes_buf[hashes_pos].salt = salt_buf;
 
-        if (hashconfig->esalt_size)
-        {
-          char *esalts_buf_new_ptr = ((char *) esalts_buf_new) + (salts_cnt * hashconfig->esalt_size);
-
-          memcpy (esalts_buf_new_ptr, hashes_buf[hashes_pos].esalt, hashconfig->esalt_size);
-
-          hashes_buf[hashes_pos].esalt = esalts_buf_new_ptr;
-        }
-
         if (hashconfig->hook_salt_size)
         {
           char *hook_salts_buf_new_ptr = ((char *) hook_salts_buf_new) + (salts_cnt * hashconfig->hook_salt_size);
@@ -1341,13 +1327,6 @@ int hashes_init_stage2 (hashcat_ctx_t *hashcat_ctx)
 
       hashes_buf[hashes_pos].salt = salt_buf;
 
-      if (hashconfig->esalt_size)
-      {
-        char *esalts_buf_new_ptr = ((char *) esalts_buf_new) + (salts_cnt * hashconfig->esalt_size);
-
-        hashes_buf[hashes_pos].esalt = esalts_buf_new_ptr;
-      }
-
       if (hashconfig->hook_salt_size)
       {
         char *hook_salts_buf_new_ptr = ((char *) hook_salts_buf_new) + (salts_cnt * hashconfig->hook_salt_size);
@@ -1364,6 +1343,15 @@ int hashes_init_stage2 (hashcat_ctx_t *hashcat_ctx)
 
     hashes_buf[hashes_pos].digest = digests_buf_new_ptr;
 
+    if (hashconfig->esalt_size)
+    {
+      char *esalts_buf_new_ptr = ((char *) esalts_buf_new) + (hashes_pos * hashconfig->esalt_size);
+
+      memcpy (esalts_buf_new_ptr, hashes_buf[hashes_pos].esalt, hashconfig->esalt_size);
+
+      hashes_buf[hashes_pos].esalt = esalts_buf_new_ptr;
+    }
+
     if ((user_options->username == true) || (hashconfig->opts_type & OPTS_TYPE_HASH_COPY) || (hashconfig->opts_type & OPTS_TYPE_HASH_SPLIT))
     {
       hash_info[hashes_pos] = hashes_buf[hashes_pos].hash_info;
@@ -1519,13 +1507,6 @@ int hashes_init_stage4 (hashcat_ctx_t *hashcat_ctx)
 
   hashes->tmp_buf = tmp_buf;
 
-  // special wpa booster case
-
-  if (hashconfig->hash_mode == 2500)
-  {
-    wpa_essid_reuse (hashcat_ctx);
-  }
-
   return 0;
 }
 
diff --git a/src/interface.c b/src/interface.c
index 916438da8..db087619b 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -2722,7 +2722,7 @@ int wpa_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED
 
   if (in.eapol_len < 1 || in.eapol_len > 255) return (PARSER_HCCAPX_EAPOL_LEN);
 
-  memcpy (digest, in.keymic, 16);
+  memcpy (wpa->keymic, in.keymic, 16);
 
   /*
     http://www.one-net.eu/jsw/j_sec/m_ptype.html
@@ -2810,10 +2810,10 @@ int wpa_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED
   }
   else
   {
-    digest[0] = byte_swap_32 (digest[0]);
-    digest[1] = byte_swap_32 (digest[1]);
-    digest[2] = byte_swap_32 (digest[2]);
-    digest[3] = byte_swap_32 (digest[3]);
+    wpa->keymic[0] = byte_swap_32 (wpa->keymic[0]);
+    wpa->keymic[1] = byte_swap_32 (wpa->keymic[1]);
+    wpa->keymic[2] = byte_swap_32 (wpa->keymic[2]);
+    wpa->keymic[3] = byte_swap_32 (wpa->keymic[3]);
 
     for (int i = 0; i < 64; i++)
     {
@@ -2876,17 +2876,24 @@ int wpa_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED
 
   md5_64 (block, hash);
 
-  block[0] = digest[0];
-  block[1] = digest[1];
-  block[2] = digest[2];
-  block[3] = digest[3];
+  block[0] = wpa->keymic[0];
+  block[1] = wpa->keymic[1];
+  block[2] = wpa->keymic[2];
+  block[3] = wpa->keymic[3];
 
   md5_64 (block, hash);
 
-  salt->salt_buf[12] = hash[0];
-  salt->salt_buf[13] = hash[1];
-  salt->salt_buf[14] = hash[2];
-  salt->salt_buf[15] = hash[3];
+  wpa->hash[0] = hash[0];
+  wpa->hash[1] = hash[1];
+  wpa->hash[2] = hash[2];
+  wpa->hash[3] = hash[3];
+
+  // make all this stuff unique
+
+  digest[0] = wpa->hash[0];
+  digest[1] = wpa->hash[1];
+  digest[2] = wpa->hash[2];
+  digest[3] = wpa->hash[3];
 
   return (PARSER_OK);
 }
@@ -14940,12 +14947,14 @@ void to_hccapx_t (hashcat_ctx_t *hashcat_ctx, hccapx_t *hccapx, const u32 salt_p
 
   const salt_t *salt = &salts_buf[salt_pos];
 
+  const u32 digest_cur = salt->digests_offset + digest_pos;
+
   hccapx->essid_len = salt->salt_len;
 
   memcpy (hccapx->essid, salt->salt_buf, hccapx->essid_len);
 
   wpa_t *wpas = (wpa_t *) esalts_buf;
-  wpa_t *wpa  = &wpas[salt_pos];
+  wpa_t *wpa  = &wpas[digest_cur];
 
   hccapx->message_pair = wpa->message_pair;
   hccapx->keyver = wpa->keyver;
@@ -14973,78 +14982,23 @@ void to_hccapx_t (hashcat_ctx_t *hashcat_ctx, hccapx_t *hccapx, const u32 salt_p
   memcpy (hccapx->nonce_ap,  wpa->orig_nonce_ap,  32);
   memcpy (hccapx->nonce_sta, wpa->orig_nonce_sta, 32);
 
-  char *digests_buf_ptr = (char *) digests_buf;
-
-  u32 dgst_size = hashconfig->dgst_size;
-
-  u32 *digest_ptr = (u32 *) (digests_buf_ptr + (salts_buf[salt_pos].digests_offset * dgst_size) + (digest_pos * dgst_size));
-
   if (wpa->keyver != 1)
   {
-    u32 digest_tmp[4] = { 0 };
+    u32 digest_tmp[4];
 
-    digest_tmp[0] = byte_swap_32 (digest_ptr[0]);
-    digest_tmp[1] = byte_swap_32 (digest_ptr[1]);
-    digest_tmp[2] = byte_swap_32 (digest_ptr[2]);
-    digest_tmp[3] = byte_swap_32 (digest_ptr[3]);
+    digest_tmp[0] = byte_swap_32 (wpa->keymic[0]);
+    digest_tmp[1] = byte_swap_32 (wpa->keymic[1]);
+    digest_tmp[2] = byte_swap_32 (wpa->keymic[2]);
+    digest_tmp[3] = byte_swap_32 (wpa->keymic[3]);
 
     memcpy (hccapx->keymic, digest_tmp, 16);
   }
   else
   {
-    memcpy (hccapx->keymic, digest_ptr, 16);
+    memcpy (hccapx->keymic, wpa->keymic, 16);
   }
 }
 
-void wpa_essid_reuse (hashcat_ctx_t *hashcat_ctx)
-{
-  // find duplicate essid to speed up cracking
-
-  hashes_t *hashes = hashcat_ctx->hashes;
-
-  salt_t *salts_buf = hashes->salts_buf;
-
-  wpa_t *esalts_buf = hashes->esalts_buf;
-
-  const u32 salts_cnt = hashes->salts_cnt;
-
-  for (u32 salt_idx = 1; salt_idx < salts_cnt; salt_idx++)
-  {
-    if (memcmp ((char *) salts_buf[salt_idx].salt_buf, (char *) salts_buf[salt_idx - 1].salt_buf, salts_buf[salt_idx].salt_len) == 0)
-    {
-      esalts_buf[salt_idx].essid_reuse = 1;
-    }
-  }
-}
-
-void wpa_essid_reuse_next (hashcat_ctx_t *hashcat_ctx, const u32 salt_idx_cracked)
-{
-  hashes_t *hashes = hashcat_ctx->hashes;
-
-  salt_t *salts_buf = hashes->salts_buf;
-
-  wpa_t *esalts_buf = hashes->esalts_buf;
-
-  // the first essid salt has been cracked?
-  // since there's always just one with essid_reuse == 0 (which is always the first uncracked of N handshakes)
-  // we can do the following check:
-
-  if (esalts_buf[salt_idx_cracked].essid_reuse != 0) return;
-
-  // it's possible more handshakes with the same essid are following,
-  // thus we have to update the next essid_reuse with the same essid
-
-  const u32 salts_cnt = hashes->salts_cnt;
-
-  const u32 salts_idx_next = salt_idx_cracked + 1;
-
-  if (salts_idx_next == salts_cnt) return;
-
-  if (memcmp ((char *) salts_buf[salts_idx_next].salt_buf, (char *) salts_buf[salt_idx_cracked].salt_buf, salts_buf[salts_idx_next].salt_len)) return;
-
-  esalts_buf[salts_idx_next].essid_reuse = 0;
-}
-
 int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_len, const u32 salt_pos, const u32 digest_pos)
 {
   const hashconfig_t *hashconfig = hashcat_ctx->hashconfig;
@@ -15063,6 +15017,8 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   const u32 opti_type = hashconfig->opti_type;
   const u32 dgst_size = hashconfig->dgst_size;
 
+  const u32 digest_cur = salts_buf[salt_pos].digests_offset + digest_pos;
+
   u8 datax[256] = { 0 };
 
   u64 *digest_buf64 = (u64 *) datax;
@@ -15541,10 +15497,8 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   }
   else if (hash_mode == 501)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
@@ -15791,7 +15745,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     wpa_t *wpas = (wpa_t *) esalts_buf;
 
-    wpa_t *wpa = &wpas[salt_pos];
+    wpa_t *wpa = &wpas[digest_cur];
 
     char *essid = (char *) wpa->essid;
 
@@ -15815,10 +15769,10 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
     }
 
     snprintf (out_buf, out_len - 1, "%08x%08x%08x%08x:%02x%02x%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x:%s",
-      salt.salt_buf[12],
-      salt.salt_buf[13],
-      salt.salt_buf[14],
-      salt.salt_buf[15],
+      wpa->hash[0],
+      wpa->hash[1],
+      wpa->hash[2],
+      wpa->hash[3],
       wpa->orig_mac_ap[0],
       wpa->orig_mac_ap[1],
       wpa->orig_mac_ap[2],
@@ -15888,7 +15842,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     ikepsk_t *ikepsks = (ikepsk_t *) esalts_buf;
 
-    ikepsk_t *ikepsk  = &ikepsks[salt_pos];
+    ikepsk_t *ikepsk  = &ikepsks[digest_cur];
 
     size_t buf_len = out_len - 1;
 
@@ -15954,7 +15908,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     ikepsk_t *ikepsks = (ikepsk_t *) esalts_buf;
 
-    ikepsk_t *ikepsk  = &ikepsks[salt_pos];
+    ikepsk_t *ikepsk  = &ikepsks[digest_cur];
 
     size_t buf_len = out_len - 1;
 
@@ -16020,7 +15974,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     netntlm_t *netntlms = (netntlm_t *) esalts_buf;
 
-    netntlm_t *netntlm = &netntlms[salt_pos];
+    netntlm_t *netntlm = &netntlms[digest_cur];
 
     char user_buf[64] = { 0 };
     char domain_buf[64] = { 0 };
@@ -16071,7 +16025,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     netntlm_t *netntlms = (netntlm_t *) esalts_buf;
 
-    netntlm_t *netntlm = &netntlms[salt_pos];
+    netntlm_t *netntlm = &netntlms[digest_cur];
 
     char user_buf[64] = { 0 };
     char domain_buf[64] = { 0 };
@@ -16185,7 +16139,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     agilekey_t *agilekeys = (agilekey_t *) esalts_buf;
 
-    agilekey_t *agilekey = &agilekeys[salt_pos];
+    agilekey_t *agilekey = &agilekeys[digest_cur];
 
     salt.salt_buf[0] = byte_swap_32 (salt.salt_buf[0]);
     salt.salt_buf[1] = byte_swap_32 (salt.salt_buf[1]);
@@ -16233,7 +16187,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
 
     pbkdf2_sha512_t *pbkdf2_sha512s = (pbkdf2_sha512_t *) esalts_buf;
 
-    pbkdf2_sha512_t *pbkdf2_sha512  = &pbkdf2_sha512s[salt_pos];
+    pbkdf2_sha512_t *pbkdf2_sha512  = &pbkdf2_sha512s[digest_cur];
 
     u32 esalt[8] = { 0 };
 
@@ -16268,7 +16222,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
 
     pbkdf2_sha512_t *pbkdf2_sha512s = (pbkdf2_sha512_t *) esalts_buf;
 
-    pbkdf2_sha512_t *pbkdf2_sha512  = &pbkdf2_sha512s[salt_pos];
+    pbkdf2_sha512_t *pbkdf2_sha512  = &pbkdf2_sha512s[digest_cur];
 
     u32 len_used = 0;
 
@@ -16297,7 +16251,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     rakp_t *rakps = (rakp_t *) esalts_buf;
 
-    rakp_t *rakp = &rakps[salt_pos];
+    rakp_t *rakp = &rakps[digest_cur];
 
     u32 i;
     u32 j;
@@ -16344,7 +16298,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     krb5pa_t *krb5pas = (krb5pa_t *) esalts_buf;
 
-    krb5pa_t *krb5pa = &krb5pas[salt_pos];
+    krb5pa_t *krb5pa = &krb5pas[digest_cur];
 
     u8 *ptr_timestamp = (u8 *) krb5pa->timestamp;
     u8 *ptr_checksum  = (u8 *) krb5pa->checksum;
@@ -16435,7 +16389,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     cloudkey_t *cloudkeys = (cloudkey_t *) esalts_buf;
 
-    cloudkey_t *cloudkey = &cloudkeys[salt_pos];
+    cloudkey_t *cloudkey = &cloudkeys[digest_cur];
 
     char data_buf[4096] = { 0 };
 
@@ -16545,7 +16499,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     androidfde_t *androidfdes = (androidfde_t *) esalts_buf;
 
-    androidfde_t *androidfde = &androidfdes[salt_pos];
+    androidfde_t *androidfde = &androidfdes[digest_cur];
 
     char tmp[3073] = { 0 };
 
@@ -16610,7 +16564,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
 
     pbkdf2_sha256_t *pbkdf2_sha256s = (pbkdf2_sha256_t *) esalts_buf;
 
-    pbkdf2_sha256_t *pbkdf2_sha256  = &pbkdf2_sha256s[salt_pos];
+    pbkdf2_sha256_t *pbkdf2_sha256  = &pbkdf2_sha256s[digest_cur];
 
     unsigned char *salt_buf_ptr = (unsigned char *) pbkdf2_sha256->salt_buf;
 
@@ -16658,7 +16612,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     office2007_t *office2007s = (office2007_t *) esalts_buf;
 
-    office2007_t *office2007 = &office2007s[salt_pos];
+    office2007_t *office2007 = &office2007s[digest_cur];
 
     snprintf (out_buf, out_len - 1, "%s*%d*%d*%u*%d*%08x%08x%08x%08x*%08x%08x%08x%08x*%08x%08x%08x%08x%08x",
       SIGNATURE_OFFICE2007,
@@ -16684,7 +16638,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     office2010_t *office2010s = (office2010_t *) esalts_buf;
 
-    office2010_t *office2010 = &office2010s[salt_pos];
+    office2010_t *office2010 = &office2010s[digest_cur];
 
     snprintf (out_buf, out_len - 1, "%s*%d*%d*%d*%d*%08x%08x%08x%08x*%08x%08x%08x%08x*%08x%08x%08x%08x%08x%08x%08x%08x",
       SIGNATURE_OFFICE2010,
@@ -16713,7 +16667,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     office2013_t *office2013s = (office2013_t *) esalts_buf;
 
-    office2013_t *office2013 = &office2013s[salt_pos];
+    office2013_t *office2013 = &office2013s[digest_cur];
 
     snprintf (out_buf, out_len - 1, "%s*%d*%d*%d*%d*%08x%08x%08x%08x*%08x%08x%08x%08x*%08x%08x%08x%08x%08x%08x%08x%08x",
       SIGNATURE_OFFICE2013,
@@ -16742,7 +16696,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     oldoffice01_t *oldoffice01s = (oldoffice01_t *) esalts_buf;
 
-    oldoffice01_t *oldoffice01 = &oldoffice01s[salt_pos];
+    oldoffice01_t *oldoffice01 = &oldoffice01s[digest_cur];
 
     snprintf (out_buf, out_len - 1, "%s*%08x%08x%08x%08x*%08x%08x%08x%08x*%08x%08x%08x%08x",
       (oldoffice01->version == 0) ? SIGNATURE_OLDOFFICE0 : SIGNATURE_OLDOFFICE1,
@@ -16763,7 +16717,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     oldoffice01_t *oldoffice01s = (oldoffice01_t *) esalts_buf;
 
-    oldoffice01_t *oldoffice01 = &oldoffice01s[salt_pos];
+    oldoffice01_t *oldoffice01 = &oldoffice01s[digest_cur];
 
     snprintf (out_buf, out_len - 1, "%s*%08x%08x%08x%08x*%08x%08x%08x%08x*%08x%08x%08x%08x",
       (oldoffice01->version == 0) ? SIGNATURE_OLDOFFICE0 : SIGNATURE_OLDOFFICE1,
@@ -16784,7 +16738,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     oldoffice01_t *oldoffice01s = (oldoffice01_t *) esalts_buf;
 
-    oldoffice01_t *oldoffice01 = &oldoffice01s[salt_pos];
+    oldoffice01_t *oldoffice01 = &oldoffice01s[digest_cur];
 
     u8 *rc4key = (u8 *) oldoffice01->rc4key;
 
@@ -16812,7 +16766,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     oldoffice34_t *oldoffice34s = (oldoffice34_t *) esalts_buf;
 
-    oldoffice34_t *oldoffice34 = &oldoffice34s[salt_pos];
+    oldoffice34_t *oldoffice34 = &oldoffice34s[digest_cur];
 
     snprintf (out_buf, out_len - 1, "%s*%08x%08x%08x%08x*%08x%08x%08x%08x*%08x%08x%08x%08x%08x",
       (oldoffice34->version == 3) ? SIGNATURE_OLDOFFICE3 : SIGNATURE_OLDOFFICE4,
@@ -16834,7 +16788,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     oldoffice34_t *oldoffice34s = (oldoffice34_t *) esalts_buf;
 
-    oldoffice34_t *oldoffice34 = &oldoffice34s[salt_pos];
+    oldoffice34_t *oldoffice34 = &oldoffice34s[digest_cur];
 
     snprintf (out_buf, out_len - 1, "%s*%08x%08x%08x%08x*%08x%08x%08x%08x*%08x%08x%08x%08x%08x",
       (oldoffice34->version == 3) ? SIGNATURE_OLDOFFICE3 : SIGNATURE_OLDOFFICE4,
@@ -16856,7 +16810,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     oldoffice34_t *oldoffice34s = (oldoffice34_t *) esalts_buf;
 
-    oldoffice34_t *oldoffice34 = &oldoffice34s[salt_pos];
+    oldoffice34_t *oldoffice34 = &oldoffice34s[digest_cur];
 
     u8 *rc4key = (u8 *) oldoffice34->rc4key;
 
@@ -16887,7 +16841,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
 
     pbkdf2_sha256_t *pbkdf2_sha256s = (pbkdf2_sha256_t *) esalts_buf;
 
-    pbkdf2_sha256_t *pbkdf2_sha256  = &pbkdf2_sha256s[salt_pos];
+    pbkdf2_sha256_t *pbkdf2_sha256  = &pbkdf2_sha256s[digest_cur];
 
     unsigned char *salt_buf_ptr = (unsigned char *) pbkdf2_sha256->salt_buf;
 
@@ -16925,7 +16879,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     cram_md5_t *cram_md5s = (cram_md5_t *) esalts_buf;
 
-    cram_md5_t *cram_md5 = &cram_md5s[salt_pos];
+    cram_md5_t *cram_md5 = &cram_md5s[digest_cur];
 
     // challenge
 
@@ -16967,7 +16921,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     pdf_t *pdfs = (pdf_t *) esalts_buf;
 
-    pdf_t *pdf = &pdfs[salt_pos];
+    pdf_t *pdf = &pdfs[digest_cur];
 
     snprintf (out_buf, out_len - 1, "$pdf$%d*%d*%d*%d*%d*%d*%08x%08x%08x%08x*%d*%08x%08x%08x%08x%08x%08x%08x%08x*%d*%08x%08x%08x%08x%08x%08x%08x%08x",
 
@@ -17005,7 +16959,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     pdf_t *pdfs = (pdf_t *) esalts_buf;
 
-    pdf_t *pdf = &pdfs[salt_pos];
+    pdf_t *pdf = &pdfs[digest_cur];
 
     snprintf (out_buf, out_len - 1, "$pdf$%d*%d*%d*%d*%d*%d*%08x%08x%08x%08x*%d*%08x%08x%08x%08x%08x%08x%08x%08x*%d*%08x%08x%08x%08x%08x%08x%08x%08x",
 
@@ -17043,7 +16997,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     pdf_t *pdfs = (pdf_t *) esalts_buf;
 
-    pdf_t *pdf = &pdfs[salt_pos];
+    pdf_t *pdf = &pdfs[digest_cur];
 
     u8 *rc4key = (u8 *) pdf->rc4key;
 
@@ -17088,7 +17042,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     pdf_t *pdfs = (pdf_t *) esalts_buf;
 
-    pdf_t *pdf = &pdfs[salt_pos];
+    pdf_t *pdf = &pdfs[digest_cur];
 
     if (pdf->id_len == 32)
     {
@@ -17165,28 +17119,22 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   }
   else if (hash_mode == 10600)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
   else if (hash_mode == 10700)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
   else if (hash_mode == 10900)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
@@ -17222,7 +17170,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     bitcoin_wallet_t *bitcoin_wallets = (bitcoin_wallet_t *) esalts_buf;
 
-    bitcoin_wallet_t *bitcoin_wallet = &bitcoin_wallets[salt_pos];
+    bitcoin_wallet_t *bitcoin_wallet = &bitcoin_wallets[digest_cur];
 
     const u32 cry_master_len = bitcoin_wallet->cry_master_len;
     const u32 ckey_len       = bitcoin_wallet->ckey_len;
@@ -17272,10 +17220,8 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   }
   else if (hash_mode == 11400)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
@@ -17283,7 +17229,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     seven_zip_hook_salt_t *seven_zips = (seven_zip_hook_salt_t *) hashes->hook_salts_buf;
 
-    seven_zip_hook_salt_t *seven_zip  = &seven_zips[salt_pos];
+    seven_zip_hook_salt_t *seven_zip  = &seven_zips[digest_cur];
 
     const u32 data_len = seven_zip->data_len;
 
@@ -17387,37 +17333,29 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   }
   else if (hash_mode == 11900)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
   else if (hash_mode == 12000)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
   else if (hash_mode == 12001)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
   else if (hash_mode == 12100)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
@@ -17512,10 +17450,8 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   }
   else if (hash_mode == 12700)
   {
-    u32 digest_idx = salt.digests_offset + digest_pos;
-
     hashinfo_t **hashinfo_ptr = hash_info;
-    char        *hash_buf     = hashinfo_ptr[digest_idx]->orighash;
+    char        *hash_buf     = hashinfo_ptr[digest_cur]->orighash;
 
     snprintf (out_buf, out_len - 1, "%s", hash_buf);
   }
@@ -17575,7 +17511,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     rar5_t *rar5s = (rar5_t *) esalts_buf;
 
-    rar5_t *rar5 = &rar5s[salt_pos];
+    rar5_t *rar5 = &rar5s[digest_cur];
 
     snprintf (out_buf, out_len - 1, "$rar5$16$%08x%08x%08x%08x$%u$%08x%08x%08x%08x$8$%08x%08x",
       salt.salt_buf[0],
@@ -17595,7 +17531,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     krb5tgs_t *krb5tgss = (krb5tgs_t *) esalts_buf;
 
-    krb5tgs_t *krb5tgs = &krb5tgss[salt_pos];
+    krb5tgs_t *krb5tgs = &krb5tgss[digest_cur];
 
     u8 *ptr_checksum  = (u8 *) krb5tgs->checksum;
     u8 *ptr_edata2 = (u8 *) krb5tgs->edata2;
@@ -17648,7 +17584,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     keepass_t *keepasss = (keepass_t *) esalts_buf;
 
-    keepass_t *keepass = &keepasss[salt_pos];
+    keepass_t *keepass = &keepasss[digest_cur];
 
     u32 version     = (u32) keepass->version;
     u32 rounds      = salt.salt_iter;
@@ -17782,7 +17718,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     pstoken_t *pstokens = (pstoken_t *) esalts_buf;
 
-    pstoken_t *pstoken = &pstokens[salt_pos];
+    pstoken_t *pstoken = &pstokens[digest_cur];
 
     const u32 salt_len = (pstoken->salt_len > 512) ? 512 : pstoken->salt_len;
 
@@ -17807,7 +17743,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     zip2_t *zip2s = (zip2_t *) esalts_buf;
 
-    zip2_t *zip2 = &zip2s[salt_pos];
+    zip2_t *zip2 = &zip2s[digest_cur];
 
     const u32 salt_len = zip2->salt_len;
 
@@ -17862,7 +17798,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
   {
     win8phone_t *esalts = (win8phone_t *) esalts_buf;
 
-    win8phone_t *esalt = &esalts[salt_pos];
+    win8phone_t *esalt = &esalts[digest_cur];
 
     char buf[256 + 1] = { 0 };
 
@@ -17908,7 +17844,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
     // WPKY
 
     itunes_backup_t *itunes_backups = (itunes_backup_t *) esalts_buf;
-    itunes_backup_t *itunes_backup  = &itunes_backups[salt_pos];
+    itunes_backup_t *itunes_backup  = &itunes_backups[digest_cur];
 
     u32 wkpy_u32[10];
 
@@ -17950,7 +17886,7 @@ int ascii_digest (hashcat_ctx_t *hashcat_ctx, char *out_buf, const size_t out_le
     // WPKY
 
     itunes_backup_t *itunes_backups = (itunes_backup_t *) esalts_buf;
-    itunes_backup_t *itunes_backup  = &itunes_backups[salt_pos];
+    itunes_backup_t *itunes_backup  = &itunes_backups[digest_cur];
 
     u32 wkpy_u32[10];
 
diff --git a/src/opencl.c b/src/opencl.c
index 43bfbc92b..fdfde553e 100644
--- a/src/opencl.c
+++ b/src/opencl.c
@@ -1144,17 +1144,6 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param,
     bool run_loop = true;
     bool run_comp = true;
 
-    if (hashconfig->hash_mode == 2500)
-    {
-      wpa_t *esalts_buf = hashes->esalts_buf;
-
-      if (esalts_buf[salt_pos].essid_reuse == 1)
-      {
-        run_init = false;
-        run_loop = false;
-      }
-    }
-
     if (run_init == true)
     {
       CL_rc = run_kernel_amp (hashcat_ctx, device_param, pws_cnt);
@@ -3608,7 +3597,7 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx)
 
     size_t size_plains  = hashes->digests_cnt * sizeof (plain_t);
     size_t size_salts   = hashes->salts_cnt   * sizeof (salt_t);
-    size_t size_esalts  = hashes->salts_cnt   * hashconfig->esalt_size;
+    size_t size_esalts  = hashes->digests_cnt * hashconfig->esalt_size;
     size_t size_shown   = hashes->digests_cnt * sizeof (u32);
     size_t size_digests = hashes->digests_cnt * hashconfig->dgst_size;
 
diff --git a/src/potfile.c b/src/potfile.c
index 935c2fc8f..486a295fd 100644
--- a/src/potfile.c
+++ b/src/potfile.c
@@ -24,7 +24,7 @@ int sort_by_hash_no_salt (const void *v1, const void *v2, void *v3);
 
 // this function is for potfile comparison where the potfile does not contain all the
 // information requires to do a true sort_by_hash() bsearch
-static int sort_by_hash_t_salt (const void *v1, const void *v2)
+static int sort_by_hash_t_salt (const void *v1, const void *v2, void *v3)
 {
   const hash_t *h1 = (const hash_t *) v1;
   const hash_t *h2 = (const hash_t *) v2;
@@ -446,7 +446,7 @@ int potfile_remove_parse (hashcat_ctx_t *hashcat_ctx)
 
         hash_buf.salt->salt_len = line_hash_len;
 
-        found = (hash_t *) bsearch (&hash_buf, hashes_buf, hashes_cnt, sizeof (hash_t), sort_by_hash_t_salt);
+        found = (hash_t *) hc_bsearch_r (&hash_buf, hashes_buf, hashes_cnt, sizeof (hash_t), sort_by_hash_t_salt, (void *) hashconfig);
       }
     }
     else if (hashconfig->hash_mode == 2500)
@@ -482,7 +482,8 @@ int potfile_remove_parse (hashcat_ctx_t *hashcat_ctx)
 
         memcpy (hash_buf.salt->salt_buf, essid_pos, essid_len);
 
-        hash_buf.salt->salt_len = essid_len;
+        hash_buf.salt->salt_len  = essid_len;
+        hash_buf.salt->salt_iter = ROUNDS_WPA2 - 1;
 
         u32 hash[4];
 
@@ -491,13 +492,20 @@ int potfile_remove_parse (hashcat_ctx_t *hashcat_ctx)
         hash[2] = hex_to_u32 ((const u8 *) &hash_pos[16]);
         hash[3] = hex_to_u32 ((const u8 *) &hash_pos[24]);
 
-        hash_buf.salt->salt_buf[12] = byte_swap_32 (hash[0]);
-        hash_buf.salt->salt_buf[13] = byte_swap_32 (hash[1]);
-        hash_buf.salt->salt_buf[14] = byte_swap_32 (hash[2]);
-        hash_buf.salt->salt_buf[15] = byte_swap_32 (hash[3]);
+        hash[0] = byte_swap_32 (hash[0]);
+        hash[1] = byte_swap_32 (hash[1]);
+        hash[2] = byte_swap_32 (hash[2]);
+        hash[3] = byte_swap_32 (hash[3]);
+
+        u32 *digest = (u32 *) hash_buf.digest;
+
+        digest[0] = hash[0];
+        digest[1] = hash[1];
+        digest[2] = hash[2];
+        digest[3] = hash[3];
       }
 
-      found = (hash_t *) bsearch (&hash_buf, hashes_buf, hashes_cnt, sizeof (hash_t), sort_by_hash_t_salt);
+      found = (hash_t *) hc_bsearch_r (&hash_buf, hashes_buf, hashes_cnt, sizeof (hash_t), sort_by_hash, (void *) hashconfig);
     }
     else
     {