diff --git a/app/lib/globalValidator.js b/app/lib/globalValidator.js
index 86eec9df4eb239b14bd63af614ffa7a93bad4b1b..d0bba89815cc860e2c1cf6b17fdb5764afc9f782 100644
--- a/app/lib/globalValidator.js
+++ b/app/lib/globalValidator.js
@@ -47,7 +47,7 @@ function GlobalValidator (conf, dao) {
     { name: 'checkCertificationsAreMadeToMembers',  func: check(checkCertificationsAreMadeToMembers)  },
     { name: 'checkCertificationsDelayIsRespected',  func: check(checkCertificationsDelayIsRespected)  },
     { name: 'checkMembersCountIsGood',              func: check(checkMembersCountIsGood)              },
-    { name: 'checkProofOfWork',                     func: check(checkFingerprint)                     },
+    { name: 'checkProofOfWork',                     func: check(checkProofOfWork)                     },
     { name: 'checkUD',                              func: check(checkUD)                              },
     { name: 'checkTransactions',                    func: check(checkSourcesAvailability)             }
   ];
@@ -289,7 +289,7 @@ function GlobalValidator (conf, dao) {
     ], done);
   }
 
-  function checkFingerprint (block, done) {
+  function checkProofOfWork (block, done) {
     async.waterfall([
       function (next){
         dao.getCurrent(next);
@@ -485,14 +485,68 @@ function GlobalValidator (conf, dao) {
               }
             });
             interBlocksCount = issuers.length;
+            next();
           } else {
-            // Number of blocks between 2 last blocks of issuer
-            interBlocksCount = Math.abs(lasts[0].number - lasts[1].number - 1);
+            // Number of different issuers between 2 last blocks of issuer
+            async.waterfall([
+              function (next) {
+                //----- Interblocks -----
+                var issuers = [];
+                var i = lasts[0].number - 1; // Start excluding last block of issuer
+                async.whilst(
+                  function(){ return i > lasts[1].number && issuers.length < 40 - conf.powZeroMin; }, // End exluding first block of issuer
+                  function (next) {
+                    async.waterfall([
+                      function (next){
+                        dao.getBlock(i, next);
+                      },
+                      function (block, next){
+                        if (issuers.indexOf(block.issuer) == -1) {
+                          issuers.push(block.issuer);
+                        }
+                        i--;
+                        next();
+                      },
+                    ], next);
+                  }, function (err) {
+                    interBlocksCount = issuers.length;
+                    next();
+                  });
+              },
+              function (next) {
+                //----- Following blocks -----
+                var issuers = [];
+                var neededMax = interBlocksCount;
+                var i = current.number; // Start INCLUDING current number
+                async.whilst(
+                  function(){ return i > lasts[0].number && issuers.length < neededMax; }, // End exluding last block, stop if reaches 0 difficulty
+                  function (next) {
+                    async.waterfall([
+                      function (next){
+                        dao.getBlock(i, next);
+                      },
+                      function (block, next){
+                        if (issuers.indexOf(block.issuer) == -1) {
+                          issuers.push(block.issuer);
+                        }
+                        i--;
+                        next();
+                      },
+                    ], next);
+                  }, function (err) {
+                    followingBlocksCount = issuers.length;
+                    next();
+                  });
+              }
+            ], next);
           }
         }
+        else next(); // No block for issuer
+      },
+      function (next) {
         var nbZeros = Math.max(conf.powZeroMin, lastBlockNbZeros + interBlocksCount - followingBlocksCount);
         next(null, nbZeros);
-      },
+      }
     ], done);
   }
 
diff --git a/test/data/blocks.js b/test/data/blocks.js
index 9dbadcac224549a3b691abd62d0079fff2355059..f75bf75540384c85a69510bc2f42e1a5aa11caa1 100644
--- a/test/data/blocks.js
+++ b/test/data/blocks.js
@@ -1542,8 +1542,8 @@ module.exports = {
     "Version: 1\n" +
     "Type: Block\n" +
     "Currency: beta_brousouf\n" +
-    "Nonce: 10\n" +
-    "Number: 62\n" +
+    "Nonce: 3\n" +
+    "Number: 67\n" +
     "Date: 1411776000\n" +
     "ConfirmedDate: 1411776000\n" +
     "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
diff --git a/test/fast/block/block_global.js b/test/fast/block/block_global.js
index 2109d42b14f8dd6ebcec3f90f1b250e73b608a9e..f1c2087e3cbef0d16f645b94699522a2f1402032 100644
--- a/test/fast/block/block_global.js
+++ b/test/fast/block/block_global.js
@@ -519,7 +519,7 @@ function BlockCheckerDao (block) {
     else if (block.number == 83)
       done(null, { date: 1411777000, confirmedDate: 1411777000, confirmedDateChanged: true });
     // Tests for TrialLevel
-    else if (block.number >= 60 && block.number <= 66)
+    else if (block.number >= 60 && block.number <= 67)
       done(null, { number: block.number - 1 });
     else if (block.number == 90)
       done(null, { date: 1443333600, confirmedDate: 1443333600, confirmedDateChanged: true });
@@ -532,6 +532,20 @@ function BlockCheckerDao (block) {
       done(null, { hash: 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709', confirmedDate: 1411773000 });
     else if (number == 70)      
       done(null, { confirmedDate: 1411775000 });
+    else if (number == 59)      
+      done(null, { issuer: 'G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU' });
+    else if (number == 61)      
+      done(null, { issuer: 'G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU' });
+    else if (number == 62)      
+      done(null, { issuer: 'AbCCJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' });
+    else if (number == 63)      
+      done(null, { issuer: 'AbCCJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' });
+    else if (number == 64)      
+      done(null, { issuer: 'G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU' });
+    else if (number == 65)      
+      done(null, { issuer: 'AbCCJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' });
+    else if (number == 66)      
+      done(null, { issuer: 'AbCCJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' });
     else
       done('No block found', null);
   }
@@ -551,7 +565,7 @@ function BlockCheckerDao (block) {
     if (block.number == 60 && issuer == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd') {
       done(null, [{
         number: 59,
-        hash: '0000AB8A955B2196FB8560DCDA7A70B19DDB3433' // 4 zeros + 2 blocks following - 0 since = 4 required zeros
+        hash: '0000AB8A955B2196FB8560DCDA7A70B19DDB3433' // 4 zeros + 0 interblock - 0 block since = 4 required zeros
       },{
         number: 58,
       }]);
@@ -562,18 +576,18 @@ function BlockCheckerDao (block) {
       },{
         number: 58,
       }]);
-    } else if (block.number == 62 && issuer == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd') {
+    } else if (block.number == 66 && issuer == 'AbCCJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd') {
+      done(null, [{
+        number: 65,
+        hash: '0123458A955B2196FB8560DCDA7A70B19DDB3433'
+      }]);
+    } else if (block.number == 67 && issuer == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd') {
       done(null, [{
         number: 60,
-        hash: '0000008A955B2196FB8560DCDA7A70B19DDB3433' // 6 zeros + 1 interblock - 1 block since = 6 required zeros
+        hash: '0000008A955B2196FB8560DCDA7A70B19DDB3433' // 6 zeros + 2 (3 blocks with 2 diff. issuers) interblock - 2 (3 blocks with 2 diff. issuers) block since = 6 required zeros
       },{
         number: 58,
       }]);
-    }else if (block.number == 66 && issuer == 'AbCCJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd') {
-      done(null, [{
-        number: 65,
-        hash: '0123458A955B2196FB8560DCDA7A70B19DDB3433'
-      }]);
     } else {
       done(null, null);
     }