diff --git a/src/instance/requests/Request.cpp b/src/instance/requests/Request.cpp
index 20effe172c4a99c843510948c1ca35ea3d415537..57ca2cc86465383c7e0393970b548bd22e263ce6 100644
--- a/src/instance/requests/Request.cpp
+++ b/src/instance/requests/Request.cpp
@@ -60,15 +60,20 @@ Request::Request(const DATRow& currentRow, const Graph& graph) {
         std::from_chars(currentRow[5].data(), currentRow[5].data() + currentRow[5].size(), _weight);
     }
 
-
-    if(!setDepartureTW) {
+    //If set arrival but not departure, deduce it from delta
+    if(!setDepartureTW && setArrivalTW) {
         _departureTW.min = _arrivalTW.min - _deltaTime;
         _departureTW.max = _arrivalTW.max - graph.getShortestSAEVPath(_originNodeIndex, _destinationNodeIndex);
-    }
-    if(!setArrivalTW) {
+    //If set departure but not arrival, deduce it from delta
+    } else if(setDepartureTW && !setArrivalTW) {
         _arrivalTW.min = _departureTW.min + graph.getShortestSAEVPath(_originNodeIndex, _destinationNodeIndex);
         _arrivalTW.max = _departureTW.max + _deltaTime;
+    //If both TWs are set, override delta which might not be set
+    } else if(setDepartureTW && setArrivalTW) {
+        _deltaTime = _arrivalTW.max - _departureTW.max;
     }
+
+    //Check TWs at the end
     if(_departureTW.min > _departureTW.max || _arrivalTW.min > _arrivalTW.max)
         throw TimeWindow::invalid_time_window_exception();
 }
@@ -82,7 +87,7 @@ std::vector<Request> Request::getRequestsFromFile(const std::string& datFilePath
 
     std::ifstream infile(datFilePath);
     assertm(!infile.fail(), "Failed to open the given file");
-    DATRow currentRow = DATRow(',');
+    DATRow currentRow(',');
 
     //-- Read params
     infile >> currentRow;