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 cfd36d0e767f35be14f300ccdc7a8271e7e4168e..883d1caf6a5ebe96aa6c8f78f3d2b4b1b29bef0f 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
@@ -1,5 +1,6 @@
 package cz.muni.pa165.data.model;
 
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import jakarta.annotation.Nonnull;
 import jakarta.annotation.Nullable;
 import jakarta.persistence.*;
@@ -15,12 +16,14 @@ public class Car extends DomainObject 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 f5641c0d22840e9cd6737e45d1d9e8ca716fa621..4dd89fd90717b45df9ae4f60f3006ba491cccf98 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,5 +1,6 @@
 package cz.muni.pa165.data.model;
 
+import com.fasterxml.jackson.annotation.JsonBackReference;
 import cz.muni.pa165.data.enums.ComponentTypeEnum;
 import jakarta.annotation.Nonnull;
 import jakarta.annotation.Nullable;
@@ -29,6 +30,7 @@ public class CarComponent extends DomainObject implements Serializable {
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "car_id")
     @Nullable
+    @JsonBackReference
     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 efa7bad06caf0c425cf334b18f929505357dd926..8650b6fadf0153173d23a646641035c660ad5c9f 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,5 +1,6 @@
 package cz.muni.pa165.data.model;
 
+import com.fasterxml.jackson.annotation.JsonBackReference;
 import cz.muni.pa165.data.enums.CharacteristicsEnum;
 import jakarta.annotation.Nonnull;
 import jakarta.annotation.Nullable;
@@ -47,6 +48,7 @@ public class Driver extends DomainObject implements Serializable {
             mappedBy = "driver",
             cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE})
     @Nullable
+    @JsonBackReference
     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 ea7292782c3410d98f3ed2c305281773d732c865..0ccc051378f01c6a73f1dea568369efaa54da638 100644
