diff --git a/src/main/java/hdm/mi/growbros/controllers/RestErrorHandler.java b/src/main/java/hdm/mi/growbros/controllers/RestErrorHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2a2ce2f0bdb22d29081e006bceb3ea952b68eb3
--- /dev/null
+++ b/src/main/java/hdm/mi/growbros/controllers/RestErrorHandler.java
@@ -0,0 +1,35 @@
+package hdm.mi.growbros.controllers;
+
+import hdm.mi.growbros.exceptions.GrowBrosException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+@ControllerAdvice
+public class RestErrorHandler extends ResponseEntityExceptionHandler {
+    private final static Logger log = LoggerFactory.getLogger(RestErrorHandler.class);
+
+    @ExceptionHandler(GrowBrosException.class)
+    protected ResponseEntity<String> handleGrowBrosException(
+            GrowBrosException e
+    ) {
+        log.error("Handling exception '{}' : {} (Status code {})", e.getClass(), e.getMessage(), e.getStatusCode());
+        return ResponseEntity.status(e.getStatusCode()).body(e.getMessage());
+    }
+
+    @ExceptionHandler
+    protected ResponseEntity<Object> handleInternalServerError(
+            RuntimeException e,
+            WebRequest req
+    ) {
+        log.error("Handling internal server error: {}", e.getClass());
+        log.error("Stacktrace:", e);
+        return handleExceptionInternal(e, "Internal server error", new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, req);
+    }
+}