diff --git a/src/cutecoin/core/txhistory.py b/src/cutecoin/core/txhistory.py
index 264e6fd5330e689cad5ad431d0045c2d2fb20a61..3c2f05a4a280c5b0cecf438464235484f185f72e 100644
--- a/src/cutecoin/core/txhistory.py
+++ b/src/cutecoin/core/txhistory.py
@@ -89,7 +89,7 @@ class TxHistory():
         """
         Parse a transaction
         :param cutecoin.core.Community community: The community
-        :param dict tx: The tx json data
+        :param ucoinpy.documents.Transaction tx: The tx json data
         :param int block_number: The block number were we found the tx
         :param int mediantime: Median time on the network
         :param list received_list: The list of received transactions
@@ -184,29 +184,37 @@ class TxHistory():
         :return: The list of transfers sent
         """
         block = None
+        block_doc = None
         tries = 0
         while block is None and tries < 3:
-            block = yield from community.bma_access.future_request(bma.blockchain.Block,
+            try:
+                block = yield from community.bma_access.future_request(bma.blockchain.Block,
                                       req_args={'number': block_number})
-            signed_raw = "{0}{1}\n".format(block['raw'],
+                signed_raw = "{0}{1}\n".format(block['raw'],
                                            block['signature'])
-            transfers = []
-            try:
-                block_doc = Block.from_signed_raw(signed_raw)
-            except:
-                logging.debug("Error in {0}".format(block_number))
-                block = None
-                tries += 1
-
-        for (txid, tx) in enumerate(block_doc.transactions):
-            transfer = yield from self._parse_transaction(community, tx, block_number,
-                                    block_doc.mediantime, received_list,
-                                    current_block, txid+txmax)
-            if transfer != None:
-                logging.debug("Transfer amount : {0}".format(transfer.metadata['amount']))
-                transfers.append(transfer)
-            else:
-                logging.debug("None transfer")
+                transfers = []
+                try:
+                    block_doc = Block.from_signed_raw(signed_raw)
+                except TypeError:
+                    logging.debug("Error in {0}".format(block_number))
+                    block = None
+                    tries += 1
+            except ValueError as e:
+                if '404' in str(e):
+                    block = None
+                    tries += 1
+        if block_doc:
+            for (txid, tx) in enumerate(block_doc.transactions):
+                transfer = yield from self._parse_transaction(community, tx, block_number,
+                                        block_doc.mediantime, received_list,
+                                        current_block, txid+txmax)
+                if transfer != None:
+                    logging.debug("Transfer amount : {0}".format(transfer.metadata['amount']))
+                    transfers.append(transfer)
+                else:
+                    logging.debug("None transfer")
+        else:
+            logging.debug("Could not find or parse block {0}".format(block_number))
         return transfers
 
     @asyncio.coroutine