diff --git a/backend/Pipfile b/backend/Pipfile
index fc4576c..8d9b3da 100644
--- a/backend/Pipfile
+++ b/backend/Pipfile
@@ -11,6 +11,7 @@ httpx = "*"
 exceptiongroup = "*"
 pytest-html = "*"
 typing-extensions = "*"
+dill = "*"
 
 [packages]
 numpy = "*"
diff --git a/backend/Pipfile.lock b/backend/Pipfile.lock
index 37698e7..b3b4f05 100644
--- a/backend/Pipfile.lock
+++ b/backend/Pipfile.lock
@@ -1,7 +1,7 @@
 {
     "_meta": {
         "hash": {
-            "sha256": "4b48cf17e386da01e0b323e8444797de47837b8ee298aa4646ea7f93d67755d5"
+            "sha256": "0af258788e2a8ae214f9af013cd7a7b19fb3adb941d4ea1de23902daf9062f5a"
         },
         "pipfile-spec": 6,
         "requires": {},
@@ -1687,7 +1687,8 @@
                 "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a",
                 "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"
             ],
-            "markers": "python_version >= '3.11'",
+            "index": "pypi",
+            "markers": "python_version >= '3.8'",
             "version": "==0.3.9"
         },
         "exceptiongroup": {
diff --git a/backend/report.html b/backend/report.html
index 19f894c..753edd0 100644
--- a/backend/report.html
+++ b/backend/report.html
@@ -328,7 +328,7 @@ div.media {
   </head>
   <body>
     <h1 id="title">Backend Testing Report</h1>
-    <p>Report generated on 20-Nov-2024 at 16:43:04 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a>
+    <p>Report generated on 21-Nov-2024 at 14:51:16 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a>
         v4.1.1</p>
     <div id="environment-header">
       <h2>Environment</h2>
@@ -382,7 +382,7 @@ div.media {
         <h2>Summary</h2>
         <div class="additional-summary prefix">
         </div>
-        <p class="run-count">3 tests took 00:00:09.</p>
+        <p class="run-count">3 tests took 00:00:43.</p>
         <p class="filter">(Un)check the boxes to filter the results.</p>
         <div class="summary__reload">
           <div class="summary__reload__button hidden" onclick="location.reload()">
@@ -432,7 +432,7 @@ div.media {
     </table>
   </body>
   <footer>
-    <div id="data-container" data-jsonblob="{&#34;environment&#34;: {&#34;Python&#34;: &#34;3.12.3&#34;, &#34;Platform&#34;: &#34;Linux-6.8.0-48-generic-x86_64-with-glibc2.39&#34;, &#34;Packages&#34;: {&#34;pytest&#34;: &#34;8.3.3&#34;, &#34;pluggy&#34;: &#34;1.5.0&#34;}, &#34;Plugins&#34;: {&#34;html&#34;: &#34;4.1.1&#34;, &#34;metadata&#34;: &#34;3.1.1&#34;, &#34;anyio&#34;: &#34;4.6.2.post1&#34;}}, &#34;tests&#34;: {&#34;src/tests/test_main.py::test_new_trip_invalid_prefs&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;src/tests/test_main.py::test_new_trip_invalid_prefs&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;src/tests/test_main.py::test_new_trip_invalid_prefs&lt;/td&gt;&#34;, &#34;&lt;td&gt;N/A&lt;/td&gt;&#34;, &#34;&lt;td&gt;N/A&lt;/td&gt;&#34;, &#34;&lt;td&gt;N/A&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;12 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;src/tests/test_main.py::test_turckheim&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;src/tests/test_main.py::test_turckheim&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;src/tests/test_main.py::test_turckheim&lt;/td&gt;&#34;, &#34;&lt;td&gt;start (0) - 5 - Porte de France (257) - 5 - finish (0) - 0&lt;/td&gt;&#34;, &#34;&lt;td&gt;15 min&lt;/td&gt;&#34;, &#34;&lt;td&gt;15 min&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;18 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;src/tests/test_main.py::test_bellecour&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;src/tests/test_main.py::test_bellecour&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;src/tests/test_main.py::test_bellecour&lt;/td&gt;&#34;, &#34;&lt;td&gt;start (0) - 3 - M\u00e9morial Lyonnais du G\u00e9nocide Arm\u00e9nien (265) - 4 - \u00c9glise Saint-Fran\u00e7ois-de-Sales (211) - 7 - Basilique Saint-Martin d&#39;Ainay (333) - 11 - finish (0) - 0&lt;/td&gt;&#34;, &#34;&lt;td&gt;40 min&lt;/td&gt;&#34;, &#34;&lt;td&gt;35 min&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:00:08&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;client = &amp;lt;starlette.testclient.TestClient object at 0x7bca5bce57c0&amp;gt;\nrequest = &amp;lt;FixtureRequest for &amp;lt;Function test_bellecour&amp;gt;&amp;gt;\n\n    def test_bellecour(client, request) :\n        duration_minutes = 35\n        response = client.post(\n            &amp;quot;/trip/new&amp;quot;,\n            json={\n                &amp;quot;preferences&amp;quot;: {&amp;quot;sightseeing&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;sightseeing&amp;quot;, &amp;quot;score&amp;quot;: 5}, &amp;quot;nature&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;nature&amp;quot;, &amp;quot;score&amp;quot;: 5}, &amp;quot;shopping&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;shopping&amp;quot;, &amp;quot;score&amp;quot;: 5}, &amp;quot;max_time_minute&amp;quot;: duration_minutes, &amp;quot;detour_tolerance_minute&amp;quot;: 0},\n                &amp;quot;start&amp;quot;: [45.7576485, 4.8330241]\n                }\n            )\n        result = response.json()\n        landmarks = load_trip_landmarks(client, result[&amp;#x27;first_landmark_uuid&amp;#x27;])\n        osm_ids = landmarks_to_osmid(landmarks)\n    \n        # Create the trip string\n        trip_string = [f&amp;quot;{landmark.name} ({landmark.attractiveness}) - {landmark.time_to_reach_next}&amp;quot; for landmark in landmarks]\n    \n        # Pass additional info to pytest for reporting\n        request.node.trip_details = trip_string\n        request.node.trip_duration = str(result[&amp;#x27;total_time&amp;#x27;])\n        request.node.target_duration = str(duration_minutes)\n    \n        # checks :\n        assert response.status_code == 200  # check for successful planning\n        assert duration_minutes*0.8 &amp;lt; int(result[&amp;#x27;total_time&amp;#x27;]) &amp;lt; duration_minutes*1.2\n&amp;gt;       assert 136200148 in osm_ids         # check for Cath\u00e9drale St. Jean in trip\nE       assert 136200148 in [0, 265922306, 82260098, 82254733, 0]\n\nsrc/tests/test_main.py:78: AssertionError\n&#34;}]}, &#34;renderCollapsed&#34;: [&#34;passed&#34;], &#34;initialSort&#34;: &#34;result&#34;, &#34;title&#34;: &#34;Backend Testing Report&#34;}"></div>
+    <div id="data-container" data-jsonblob="{&#34;environment&#34;: {&#34;Python&#34;: &#34;3.12.3&#34;, &#34;Platform&#34;: &#34;Linux-6.8.0-49-generic-x86_64-with-glibc2.39&#34;, &#34;Packages&#34;: {&#34;pytest&#34;: &#34;8.3.3&#34;, &#34;pluggy&#34;: &#34;1.5.0&#34;}, &#34;Plugins&#34;: {&#34;html&#34;: &#34;4.1.1&#34;, &#34;metadata&#34;: &#34;3.1.1&#34;, &#34;anyio&#34;: &#34;4.6.2.post1&#34;}}, &#34;tests&#34;: {&#34;src/tests/test_main.py::test_new_trip_invalid_prefs&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;src/tests/test_main.py::test_new_trip_invalid_prefs&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;src/tests/test_main.py::test_new_trip_invalid_prefs&lt;/td&gt;&#34;, &#34;&lt;td&gt;N/A&lt;/td&gt;&#34;, &#34;&lt;td&gt;N/A&lt;/td&gt;&#34;, &#34;&lt;td&gt;N/A&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;15 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;src/tests/test_main.py::test_turckheim&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;src/tests/test_main.py::test_turckheim&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;src/tests/test_main.py::test_turckheim&lt;/td&gt;&#34;, &#34;&lt;td&gt;start (0) - 5 - Porte de France (257) - 5 - finish (0) - 0&lt;/td&gt;&#34;, &#34;&lt;td&gt;15 min&lt;/td&gt;&#34;, &#34;&lt;td&gt;15 min&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;29 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;src/tests/test_main.py::test_bellecour&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;src/tests/test_main.py::test_bellecour&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;src/tests/test_main.py::test_bellecour&lt;/td&gt;&#34;, &#34;&lt;td&gt;start (0) - 11 - Impasse Turquet (387) - 9 - Site historique de Lyon (681) - 13 - Fontaine des Jacobins (163) - 6 - finish (0) - 0&lt;/td&gt;&#34;, &#34;&lt;td&gt;54 min&lt;/td&gt;&#34;, &#34;&lt;td&gt;50 min&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:00:43&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;client = &amp;lt;starlette.testclient.TestClient object at 0x79ec42b03980&amp;gt;\nrequest = &amp;lt;FixtureRequest for &amp;lt;Function test_bellecour&amp;gt;&amp;gt;\n\n    def test_bellecour(client, request) :\n        duration_minutes = 50\n        response = client.post(\n            &amp;quot;/trip/new&amp;quot;,\n            json={\n                &amp;quot;preferences&amp;quot;: {&amp;quot;sightseeing&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;sightseeing&amp;quot;, &amp;quot;score&amp;quot;: 5}, &amp;quot;nature&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;nature&amp;quot;, &amp;quot;score&amp;quot;: 5}, &amp;quot;shopping&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;shopping&amp;quot;, &amp;quot;score&amp;quot;: 5}, &amp;quot;max_time_minute&amp;quot;: duration_minutes, &amp;quot;detour_tolerance_minute&amp;quot;: 0},\n                &amp;quot;start&amp;quot;: [45.7576485, 4.8330241]\n                }\n            )\n        result = response.json()\n        landmarks = load_trip_landmarks(client, result[&amp;#x27;first_landmark_uuid&amp;#x27;])\n        osm_ids = landmarks_to_osmid(landmarks)\n    \n        # Create the trip string\n        trip_string = [f&amp;quot;{landmark.name} ({landmark.attractiveness}) - {landmark.time_to_reach_next}&amp;quot; for landmark in landmarks]\n    \n        # Pass additional info to pytest for reporting\n        request.node.trip_details = trip_string\n        request.node.trip_duration = str(result[&amp;#x27;total_time&amp;#x27;])\n        request.node.target_duration = str(duration_minutes)\n    \n        # checks :\n        assert response.status_code == 200  # check for successful planning\n        assert duration_minutes*0.8 &amp;lt; int(result[&amp;#x27;total_time&amp;#x27;]) &amp;lt; duration_minutes*1.2\n&amp;gt;       assert 136200148 in osm_ids         # check for Cath\u00e9drale St. Jean in trip\nE       assert 136200148 in [0, 120502985, 236823541, 25101472, 0]\n\nsrc/tests/test_main.py:78: AssertionError\n&#34;}]}, &#34;renderCollapsed&#34;: [&#34;passed&#34;], &#34;initialSort&#34;: &#34;result&#34;, &#34;title&#34;: &#34;Backend Testing Report&#34;}"></div>
     <script>
       (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
 const { getCollapsedCategory, setCollapsedIds } = require('./storage.js')
diff --git a/backend/src/tests/test_main.py b/backend/src/tests/test_main.py
index b8201ae..18b465b 100644
--- a/backend/src/tests/test_main.py
+++ b/backend/src/tests/test_main.py
@@ -36,7 +36,7 @@ def test_turckheim(client, request):
     landmarks = load_trip_landmarks(client, result['first_landmark_uuid'])
 
     # Create the trip string
-    trip_string = [f"{landmark.name} ({landmark.attractiveness}) - {landmark.time_to_reach_next}" for landmark in landmarks]
+    trip_string = [f"{landmark.name} ({landmark.attractiveness} | {landmark.duration}) - {landmark.time_to_reach_next}" for landmark in landmarks]
     
     # Pass additional info to pytest for reporting
     request.node.trip_details = trip_string