diff --git a/src/sakia/data/repositories/meta.py b/src/sakia/data/repositories/meta.py
index bd08ef3d504a8092c58e3f4a16d6b40e2a6b7f19..fd37d379d873d189457b5343c72ff241ad041961 100644
--- a/src/sakia/data/repositories/meta.py
+++ b/src/sakia/data/repositories/meta.py
@@ -2,14 +2,14 @@ import attr
 import os
 import logging
 import sqlite3
-from duniterpy.documents import BlockUID
+from duniterpy.documents import BlockUID, MalformedDocumentError
 from .connections import ConnectionsRepo
 from .identities import IdentitiesRepo
 from .blockchains import BlockchainsRepo
 from .certifications import CertificationsRepo
 from .transactions import TransactionsRepo, Transaction
 from .dividends import DividendsRepo
-from .nodes import NodesRepo
+from .nodes import NodesRepo, Node
 from .sources import SourcesRepo
 from .contacts import ContactsRepo
 
@@ -73,7 +73,8 @@ class SakiaDatabase:
             self.add_contacts,
             self.add_sentry_property,
             self.add_last_state_change_property,
-            self.refactor_transactions
+            self.refactor_transactions,
+            self.drop_incorrect_nodes
         ]
 
     def upgrade_database(self, to=0):
@@ -151,6 +152,22 @@ class SakiaDatabase:
         with self.conn:
             self.conn.executescript(sql_file.read())
 
+    def drop_incorrect_nodes(self):
+        self._logger.debug("Drop incorrect nodes")
+        with self.conn:
+            c = self.conn.execute("SELECT * FROM nodes")
+            data = c.fetchone()
+            while data:
+                try:
+                    Node(*data)
+                except MalformedDocumentError:
+                    self._logger.debug("Dropping node {0}".format(data[1]))
+                    self.conn.execute("""DELETE FROM nodes
+                                         WHERE
+                                         currency=? AND pubkey=?""", (data[0], data[1]))
+                finally:
+                    data = c.fetchone()
+
     def version(self):
         with self.conn:
             c = self.conn.execute("SELECT * FROM meta WHERE id=1")
diff --git a/src/sakia/data/repositories/nodes.py b/src/sakia/data/repositories/nodes.py
index 4206b7a097a59254e46f4c293ee03800d7ad622e..368a0e85979fe204473c51d795b6fbcb0908da64 100644
--- a/src/sakia/data/repositories/nodes.py
+++ b/src/sakia/data/repositories/nodes.py
@@ -72,10 +72,7 @@ class NodesRepo:
         c = self._conn.execute(request, tuple(values))
         data = c.fetchone()
         if data:
-            try:
-                return Node(*data)
-            except MalformedDocumentError:
-                pass
+            return Node(*data)
 
     def get_all(self, **search):
         """
@@ -101,13 +98,7 @@ class NodesRepo:
         c = self._conn.execute(request, tuple(values))
         datas = c.fetchall()
         if datas:
-            nodes = []
-            for data in datas:
-                try:
-                    nodes.append(Node(*data))
-                except MalformedDocumentError:
-                    pass
-            return nodes
+            return [Node(*data) for data in datas]
         return []
 
     def drop(self, node):