diff --git a/car/pom.xml b/car/pom.xml
index 91c37dc076ca0fde137a06281d1b7a961e2b8624..108906b91dc88f29a16498d97bfb96d11cdf4082 100644
--- a/car/pom.xml
+++ b/car/pom.xml
@@ -70,4 +70,37 @@
         <maven.compiler.target>17</maven.compiler.target>
     </properties>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>3.2.0</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>cz.muni.pa165.car.App</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.2.4</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <createDependencyReducedPom>false</createDependencyReducedPom>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
\ No newline at end of file
diff --git a/car/src/main/java/cz/muni/pa165/car/App.java b/car/src/main/java/cz/muni/pa165/car/App.java
index 8d546b5142bc6cde3c95a98f00ed947ae323e2bb..acf19d92fe628aadaa00a9cfbab48f4bcba05208 100644
--- a/car/src/main/java/cz/muni/pa165/car/App.java
+++ b/car/src/main/java/cz/muni/pa165/car/App.java
@@ -1,22 +1,37 @@
 package cz.muni.pa165.car;
 
+import cz.muni.pa165.car.data.model.Car;
+import cz.muni.pa165.common_library.client.ClientConfig;
 import cz.muni.pa165.common_library.exception.RestExceptionHandler;
+import cz.muni.pa165.component.data.model.CarComponent;
+import cz.muni.pa165.driver.data.model.Driver;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Import;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.client.RestTemplate;
 
 /**
  * Main app.
  */
-@SpringBootApplication(scanBasePackages = {"cz.muni.pa165.car"})
-@EnableJpaRepositories(basePackages = {"cz.muni.pa165.car"})
-@EntityScan("cz.muni.pa165.common_library")
+@SpringBootApplication
+@EnableJpaRepositories(basePackages = {"cz.muni.pa165.car.data.repository"})
+@EnableTransactionManagement
+@EntityScan(basePackageClasses = {Car.class, Driver.class, CarComponent.class})
+//@Import({RestExceptionHandler.class, ClientConfig.class})
 @Import(RestExceptionHandler.class)
 public class App {
 
   public static void main(String[] args) {
     SpringApplication.run(App.class, args);
   }
+
+  @Bean
+  public RestTemplate restTemplate() {
+    return new RestTemplate();
+  }
+
 }
diff --git a/car/src/main/java/cz/muni/pa165/car/data/model/Car.java b/car/src/main/java/cz/muni/pa165/car/data/model/Car.java
index 1d82c7f881e541db5ef1bbb5e00bbfeb4a5fea16..75d61eed69f2b7274cb105df5fe2a7f16c852360 100644
--- a/car/src/main/java/cz/muni/pa165/car/data/model/Car.java
+++ b/car/src/main/java/cz/muni/pa165/car/data/model/Car.java
@@ -1,18 +1,12 @@
 package cz.muni.pa165.car.data.model;
 
-import cz.muni.pa165.component.data.model.CarComponent;
-import cz.muni.pa165.driver.data.model.Driver;
-import jakarta.persistence.CascadeType;
+import jakarta.persistence.ElementCollection;
 import jakarta.persistence.Entity;
 import jakarta.persistence.FetchType;
 import jakarta.persistence.GeneratedValue;
 import jakarta.persistence.GenerationType;
 import jakarta.persistence.Id;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.OneToMany;
-import jakarta.persistence.OneToOne;
 import jakarta.persistence.Table;
-import jakarta.validation.Valid;
 import java.io.Serializable;
 import java.util.List;
 import lombok.AllArgsConstructor;
@@ -35,17 +29,13 @@ public class Car implements Serializable {
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;
 
-  @OneToMany(mappedBy = "id",
-      fetch = FetchType.EAGER)
-  private List<@Valid CarComponent> components;
+  @ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER)
+  private List<Long> components;
 
-  @OneToMany(mappedBy = "id",
-      fetch = FetchType.EAGER)
-  private List<@Valid Driver> drivers;
+  @ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER)
+  private List<Long> drivers;
 
-  @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
-  @JoinColumn(name = "main_driver_id", referencedColumnName = "id")
-  private Driver mainDriver;
+  private Long mainDriverId;
 
 }
 
diff --git a/car/src/main/java/cz/muni/pa165/car/data/repository/CarComponentRepository.java b/car/src/main/java/cz/muni/pa165/car/data/repository/CarComponentRepository.java
deleted file mode 100644
index 7d8c61e4d21fc3f4bf2f66162d439f3c1a589ffa..0000000000000000000000000000000000000000
--- a/car/src/main/java/cz/muni/pa165/car/data/repository/CarComponentRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package cz.muni.pa165.car.data.repository;
-
-import cz.muni.pa165.component.data.model.CarComponent;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-/**
- * Repository for Car Component.
- */
-@Repository
-public interface CarComponentRepository extends JpaRepository<CarComponent, Long> {}
diff --git a/car/src/main/java/cz/muni/pa165/car/data/repository/DriverRepository.java b/car/src/main/java/cz/muni/pa165/car/data/repository/DriverRepository.java
deleted file mode 100644
index cb2bfe5179a78213caed2d8d2b6cdd53d6b3d06d..0000000000000000000000000000000000000000
--- a/car/src/main/java/cz/muni/pa165/car/data/repository/DriverRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package cz.muni.pa165.car.data.repository;
-
-import cz.muni.pa165.driver.data.model.Driver;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-/**
- * Repository for driver.
- */
-@Repository
-public interface DriverRepository extends JpaRepository<Driver, Long> {}
diff --git a/car/src/main/java/cz/muni/pa165/car/mapper/CarMapper.java b/car/src/main/java/cz/muni/pa165/car/mapper/CarMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..44ea6e762f75ad7b8c9d366f46c64dc6441858e8
--- /dev/null
+++ b/car/src/main/java/cz/muni/pa165/car/mapper/CarMapper.java
@@ -0,0 +1,44 @@
+package cz.muni.pa165.car.mapper;
+
+import cz.muni.pa165.car.data.model.Car;
+import cz.muni.pa165.common_library.dtos.CarRequestDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
+
+/**
+ * Class for converting Car object and its Data Transfer Objects.
+ */
+public class CarMapper {
+
+  /**
+   * Converts Dto object to Car object.
+   *
+   * @param carRequestDto Dto object of the car.
+   * @return Car object.
+   */
+  public static Car carDtoConverter(CarRequestDto carRequestDto) {
+
+    return Car.builder()
+        .id(null)
+        .components(carRequestDto.getComponentIds())
+        .drivers(carRequestDto.getDriverIds())
+        .mainDriverId(carRequestDto.getMainDriverId())
+        .build();
+  }
+
+  /**
+   * Converts Car object to its Dto.
+   *
+   * @param car Car object.
+   * @return Dto object.
+   */
+  public static CarResponseDto carConverterToDto(Car car) {
+
+    return CarResponseDto.builder()
+        .id(car.getId())
+        .componentIdsNames(car.getComponents())
+        .driverIdsNames(car.getDrivers())
+        .mainDriverId(car.getMainDriverId())
+        .build();
+  }
+
+}
diff --git a/car/src/main/java/cz/muni/pa165/car/rest/CarComponentPairController.java b/car/src/main/java/cz/muni/pa165/car/rest/CarComponentPairController.java
index a36ff9c478bd281801c6c6afc42c0fbb71c47b2a..8cbf5a412fee36051c429724beaf427698a88b8f 100644
--- a/car/src/main/java/cz/muni/pa165/car/rest/CarComponentPairController.java
+++ b/car/src/main/java/cz/muni/pa165/car/rest/CarComponentPairController.java
@@ -2,7 +2,8 @@ package cz.muni.pa165.car.rest;
 
 import cz.muni.pa165.car.service.CarComponentPairService;
 import cz.muni.pa165.common_library.dtos.CarComponentDto;
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.common_library.dtos.CarRequestDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import io.swagger.v3.oas.annotations.Operation;
 import java.util.List;
 import org.springframework.http.MediaType;