--- a/core/src/main/java/cz/muni/pa165/service/CarService.java
+++ b/core/src/main/java/cz/muni/pa165/service/CarService.java
@@ -8,30 +8,44 @@ import cz.muni.pa165.data.repository.CarRepository;
 import cz.muni.pa165.data.repository.DriverRepository;
 import cz.muni.pa165.exceptions.BadRequestException;
 import cz.muni.pa165.exceptions.ResourceNotFoundException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 @Service
 public class CarService extends DomainService<Car> {
-
+    private static final Logger log = LoggerFactory.getLogger(CarService.class);
     private final DriverRepository driverRepository;
     private final CarRepository carRepository;
     private final CarComponentRepository carComponentRepository;
 
+    private final RestTemplate restTemplate;
+
+    private static final String VISUALIZATION_MODULE_URL = "http://localhost:8082/visualization";
+
     @Autowired
     public CarService(CarRepository carRepository, DriverRepository driverRepository,
-                      CarComponentRepository carComponentRepository) {
+                      CarComponentRepository carComponentRepository, RestTemplate restTemplate) {
         super(carRepository, Car.class);
         this.driverRepository = driverRepository;
         this.carRepository = carRepository;
         this.carComponentRepository = carComponentRepository;
+        this.restTemplate = restTemplate;
     }
 
     public Car create(List<Long> componentIds) {
@@ -95,7 +109,15 @@ public class CarService extends DomainService<Car> {
 
         carFromDb.get().setDriver(driverFromDb.get());
 
-        return repository.save(carFromDb.get());
+        var savedCar = repository.save(carFromDb.get());
+
+        try {
+            sendPostRequest(savedCar);
+        } catch (RestClientException | IllegalArgumentException e) {
+            log.debug(String.format("The visualization module is not reachable on the URL: %s, exception %s", VISUALIZATION_MODULE_URL, e));
+        }
+
+        return savedCar;
     }
 
     public Car removeDriver(Long carId) {
@@ -153,4 +175,14 @@ public class CarService extends DomainService<Car> {
             repository.save(car);
         }
     }
+
+    private void sendPostRequest(Car car) {
+        Map<String, Object> visualization = new HashMap<>();
+        visualization.put("car", car);
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<Map<String, Object>> request = new HttpEntity<>(visualization, headers);
+        restTemplate.postForObject(VISUALIZATION_MODULE_URL, request, String.class);
+    }
 }
diff --git a/core/src/main/java/cz/muni/pa165/service/DriverService.java b/core/src/main/java/cz/muni/pa165/service/DriverService.java
index 33359e94acc730fa99aa5dc5c2fb7fb40fbc81ba..67740ec8e6c16f12dc84dc81b8fb76d3c70a6b99 100644
--- a/core/src/main/java/cz/muni/pa165/service/DriverService.java
+++ b/core/src/main/java/cz/muni/pa165/service/DriverService.java
@@ -4,20 +4,11 @@ import cz.muni.pa165.data.model.Driver;
 import cz.muni.pa165.data.repository.DriverRepository;
 import cz.muni.pa165.exceptions.BadRequestException;
 import cz.muni.pa165.exceptions.ResourceNotFoundException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.client.RestClientException;
-import org.springframework.web.client.RestTemplate;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 
 /**
@@ -26,19 +17,12 @@ import java.util.Optional;
 @Service
 public class DriverService extends DomainService<Driver> {
 
-    private static final Logger log = LoggerFactory.getLogger(DriverService.class);
-
     private final DriverRepository driverRepository;
 
-    private final RestTemplate restTemplate;
-
-    private static final String VISUALIZATION_MODULE_URL = "http://localhost:8082/visualization";
-
     @Autowired
-    public DriverService(DriverRepository repository, RestTemplate restTemplate) {
+    public DriverService(DriverRepository repository) {
         super(repository, Driver.class);
         driverRepository = repository;
-        this.restTemplate = restTemplate;
     }
 
     @Transactional(readOnly = true)
@@ -48,12 +32,6 @@ public class DriverService extends DomainService<Driver> {
             throw new ResourceNotFoundException(entityClass, id);
         }
 
-        try {
-            sendPostRequest(dbDriver.get());
-        } catch (RestClientException | IllegalArgumentException e) {
-            log.debug(String.format("The visualization module is not reachable on the URL: %s", VISUALIZATION_MODULE_URL));
-        }
-
         return dbDriver.get();
     }
 
@@ -91,17 +69,5 @@ public class DriverService extends DomainService<Driver> {
 
         repository.delete(driverFromDb.get());
     }
-
-    private void sendPostRequest(Driver driver) {
-        Map<String, Object> body = new HashMap<>();
-        body.put("data", driver.toString());
-
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_JSON);
-        HttpEntity<Map<String, Object>> request = new HttpEntity<>(body, headers);
-        restTemplate.postForObject(VISUALIZATION_MODULE_URL, request, String.class);
-
-        log.debug(String.format("Sent request %s to %s.", request, VISUALIZATION_MODULE_URL));
-    }
 }
 
diff --git a/core/src/test/java/cz/muni/pa165/service/CarServiceTest.java b/core/src/test/java/cz/muni/pa165/service/CarServiceTest.java
index b4b00d4f14348d149acc69161a6cb66dc7e79a83..71dd68663fa4718674e1c4317c3610ee4eb1a7b9 100644
--- a/core/src/test/java/cz/muni/pa165/service/CarServiceTest.java
+++ b/core/src/test/java/cz/muni/pa165/service/CarServiceTest.java
@@ -17,6 +17,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
+import org.springframework.web.client.RestTemplate;
 
 import java.util.Arrays;
 import java.util.List;
@@ -41,6 +42,9 @@ public class CarServiceTest {
     @Mock
     private CarComponentRepository carComponentRepository;
 
+    @Mock
+    private RestTemplate restTemplate;
+
     @InjectMocks
     private CarService carService;
     private Car car;
diff --git a/core/src/test/java/cz/muni/pa165/service/DriverServiceTest.java b/core/src/test/java/cz/muni/pa165/service/DriverServiceTest.java
index 86bab1676609ad09f9f0a7e6fea7035972c1d8fa..5a068711033d61450240baec7c405344d101c623 100644
--- a/core/src/test/java/cz/muni/pa165/service/DriverServiceTest.java
+++ b/core/src/test/java/cz/muni/pa165/service/DriverServiceTest.java
@@ -23,13 +23,11 @@ import static org.mockito.Mockito.*;
 class DriverServiceTest {
     private DriverService driverService;
     private DriverRepository driverRepository;
-    private RestTemplate restTemplate;
 
     @BeforeEach
     void setUp() {
         driverRepository = mock(DriverRepository.class);
-        restTemplate = mock(RestTemplate.class);
-        driverService = new DriverService(driverRepository, restTemplate);
+        driverService = new DriverService(driverRepository);
     }
 
     @Test
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 110af86ae1ff9c0d90b475750d1b20028ea2da04..2444161f7901ae1703d58e7e22587235874e7b47 100644
--- a/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java
+++ b/visualization/src/main/java/cz/muni/pa165/service/VisualizationService.java
@@ -11,6 +11,8 @@ import org.springframework.stereotype.Service;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 
 @Service
 public class VisualizationService {
@@ -23,10 +25,8 @@ public class VisualizationService {
             // Create a content stream for the page
             PDPageContentStream contentStream = new PDPageContentStream(document, page);
 
-            // Set the font and font size for the content stream
             contentStream.setFont(PDType1Font.HELVETICA_BOLD, 16);
 
-            // Write some text to the content stream
             contentStream.beginText();
             contentStream.newLineAtOffset(100, 700);
             contentStream.showText("Generated car PDF");
@@ -100,6 +100,9 @@ public class VisualizationService {
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             document.save(baos);
 
+            // Save generated file
+            Files.write(Paths.get(String.format("C:\\WORKSPACE\\car-%s.pdf", carDto.getId())), baos.toByteArray());
+
             return new ByteArrayResource(baos.toByteArray());
         }
     }
diff --git a/visualization/src/test/java/cz/muni/pa165/rest/IntegrationTests.java b/visualization/src/test/java/cz/muni/pa165/rest/IntegrationTests.java
index 57cd983d37cbd57c106c9b73a1e6af94ca735e82..97a22f2bb86a0e8cafd78e26ccb02b225d88fbb2 100644
--- a/visualization/src/test/java/cz/muni/pa165/rest/IntegrationTests.java
+++ b/visualization/src/test/java/cz/muni/pa165/rest/IntegrationTests.java
@@ -1,6 +1,10 @@
-/*
 package cz.muni.pa165.rest;
 
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import cz.muni.pa165.generated.model.CarDto;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,43 +14,43 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.http.MediaType;
 import org.springframework.test.web.servlet.MockMvc;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
-*/
 /**
  * Integration tests. Run by "mvn verify / mvn test / mvn clean install".
- * No need to test all the rest controllers logic here, just test that the endpoints are working
- *//*
+ * No need to test all the rest controllers logic here, just test that the endpoints are working*/
+
 
 @SpringBootTest
 @AutoConfigureMockMvc
 class IntegrationTests {
 
     private static final Logger log = LoggerFactory.getLogger(IntegrationTests.class);
+    private final ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());
 
     @Autowired
     private MockMvc mockMvc;
 
     @Test
-    void testVisualizationModuleResponse() throws Exception {
-        log.info("testVisualizationModuleResponse() running");
+    void testGenerateCarPdf() throws Exception {
+        log.info("testCreateCar() running");
 
-        String testRequestContent = "{\"data\":\"Hello\"}";
+        var carDto = new CarDto().id(1L);
+        var requestBody = mapper.writeValueAsString(carDto);
 
         String response = mockMvc.perform(
                         post("/visualization")
-                                .accept(MediaType.APPLICATION_JSON)
+                                .accept(MediaType.APPLICATION_PDF)
                                 .contentType(MediaType.APPLICATION_JSON)
-                                .content(testRequestContent))
+                                .content(requestBody))
                 .andExpect(status().isOk())
-                .andReturn().getResponse().getContentAsString();
+                .andReturn().getResponse().getContentType();
         log.info("response: {}", response);
 
-        String expectedResponse = "{\"message\":\"--VISUALIZATION--Hello\"}";
-
-        assertEquals(expectedResponse, response);
+        Assertions.assertNotNull(response);
+        Assertions.assertEquals("application/pdf", response);
     }
 
-}*/
+
+}
diff --git a/visualization/src/test/java/cz/muni/pa165/rest/VisualizationControllerTest.java b/visualization/src/test/java/cz/muni/pa165/rest/VisualizationControllerTest.java
index 8fffd2e622aab16f470bb18681a67fd7c22db3cc..48900adcd521221852e772ec74cb8c82d22b91d5 100644
--- a/visualization/src/test/java/cz/muni/pa165/rest/VisualizationControllerTest.java
+++ b/visualization/src/test/java/cz/muni/pa165/rest/VisualizationControllerTest.java
@@ -1,16 +1,14 @@
 /*
 package cz.muni.pa165.rest;
 
-import cz.muni.pa165.generated.model.VisualizationSchemaCreateDto;
-import cz.muni.pa165.generated.model.VisualizationSchemaDto;
+import cz.muni.pa165.facade.VisualizationFacade;
+import cz.muni.pa165.generated.model.CarDto;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
+import java.io.IOException;
 
 */
 /**
@@ -19,15 +17,19 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 class VisualizationControllerTest {
     private static final Logger log = LoggerFactory.getLogger(VisualizationControllerTest.class);
-    private final VisualizationController visualizationController = new VisualizationController();
+    private final VisualizationFacade mockFacade = Mockito.mock(VisualizationFacade.class);
+    private final VisualizationController controller = new VisualizationController(mockFacade);
+
 
     @Test
-    void testGetVisualization() {
-        log.debug("testGetVisualization() running");
+    void testGenerateCarPdf() throws IOException {
+        log.debug("testGenerateCarPdf() running");
+
+        var car = new CarDto().id(1L);
 
-        ResponseEntity<VisualizationSchemaDto> responseEntity = visualizationController.getVisualization(new VisualizationSchemaCreateDto().data("test"));
-        assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
-        assertNotNull(responseEntity.getBody());
-        assertEquals("--VISUALIZATION--test", responseEntity.getBody().getMessage());
+        controller.generateCarPdf(car);
+
+        Mockito.verify(mockFacade, Mockito.times(1)).generateCarPdf(car);
     }
-}*/
+}
+*/