diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Errors.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Errors.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5142d5b0429c287ef4d997b51ab03a362deb785
--- /dev/null
+++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Errors.java
@@ -0,0 +1,43 @@
+package info.mathhub.uloapi.rest;
+
+import com.google.gson.Gson;
+import org.eclipse.jetty.http.HttpStatus;
+import spark.Request;
+import spark.Response;
+import spark.ResponseTransformer;
+import spark.Route;
+
+public class Errors {
+    private Errors() {};
+
+    private final static Gson gson = new Gson();
+
+    private static class JsonError {
+        final int status;
+        final String message;
+
+        JsonError(int status) {
+            this.status = status;
+            this.message = HttpStatus.getMessage(status);
+        }
+    }
+
+    public static final Route notFound = (Request request, Response response) -> {
+        return createError(HttpStatus.NOT_FOUND_404).handle(request, response);
+    };
+
+    public static final Route notAcceptable = (Request request, Response response) -> {
+        return createError(HttpStatus.NOT_ACCEPTABLE_406).handle(request, response);
+    };
+
+    public static final Route notImplemented = (Request request, Response response) -> {
+        return createError(HttpStatus.NOT_IMPLEMENTED_501).handle(request, response);
+    };
+
+    private static Route createError(int status) {
+        return (Request request, Response response) -> {
+            final JsonError obj = new JsonError(status);
+            return Errors.gson.toJson(obj);
+        };
+    }
+}
diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java
index 496dc5c8dbb26f53a596c438d60363c043d04dc4..2e77242b340d1389566eac83b73a4173768f15d7 100644
--- a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java
+++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java
@@ -9,11 +9,15 @@ public class Main {
     private Main() {};
 
     public static void main(String[] args) {
+        // routes
         get("/", Routes.index);
         get("/statistics", Routes.statistics, new JsonTransformer());
         get("/name/:name", Routes.name, new JsonTransformer());
-        notFound(Routes.notFound);
 
+        // error handling
+        notFound(Errors.notFound);
+
+        // run on all routes and errors
         after(Filters.setJsonContentType);
     }
 }
diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java
index a7ba8fc0ac943b93847929d71c3144d7bb24c790..9202dfb6299ada0ed00ff177a40bf3756d284969 100644
--- a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java
+++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java
@@ -14,7 +14,7 @@ public class Routes {
     private Routes() {};
 
     public static final Route index = (Request request, Response response) -> {
-        return "{}";
+        return Errors.notImplemented.handle(request, response);
     };
 
     public static final Route statistics = (Request request, Response response) -> {
@@ -30,19 +30,4 @@ public class Routes {
 
         return json;
     };
-
-    public static final Route notFound = (Request request, Response response) -> {
-        return createError(HttpStatus.NOT_FOUND_404);
-    };
-
-    public static final Route notAcceptable = (Request request, Response response) -> {
-        return createError(HttpStatus.NOT_ACCEPTABLE_406);
-    };
-
-    private static Route createError(int status) {
-       return (Request request, Response response) -> {
-           response.status(status);
-           return String.format("Error %d", status);
-       };
-    }
 }