diff --git a/.gitignore b/.gitignore
index 7ed0d6b679399a08baa8c4e3d4ee2f95d898f0e5..66cba166c656cd93079d45dcd0c15921d3319d5f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@ target/
 !**/src/main/**/target/
 !**/src/test/**/target/
 
+output-data/
+
 ### STS ###
 .apt_generated
 .classpath
diff --git a/core/src/main/java/cz/muni/pa165/data/model/Car.java b/core/src/main/java/cz/muni/pa165/data/model/Car.java
index 7bc7ff16dfa0666c31be90f237e7bcfd82355009..b1e9cee840e2a775f7485edc42405a296a184ad2 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/Car.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/Car.java
@@ -16,14 +16,12 @@ public class Car extends DomainObject<Long> implements Serializable {
     @OneToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "driver_id")
     @Nullable
-    @JsonManagedReference
     private Driver driver;
 
     @OneToMany(fetch = FetchType.LAZY,
             mappedBy = "car",
             cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE})
     @Nonnull
-    @JsonManagedReference
     private Set<CarComponent> components;
 
     public Car() {
diff --git a/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java b/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java
index 068b397de21927684429b764d7e5ab2ccd8134d6..f980efdc69661c0e740b19d4074ce0040413e355 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java
@@ -1,6 +1,6 @@
 package cz.muni.pa165.data.model;
 
-import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import cz.muni.pa165.data.enums.ComponentTypeEnum;
 import jakarta.annotation.Nonnull;
 import jakarta.annotation.Nullable;
@@ -32,7 +32,7 @@ public class CarComponent extends DomainObject<Long> implements Serializable {
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "car_id")
     @Nullable
-    @JsonBackReference
+    @JsonIgnore
     private Car car;
 
     public CarComponent() {
diff --git a/core/src/main/java/cz/muni/pa165/data/model/Driver.java b/core/src/main/java/cz/muni/pa165/data/model/Driver.java
index 8bf59f42d0e06727262661bc2332759e68ebd639..58977ff6e11aa090d17b2921093393ee553bd919 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/Driver.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/Driver.java
@@ -1,6 +1,6 @@
 package cz.muni.pa165.data.model;
 
-import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import cz.muni.pa165.data.enums.CharacteristicsEnum;
 import jakarta.annotation.Nonnull;
 import jakarta.annotation.Nullable;
@@ -48,7 +48,7 @@ public class Driver extends DomainObject<Long> implements Serializable {
             mappedBy = "driver",
             cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE})
     @Nullable
-    @JsonBackReference
+    @JsonIgnore
     private Car car;
 
     public Driver() {
diff --git a/core/src/main/java/cz/muni/pa165/service/CarService.java b/core/src/main/java/cz/muni/pa165/service/CarService.java
index 171f5abf830ad943a7eb4b244c98d6353c0a2383..60052f1616e2383b9eb05358af2785eebf922fdf 100644
--- a/core/src/main/java/cz/muni/pa165/service/CarService.java
+++ b/core/src/main/java/cz/muni/pa165/service/CarService.java
@@ -11,16 +11,17 @@ import cz.muni.pa165.exceptions.ResourceNotFoundException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.http.MediaType;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.core.io.Resource;
 import org.springframework.web.client.RestClientException;
 import org.springframework.web.reactive.function.client.WebClient;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -184,11 +185,7 @@ public class CarService extends DomainService<Car> {
                 .contentType(MediaType.APPLICATION_JSON)
                 .bodyValue(visualization)
                 .retrieve()
-                .bodyToMono(new ParameterizedTypeReference<Map<String, Object>>() {
-                })
-                .doOnError(error -> {
-                    throw new RestClientException("Failed to send POST request", error);
-                })
+                .bodyToMono(Resource.class)
                 .block();
     }
 }
diff --git a/visualization/openapi.yaml b/visualization/openapi.yaml
index 355209dfb35d510662d5fc6e04313f6f278ac3f2..e0246f24960d10975d6d5f686be76e322f9f2ca3 100644
--- a/visualization/openapi.yaml
+++ b/visualization/openapi.yaml
@@ -155,7 +155,12 @@ paths:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/CarDto'
+              type: object
+              properties:
+                car:
+                  $ref: '#/components/schemas/CarDto'
+              required:
+                - car
       responses:
         "200":
           description: OK
diff --git a/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java b/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java
index 71e84077d9b553cd27327d4a8ede576a4bf7719c..155ca6fef900ee31e730efd08456ef296f9e554f 100644
--- a/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java
+++ b/visualization/src/main/java/cz/muni/pa165/rest/VisualizationController.java
@@ -3,6 +3,7 @@ package cz.muni.pa165.rest;
 import cz.muni.pa165.facade.VisualizationFacade;
 import cz.muni.pa165.generated.api.VisualizationApiDelegate;
 import cz.muni.pa165.generated.model.CarDto;
+import cz.muni.pa165.generated.model.GenerateCarPdfRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,12 +28,13 @@ public class VisualizationController implements VisualizationApiDelegate {
     }
 
     @Override
-    public ResponseEntity<Resource> generateCarPdf(CarDto carDto) {
+    public ResponseEntity<Resource> generateCarPdf(GenerateCarPdfRequest generateCarPdfRequest) {
         log.debug("generateCarPdf() called");
         try {
-            var resource = visualizationFacade.generateCarPdf(carDto);
+            var resource = visualizationFacade.generateCarPdf(generateCarPdfRequest.getCar());
             return ResponseEntity.ok()
-                    .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=generated.pdf")
+                    .header(HttpHeaders.CONTENT_DISPOSITION,
+                            String.format("attachment; filename=car-%s.pdf", generateCarPdfRequest.getCar().getId()))
                     .contentType(MediaType.APPLICATION_PDF)
                     .contentLength(resource.contentLength())
                     .body(resource);
diff --git a/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java b/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java
index e393143c321aaeb2293c116a61fea6fa95003f55..472dd7f5db2b2d87021cb022d98a26a659823e00 100644
--- a/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java
+++ b/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java
@@ -14,7 +14,6 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Objects;
 
 @Service
 public class VisualizationService {