     ]
   }
   
+  func build(movingStartOf prototype: TKSegment, to location: TKModeCoordinate) throws -> [String: Any] {
+    
+    guard
+      let trip = prototype.trip,
+      let sharingMode = prototype.modeIdentifier,
+      let segmentEnd = prototype.end?.coordinate
+      else { throw TKWaypointRouter.WaypointError.segmentNotEligible }
+    
+    var paras: [String: Any] = [
+      "config": TKSettings.defaultDictionary(),
+      "vehicles": TKAPIToCoreDataConverter.vehiclesPayload(for: vehicles)
+    ]
+    
+    var nonSharingModes = trip.usedModeIdentifiers()
+    nonSharingModes.remove(sharingMode)
+    if nonSharingModes.isEmpty {
+      nonSharingModes.insert("wa_wal")
+    }
+
+    var waypoints: [[String: Any]] = []
+    let a = TKParserHelper.requestString(for: trip.request.fromLocation.coordinate)
+    let b = TKParserHelper.requestString(for: location.coordinate)
+    let c = TKParserHelper.requestString(for: segmentEnd)
+    let d = TKParserHelper.requestString(for: trip.request.toLocation.coordinate)
+
+    // 1. Get to the vehicle using non-sharing modes
+    waypoints.append([
+      "modes": Array(nonSharingModes),
+      "start": a,
+      "end": b,
+      "startTime": trip.departureTime.timeIntervalSince1970
+    ])
+    
+    // 2. Use the vehicle to its destination
+    waypoints.append([
+      "modes": [sharingMode],
+      "start": b,
+      "end": c
+    ])
+    
+    // 3. From there, use the other non-sharing modes
+    waypoints.append([
+      "modes": Array(nonSharingModes),
+      "start": c,
+      "end": d
+    ])
+
+    paras["waypoints"] = waypoints
+
+    return paras
+  }
+    
 }
-

    return paras
  }
  
  
  // MARK: - Tuning public transport trips
  
  @objc(fetchTripMovingSegment:toVisit:atStart:usingPrivateVehicles:completion:)
  public func _fetchTrip(moving segment: TKSegment, to visit: StopVisits, atStart: Bool, usingPrivateVehicles vehicles: [TKVehicular] = [], completion: @escaping (Trip?, Error?) -> Void) {
    fetchTrip(moving: segment, to: visit, atStart: atStart, usingPrivateVehicles: vehicles) { (result: Result<Trip, Error>) in
      result.callHandler(completion)
    }

  }
  
  
  /// :nodoc:
  @objc(fetchTripWithPattern:departure:usingPrivateVehicles:intoTripKit:inRegion:completion:)
  public static func _fetchTrip(pattern: [TKSegmentPattern], departure: Date, usingPrivateVehicles vehicles: [TKVehicular] = [], into tripKit: TKTripKit, in region: TKRegion, completion: @escaping (Trip?, Error?) -> Void) {
    fetchTrip(pattern: pattern, departure: departure, usingPrivateVehicles: vehicles, into: tripKit, in: region) { (result: Result<Trip, Error>) in
      result.callHandler(completion)
    }
