diff --git a/core/src/main/java/cz/muni/fi/pa165/core/device/Device.java b/core/src/main/java/cz/muni/fi/pa165/core/device/Device.java
index 7e1f2864388a487f39af4ace83e37650a394039e..8c78ad911ca9b164067608b6785c5ec814397b9d 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/device/Device.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/device/Device.java
@@ -1,8 +1,10 @@
 package cz.muni.fi.pa165.core.device;
 
 import cz.muni.fi.pa165.core.common.DomainObject;
+import cz.muni.fi.pa165.core.manufacturer.Manufacturer;
 import cz.muni.fi.pa165.core.smartmeter.SmartMeter;
 import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
 import jakarta.persistence.OneToMany;
 import jakarta.persistence.Table;
 import lombok.*;
@@ -21,8 +23,8 @@ public class Device extends DomainObject {
   private String name;
 
   @OneToMany private List<SmartMeter> smartMeterList;
-  // Manufacturer
-  // private Manufacturer manufacturer;
+
+  @ManyToOne private Manufacturer manufacturer;
 
   // Company ??
   // private Company company;
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/.gitkeep b/core/src/main/java/cz/muni/fi/pa165/core/house/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/House.java b/core/src/main/java/cz/muni/fi/pa165/core/house/House.java
new file mode 100644
index 0000000000000000000000000000000000000000..524c878514d39ff1f8ebd31d610cacd340ab8edc
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/house/House.java
@@ -0,0 +1,27 @@
+package cz.muni.fi.pa165.core.house;
+
+import cz.muni.fi.pa165.core.common.DomainObject;
+import cz.muni.fi.pa165.core.smartmeter.SmartMeter;
+import jakarta.persistence.Entity;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
+import lombok.*;
+
+import java.util.List;
+
+@Getter
+@Setter
+@Entity
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Table(name = "domain_house")
+public class House extends DomainObject {
+
+  private String address;
+  private String city;
+  private String state;
+  private String zipcode;
+
+  @OneToMany private List<SmartMeter> smartMeterList;
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/HouseController.java b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseController.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e3a3cd0185733abe5ce1292ee8a6c8af86e4854
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseController.java
@@ -0,0 +1,62 @@
+package cz.muni.fi.pa165.core.house;
+
+import cz.muni.fi.pa165.core.smartmeter.SmartMeter;
+import cz.muni.fi.pa165.core.smartmeter.SmartMeterMapper;
+import cz.muni.fi.pa165.core.smartmeter.SmartMeterService;
+import cz.muni.fi.pa165.model.dto.house.HouseCreateDto;
+import cz.muni.fi.pa165.model.dto.house.HouseDto;
+import cz.muni.fi.pa165.model.dto.smartDevice.SmartMeterCreateDto;
+import cz.muni.fi.pa165.model.dto.smartDevice.SmartMeterDto;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Pageable;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/house")
+public class HouseController {
+
+  private final HouseService houseService;
+  private final HouseMapper mapper;
+
+  @Autowired
+  public HouseController(HouseService houseService, HouseMapper mapper) {
+    this.houseService = houseService;
+    this.mapper = mapper;
+  }
+
+  @Operation( // metadata for inclusion into OpenAPI document
+      summary = "Get all house pageable",
+      description = "...")
+  @GetMapping("pageable")
+  public List<HouseDto> findAllPageable(Pageable pageable) {
+    return mapper.toDtoList((List<House>) houseService.findAllPageable(pageable));
+  }
+
+  @Operation( // metadata for inclusion into OpenAPI document
+      summary = "Get all houses",
+      description = "...")
+  @CrossOrigin(origins = "*")
+  @GetMapping // CORS headers needed for JavaScript clients
+  public List<HouseDto> findAll() {
+    return mapper.toDtoList(houseService.findAll());
+  }
+
+  @Operation( // metadata for inclusion into OpenAPI document
+      summary = "Get house by id",
+      description = "...")
+  @GetMapping("/{id}")
+  public HouseDto find(@PathVariable String id) {
+    return mapper.toDto(houseService.findById(id));
+  }
+
+  @Operation( // metadata for inclusion into OpenAPI document
+      summary = "Create house",
+      description = "...")
+  @PostMapping
+  public HouseDto create(@RequestBody HouseCreateDto houseDto) {
+    return mapper.toDto(houseService.create(mapper.fromCreateDto(houseDto)));
+  }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/HouseMapper.java b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..efca5bd3afe239f36ed4a57af42ff9b1a3692f5e
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseMapper.java
@@ -0,0 +1,15 @@
+package cz.muni.fi.pa165.core.house;
+
+import cz.muni.fi.pa165.core.common.DomainMapper;
+import cz.muni.fi.pa165.core.device.Device;
+import cz.muni.fi.pa165.model.dto.device.DeviceCreateDto;
+import cz.muni.fi.pa165.model.dto.device.DeviceUpdateDto;
+import cz.muni.fi.pa165.model.dto.house.HouseCreateDto;
+import cz.muni.fi.pa165.model.dto.house.HouseDto;
+import org.mapstruct.Mapper;
+
+@Mapper
+public interface HouseMapper extends DomainMapper<House, HouseDto> {
+
+  House fromCreateDto(HouseCreateDto dto);
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/HouseRepository.java b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..f97cc5dde015fbd3fde33d849389bf80d44e0417
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseRepository.java
@@ -0,0 +1,7 @@
+package cz.muni.fi.pa165.core.house;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface HouseRepository extends JpaRepository<House, String> {}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/HouseService.java b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseService.java
new file mode 100644
index 0000000000000000000000000000000000000000..713710c525bbd79ca6ba10f6d50e15d6a756c0b0
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseService.java
@@ -0,0 +1,26 @@
+package cz.muni.fi.pa165.core.house;
+
+import cz.muni.fi.pa165.core.common.DomainService;
+import jakarta.persistence.EntityNotFoundException;
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class HouseService extends DomainService<House> {
+
+  @Getter private final HouseRepository repository;
+
+  @Autowired
+  public HouseService(HouseRepository houseRepository) {
+    repository = houseRepository;
+  }
+
+  @Transactional(readOnly = true)
+  public House findById(String id) {
+    return repository
+        .findById(id)
+        .orElseThrow(() -> new EntityNotFoundException("House with '" + id + "' not found"));
+  }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/Manufacturer.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/Manufacturer.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b6bb889fb98ed56f82d1a0400006d31f0043a37
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/Manufacturer.java
@@ -0,0 +1,24 @@
+package cz.muni.fi.pa165.core.manufacturer;
+
+import cz.muni.fi.pa165.core.common.DomainObject;
+import cz.muni.fi.pa165.core.device.Device;
+import jakarta.persistence.Entity;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
+import lombok.*;
+
+import java.util.List;
+
+@Getter
+@Setter
+@Entity
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Table(name = "domain_manufacturer")
+public class Manufacturer extends DomainObject {
+
+  private String name;
+
+  @OneToMany private List<Device> deviceList;
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerController.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerController.java
new file mode 100644
index 0000000000000000000000000000000000000000..fec1c1dbd6a12cb83e4083fa14b61e9b728d67ab
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerController.java
@@ -0,0 +1,61 @@
+package cz.muni.fi.pa165.core.manufacturer;
+
+import cz.muni.fi.pa165.core.house.House;
+import cz.muni.fi.pa165.model.dto.house.HouseCreateDto;
+import cz.muni.fi.pa165.model.dto.house.HouseDto;
+import cz.muni.fi.pa165.model.dto.manufacturer.ManufacturerCreateDto;
+import cz.muni.fi.pa165.model.dto.manufacturer.ManufacturerDto;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Pageable;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/manufacturer")
+public class ManufacturerController {
+
+  private final ManufacturerService manufacturerService;
+  private final ManufacturerMapper mapper;
+
+  @Autowired
+  public ManufacturerController(
+      ManufacturerService manufacturerService, ManufacturerMapper mapper) {
+    this.manufacturerService = manufacturerService;
+    this.mapper = mapper;
+  }
+
+  @Operation( // metadata for inclusion into OpenAPI document
+      summary = "Get all manufacturer pageable",
+      description = "...")
+  @GetMapping("pageable")
+  public List<ManufacturerDto> findAllPageable(Pageable pageable) {
+    return mapper.toDtoList((List<Manufacturer>) manufacturerService.findAllPageable(pageable));
+  }
+
+  @Operation( // metadata for inclusion into OpenAPI document
+      summary = "Get all manufacturers",
+      description = "...")
+  @CrossOrigin(origins = "*")
+  @GetMapping // CORS headers needed for JavaScript clients
+  public List<ManufacturerDto> findAll() {
+    return mapper.toDtoList(manufacturerService.findAll());
+  }
+
+  @Operation( // metadata for inclusion into OpenAPI document
+      summary = "Get manufacturer by id",
+      description = "...")
+  @GetMapping("/{id}")
+  public ManufacturerDto find(@PathVariable String id) {
+    return mapper.toDto(manufacturerService.findById(id));
+  }
+
+  @Operation( // metadata for inclusion into OpenAPI document
+      summary = "Create manufacturer",
+      description = "...")
+  @PostMapping
+  public ManufacturerDto create(@RequestBody ManufacturerCreateDto manufacturerDto) {
+    return mapper.toDto(manufacturerService.create(mapper.fromCreateDto(manufacturerDto)));
+  }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerMapper.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..34081e24aa59a5a4f43f28a9081ae8dd01b77fa2
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerMapper.java
@@ -0,0 +1,12 @@
+package cz.muni.fi.pa165.core.manufacturer;
+
+import cz.muni.fi.pa165.core.common.DomainMapper;
+import cz.muni.fi.pa165.model.dto.manufacturer.ManufacturerCreateDto;
+import cz.muni.fi.pa165.model.dto.manufacturer.ManufacturerDto;
+import org.mapstruct.Mapper;
+
+@Mapper
+public interface ManufacturerMapper extends DomainMapper<Manufacturer, ManufacturerDto> {
+
+  Manufacturer fromCreateDto(ManufacturerCreateDto dto);
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerRepository.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..1369520c2a6ef400cc4b74c0512907b0527c7b04
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerRepository.java
@@ -0,0 +1,7 @@
+package cz.muni.fi.pa165.core.manufacturer;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ManufacturerRepository extends JpaRepository<Manufacturer, String> {}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerService.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerService.java
new file mode 100644
index 0000000000000000000000000000000000000000..4068b76a7a0a09b3df31efc14d22e614e5a5885d
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerService.java
@@ -0,0 +1,26 @@
+package cz.muni.fi.pa165.core.manufacturer;
+
+import cz.muni.fi.pa165.core.common.DomainService;
+import jakarta.persistence.EntityNotFoundException;
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class ManufacturerService extends DomainService<Manufacturer> {
+
+  @Getter private final ManufacturerRepository repository;
+
+  @Autowired
+  public ManufacturerService(ManufacturerRepository manufacturerRepository) {
+    repository = manufacturerRepository;
+  }
+
+  @Transactional(readOnly = true)
+  public Manufacturer findById(String id) {
+    return repository
+        .findById(id)
+        .orElseThrow(() -> new EntityNotFoundException("Manufacturer with '" + id + "' not found"));
+  }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeter.java b/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeter.java
index 7f4c51dd7d100ef70df8a2e74cf0ed297053ba68..19a51f7fcd5f7be75b752f7f850df1accb43e83a 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeter.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeter.java
@@ -2,6 +2,7 @@ package cz.muni.fi.pa165.core.smartmeter;
 
 import cz.muni.fi.pa165.core.common.DomainObject;
 import cz.muni.fi.pa165.core.device.Device;
+import cz.muni.fi.pa165.core.house.House;
 import jakarta.persistence.Entity;
 import jakarta.persistence.ManyToOne;
 import jakarta.persistence.Table;
@@ -17,4 +18,6 @@ import lombok.*;
 public class SmartMeter extends DomainObject {
   @ManyToOne private Device device;
   private String smartMeterIdentityNumber = getId();
+
+  @ManyToOne private House house;
 }
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseCreateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseCreateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..99a6baf45a21df52cdcb3817e39605db2dd26b66
--- /dev/null
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseCreateDto.java
@@ -0,0 +1,11 @@
+package cz.muni.fi.pa165.model.dto.house;
+
+import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+
+public class HouseCreateDto extends DomainObjectDto {
+
+  public String address;
+  public String city;
+  public String state;
+  public String zipcode;
+}
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..fad881fffadd02fd6b5e37b618e07b4acdbdfbf5
--- /dev/null
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseDto.java
@@ -0,0 +1,11 @@
+package cz.muni.fi.pa165.model.dto.house;
+
+import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+
+public class HouseDto extends DomainObjectDto {
+
+  public String address;
+  public String city;
+  public String state;
+  public String zipcode;
+}
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerCreateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerCreateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..cf2890f22e68d95936018642bc364102527a8ffa
--- /dev/null
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerCreateDto.java
@@ -0,0 +1,8 @@
+package cz.muni.fi.pa165.model.dto.manufacturer;
+
+import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+
+public class ManufacturerCreateDto extends DomainObjectDto {
+
+  public String name;
+}
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..16bd260c52c27235f5d8b0cf5c84fc096be0bfbe
--- /dev/null
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerDto.java
@@ -0,0 +1,8 @@
+package cz.muni.fi.pa165.model.dto.manufacturer;
+
+import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+
+public class ManufacturerDto extends DomainObjectDto {
+
+  public String name;
+}