diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peers.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peers.java
index 9988fc91179f1fc4a98f5cfe709e65918b8d4862..5c4f28a8cae932a94eb68829ade62bd0377a0212 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peers.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peers.java
@@ -24,6 +24,7 @@ package org.duniter.core.client.model.local;
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Sets;
 import org.duniter.core.client.model.bma.*;
@@ -84,11 +85,32 @@ public final class Peers {
         return peer.getStats() != null && peer.getStats().isReacheable();
     }
 
+    public static NetworkPeers.Peer toBmaPeer(Peer endpointAsPeer) {
+        NetworkPeers.Peer result = new NetworkPeers.Peer();
+
+        try {
+            // Fill BMA peer, using the raw document
+            NetworkPeerings.parse(endpointAsPeer.getPeering().getRaw(), result);
+            // Override the status, last_try and first_down, using stats
+            Peer.PeerStatus status = getStatus(endpointAsPeer).orElse(Peer.PeerStatus.DOWN);
+            result.setStatus(status.name());
+            if (status == Peer.PeerStatus.UP) {
+                result.setLastTry(getLastUpTime(endpointAsPeer).get());
+            } else {
+                result.setFirstDown(getFirstDownTime(endpointAsPeer).get());
+            }
+            return result;
+
+        } catch (IOException e) {
+            log.error("Unable to parse peering raw document found in: " + e.getMessage());
+            // Continue to next endpoint
+        }
+        return null;
+    }
+
     public static List<NetworkPeers.Peer> toBmaPeers(List<Peer> endpointAsPeers) {
         if (CollectionUtils.isEmpty(endpointAsPeers)) return null;
 
-        Joiner keyJoiner = Joiner.on(':');
-
         // Group by peering document
         Multimap<String, Peer> groupByPeering = ArrayListMultimap.create();
         endpointAsPeers.stream()
@@ -118,31 +140,9 @@ public final class Peers {
                     processedPubkeys.add(pubkey);
 
                     // Get the first endpoint found for this pubkey
-                    for (Peer peer: groupByPeering.get(peeringKey)) {
-                        NetworkPeers.Peer result = new NetworkPeers.Peer();
-
-                        try {
-                            // Fill BMA peer, using the raw document
-                            NetworkPeerings.parse(peer.getPeering().getRaw(), result);
-                            // Override the status, last_try and first_down, using stats
-                            Peer.PeerStatus status = getStatus(peer).orElse(Peer.PeerStatus.DOWN);
-                            result.setStatus(status.name());
-                            if (status == Peer.PeerStatus.UP) {
-                                result.setLastTry(getLastUpTime(peer).get());
-                            } else {
-                                result.setFirstDown(getFirstDownTime(peer).get());
-                            }
-                            return result;
-
-                        } catch (IOException e) {
-                            log.error("Unable to parse peering raw document found in: " + e.getMessage());
-                            // Continue to next endpoint
-                        }
-
-
-                    }
-
-                    return null;
+                    return groupByPeering.get(peeringKey).stream().map(Peers::toBmaPeer)
+                            .filter(Objects::nonNull)
+                            .findFirst().orElse(null);
                 })
                 // Remove skipped items
                 .filter(Objects::nonNull)