diff --git a/app/modules/prover/lib/proof.ts b/app/modules/prover/lib/proof.ts
index 9d631b6dd4a8b958921e3a2363c457332998625c..1d723da5f768c7661b09c167407d5904949a0982 100644
--- a/app/modules/prover/lib/proof.ts
+++ b/app/modules/prover/lib/proof.ts
@@ -17,7 +17,7 @@ import {hashf} from "../../../lib/common"
 import {DBBlock} from "../../../lib/db/DBBlock"
 import {ConfDTO} from "../../../lib/dto/ConfDTO"
 import {ProverConstants} from "./constants"
-import {KeyGen} from "../../../lib/common-libs/crypto/keyring"
+import {KeyGen, verify, verifyBuggy} from "../../../lib/common-libs/crypto/keyring"
 import {dos2unix} from "../../../lib/common-libs/dos2unix"
 import {rawer} from "../../../lib/common-libs/index"
 import {ProcessCpuProfiler} from "../../../ProcessCpuProfiler"
@@ -36,7 +36,9 @@ export function createPowWorker() {
 // By default, we do not prefix the PoW by any number
   let prefix = 0;
 
-  let signatureFunc:any, lastSecret:any, lastVersion: number, currentCPU = 1;
+  let sigFuncSaved: (msg:string) => string; 
+  let verifyFuncSaved: (msg:string, sig:string) => boolean;
+  let lastSecret:any, lastVersion: number, currentCPU:number = 1;
 
   process.on('uncaughtException', (err:any) => {
     console.error(err.stack || Error(err))
@@ -115,24 +117,36 @@ export function createPowWorker() {
         prefix *= 100 * ProverConstants.NONCE_RANGE
       }
       const highMark = stuff.highMark;
+
+      // Define sigFunc
+      // Use Buggy version for performance reasons
       let sigFunc = null;
-      if (signatureFunc && lastSecret === pair.sec && lastVersion === block.version) {
-        sigFunc = signatureFunc;
+      if (sigFuncSaved && lastSecret === pair.sec) {
+        sigFunc = sigFuncSaved;
+      } else {
+        lastSecret = pair.sec;
+        sigFunc = (msg:string) => KeyGen(pair.pub, pair.sec).signSyncBuggy(msg)
+      }
+
+      // Define verifyFunc
+      let verifyFunc = null;
+      if (verifyFuncSaved && lastSecret === pair.sec && lastVersion === block.version) {
+        verifyFunc = verifyFuncSaved;
       } else {
         lastSecret = pair.sec;
         lastVersion = block.version;
         if (block.version >= 12) {
-          sigFunc = (msg:string) => KeyGen(pair.pub, pair.sec).signSync(msg)
+          verifyFunc = (msg:string, sig:string) => verify(msg, sig, pair.pub)
         } else {
-          sigFunc = (msg:string) => KeyGen(pair.pub, pair.sec).signSyncBuggy(msg)
+          verifyFunc = (msg:string, sig:string) => verifyBuggy(msg, sig, pair.pub)
         }
       }
-      let pow = "", sig = "", raw = "";
-
+      
       /*****************
        * GO!
        ****************/
-
+      
+      let pow = "", sig = "", raw = "";
       let pausePeriod = 1;
       let testsCount = 0;
       let found = false;
@@ -198,6 +212,12 @@ export function createPowWorker() {
               }
               if (charOK) {
                 found = !!(pow[nbZeros].match(new RegExp('[0-' + highMark + ']')))
+                if (found) {
+                  let sigOk = verifyFunc(raw, sig);
+                  if (!sigOk) {
+                    found = false;
+                  }
+                }
               }
               if (!found && nbZeros > 0 && j - 1 >= ProverConstants.POW_MINIMAL_TO_SHOW) {
                 pSend({ pow: { pow: pow, block: block, nbZeros: nbZeros }});