diff --git a/lib/components/viewers/route-details.js b/lib/components/viewers/route-details.js
index <HASH>..<HASH> 100644
--- a/lib/components/viewers/route-details.js
+++ b/lib/components/viewers/route-details.js
@@ -182,6 +182,7 @@ class RouteDetails extends Component {
       Object.entries(patterns)
         .map((pattern) => {
           return {
+            geometryLength: pattern[1].geometry?.length,
             headsign: extractHeadsignFromPattern(pattern[1]),
             id: pattern[0]
           }
@@ -190,7 +191,14 @@ class RouteDetails extends Component {
         // with a specific headsign is the accepted one. TODO: is this good behavior?
         .reduce((prev, cur) => {
           const amended = prev
-          if (!prev.find(h => h.headsign === cur.headsign)) {
+          const alreadyExistingIndex = prev.findIndex(h => h.headsign === cur.headsign)
+          // If the item we're replacing has less geometry, replace it!
+          if (alreadyExistingIndex >= 0) {
+            // Only replace if new pattern has greater geometry
+            if (amended[alreadyExistingIndex].geometryLength < cur.geometryLength) {
+              amended[alreadyExistingIndex] = cur
+            }
+          } else {
             amended.push(cur)
           }
           return amended
improvement(route-details): resolve duplicate headsigns based on geometry length