@@ -37,8 +38,8 @@ public class CarComponentPairController {
   @Operation(summary = "Add component to a car")
   @PutMapping(path = "/addcomponent",
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<CarDto> addComponent(@RequestParam Long componentId,
-                                             @RequestParam Long carId) {
+  public ResponseEntity<CarResponseDto> addComponent(@RequestParam Long componentId,
+                                                     @RequestParam Long carId) {
     return ResponseEntity.ok(carComponentService.addComponent(componentId, carId));
   }
 
@@ -52,8 +53,8 @@ public class CarComponentPairController {
   @Operation(summary = "Remove component from a car")
   @PutMapping(path = "/removecomponent",
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<CarDto> removeComponent(@RequestParam Long componentId,
-                                                @RequestParam Long carId) {
+  public ResponseEntity<CarResponseDto> removeComponent(@RequestParam Long componentId,
+                                                       @RequestParam Long carId) {
     return ResponseEntity.ok(carComponentService.removeComponent(componentId, carId));
   }
 
diff --git a/car/src/main/java/cz/muni/pa165/car/rest/CarController.java b/car/src/main/java/cz/muni/pa165/car/rest/CarController.java
index 8dd02ec82a53c8306e3b962cea4889eb16a37001..be67e6b110a459cd961524b33e54fa758bd64d2e 100644
--- a/car/src/main/java/cz/muni/pa165/car/rest/CarController.java
+++ b/car/src/main/java/cz/muni/pa165/car/rest/CarController.java
@@ -1,7 +1,8 @@
 package cz.muni.pa165.car.rest;
 
 import cz.muni.pa165.car.service.CarService;
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.common_library.dtos.CarRequestDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import io.swagger.v3.oas.annotations.Operation;
 import jakarta.validation.Valid;
 import java.util.List;
@@ -38,14 +39,14 @@ public class CarController {
   /**
    * Creates a new car.
    *
-   * @param carDto the DTO representing the car to be created
+   * @param carRequestDto the DTO representing the car to be created
    * @return a ResponseEntity containing the DTO of the created car
    */
   @Operation(summary = "Create a car")
   @PostMapping(path = "/", consumes = MediaType.APPLICATION_JSON_VALUE,
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<CarDto> createCar(@Valid @RequestBody CarDto carDto) {
-    return ResponseEntity.ok(carService.postCar(carDto));
+  public ResponseEntity<CarResponseDto> createCar(@Valid @RequestBody CarRequestDto carRequestDto) {
+    return ResponseEntity.ok(carService.postCar(carRequestDto));
   }
 
   /**
@@ -55,7 +56,7 @@ public class CarController {
    * @return a ResponseEntity containing a message indicating whether the car was deleted or not
    */
   @Operation(summary = "Delete a car")
-  @DeleteMapping(path = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+  @DeleteMapping(path = "/", produces = MediaType.APPLICATION_JSON_VALUE)
   public ResponseEntity<String> deleteCar(@RequestParam Long carId) {
     return ResponseEntity.ok(carService.deleteById(carId));
   }
@@ -67,8 +68,8 @@ public class CarController {
    * @return a ResponseEntity containing the DTO of the retrieved car
    */
   @Operation(summary = "Get a car")
-  @GetMapping(path = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<CarDto> getCar(@RequestParam Long carId) {
+  @GetMapping(path = "/", produces = MediaType.APPLICATION_JSON_VALUE)
+  public ResponseEntity<CarResponseDto> getCar(@RequestParam Long carId) {
     return ResponseEntity.ok(carService.getCarById(carId));
   }
 
@@ -78,8 +79,8 @@ public class CarController {
    * @return a ResponseEntity containing a list of DTOs representing all cars
    */
   @Operation(summary = "Get all cars")
-  @GetMapping(path = "/", produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<List<CarDto>> getAllSeasons() {
+  @GetMapping(path = "/all", produces = MediaType.APPLICATION_JSON_VALUE)
+  public ResponseEntity<List<CarResponseDto>> getAllCars() {
     return ResponseEntity.ok(carService.getAllCars());
   }
 
diff --git a/car/src/main/java/cz/muni/pa165/car/rest/CarDriverPairController.java b/car/src/main/java/cz/muni/pa165/car/rest/CarDriverPairController.java
index 88631333bdac050fb34f5f198982d3c53b91a96e..3c1344dc984b8451e4c9ecc1bb78650d03a5aacd 100644
--- a/car/src/main/java/cz/muni/pa165/car/rest/CarDriverPairController.java
+++ b/car/src/main/java/cz/muni/pa165/car/rest/CarDriverPairController.java
@@ -1,7 +1,8 @@
 package cz.muni.pa165.car.rest;
 
 import cz.muni.pa165.car.service.CarDriverPairService;
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.common_library.dtos.CarRequestDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import cz.muni.pa165.common_library.dtos.DriverDto;
 import io.swagger.v3.oas.annotations.Operation;
 import java.util.List;
@@ -21,10 +22,10 @@ import org.springframework.web.bind.annotation.RestController;
 @Validated
 public class CarDriverPairController {
 
-  CarDriverPairService carDriverService;
+  CarDriverPairService carDriverPairService;
 
   public CarDriverPairController(CarDriverPairService driverManagerService) {
-    this.carDriverService = driverManagerService;
+    this.carDriverPairService = driverManagerService;
   }
 
   /**
@@ -37,9 +38,9 @@ public class CarDriverPairController {
   @Operation(summary = "Assign driver to a car")
   @PutMapping(path = "/assign",
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<CarDto> assignDriverToCar(@RequestParam Long driverId,
-                                                  @RequestParam Long carId) {
-    return ResponseEntity.ok(carDriverService.assignDriverToCar(driverId, carId));
+  public ResponseEntity<CarResponseDto> assignDriverToCar(@RequestParam Long driverId,
+                                                          @RequestParam Long carId) {
+    return ResponseEntity.ok(carDriverPairService.assignDriverToCar(driverId, carId));
   }
 
   /**
@@ -52,9 +53,9 @@ public class CarDriverPairController {
   @Operation(summary = "Unassign driver from a car")
   @PutMapping(path = "/unassign",
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<CarDto> unassignDriverFromCar(@RequestParam Long driverId,
-                                                      @RequestParam Long carId) {
-    return ResponseEntity.ok(carDriverService.unassignDriverFromCar(driverId, carId));
+  public ResponseEntity<CarResponseDto> unassignDriverFromCar(@RequestParam Long driverId,
+                                                             @RequestParam Long carId) {
+    return ResponseEntity.ok(carDriverPairService.unassignDriverFromCar(driverId, carId));
   }
 
   /**
@@ -67,6 +68,36 @@ public class CarDriverPairController {
   @PutMapping(path = "/alldrivers",
       produces = MediaType.APPLICATION_JSON_VALUE)
   public ResponseEntity<List<DriverDto>> getAllDriversOfCar(@RequestParam Long carId) {
-    return ResponseEntity.ok(carDriverService.getAllDriversOfCar(carId));
+    return ResponseEntity.ok(carDriverPairService.getAllDriversOfCar(carId));
   }
+
+  /**
+   * Sets the main driver of the car identified by the given ID.
+   *
+   * @param carId    The ID of the car to set the main driver for.
+   * @param driverId The ID of the driver to set as the main driver.
+   * @return         A ResponseEntity containing a CarDto object
+   *                 representing the updated car.
+   */
+  @Operation(summary = "Set main driver for the car")
+  @PutMapping(path = "/setmain",
+      produces = MediaType.APPLICATION_JSON_VALUE)
+  public ResponseEntity<CarResponseDto> setMainDriver(@RequestParam Long carId, Long driverId) {
+    return ResponseEntity.ok(carDriverPairService.setMainDriver(carId, driverId));
+  }
+
+  /**
+   * Removes the main driver from the car identified by the given ID.
+   *
+   * @param carId The ID of the car to remove the main driver from.
+   * @return      A ResponseEntity containing a CarDto object
+   *              representing the updated car.
+   */
+  @Operation(summary = "Set main driver to null value")
+  @PutMapping(path = "/removemain",
+      produces = MediaType.APPLICATION_JSON_VALUE)
+  public ResponseEntity<CarResponseDto> removeMainDriver(@RequestParam Long carId) {
+    return ResponseEntity.ok(carDriverPairService.removeMainDriver(carId));
+  }
+
 }
diff --git a/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java b/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java
new file mode 100644
index 0000000000000000000000000000000000000000..61a43c0bd756c1dee35f2ba555a601233821d26d
--- /dev/null
+++ b/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java
@@ -0,0 +1,46 @@
+package cz.muni.pa165.car.restemplate;
+
+import cz.muni.pa165.component.data.model.CarComponent;
+import cz.muni.pa165.driver.data.model.Driver;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * Class for retrieving data from other modules using RestTemplate.
+ */
+@Component
+public class DbGetter {
+
+  @Autowired
+  private static RestTemplate client = new RestTemplate();
+
+  private static final String GET_DRIVER_URL = "http://localhost:8083/driver/get/id=";
+  private static final String GET_COMPONENT_URL = "http://localhost:8084/component?id=";
+
+  /**
+   * Get a driver using RestTemplate client.
+   *
+   * @param id driver id
+   * @return Driver object
+   */
+  public static Driver getDriverFromDb(Long id) {
+    String url = GET_DRIVER_URL + id;
+    ResponseEntity<Driver> response = client.getForEntity(url, Driver.class);
+    return response.getBody();
+  }
+
+  /**
+   * Get a component using RestTemplate client.
+   *
+   * @param id component id
+   * @return Component object
+   */
+  public static CarComponent getComponentFromDb(Long id) {
+    String url = GET_COMPONENT_URL + id;
+    ResponseEntity<CarComponent> response = client.getForEntity(url, CarComponent.class);
+    return response.getBody();
+  }
+
+}
diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairService.java b/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairService.java
index 5bd94c3db8f658b9be98321a7d7efb5f2a5a3750..19e2cdddc5bc605e7d33486faa56ad3b83ac7a41 100644
--- a/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairService.java
+++ b/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairService.java
@@ -1,7 +1,7 @@
 package cz.muni.pa165.car.service;
 
 import cz.muni.pa165.common_library.dtos.CarComponentDto;
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import java.util.List;
 
 /**
@@ -15,7 +15,7 @@ public interface CarComponentPairService {
    * @param carId       Id of the car.
    * @return Car with added component.
    */
-  CarDto addComponent(Long componentId, Long carId);
+  CarResponseDto addComponent(Long componentId, Long carId);
 
   /**
    * Calls repository to remove a component from a car.
@@ -24,7 +24,7 @@ public interface CarComponentPairService {
    * @param carId       Id of the car.
    * @return Car with removed component.
    */
-  CarDto removeComponent(Long componentId, Long carId);
+  CarResponseDto removeComponent(Long componentId, Long carId);
 
   /**
    * Calls repository ond returns oll components of specific car.
diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java b/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java
index bf79e3d1d062ab71320aa6c2e90664a7f709fdb0..f0afe6ccf9ef3677214f516a2c6e32136946a6b8 100644
--- a/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java
+++ b/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java
@@ -1,10 +1,11 @@
 package cz.muni.pa165.car.service;
 
-import cz.muni.pa165.car.data.repository.CarComponentPairRepository;
-import cz.muni.pa165.car.data.repository.CarComponentRepository;
+import static cz.muni.pa165.car.restemplate.DbGetter.getComponentFromDb;
+
 import cz.muni.pa165.car.data.repository.CarRepository;
+import cz.muni.pa165.car.mapper.CarMapper;
 import cz.muni.pa165.common_library.dtos.CarComponentDto;
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import cz.muni.pa165.common_library.exception.DatabaseException;
 import cz.muni.pa165.component.data.model.CarComponent;
 import java.util.ArrayList;
@@ -18,51 +19,41 @@ import org.springframework.stereotype.Service;
 @Service
 public class CarComponentPairServiceImpl implements CarComponentPairService {
 
-  CarComponentPairRepository carComponentPairRepository;
-  CarComponentRepository carComponentRepository;
   CarRepository carRepository;
 
   /**
    * Constructor for Car - Car Component Service.
    *
-   * @param carComponentPairRepository Car - Car Component repository
-   * @param carComponentRepository Car Component repository
    * @param carRepository Car repository
    */
-  public CarComponentPairServiceImpl(CarComponentPairRepository carComponentPairRepository,
-                                     CarComponentRepository carComponentRepository,
-                                     CarRepository carRepository) {
-    this.carComponentPairRepository = carComponentPairRepository;
-    this.carComponentRepository = carComponentRepository;
+  public CarComponentPairServiceImpl(CarRepository carRepository) {
     this.carRepository = carRepository;
   }
 
   @Override
-  public CarDto addComponent(Long componentId, Long carId) {
+  public CarResponseDto addComponent(Long componentId, Long carId) {
     var car = carRepository.findById(carId).orElseThrow(
         () -> new DatabaseException("Car not found"));
-    var component = carComponentRepository.findById(componentId).orElseThrow(
-        () -> new DatabaseException("Component not found"));
     var components = car.getComponents();
-    components.add(component);
+    components.add(componentId);
     car.setComponents(components);
     carRepository.save(car);
-    return CarServiceImpl.carConverterToDto(car);
+    return CarMapper.carConverterToDto(car);
   }
 
   @Override
-  public CarDto removeComponent(Long componentId, Long carId) {
+  public CarResponseDto removeComponent(Long componentId, Long carId) {
     var car = carRepository.findById(carId).orElseThrow(
         () -> new DatabaseException("Car not found"));
-    var components = new ArrayList<CarComponent>();
-    for (CarComponent d : car.getComponents()) {
-      if (!Objects.equals(d.getId(), componentId)) {
-        components.add(d);
+    var components = new ArrayList<Long>();
+    for (Long id : car.getComponents()) {
+      if (!Objects.equals(id, componentId)) {
+        components.add(id);
       }
     }
     car.setComponents(components);
     carRepository.save(car);
-    return CarServiceImpl.carConverterToDto(car);
+    return CarMapper.carConverterToDto(car);
   }
 
   @Override
@@ -70,14 +61,15 @@ public class CarComponentPairServiceImpl implements CarComponentPairService {
     var car = carRepository.findById(carId).orElseThrow(
         () -> new DatabaseException("Car not found"));
     var componentDtos = new ArrayList<CarComponentDto>();
-    for (CarComponent c : car.getComponents()) {
+    for (Long id : car.getComponents()) {
+      CarComponent carComponent = getComponentFromDb(id);
       componentDtos.add(
           new CarComponentDto(
-              c.getId(),
-              c.getWeight(),
-              c.getPrice(),
-              c.getManufacturer(),
-              c.getName()
+              carComponent.getId(),
+              carComponent.getWeight(),
+              carComponent.getPrice(),
+              carComponent.getManufacturer(),
+              carComponent.getName()
           )
       );
     }
diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairService.java b/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairService.java
index edc598223d253a83c62269fa2b3a04ead082ab46..0131343725de5ed3805c64c1bfdafcea7e97b40a 100644
--- a/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairService.java
+++ b/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairService.java
@@ -1,6 +1,7 @@
 package cz.muni.pa165.car.service;
 
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.common_library.dtos.CarRequestDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import cz.muni.pa165.common_library.dtos.DriverDto;
 import java.util.List;
 
@@ -15,7 +16,7 @@ public interface CarDriverPairService {
    * @param carId    Id of the car.
    * @return Car object that the driver was assigned to.
    */
-  CarDto assignDriverToCar(Long driverId, Long carId);
+  CarResponseDto assignDriverToCar(Long driverId, Long carId);
 
   /**
    * Calls repository to unassign a driver from a car, if unsuccessful, throws exception.
@@ -24,7 +25,7 @@ public interface CarDriverPairService {
    * @param carId    Id of the car.
    * @return Car object that the driver was unassigned from.
    */
-  CarDto unassignDriverFromCar(Long driverId, Long carId);
+  CarResponseDto unassignDriverFromCar(Long driverId, Long carId);
 
   /**
    * Calls repository to return list of all drivers of specific car.
@@ -33,4 +34,21 @@ public interface CarDriverPairService {
    * @return List of all drivers assigned to the car.
    */
   List<DriverDto> getAllDriversOfCar(Long carId);
+
+  /**
+   * Sets the main driver of the car identified by the given ID.
+   *
+   * @param carId    The ID of the car to set the main driver for.
+   * @param driverId The ID of the driver to set as the main driver.
+   * @return         A CarDto object representing the updated car.
+   */
+  CarResponseDto setMainDriver(Long carId, Long driverId);
+
+  /**
+   * Removes the main driver from the car identified by the given ID.
+   *
+   * @param carId The ID of the car to remove the main driver from.
+   * @return      A CarDto object representing the updated car.
+   */
+  CarResponseDto removeMainDriver(Long carId);
 }
diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairServiceImpl.java b/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairServiceImpl.java
index 15ef76773a8ce8a6d762777fac33d19fc8322d00..dabba4a173a72b33faefd6aed346f495597243d5 100644
--- a/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairServiceImpl.java
+++ b/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairServiceImpl.java
@@ -1,9 +1,10 @@
 package cz.muni.pa165.car.service;
 
-import cz.muni.pa165.car.data.repository.CarDriverPairRepository;
+import static cz.muni.pa165.car.restemplate.DbGetter.getDriverFromDb;
+
 import cz.muni.pa165.car.data.repository.CarRepository;
-import cz.muni.pa165.car.data.repository.DriverRepository;
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.car.mapper.CarMapper;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import cz.muni.pa165.common_library.dtos.DriverDto;
 import cz.muni.pa165.common_library.exception.DatabaseException;
 import cz.muni.pa165.driver.data.model.Driver;
@@ -18,51 +19,41 @@ import org.springframework.stereotype.Service;
 @Service
 public class CarDriverPairServiceImpl implements CarDriverPairService {
 
-  CarDriverPairRepository carDriverPairRepository;
-  DriverRepository driverRepository;
   CarRepository carRepository;
 
   /**
    * Constructor for Car - Driver Service.
    *
-   * @param carDriverPairRepository Car - Driver repository
-   * @param driverRepository Driver repository
    * @param carRepository Car repository
    */
-  public CarDriverPairServiceImpl(CarDriverPairRepository carDriverPairRepository,
-                                  DriverRepository driverRepository,
-                                  CarRepository carRepository) {
-    this.carDriverPairRepository = carDriverPairRepository;
-    this.driverRepository = driverRepository;
+  public CarDriverPairServiceImpl(CarRepository carRepository) {
     this.carRepository = carRepository;
   }
 
   @Override
-  public CarDto assignDriverToCar(Long driverId, Long carId) {
+  public CarResponseDto assignDriverToCar(Long driverId, Long carId) {
     var car = carRepository.findById(carId).orElseThrow(
         () -> new DatabaseException("Car not found"));
-    var driver = driverRepository.findById(driverId).orElseThrow(
-        () -> new DatabaseException("Driver not found"));
     var drivers = car.getDrivers();
-    drivers.add(driver);
+    drivers.add(driverId);
     car.setDrivers(drivers);
     carRepository.save(car);
-    return CarServiceImpl.carConverterToDto(car);
+    return CarMapper.carConverterToDto(car);
   }
 
   @Override
-  public CarDto unassignDriverFromCar(Long driverId, Long carId) {
+  public CarResponseDto unassignDriverFromCar(Long driverId, Long carId) {
     var car = carRepository.findById(carId).orElseThrow(
         () -> new DatabaseException("Car not found"));
-    var drivers = new ArrayList<Driver>();
-    for (Driver d : car.getDrivers()) {
-      if (!Objects.equals(d.getId(), driverId)) {
-        drivers.add(d);
+    var drivers = new ArrayList<Long>();
+    for (Long id : car.getDrivers()) {
+      if (!Objects.equals(id, driverId)) {
+        drivers.add(id);
       }
     }
     car.setDrivers(drivers);
     carRepository.save(car);
-    return CarServiceImpl.carConverterToDto(car);
+    return CarMapper.carConverterToDto(car);
   }
 
   @Override
@@ -70,14 +61,33 @@ public class CarDriverPairServiceImpl implements CarDriverPairService {
     var car = carRepository.findById(carId).orElseThrow(
         () -> new DatabaseException("Car not found"));
     var driverDtos = new ArrayList<DriverDto>();
-    for (Driver d : car.getDrivers()) {
+    for (Long id : car.getDrivers()) {
+      Driver driver = getDriverFromDb(id);
       driverDtos.add(
-          new DriverDto(d.getId(),
-              d.getName(),
-              d.getSurname())
+          new DriverDto(driver.getId(),
+              driver.getName(),
+              driver.getSurname())
       );
     }
     return driverDtos;
   }
 
+  @Override
+  public CarResponseDto setMainDriver(Long carId, Long driverId) {
+    var car = carRepository.findById(carId).orElseThrow(
+        () -> new DatabaseException("Car not found"));
+    car.setMainDriverId(driverId);
+    carRepository.save(car);
+    return CarMapper.carConverterToDto(car);
+  }
+
+  @Override
+  public CarResponseDto removeMainDriver(Long carId) {
+    var car = carRepository.findById(carId).orElseThrow(
+        () -> new DatabaseException("Car not found"));
+    car.setMainDriverId(null);
+    carRepository.save(car);
+    return CarMapper.carConverterToDto(car);
+  }
+
 }
diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarService.java b/car/src/main/java/cz/muni/pa165/car/service/CarService.java
index 7fe1dbf0aed56f0e32d8d667c36727b59721fc4f..f3b923a0ac0ff620324e657fe874c2dc7a357b45 100644
--- a/car/src/main/java/cz/muni/pa165/car/service/CarService.java
+++ b/car/src/main/java/cz/muni/pa165/car/service/CarService.java
@@ -1,6 +1,7 @@
 package cz.muni.pa165.car.service;
 
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.common_library.dtos.CarRequestDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import java.util.List;
 
 /**
@@ -10,10 +11,10 @@ public interface CarService {
   /**
    * Calls repository to insert a car into the database.
    *
-   * @param carDto Dto object of the car.
+   * @param carRequestDto Dto object of the car.
    * @return Dto object of inserted car.
    */
-  CarDto postCar(CarDto carDto);
+  CarResponseDto postCar(CarRequestDto carRequestDto);
 
   /**
    * Calls repository to get a specific car from the database.
@@ -21,14 +22,14 @@ public interface CarService {
    * @param carId car id
    * @return Dto object of the car
    */
-  CarDto getCarById(Long carId);
+  CarResponseDto getCarById(Long carId);
 
   /**
    * Calls repository to get all cars in the database.
    *
    * @return list of Dto objects
    */
-  List<CarDto> getAllCars();
+  List<CarResponseDto> getAllCars();
 
   /**
    * Calls repository to delete a car in the database.
diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarServiceImpl.java b/car/src/main/java/cz/muni/pa165/car/service/CarServiceImpl.java
index 6171479b2d48ed525c241224835be03c22bc900c..874dbf4a907219b91a5d232c17e6f5dd64113cd9 100644
--- a/car/src/main/java/cz/muni/pa165/car/service/CarServiceImpl.java
+++ b/car/src/main/java/cz/muni/pa165/car/service/CarServiceImpl.java
@@ -1,16 +1,17 @@
 package cz.muni.pa165.car.service;
 
-import cz.muni.pa165.car.data.model.Car;
-import cz.muni.pa165.car.data.repository.CarComponentRepository;
+import static cz.muni.pa165.car.mapper.CarMapper.carConverterToDto;
+import static cz.muni.pa165.car.mapper.CarMapper.carDtoConverter;
+
 import cz.muni.pa165.car.data.repository.CarRepository;
-import cz.muni.pa165.car.data.repository.DriverRepository;
-import cz.muni.pa165.common_library.dtos.CarDto;
+import cz.muni.pa165.car.mapper.CarMapper;
+import cz.muni.pa165.common_library.dtos.CarRequestDto;
+import cz.muni.pa165.common_library.dtos.CarResponseDto;
 import cz.muni.pa165.common_library.exception.DatabaseException;
-import java.util.ArrayList;
 import java.util.List;
-import org.springframework.data.util.Pair;
 import org.springframework.stereotype.Service;
 
+
 /**
  * Service for car management.
  */
@@ -18,31 +19,23 @@ import org.springframework.stereotype.Service;
 public class CarServiceImpl implements CarService {
 
   CarRepository carRepository;
-  CarComponentRepository componentRepository;
-  DriverRepository driverRepository;
 
   /**
    * Constructor for Car Service.
    *
-   * @param carRepository       Car repository
-   * @param componentRepository Component repository
-   * @param driverRepository    Driver repository
+   * @param carRepository Car repository
    */
-  public CarServiceImpl(CarRepository carRepository,
-                        CarComponentRepository componentRepository,
-                        DriverRepository driverRepository) {
+  public CarServiceImpl(CarRepository carRepository) {
     this.carRepository = carRepository;
-    this.componentRepository = componentRepository;
-    this.driverRepository = driverRepository;
   }
 
   @Override
-  public CarDto postCar(CarDto carDto) {
-    return carConverterToDto(carRepository.save(carDtoConverter(carDto)));
+  public CarResponseDto postCar(CarRequestDto carRequestDto) {
+    return carConverterToDto(carRepository.save(carDtoConverter(carRequestDto)));
   }
 
   @Override
-  public CarDto getCarById(Long carId) {
+  public CarResponseDto getCarById(Long carId) {
     return carConverterToDto(carRepository.findById(carId).orElseThrow(
         () -> new DatabaseException(
             "Finding car with id=" + carId + " was unsuccessful"
@@ -51,11 +44,11 @@ public class CarServiceImpl implements CarService {
   }
 
   @Override
-  public List<CarDto> getAllCars() {
+  public List<CarResponseDto> getAllCars() {
     return carRepository
         .findAll()
         .stream()
-        .map(CarServiceImpl::carConverterToDto)
+        .map(CarMapper::carConverterToDto)
         .toList();
   }
 
@@ -65,72 +58,4 @@ public class CarServiceImpl implements CarService {
     return "Car with id = " + carId + " deleted!";
   }
 
-  /**
-   * Converts Dto object to Car object.
-   * TODO: Change to the correct version of converter.
-   *
-   * @param carDto Dto object of the car.
-   * @return Car object.
-   */
-  public static Car carDtoConverter(CarDto carDto) {
-
-    // TEST VERSION WHEN COMPONENTS AND DRIVERS DO NOT EXIST
-    return Car.builder()
-        .id(carDto.getId())
-        .components(new ArrayList<>())
-        .drivers(new ArrayList<>())
-        .mainDriver(null)
-        .build();
-
-    // TO BE USED IN FINAL VERSION
-    /*
-    var car = Car.builder()
-        .id(carDto.getId())
-        .build();
-
-    var components = new ArrayList<CarComponent>();
-    for (Pair<Long, String> componentPair : carDto.getComponentIdsNames()) {
-      Long id = componentPair.getFirst();
-      components.add(componentRepository.findById(id).orElseThrow(
-          () -> new DatabaseException("Component not found")
-      ));
-    }
-    car.setComponents(components);
-    var drivers = new ArrayList<Driver>();
-    for (Pair<Long, String> driverPair : carDto.getDriverIdsNames()) {
-      Long id = driverPair.getFirst();
-      drivers.add(driverRepository.findById(id).orElseThrow(
-          () -> new DatabaseException("Driver not found")
-      ));
-    }
-    car.setDrivers(drivers);
-    return car;
-    */
-  }
-
-  /**
-   * Converts Car object to its Dto.
-   *
-   * @param car Car object.
-   * @return Dto object.
-   */
-  public static CarDto carConverterToDto(Car car) {
-    Long id = null;
-    if (car.getMainDriver() != null) {
-      id = car.getMainDriver().getId();
-    }
-    return CarDto.builder()
-        .id(car.getId())
-        .componentIdsNames(car.getComponents()
-            .stream()
-            .map(carComponent -> Pair.of(carComponent.getId(), carComponent.getName()))
-            .toList())
-        .driverIdsNames(car.getDrivers()
-            .stream()
-            .map(driver -> Pair.of(driver.getId(), driver.getName()))
-            .toList())
-        .mainDriverId(id)
-        .build();
-  }
-
 }
diff --git a/common_library/pom.xml b/common_library/pom.xml
index 3faccf9d86604a3d277d80682874eb190f00f2d7..c01b20c9c8ec27c1f8320d5de771b70a9b75a92b 100644
--- a/common_library/pom.xml
+++ b/common_library/pom.xml
@@ -57,6 +57,11 @@
             <artifactId>swagger-annotations</artifactId>
             <version>1.6.2</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents.client5</groupId>
+            <artifactId>httpclient5</artifactId>
+            <version>5.2.1</version>
+        </dependency>
 
     </dependencies>
 </project>
diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/client/ClientConfig.java b/common_library/src/main/java/cz/muni/pa165/common_library/client/ClientConfig.java
index 1008f78988f6293f642dcff7a14e50e151ec8ca4..9cd037e7e21e5cbc37b002ae83095f49db5ea8ed 100644
--- a/common_library/src/main/java/cz/muni/pa165/common_library/client/ClientConfig.java
+++ b/common_library/src/main/java/cz/muni/pa165/common_library/client/ClientConfig.java
@@ -6,6 +6,9 @@ import org.springframework.http.client.ClientHttpRequestFactory;
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
 import org.springframework.web.client.RestTemplate;
 
+/**
+ * Custom Rest Template class.
+ */
 @Configuration
 public class ClientConfig {
 
diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarRequestDto.java b/common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarRequestDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d4e4aa3c014b848a0aad1484f74f05ce62df19c
--- /dev/null
+++ b/common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarRequestDto.java
@@ -0,0 +1,35 @@
+package cz.muni.pa165.common_library.dtos;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import java.util.List;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.util.Pair;
+
+/**
+ * Data Transfer object for Car class.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CarRequestDto {
+
+  @NotNull
+  @Schema(description = "car's components ids",
+          example     = "[]")
+  List<Long> componentIds;
+
+  @NotNull
+  @Schema(description = "car's drivers ids",
+          example     = "[]")
+  List<Long> driverIds;
+
+  @Schema(description = "id of car's main driver",
+          example     = "null")
+  Long mainDriverId;
+
+}
diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarDto.java b/common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarResponseDto.java
similarity index 80%
rename from common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarDto.java
rename to common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarResponseDto.java
index 1b9ce2fa9cefca649e1f5a0afd32558746565503..93a5a8b57fdd65328ed7f3e7484b929bb6212a4a 100644
--- a/common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarDto.java
+++ b/common_library/src/main/java/cz/muni/pa165/common_library/dtos/CarResponseDto.java
@@ -7,7 +7,6 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.data.util.Pair;
 
 /**
  * Data Transfer object for Car class.
@@ -16,22 +15,22 @@ import org.springframework.data.util.Pair;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class CarDto {
+public class CarResponseDto {
 
   @NotNull
   @Schema(description = "car id",
-          example     = "1")
+          example = "1")
   Long id;
 
   @NotNull
   @Schema(description = "car's components ids and names",
           example     = "[]")
-  List<Pair<Long, String>> componentIdsNames;
+  List<Long> componentIdsNames;
 
   @NotNull
   @Schema(description = "car's drivers ids and names",
           example     = "[]")
-  List<Pair<Long, String>> driverIdsNames;
+  List<Long> driverIdsNames;
 
   @Schema(description = "id of car's main driver",
           example     = "1")
diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/dtos/RaceDriverCarDto.java b/common_library/src/main/java/cz/muni/pa165/common_library/dtos/RaceDriverCarDto.java
index a950fc9846908df7655d8e9d907bcc5b430eb793..0e635504e632573c917679554c2b16ccd4e31935 100644
--- a/common_library/src/main/java/cz/muni/pa165/common_library/dtos/RaceDriverCarDto.java
+++ b/common_library/src/main/java/cz/muni/pa165/common_library/dtos/RaceDriverCarDto.java
@@ -12,17 +12,12 @@ import lombok.Data;
 @Builder
 public class RaceDriverCarDto {
 
-  @NotNull
   @Schema(description = "driver id", example = "1")
   Long driverId;
 
-  @NotNull
   @Schema(description = "car id", example = "1")
   Long carId;
 
-  @Schema(description = "driver name", example = "Charles Leclerc")
-  String driverName;
-
   @Schema(description = "drivers position in the race", example = "1")
-  int position;
+  Integer position;
 }
diff --git a/common_library/src/main/java/cz/muni/pa165/common_library/exception/BadRequestException.java b/common_library/src/main/java/cz/muni/pa165/common_library/exception/BadRequestException.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fd9c87517850fa07a1b72735a1ba73a78ea4825
--- /dev/null
+++ b/common_library/src/main/java/cz/muni/pa165/common_library/exception/BadRequestException.java
@@ -0,0 +1,11 @@
+package cz.muni.pa165.common_library.exception;
+
+/**
+ * Exception when request is not valid.
+ */
+public class BadRequestException  extends RuntimeException {
+
+  public BadRequestException(String message) {
+    super(message);
+  }
+}
diff --git a/common_library/src/main/resources.mv.db b/common_library/src/main/resources.mv.db
index ae5c95ed56afac4a5b27f94374b575c6aee30393..1182c1e131cc2956fe8d996155055527cf19a6b7 100644
Binary files a/common_library/src/main/resources.mv.db and b/common_library/src/main/resources.mv.db differ
diff --git a/common_library/src/main/resources.trace.db b/common_library/src/main/resources.trace.db
index c23aec91212598ef4d254120d1666357f7e0e0b2..1821ae2dbbf3854b6affcf9d2504b39511a2392a 100644
--- a/common_library/src/main/resources.trace.db
+++ b/common_library/src/main/resources.trace.db
@@ -489,3 +489,146 @@ org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (
 	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 	at java.base/java.lang.Thread.run(Thread.java:833)
+2023-04-16 00:27:08 database: flush
+org.h2.message.DbException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/diana/pa165/pa165-formula-one-team/common_library/src/main/resources.mv.db [2.1.214/7]" [50000-214]
+	at org.h2.message.DbException.get(DbException.java:212)
+	at org.h2.message.DbException.convert(DbException.java:395)
+	at org.h2.mvstore.db.Store.lambda$new$0(Store.java:125)
+	at org.h2.mvstore.MVStore.handleException(MVStore.java:3318)
+	at org.h2.mvstore.MVStore.panic(MVStore.java:593)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:469)
+	at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4082)
+	at org.h2.mvstore.db.Store.<init>(Store.java:136)
+	at org.h2.engine.Database.<init>(Database.java:324)
+	at org.h2.engine.Engine.openSession(Engine.java:92)
+	at org.h2.engine.Engine.openSession(Engine.java:222)
+	at org.h2.engine.Engine.createSession(Engine.java:201)
+	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338)
+	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122)
+	at org.h2.Driver.connect(Driver.java:59)
+	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
+	at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359)
+	at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
+	at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470)
+	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561)
+	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:100)
+	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
+	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159)
+	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117)
+	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
+	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330)
+	at org.springframework.boot.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:168)
+	at org.springframework.boot.autoconfigure.orm.jpa.HibernateDefaultDdlAutoProvider.getDefaultDdlAuto(HibernateDefaultDdlAutoProvider.java:42)
+	at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.lambda$getVendorProperties$1(HibernateJpaConfiguration.java:129)
+	at org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings.getDdlAuto(HibernateSettings.java:41)
+	at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineDdlAuto(HibernateProperties.java:118)
+	at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:87)
+	at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:80)
+	at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:130)
+	at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:131)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
+	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:645)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1325)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
+	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293)
+	at cz.muni.pa165.race.App.main(App.java:28)
+Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/diana/pa165/pa165-formula-one-team/common_library/src/main/resources.mv.db [2.1.214/7]" [50000-214]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:554)
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)
+	... 60 more
+Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/diana/pa165/pa165-formula-one-team/common_library/src/main/resources.mv.db [2.1.214/7]
+	at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004)
+	at org.h2.mvstore.FileStore.open(FileStore.java:178)
+	at org.h2.mvstore.FileStore.open(FileStore.java:128)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:452)
+	... 54 more
+2023-04-16 00:27:10 database: flush
+org.h2.message.DbException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/diana/pa165/pa165-formula-one-team/common_library/src/main/resources.mv.db [2.1.214/7]" [50000-214]
+	at org.h2.message.DbException.get(DbException.java:212)
+	at org.h2.message.DbException.convert(DbException.java:395)
+	at org.h2.mvstore.db.Store.lambda$new$0(Store.java:125)
+	at org.h2.mvstore.MVStore.handleException(MVStore.java:3318)
+	at org.h2.mvstore.MVStore.panic(MVStore.java:593)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:469)
+	at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4082)
+	at org.h2.mvstore.db.Store.<init>(Store.java:136)
+	at org.h2.engine.Database.<init>(Database.java:324)
+	at org.h2.engine.Engine.openSession(Engine.java:92)
+	at org.h2.engine.Engine.openSession(Engine.java:222)
+	at org.h2.engine.Engine.createSession(Engine.java:201)
+	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338)
+	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122)
+	at org.h2.Driver.connect(Driver.java:59)
+	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
+	at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359)
+	at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
+	at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470)
+	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561)
+	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:100)
+	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
+	at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
+	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284)
+	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177)
+	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36)
+	at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119)
+	at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255)
+	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230)
+	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207)
+	at org.hibernate.boot.model.relational.Database.<init>(Database.java:44)
+	at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218)
+	at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191)
+	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138)
+	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348)
+	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419)
+	at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66)
+	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376)
+	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
+	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
+	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1798)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1748)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
+	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293)
+	at cz.muni.pa165.race.App.main(App.java:28)
+Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/diana/pa165/pa165-formula-one-team/common_library/src/main/resources.mv.db [2.1.214/7]" [50000-214]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:554)
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)
+	... 59 more
+Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/diana/pa165/pa165-formula-one-team/common_library/src/main/resources.mv.db [2.1.214/7]
+	at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004)
+	at org.h2.mvstore.FileStore.open(FileStore.java:178)
+	at org.h2.mvstore.FileStore.open(FileStore.java:128)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:452)
+	... 53 more
diff --git a/driver/pom.xml b/driver/pom.xml
index 7e77dd7ae46718f8d0e22fa66e176fd91a35c9c1..14d6cbcd6263eadbffc24a42c625dcbde3fc03b1 100644
--- a/driver/pom.xml
+++ b/driver/pom.xml
@@ -51,6 +51,12 @@
             <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <properties>
