diff --git a/src/main/java/io/vsys/payroll/controller/EmployeeController.java b/src/main/java/io/vsys/payroll/controller/EmployeeController.java
index 23dd334846953b3e3cf8cce5bc88c89ccba64241..6377570e39e4cd9edf8649400f0b8b5f0403af45 100644
--- a/src/main/java/io/vsys/payroll/controller/EmployeeController.java
+++ b/src/main/java/io/vsys/payroll/controller/EmployeeController.java
@@ -2,6 +2,7 @@ package io.vsys.payroll.controller;
 
 import java.util.List;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -11,58 +12,36 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import io.vsys.payroll.domain.Employee;
-import io.vsys.payroll.domain.EmployeeRepository;
-import io.vsys.payroll.exception.EmployeeNotFoundException;
+import io.vsys.payroll.service.EmployeeService;
 
 @RestController
 public class EmployeeController {
 
-	private final EmployeeRepository repository;
+	@Autowired
+	private EmployeeService employeeService;
 
-	public EmployeeController(EmployeeRepository repository) {
-		this.repository = repository;
-	}
-
-
-	// Aggregate root
-	// tag::get-aggregate-root[]
 	@GetMapping("/employees")
 	public List<Employee> all() {
-		return repository.findAll();
+		return employeeService.getEmployees();
 	}
-	// end::get-aggregate-root[]
 
 	@PostMapping("/employees")
 	public Employee newEmployee(@RequestBody Employee newEmployee) {
-		return repository.save(newEmployee);
+		return employeeService.createEmployee(newEmployee);
 	}
 
-	// Single item
-	
 	@GetMapping("/employees/{id}")
-	public Employee one(@PathVariable Long id) {
-		
-		return repository.findById(id)
-			.orElseThrow(() -> new EmployeeNotFoundException(id));
+	public Employee one(@PathVariable Long id) {		
+		return employeeService.getEmployee(id);
 	}
 
 	@PutMapping("/employees/{id}")
-	Employee replaceEmployee(@RequestBody Employee newEmployee, @PathVariable Long id) {
-		
-		return repository.findById(id)
-			.map(employee -> {
-				employee.setName(newEmployee.getName());
-				employee.setRole(newEmployee.getRole());
-				return repository.save(employee);
-			})
-			.orElseGet(() -> {
-				newEmployee.setId(id);
-				return repository.save(newEmployee);
-			});
+	Employee replaceEmployee(@RequestBody Employee newEmployee, @PathVariable Long id) {		
+		return employeeService.replaceEmployee(newEmployee, id);
 	}
 
 	@DeleteMapping("/employees/{id}")
 	void deleteEmployee(@PathVariable Long id) {
-		repository.deleteById(id);
+		employeeService.deleteEmployee(id);
 	}
 }
diff --git a/src/main/java/io/vsys/payroll/service/EmployeeService.java b/src/main/java/io/vsys/payroll/service/EmployeeService.java
new file mode 100644
index 0000000000000000000000000000000000000000..67ac511b215357d9a2c700b3ad38ba55335a81a7
--- /dev/null
+++ b/src/main/java/io/vsys/payroll/service/EmployeeService.java
@@ -0,0 +1,66 @@
+package io.vsys.payroll.service;
+
+import java.util.List;
+import java.util.Optional;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import io.vsys.payroll.domain.Employee;
+import io.vsys.payroll.domain.EmployeeRepository;
+import io.vsys.payroll.exception.EmployeeNotFoundException;
+
+@Service
+public class EmployeeService {
+
+    @Autowired
+    private EmployeeRepository employeeRepository;
+
+    private static final Logger log = LoggerFactory.getLogger(EmployeeService.class);
+
+    public List<Employee> getEmployees() {
+        log.info("Read all employees");
+        return employeeRepository.findAll();
+    }
+
+    public Employee getEmployee(Long id) {
+        Optional<Employee> oe = employeeRepository.findById(id);
+        if (oe.isPresent()) {     
+            log.info("Read employee with ID "+oe.get().getId());
+            log.debug("New campaign: "+oe.get());       
+            return oe.get();
+        } else {
+            throw new EmployeeNotFoundException(id);
+        }
+    }
+
+    public Employee createEmployee(Employee employee) {
+        Employee newEmployee = employeeRepository.save(employee);
+        log.info("Saved new employee with ID "+newEmployee.getId());
+        log.debug("New campaign: "+newEmployee);
+        return  newEmployee;
+    }
+
+    public Employee replaceEmployee(Employee newEmployee, Long id) {
+        Optional<Employee> oe = employeeRepository.findById(id);
+        if (oe.isPresent()) {
+            Employee employee = oe.get();
+            log.info("Updated employee with ID "+oe.get().getId());
+            log.debug("Old data: "+employee); 
+            employee.setName(newEmployee.getName());
+			employee.setRole(newEmployee.getRole());
+            log.debug("New data: "+employee);
+            return employeeRepository.save(employee);
+        } else {
+            throw new EmployeeNotFoundException(id);
+        }
+    }
+
+    public void deleteEmployee(Long id) {
+        employeeRepository.deleteById(id);
+        log.info("Deleted employee with ID "+id);
+    }
+    
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index fa26adae5d9055323e147a1c167d05c1fbaffceb..a26d27e60bec06e2b5b81c8f0782ed86247a4466 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -3,4 +3,4 @@ spring.h2.console.enabled=true
 spring.datasource.url=jdbc:h2:mem:testdb
 spring.datasource.generate-unique-name=false
 #logging
-logging.level.io.vsys.payroll.payroll.PayrollApplication=DEBUG
+logging.level.io.vsys.payroll=DEBUG