diff --git a/core/src/main/java/cz/muni/fi/pa165/core/service/common/BaseService.java b/core/src/main/java/cz/muni/fi/pa165/core/service/common/BaseService.java
new file mode 100644
index 0000000000000000000000000000000000000000..d703fc049359b30c36c7e2e2b168de5adb9dfc13
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/service/common/BaseService.java
@@ -0,0 +1,23 @@
+package cz.muni.fi.pa165.core.service.common;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * BaseService for common CRUD operations
+ * @param <E> Entity
+ * @param <K> Key
+ * @author martinslovik
+ */
+public interface BaseService<E, K> {
+
+    E save(E entity);
+
+    Optional<E> findById(K id);
+
+    List<E> findAll();
+
+    void deleteById(K id);
+
+    void deleteAll();
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/service/common/BaseServiceImpl.java b/core/src/main/java/cz/muni/fi/pa165/core/service/common/BaseServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..22a0d3a3f1ff51b3b03d2426f6a6391289382d1f
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/service/common/BaseServiceImpl.java
@@ -0,0 +1,45 @@
+package cz.muni.fi.pa165.core.service.common;
+
+import cz.muni.fi.pa165.core.data.domain.common.DomainEntity;
+import cz.muni.fi.pa165.core.data.repository.common.BaseRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public abstract class BaseServiceImpl<E extends DomainEntity, K> implements BaseService<E, K> {
+
+    private final BaseRepository<E, K> repository;
+
+    @Autowired
+    protected BaseServiceImpl(BaseRepository<E, K> repository) {
+        this.repository = repository;
+    }
+
+    @Override
+    public E save(E entity) {
+        return repository.save(entity);
+    }
+
+    @Override
+    public Optional<E> findById(K id) {
+        return repository.findById(id);
+    }
+
+    @Override
+    public List<E> findAll() {
+        return (List<E>) repository.findAll();
+    }
+
+    @Override
+    public void deleteById(K id) {
+        repository.deleteById(id);
+    }
+
+    @Override
+    public void deleteAll() {
+        repository.deleteAll();
+    }
+}