diff --git a/driver/src/main/java/cz/muni/pa165/driver/App.java b/driver/src/main/java/cz/muni/pa165/driver/App.java
index 07f54711f763b4f4ffe88a7f3447a3ad85fb5259..d506128e67d67d4270ed020b3d05a4edb9567a2d 100644
--- a/driver/src/main/java/cz/muni/pa165/driver/App.java
+++ b/driver/src/main/java/cz/muni/pa165/driver/App.java
@@ -1,8 +1,10 @@
 package cz.muni.pa165.driver;
 
+import cz.muni.pa165.common_library.exception.RestExceptionHandler;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.Import;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 
 /**
@@ -11,6 +13,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 @SpringBootApplication
 @EnableJpaRepositories(basePackages = {"cz.muni.pa165.driver.data.repository"})
 @EntityScan(basePackages = {"cz.muni.pa165.driver.data.model"})
+@Import(RestExceptionHandler.class)
 public class App {
 
   public static void main(String[] args) {
diff --git a/driver/src/main/resources/application.yml b/driver/src/main/resources/application.yml
index 421c1494b0c391b664d3c8ef1495b200c904a8ea..5506c8f217a43b34f91fbd7999c8d5bb0c2fbae6 100644
--- a/driver/src/main/resources/application.yml
+++ b/driver/src/main/resources/application.yml
@@ -16,7 +16,7 @@ spring:
     hibernate:
       ddl-auto: update
   datasource:
-    url: jdbc:h2:.\common_library\src\main\resources;MODE=PostgreSQL
+    url: jdbc:h2:mem:driver;MODE=PostgreSQL
     driverClassName: org.h2.Driver
     username: admin
     password: admin
diff --git a/driver/src/test/java/cz/muni/pa165/driver/rest/DriverControllerItTest.java b/driver/src/test/java/cz/muni/pa165/driver/rest/DriverControllerItTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..13814dafebd455689e3caa59be35518bb2b68a8a
--- /dev/null
+++ b/driver/src/test/java/cz/muni/pa165/driver/rest/DriverControllerItTest.java
@@ -0,0 +1,38 @@
+package cz.muni.pa165.driver.rest;
+
+import cz.muni.pa165.driver.data.model.Driver;
+import cz.muni.pa165.driver.data.repository.DriverRepository;
+import java.util.Map;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@DataJpaTest
+class DriverControllerItTest {
+
+  @Autowired
+  private TestEntityManager entityManager;
+
+  @Autowired
+  private DriverRepository driverRepository;
+
+  @Test
+  public void testSave() {
+    Driver driver = Driver.builder()
+        .name("name")
+        .surname("surname")
+        .nationality("nationality")
+        .characteristics(Map.of()).build();
+
+    Driver savedDriver = driverRepository.save(driver);
+
+    Assertions.assertEquals(savedDriver, driver);
+    Assertions.assertEquals(entityManager.find(Driver.class, 1L).getId(), 1);
+  }
+
+}
diff --git a/race/pom.xml b/race/pom.xml
index 56af86d09bbf7c3e113baabccc3392e550abf1b9..724c41b9a3e206e732cc80eb0f6b20b788bab4ec 100644
--- a/race/pom.xml
+++ b/race/pom.xml
@@ -44,6 +44,12 @@
             <version>0.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>fi.muni</groupId>
+            <artifactId>component</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
diff --git a/race/src/main/java/cz/muni/pa165/race/App.java b/race/src/main/java/cz/muni/pa165/race/App.java
index 47715a6ff43b72c5f0b5f033eee3fe96eb83834c..172899c5771f8e094eeb302d6d95f80b0fe27573 100644
--- a/race/src/main/java/cz/muni/pa165/race/App.java
+++ b/race/src/main/java/cz/muni/pa165/race/App.java
@@ -3,6 +3,7 @@ package cz.muni.pa165.race;
 import cz.muni.pa165.car.data.model.Car;
 import cz.muni.pa165.common_library.client.ClientConfig;
 import cz.muni.pa165.common_library.exception.RestExceptionHandler;
+import cz.muni.pa165.component.data.model.CarComponent;
 import cz.muni.pa165.driver.data.model.Driver;
 import cz.muni.pa165.race.data.model.Race;
 import cz.muni.pa165.race.data.model.Season;
@@ -19,7 +20,8 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @SpringBootApplication
 @EnableJpaRepositories(basePackages = "cz.muni.pa165.race.data.repository")
 @EnableTransactionManagement
-@EntityScan(basePackageClasses = {Race.class, Season.class, Car.class, Driver.class})
+@EntityScan(basePackageClasses = {Race.class, Season.class, Car.class, Driver.class,
+    CarComponent.class})
 @Import({RestExceptionHandler.class, ClientConfig.class})
 public class App {
 
diff --git a/race/src/main/java/cz/muni/pa165/race/data/model/Race.java b/race/src/main/java/cz/muni/pa165/race/data/model/Race.java
index 16541e30267d56edc756d70f91a0800ca53e0abb..e158c0f1934cd7d407ef4c0ad48f9f9a291e5530 100644
--- a/race/src/main/java/cz/muni/pa165/race/data/model/Race.java
+++ b/race/src/main/java/cz/muni/pa165/race/data/model/Race.java
@@ -14,6 +14,7 @@ import jakarta.persistence.GenerationType;
 import jakarta.persistence.Id;
 import jakarta.persistence.JoinColumn;
 import jakarta.persistence.ManyToOne;
+import jakarta.persistence.OneToMany;
 import jakarta.persistence.OneToOne;
 import jakarta.persistence.Table;
 import jakarta.validation.constraints.Max;
@@ -45,11 +46,11 @@ public class Race implements Serializable {
   private RaceInfo raceInfo;
 
   @OneToOne(cascade = CascadeType.ALL)
-  @JoinColumn(name = "driver_info_one_id")
+  @JoinColumn(name = "driver_one_id")
   private RaceDriverinfo driver1;
 
   @OneToOne(cascade = CascadeType.ALL)
-  @JoinColumn(name = "driver_info_two_id")
+  @JoinColumn(name = "driver_two_id")
   private RaceDriverinfo driver2;
 
   /**
@@ -67,17 +68,13 @@ public class Race implements Serializable {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
-    @ManyToOne(fetch = FetchType.EAGER)
-    @JoinColumn(name = "driver_one_id")
-    private Driver driver;
+    private Long driverId;
 
-    @ManyToOne(fetch = FetchType.EAGER)
-    @JoinColumn(name = "car_one_id")
-    private Car car;
+    private Long carId;
 
     @Min(1)
     @Max(20)
-    private int finalPosition;
+    private Integer finalPosition;
   }
 
   /**
diff --git a/race/src/main/java/cz/muni/pa165/race/rest/RaceController.java b/race/src/main/java/cz/muni/pa165/race/rest/RaceController.java
index 24ce9dd85f436d57519406d49c03ef366d6e422a..94b7693e2e13a22f2576440950ce28251ac2d7d6 100644
--- a/race/src/main/java/cz/muni/pa165/race/rest/RaceController.java
+++ b/race/src/main/java/cz/muni/pa165/race/rest/RaceController.java
@@ -42,14 +42,14 @@ public class RaceController {
   @Operation(summary = "Delete a race")
   @DeleteMapping(path = "/",
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<String> deleteRace(@Valid @RequestParam long raceId) {
+  public ResponseEntity<String> deleteRace(@Valid @RequestParam Long raceId) {
     return ResponseEntity.ok(raceService.deleteRace(raceId));
   }
 
   @Operation(summary = "Get a race")
   @GetMapping(path = "/id",
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<RaceDto> getRace(@Valid @RequestParam long raceId) {
+  public ResponseEntity<RaceDto> getRace(@Valid @RequestParam Long raceId) {
     return ResponseEntity.ok(raceService.findRaceById(raceId));
   }
 
@@ -63,16 +63,18 @@ public class RaceController {
   @Operation(summary = "Assign driver as driver number one for a race")
   @PatchMapping(path = "/assignDriverOne",
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<String> assignDriverOne(@RequestParam long driverOneId,
-                                                @RequestParam long raceId) {
-    return ResponseEntity.ok(raceService.assignDriverOne(driverOneId, raceId));
+  public ResponseEntity<RaceDto> assignDriverOne(@RequestParam Long driverOneId,
+                                                @RequestParam Long raceId,
+                                                @RequestParam Long carId) {
+    return ResponseEntity.ok(raceService.assignDriverOne(driverOneId, raceId, carId));
   }
 
   @Operation(summary = "Assign driver as a driver number two for a race")
   @PatchMapping(path = "/assignDriverTwo",
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<String> assignDriverTwo(@RequestParam long driverTwoId,
-                                                @RequestParam long raceId) {
-    return ResponseEntity.ok(raceService.assignDriverTwo(driverTwoId, raceId));
+  public ResponseEntity<RaceDto> assignDriverTwo(@RequestParam Long driverTwoId,
+                                                @RequestParam Long raceId,
+                                                @RequestParam Long carId) {
+    return ResponseEntity.ok(raceService.assignDriverTwo(driverTwoId, raceId, carId));
   }
 }
diff --git a/race/src/main/java/cz/muni/pa165/race/service/RaceService.java b/race/src/main/java/cz/muni/pa165/race/service/RaceService.java
index fc1cae9f879e8433f8d848c5e4d9e63a61ae013f..7da921067a2552e039ce9fe188e3418c82b44f17 100644
--- a/race/src/main/java/cz/muni/pa165/race/service/RaceService.java
+++ b/race/src/main/java/cz/muni/pa165/race/service/RaceService.java
@@ -3,6 +3,7 @@ package cz.muni.pa165.race.service;
 import cz.muni.pa165.car.data.model.Car;
 import cz.muni.pa165.common_library.dtos.RaceDriverCarDto;
 import cz.muni.pa165.common_library.dtos.RaceDto;
+import cz.muni.pa165.common_library.exception.BadRequestException;
 import cz.muni.pa165.common_library.exception.DatabaseException;
 import cz.muni.pa165.driver.data.model.Driver;
 import cz.muni.pa165.race.data.model.Race;
@@ -10,6 +11,7 @@ import cz.muni.pa165.race.data.repository.CarRepository;
 import cz.muni.pa165.race.data.repository.DriverRepository;
 import cz.muni.pa165.race.data.repository.RaceRepository;
 import java.util.List;
+import java.util.Objects;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
@@ -59,29 +61,43 @@ public class RaceService {
   /**
    * Assigns driver one.
    */
