diff --git a/app/lib/rules/local_rules.ts b/app/lib/rules/local_rules.ts
index 93b8e4aa19df8131ab24ec43599e4a926badf6ce..d2f62c6c80fd36aeb09b1827c15920fd3fadca4c 100644
--- a/app/lib/rules/local_rules.ts
+++ b/app/lib/rules/local_rules.ts
@@ -346,9 +346,13 @@ export const LOCAL_RULES_FUNCTIONS = {
   },
 
   checkTxAmounts: async (block:BlockDTO) => {
+    let result = true;
     for (const tx of block.transactions) {
-      LOCAL_RULES_HELPERS.checkTxAmountsValidity(tx);
+      if (!LOCAL_RULES_HELPERS.checkTxAmountsValidity(tx)) {
+        result = false;
+      }
     }
+    return result;
   },
 
   checkTxRecipients: async (block:BlockDTO) => {
@@ -430,21 +434,26 @@ function checkSingleMembershipSignature(ms:any) {
   return verify(ms.getRaw(), ms.signature, ms.issuer);
 }
 
-function checkBunchOfTransactions(transactions:TransactionDTO[], conf:ConfDTO, options?:{ dontCareAboutChaining?:boolean }){
+function checkBunchOfTransactions(transactions:TransactionDTO[], conf:ConfDTO, options?:{ dontCareAboutChaining?:boolean }):Promise<boolean>{
   const block:any = { transactions, identities: [], joiners: [], actives: [], leavers: [], revoked: [], excluded: [], certifications: [] };
   const index = Indexer.localIndex(block, conf)
-  return (async () => {
-    let local_rule = LOCAL_RULES_FUNCTIONS;
-    await local_rule.checkTxLen(block);
-    await local_rule.checkTxIssuers(block);
-    await local_rule.checkTxSources(block);
-    await local_rule.checkTxRecipients(block);
-    await local_rule.checkTxAmounts(block);
-    await local_rule.checkTxSignature(block);
-    if (!options || !options.dontCareAboutChaining) {
-      await local_rule.checkMaxTransactionChainingDepth(block, conf, index);
-    }
-  })()
+  let local_rule = LOCAL_RULES_FUNCTIONS;
+  return Promise.all([
+    local_rule.checkTxLen(block),
+    local_rule.checkTxIssuers(block),
+    local_rule.checkTxSources(block),
+    local_rule.checkTxRecipients(block),
+    local_rule.checkTxAmounts(block),
+    local_rule.checkTxSignature(block),
+    local_rule.checkMaxTransactionChainingDepth(block, conf, index),
+  ]).then(function(values) {
+    for (const value of values) {
+      if (!value) {
+        return false;
+      }
+    }
+    return true;
+  });
 }
 
 export const LOCAL_RULES_HELPERS = {
@@ -509,6 +518,7 @@ export const LOCAL_RULES_HELPERS = {
       }
       deltas[i] = delta;
     }
+    return true;
   },
 
   getMaxPossibleVersionNumber: async (current:DBBlock) => {
diff --git a/app/modules/prover/lib/blockGenerator.ts b/app/modules/prover/lib/blockGenerator.ts
index fc98c01e124e18b4b7c023cd2ad76e1a70aa5e15..5ed9d9b413c443d8271b03b37a8eb00a495ccbaf 100644
--- a/app/modules/prover/lib/blockGenerator.ts
+++ b/app/modules/prover/lib/blockGenerator.ts
@@ -104,7 +104,7 @@ export class BlockGenerator {
     return [cur, newWoTMembers, finalJoinData, leavers, updates];
   }
 
-  private async findTransactions(current:DBBlock, options:{ dontCareAboutChaining?:boolean }) {
+  private async findTransactions(current:DBBlock, options:{ dontCareAboutChaining:boolean }) {
     const ALSO_CHECK_PENDING_TXS = true
     const versionMin = current ? Math.min(CommonConstants.LAST_VERSION_FOR_TX, current.version) : CommonConstants.DOCUMENTS_VERSION;
     const txs = await this.dal.getTransactionsPending(versionMin);
@@ -113,26 +113,23 @@ export class BlockGenerator {
     for (const obj of txs) {
       obj.currency = this.conf.currency
       const tx = TransactionDTO.fromJSONObject(obj);
-      try {
-        /*const tx_check_1 = Promise.all([await LOCAL_RULES_HELPERS.checkBunchOfTransactions(passingTxs.concat(tx), this.conf, options)])
         const nextBlockWithFakeTimeVariation = { medianTime: current.medianTime + 1 };
-        const tx_check_2 = Promise.all([await GLOBAL_RULES_HELPERS.checkSingleTransaction(tx, nextBlockWithFakeTimeVariation, this.conf, this.dal, ALSO_CHECK_PENDING_TXS)])
-        const tx_check_3 = Promise.all([await GLOBAL_RULES_HELPERS.checkTxBlockStamp(tx, this.dal)])
-        if (tx_check_1 && tx_check_2 && tx_check_3) {
+        let logger = this.logger;
+        Promise.all([
+          await LOCAL_RULES_HELPERS.checkBunchOfTransactions(passingTxs.concat(tx), this.conf, options),
+          await GLOBAL_RULES_HELPERS.checkSingleTransaction(tx, nextBlockWithFakeTimeVariation, this.conf, this.dal, ALSO_CHECK_PENDING_TXS),
+          await GLOBAL_RULES_HELPERS.checkTxBlockStamp(tx, this.dal)
+        ]).then(function(values) {
+          if (values[0] && values[1])
           transactions.push(tx);
           passingTxs.push(tx);
-          this.logger.info('Transaction %s added to block', tx.hash);
-        }*/
-      } catch (err) {
-        this.logger.error(err);
-        const currentNumber = (current && current.number) || 0;
-        const blockstamp = tx.blockstamp || (currentNumber + '-');
-        const txBlockNumber = parseInt(blockstamp.split('-')[0]);
-        // 10 blocks before removing the transaction
-        if (currentNumber - txBlockNumber + 1 >= CommonConstants.TRANSACTION_MAX_TRIES) {
-          await this.dal.removeTxByHash(tx.hash);
-        }
-      }
+          logger.info('Transaction %s added to block', tx.hash);
+        }).catch (function(err) {
+          logger.error(err);
+          const currentNumber = (current && current.number) || 0;
+          const blockstamp = tx.blockstamp || (currentNumber + '-');
+          const txBlockNumber = parseInt(blockstamp.split('-')[0]);
+        });
     }
     return transactions;
   }