diff --git a/src/components/DistanceRequest.js b/src/components/DistanceRequest.js
index 19a3b9ec6926..453261f8607b 100644
--- a/src/components/DistanceRequest.js
+++ b/src/components/DistanceRequest.js
@@ -90,8 +90,8 @@ function DistanceRequest({iou, iouType, report, transaction, mapboxAccessToken})
     const previousWaypoints = usePrevious(waypoints);
     const haveWaypointsChanged = !_.isEqual(previousWaypoints, waypoints);
     const doesRouteExist = lodashHas(transaction, 'routes.route0.geometry.coordinates');
-    const shouldFetchRoute = (!doesRouteExist || haveWaypointsChanged) && !isLoadingRoute && TransactionUtils.validateWaypoints(waypoints);
-
+    const validatedWaypoints = TransactionUtils.getValidWaypoints(waypoints);
+    const shouldFetchRoute = (!doesRouteExist || haveWaypointsChanged) && !isLoadingRoute && _.size(validatedWaypoints) > 1;
     const waypointMarkers = useMemo(
         () =>
             _.filter(
@@ -149,14 +149,13 @@ function DistanceRequest({iou, iouType, report, transaction, mapboxAccessToken})
         const visibleAreaEnd = lodashGet(event, 'nativeEvent.contentOffset.y', 0) + scrollContainerHeight;
         setShouldShowGradient(visibleAreaEnd < scrollContentHeight);
     };
-
     useEffect(() => {
         if (isOffline || !shouldFetchRoute) {
             return;
         }
 
-        Transaction.getRoute(iou.transactionID, waypoints);
-    }, [shouldFetchRoute, iou.transactionID, waypoints, isOffline]);
+        Transaction.getRoute(iou.transactionID, validatedWaypoints);
+    }, [shouldFetchRoute, iou.transactionID, validatedWaypoints, isOffline]);
 
     useEffect(updateGradientVisibility, [scrollContainerHeight, scrollContentHeight]);
 
@@ -255,7 +254,7 @@ function DistanceRequest({iou, iouType, report, transaction, mapboxAccessToken})
                 success
                 style={[styles.w100, styles.mb4, styles.ph4, styles.flexShrink0]}
                 onPress={() => IOU.navigateToNextPage(iou, iouType, reportID, report)}
-                isDisabled={waypointMarkers.length < 2}
+                isDisabled={_.size(validatedWaypoints) < 2}
                 text={translate('common.next')}
             />
         </>
diff --git a/src/libs/TransactionUtils.js b/src/libs/TransactionUtils.js
index 5c1c688f796f..b31ebb0757c9 100644
--- a/src/libs/TransactionUtils.js
+++ b/src/libs/TransactionUtils.js
@@ -285,34 +285,56 @@ function getAllReportTransactions(reportID) {
 }
 
 /**
- * Verifies that the provided waypoints are valid
+ * Checks if a waypoint has a valid address
+ * @param {Object} waypoint
+ * @returns {Boolean} Returns true if the address is valid
+ */
+function waypointHasValidAddress(waypoint) {
+    if (!waypoint || !waypoint.address || typeof waypoint.address !== 'string' || waypoint.address.trim() === '') {
+        return false;
+    }
+    return true;
+}
+
+/**
+ * Filters the waypoints which are valid and returns those
  * @param {Object} waypoints
- * @returns {Boolean}
+ * @param {Boolean} reArrangeIndexes
+ * @returns {Object} validated waypoints
  */
-function validateWaypoints(waypoints) {
+function getValidWaypoints(waypoints, reArrangeIndexes = false) {
     const waypointValues = _.values(waypoints);
-
     // Ensure the number of waypoints is between 2 and 25
     if (waypointValues.length < 2 || waypointValues.length > 25) {
-        return false;
+        return {};
     }
 
-    for (let i = 0; i < waypointValues.length; i++) {
-        const currentWaypoint = waypointValues[i];
-        const previousWaypoint = waypointValues[i - 1];
+    let lastWaypointIndex = -1;
 
-        // Check if the waypoint has a valid address
-        if (!currentWaypoint || !currentWaypoint.address || typeof currentWaypoint.address !== 'string' || currentWaypoint.address.trim() === '') {
-            return false;
-        }
+    const validWaypoints = _.reduce(
+        waypointValues,
+        (acc, currentWaypoint, index) => {
+            const previousWaypoint = waypointValues[lastWaypointIndex];
+            // Check if the waypoint has a valid address
+            if (!waypointHasValidAddress(currentWaypoint)) {
+                return acc;
+            }
 
-        // Check for adjacent waypoints with the same address
-        if (previousWaypoint && currentWaypoint.address === previousWaypoint.address) {
-            return false;
-        }
-    }
+            // Check for adjacent waypoints with the same address
+            if (previousWaypoint && currentWaypoint.address === previousWaypoint.address) {
+                return acc;
+            }
 
-    return true;
+            const validatedWaypoints = {...acc, [`waypoint${reArrangeIndexes ? lastWaypointIndex + 1 : index}`]: currentWaypoint};
+
+            lastWaypointIndex += 1;
+
+            return validatedWaypoints;
+        },
+        {},
+    );
+
+    return validWaypoints;
 }
 
 export {
@@ -328,7 +350,7 @@ export {
     getAllReportTransactions,
     hasReceipt,
     isReceiptBeingScanned,
-    validateWaypoints,
+    getValidWaypoints,
     isDistanceRequest,
     hasMissingSmartscanFields,
 };
diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js
index 610e67a9c565..b4f04174c1ac 100644
--- a/src/libs/actions/IOU.js
+++ b/src/libs/actions/IOU.js
@@ -533,7 +533,7 @@ function createDistanceRequest(report, participant, comment, created, transactio
             createdChatReportActionID,
             createdIOUReportActionID,
             reportPreviewReportActionID: reportPreviewAction.reportActionID,
-            waypoints: JSON.stringify(transaction.comment.waypoints),
+            waypoints: JSON.stringify(TransactionUtils.getValidWaypoints(transaction.comment.waypoints, true)),
             created,
         },
         onyxData,