-  public String assignDriverOne(Long driverId, Long raceId) {
-    var driver = driverRepository.findById(driverId)
-        .orElseThrow(() -> new DatabaseException("Driver not found"));
+  public RaceDto assignDriverOne(Long driverId, Long raceId, Long carId) {
     var race = raceRepository.findById(raceId)
         .orElseThrow(() -> new DatabaseException("Race not found"));
-    race.getDriver1().setDriver(driver);
-    raceRepository.save(race);
-    return "Driver with id: " + driverId + "was succesfully assigned to race with id: "
-        + raceId + " as driver one";
+
+    var driver = getDriver(driverId);
+    if (race.getDriver2() != null && Objects.equals(race.getDriver2().getDriverId(), driverId)) {
+      throw new BadRequestException("Driver already assigned to the race as driver two");
+    }
+
+    var car = getCar(carId);
+    if (race.getDriver2() != null && Objects.equals(race.getDriver2().getCarId(), carId)) {
+      throw new BadRequestException("Car is already assigned to the race for driver two");
+    }
+    race.getDriver1().setDriverId(driver.getId());
+    race.getDriver1().setCarId(car.getId());
+    return convertRace(raceRepository.save(race));
   }
 
   /**
    * Assigns driver two.
    */
-  public String assignDriverTwo(Long driverId, Long raceId) {
-    var driver = driverRepository.findById(driverId)
-        .orElseThrow(() -> new DatabaseException("Driver not found"));
+  public RaceDto assignDriverTwo(Long driverId, Long raceId, Long carId) {
     var race = raceRepository.findById(raceId)
         .orElseThrow(() -> new DatabaseException("Race not found"));
-    race.getDriver2().setDriver(driver);
-    raceRepository.save(race);
-    return "Driver with id: " + driverId + "was succesfully assigned to race with id: "
-        + raceId + " as driver two";
+
+    var driver = getDriver(driverId);
+    if (race.getDriver1() != null && Objects.equals(race.getDriver1().getDriverId(), driverId)) {
+      throw new BadRequestException("Driver already assigned to the race as driver one");
+    }
+    var car = getCar(carId);
+    if (race.getDriver1() != null && Objects.equals(race.getDriver1().getCarId(), carId)) {
+      throw new BadRequestException("Car is already assigned to the race for driver two");
+    }
+
+    race.getDriver2().setDriverId(driver.getId());
+    race.getDriver2().setCarId(car.getId());
+    return convertRace(raceRepository.save(race));
   }
 
   /**
@@ -122,17 +138,21 @@ public class RaceService {
     if (raceDto.getDriverOne() != null) {
       race.setDriver1(Race.RaceDriverinfo
           .builder()
-          .driver(getDriver(raceDto.getDriverOne()))
-          .car(getCar(raceDto.getDriverOne()))
+          .driverId(raceDto.getDriverOne().getDriverId())
+          .carId(raceDto.getDriverOne().getCarId())
           .build());
+    } else {
+      race.setDriver1(Race.RaceDriverinfo.builder().build());
     }
 
     if (raceDto.getDriverTwo() != null) {
       race.setDriver2(Race.RaceDriverinfo
           .builder()
-          .driver(getDriver(raceDto.getDriverTwo()))
-          .car(getCar(raceDto.getDriverTwo()))
+          .driverId(raceDto.getDriverTwo().getDriverId())
+          .carId(raceDto.getDriverTwo().getCarId())
           .build());
+    } else {
+      race.setDriver2(Race.RaceDriverinfo.builder().build());
     }
 
     return race;
@@ -147,35 +167,29 @@ public class RaceService {
             .prizePool(race.getRaceInfo().getPrizePool())
             .build())
         .build();
-    if (race.getDriver1() != null && race.getDriver1().getCar() != null) {
+    if (race.getDriver1() != null) {
       raceDto.setDriverOne(RaceDriverCarDto.builder()
-          .carId(race.getDriver1().getCar().getId())
-          .driverId(race.getDriver1().getId())
-          .driverName(race.getDriver1().getDriver().getName()
-              + " " + race.getDriver1().getDriver().getSurname())
+          .carId(race.getDriver1().getCarId())
+          .driverId(race.getDriver1().getDriverId())
           .build());
     }
-    if (race.getDriver2() != null && race.getDriver2().getCar() != null) {
+    if (race.getDriver2() != null) {
       raceDto.setDriverTwo(RaceDriverCarDto.builder()
-          .carId(race.getDriver2().getCar().getId())
-          .driverId(race.getDriver2().getId())
-          .driverName(race.getDriver2().getDriver().getName()
-              + " " + race.getDriver2().getDriver().getSurname())
+          .carId(race.getDriver2().getCarId())
+          .driverId(race.getDriver2().getCarId())
           .build());
     }
     return raceDto;
   }
 
-
-  private Driver getDriver(RaceDriverCarDto driverCarDto) {
-    return driverRepository.findById(driverCarDto.getDriverId()).orElseThrow(
-        () -> new DatabaseException("Something went wrong when"
-            + "finding the driver with id: " + driverCarDto.getDriverId() + " in the database."));
+  private Driver getDriver(Long driverId) {
+    var response =
+        client.getForEntity("http://localhost:8083/driver/get/id=" + driverId, Driver.class);
+    return response.getBody();
   }
 
-  private Car getCar(RaceDriverCarDto driverCarDto) {
-    return carRepository.findById(driverCarDto.getCarId()).orElseThrow(
-        () -> new DatabaseException("Something went wrong when"
-            + "finding the car with id: " + driverCarDto.getCarId() + " in the database."));
+  private Car getCar(Long carId) {
+    var response = client.getForEntity("http://localhost:8082/car/id=" + carId, Car.class);
+    return response.getBody();
   }
 }