diff --git a/src/cutecoin/core/community.py b/src/cutecoin/core/community.py
index 66ce45019bdbf13a1b0c82f32e9f4dc87122e3dc..e96b8768d7520799ffaea4d3f80b3c172540d969 100644
--- a/src/cutecoin/core/community.py
+++ b/src/cutecoin/core/community.py
@@ -62,10 +62,7 @@ class Community(object):
         # After initializing the community from latest peers,
         # we refresh its peers tree
         logging.debug("Creating community")
-        found_peers = self.peering()
-        for p in found_peers:
-            if p.pubkey not in [peer.pubkey for peer in self.peers]:
-                self.peers.append(p)
+        self.peers = self.peering()
         logging.debug("{0} peers found".format(len(self.peers)))
         logging.debug([peer.pubkey for peer in peers])
 
@@ -114,14 +111,39 @@ class Community(object):
         else:
             return 1
 
+    def _peering_traversal(self, peer, found_peers, traversed_pubkeys):
+        logging.debug("Read {0} peering".format(peer.pubkey))
+        traversed_pubkeys.append(peer.pubkey)
+        if peer.currency == self.currency and \
+            peer.pubkey not in [p.pubkey for p in found_peers]:
+            found_peers.append(peer)
+        try:
+            e = next(e for e in peer.endpoints if type(e) is BMAEndpoint)
+            next_peers = bma.network.peering.Peers(e.conn_handler()).get()
+            for p in next_peers:
+                next_peer = Peer.from_signed_raw("{0}{1}\n".format(p['value']['raw'],
+                                                            p['value']['signature']))
+                logging.debug(traversed_pubkeys)
+                logging.debug("Traversing : next to read : {0} : {1}".format(next_peer.pubkey,
+                              (next_peer.pubkey not in traversed_pubkeys)))
+                if next_peer.pubkey not in traversed_pubkeys:
+                    self._peering_traversal(next_peer, found_peers, traversed_pubkeys)
+        except ConnectTimeout:
+            pass
+        except TimeoutError:
+            pass
+
     def peering(self):
         peers = []
-        peering_data = self.request(bma.network.peering.Peers)
-        logging.debug("Peering : {0}".format(peering_data))
-        for peer in peering_data:
-            logging.debug(peer)
-            peers.append(Peer.from_signed_raw("{0}{1}\n".format(peer['value']['raw'],
-                                                                peer['value']['signature'])))
+        traversed_pubkeys = []
+        for p in self.peers:
+            logging.debug(traversed_pubkeys)
+            logging.debug("Peering : next to read : {0} : {1}".format(p.pubkey,
+                          (p.pubkey not in traversed_pubkeys)))
+            if p.pubkey not in traversed_pubkeys:
+                self._peering_traversal(p, peers, traversed_pubkeys)
+
+        logging.debug("Peers found : {0}".format(peers))
         return peers
 
     def get_block(self, number=None):