diff --git a/lib/webserver.js b/lib/webserver.js
index 3edf2c82dcf8683001053d2569783bfd08d94e6e..640ecefb69b4d37cf20aa57c2c725bfd309f9494 100644
--- a/lib/webserver.js
+++ b/lib/webserver.js
@@ -1009,31 +1009,34 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
     try {
       // get GET parameters
       var begin = 0;// Default Value
-      if( typeof(req.query.begin) != 'undefined' ) { begin = req.query.begin; }
+      if( typeof(req.query.begin) != 'undefined' && req.query.begin >= 0) { begin = req.query.begin; }
       var end = -1;// Default Value is current timestamp
-      if( typeof(req.query.end) != 'undefined' ) { begin = req.query.end; }
+      if( typeof(req.query.end) != 'undefined' && req.query.end >= 0) { end = req.query.end; }
+      
+      // get beginBlock and endBlock
+      var beginBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime` FROM block WHERE `number` = '+begin+' LIMIT 1');
+      var endBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime` FROM block WHERE `number` = '+end+' LIMIT 1');
       
-      // get full blockchain
+      // get blockchain
       if (end >= begin && begin >= 0)
       {
-        var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `number` < '+end+' AND `number` > '+begin+' ORDER BY `medianTime` ASC');
+        var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` < '+endBlock[0].medianTime+' AND `medianTime` > '+beginBlock[0].medianTime+' ORDER BY `medianTime` ASC');
       }
       else
       {
-	var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `number` > '+begin+' ORDER BY `medianTime` ASC');
+	var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` > '+beginBlock[0].medianTime+' ORDER BY `medianTime` ASC');
       }
-      //var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `medianTime` < '+end+' AND `medianTime` > '+begin+' ORDER BY `medianTime` ASC');
-      
+     
       // get blockchain timestamp
-      const currentBlockNumber = blockchain.length-1;
+      const currentBlockNumber = begin+blockchain.length-1;
       const currentBlockchainTimestamp = blockchain[currentBlockNumber].medianTime;
+      if (end == -1) { end = currentBlockNumber; }
       
       // get idtys list
       var idtys = yield duniterServer.dal.peerDAL.query('SELECT `uid`,`pub` FROM i_index WHERE `wasMember`=1');
 
       // get current membersCount
       const currentMembersCount = blockchain[currentBlockNumber].membersCount;
-      //console.log("blockchain[currentBlockNumber].membersCount %s", blockchain[currentBlockNumber].membersCount);
       
       // create and initialize tabNbBlockByMember and tabIndexMembers
       var tabNbBlockByMember = [ [] ];
@@ -1100,7 +1103,7 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
       }
       
       // Appeler le module blockChart
-      let blockChartMod = blockChart(req, res, tabNbBlockByMemberSort, currentBlockNumber);
+      let blockChartMod = blockChart(req, res, tabNbBlockByMemberSort, currentBlockNumber, begin, end);
       
       // renvoyer les données en JSON
       //var response = JSON.stringify(tabNbBlockByMemberSort);
@@ -1122,21 +1125,25 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
       var begin = 0;// Default Value
       if( typeof(req.query.begin) != 'undefined' ) { begin = req.query.begin; }
       var end = -1;// Default Value is current timestamp
-      if( typeof(req.query.end) != 'undefined' ) { begin = req.query.end; }
+      if( typeof(req.query.end) != 'undefined' ) { end = req.query.end; }
       
-      // get full blockchain
+      // get beginBlock and endBlock
+      var beginBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime` FROM block WHERE `number` = '+begin+' LIMIT 1');
+      var endBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime` FROM block WHERE `number` = '+end+' LIMIT 1');
+      
+      // get blockchain
       if (end >= begin && begin >= 0)
       {
-        var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`monetaryMass`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `number` < '+end+' AND `number` > '+begin+' ORDER BY `medianTime` ASC');
+        var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`monetaryMass`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` < '+endBlock[0].medianTime+' AND `medianTime` > '+beginBlock[0].medianTime+' ORDER BY `medianTime` ASC');
       }
       else
       {
-	var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`monetaryMass`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `number` > '+begin+' ORDER BY `medianTime` ASC');
+	var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`monetaryMass`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `fork`=0 AND `medianTime` > '+beginBlock[0].medianTime+' ORDER BY `medianTime` ASC');
       }
       
       // get blockchain timestamp
-      const currentBlockNumber = blockchain.length-1;
-      const currentBlockchainTimestamp = blockchain[currentBlockNumber].medianTime;
+      const currentBlockNumber = begin+blockchain.length-1;
+      const currentBlockchainTimestamp = blockchain[blockchain.length-1].medianTime;
       
       // create and fill tabMembersCount, tabMonetaryMass, tabCurrency and currentDividend
       var tabMembersCount = [];
@@ -1152,7 +1159,7 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
 	  tabMembersCount.push(blockchain[b].membersCount);
 	  tabMonetaryMass.push(blockchain[b].monetaryMass);
 	  tabCurrency.push({
-	    blockNumber: b,
+	    blockNumber: blockchain[b].number,
 	    timestamp: blockchain[b].medianTime,
 	    membersCount: blockchain[b].membersCount,
 	    monetaryMass: blockchain[b].monetaryMass,