diff --git a/app/packet_processor.py b/app/packet_processor.py
index 0d2a218..27a495b 100644
--- a/app/packet_processor.py
+++ b/app/packet_processor.py
@@ -521,8 +521,10 @@ async def process_raw_packet(
if decrypt_result:
result.update(decrypt_result)
- elif payload_type == PayloadType.ADVERT and is_new_packet:
- # Only process new advertisements (duplicates don't add value)
+ elif payload_type == PayloadType.ADVERT:
+ # Process all advert arrivals (even payload-hash duplicates) so the
+ # path-freshness logic in _process_advertisement can pick the shortest
+ # path heard within the freshness window.
await _process_advertisement(raw_bytes, ts, packet_info)
elif payload_type == PayloadType.TEXT_MESSAGE:
diff --git a/frontend/src/components/PacketVisualizer3D.tsx b/frontend/src/components/PacketVisualizer3D.tsx
index 46f7da3..05b230e 100644
--- a/frontend/src/components/PacketVisualizer3D.tsx
+++ b/frontend/src/components/PacketVisualizer3D.tsx
@@ -1651,7 +1651,11 @@ export function PacketVisualizer3D({
>
)}