diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/AdminController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/AdminController.java
index 53f0acf..c12f5cf 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/AdminController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/AdminController.java
@@ -85,9 +85,15 @@
         catch (NumberFormatException | NullPointerException e) {
             throw kustvaktResponseHandler.throwit(StatusCodes.ILLEGAL_ARGUMENT);
         }
-        String result = JsonUtils.toJSON(auditingController.retrieveRecords(
-                AuditRecord.CATEGORY.valueOf(type.toUpperCase()), from_date,
-                until_date, dayOnly, integer_limit));
+        String result="";
+        try {
+            result = JsonUtils.toJSON(auditingController.retrieveRecords(
+                    AuditRecord.CATEGORY.valueOf(type.toUpperCase()), from_date,
+                    until_date, dayOnly, integer_limit));
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
         // limit number of records to return
         return Response.ok(result).build();
     }
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java
index ac4f69f..dbeb447 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java
@@ -57,8 +57,12 @@
     @GET
     @Path("layers")
     public Response getLayers () {
-        String result = JsonUtils.toJSON(annotationService.getLayerDtos());
-        return Response.ok(result).build();
+        try {
+            return Response.ok(JsonUtils.toJSON(annotationService.getLayerDtos())).build();
+        }
+        catch (KustvaktException e) {
+            throw responseHandler.throwit(e);
+        }
     }
 
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/AuthenticationController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/AuthenticationController.java
index f772224..75a772e 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/AuthenticationController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/AuthenticationController.java
@@ -88,7 +88,12 @@
                 .getQueryLanguages());
         m.put("SortTypes", null); // types of sorting that are supported!
         m.put("version", ServiceInfo.getInfo().getVersion());
-        return Response.ok(JsonUtils.toJSON(m)).build();
+        try {
+            return Response.ok(JsonUtils.toJSON(m)).build();
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
     }
 
 
@@ -102,7 +107,12 @@
             @HeaderParam(ContainerRequest.HOST) String host,
             @Context Locale locale) {
         TokenContext ctx = (TokenContext) context.getUserPrincipal();
-        return Response.ok(ctx.toJson()).build();
+        try {
+            return Response.ok(ctx.toJson()).build();
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
     }
 
 
@@ -200,7 +210,12 @@
             throw kustvaktResponseHandler.throwit(e);
         }
 
-        return Response.ok(context.toJson()).build();
+        try {
+            return Response.ok(context.toJson()).build();
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
     }
 
 
@@ -299,7 +314,12 @@
         catch (KustvaktException e) {
             throw kustvaktResponseHandler.throwit(e);
         }
-        return Response.ok().entity(context.toJson()).build();
+        try {
+            return Response.ok().entity(context.toJson()).build();
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
     }
 
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/KustvaktController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/KustvaktController.java
index f581f37..cf3cfaa 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/KustvaktController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/KustvaktController.java
@@ -1,11 +1,14 @@
 package de.ids_mannheim.korap.web.controller;
 
+import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.server.KustvaktServer;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.utils.ServiceInfo;
+import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
@@ -22,6 +25,8 @@
 public class KustvaktController {
 
     private static Logger jlog = LoggerFactory.getLogger(UserController.class);
+    @Autowired
+    private KustvaktResponseHandler kustvaktResponseHandler;
 
 
     @Path("info")
@@ -30,7 +35,12 @@
         m.put("version", ServiceInfo.getInfo().getVersion());
         m.put("recent_api_version", KustvaktServer.API_VERSION);
         m.put("service_name", ServiceInfo.getInfo().getName());
-        return Response.ok(JsonUtils.toJSON(m)).build();
+        try {
+            return Response.ok(JsonUtils.toJSON(m)).build();
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
     }
 
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthController.java
index c21c406..2bc03d7 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthController.java
@@ -110,14 +110,16 @@
                     "Missing parameter!", "redirect_url");
         info.setRedirect_uri(rurl);
         TokenContext ctx = (TokenContext) context.getUserPrincipal();
+        String json = "";
         try {
             User user = this.controller.getUser(ctx.getUsername());
             this.handler.getPersistenceHandler().registerClient(info, user);
+            json = info.toJSON();
         }
         catch (KustvaktException e) {
             throw kustvaktResponseHandler.throwit(e);
         }
-        return Response.ok(info.toJSON()).build();
+        return Response.ok(json).build();
     }
 
 
@@ -128,20 +130,21 @@
             @QueryParam("scope") String scopes) {
         TokenContext ctx = (TokenContext) context.getUserPrincipal();
         Userdata data;
+        String json= "";
         try {
             User user = this.controller.getUser(ctx.getUsername());
             data = this.controller.getUserData(user, UserDetails.class);
             Set<String> base_scope = StringUtils.toSet(scopes, " ");
             base_scope.retainAll(StringUtils.toSet(scopes));
             scopes = StringUtils.toString(base_scope);
+            json = JsonUtils.toJSON(Scopes.mapScopes(scopes, data));
         }
         catch (KustvaktException e) {
             throw kustvaktResponseHandler.throwit(e);
         }
         // json format with scope callback parameter
         // todo: add other scopes as well!
-        return Response.ok(JsonUtils.toJSON(Scopes.mapScopes(scopes, data)))
-                .build();
+        return Response.ok(json).build();
     }
 
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/ResourceController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/ResourceController.java
index 103072e..d64e5bd 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/ResourceController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/ResourceController.java
@@ -11,6 +11,7 @@
 
 import com.sun.jersey.spi.container.ResourceFilters;
 
+import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.service.ResourceService;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.web.filter.PiwikFilter;
@@ -40,7 +41,14 @@
     @GET
     @Path("info")
     public Response getAllResourceInfo () {
-        String result = JsonUtils.toJSON(resourceService.getResourceDtos());
+        String result = "";
+        try {
+            result = JsonUtils.toJSON(resourceService.getResourceDtos());
+        }
+        catch (KustvaktException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
         return Response.ok(result).build();
     }
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
index 5e37692..3c4f33d 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
@@ -336,19 +336,20 @@
         // EM: is this necessary at all?
         KustvaktResource resource = isCollectionIdValid(ctx.getName(), id);
         if (resource != null) {
-            if (resource instanceof VirtualCollection) {
-                JsonNode node = cquery.and().mergeWith(resource.getData());
-                query = JsonUtils.toJSON(node);
-            }
-            else if (resource instanceof Corpus) {
-                cquery.and().with(Attributes.CORPUS_SIGLE, "=",
-                        resource.getPersistentID());
-                try {
+            try {
+                if (resource instanceof VirtualCollection) {
+                    JsonNode node = cquery.and().mergeWith(resource.getData());
+                    query = JsonUtils.toJSON(node);
+                }
+                else if (resource instanceof Corpus) {
+                    cquery.and().with(Attributes.CORPUS_SIGLE, "=",
+                            resource.getPersistentID());
+
                     query = cquery.toJSON();
                 }
-                catch (KustvaktException e) {
-                   throw responseHandler.throwit(e);
-                }
+            }
+            catch (KustvaktException e) {
+                throw responseHandler.throwit(e);
             }
         }
 
@@ -555,26 +556,28 @@
             jlog.error("Failed retrieving resource: {}", e.string());
             throw responseHandler.throwit(e);
         }
+        try {
+            if (resource instanceof VirtualCollection) {
+                // test this
+                //builder.setBaseQuery(resource.getData());
+                return JsonUtils
+                        .toJSON(builder.and().mergeWith(resource.getData()));
+            }
+            else if (resource instanceof Corpus) {
+                builder.and().with(Attributes.CORPUS_SIGLE, "=",
+                        resource.getPersistentID());
 
-        if (resource instanceof VirtualCollection) {
-            // test this
-            //builder.setBaseQuery(resource.getData());
-            return JsonUtils
-                    .toJSON(builder.and().mergeWith(resource.getData()));
-        }
-        else if (resource instanceof Corpus) {
-            builder.and().with(Attributes.CORPUS_SIGLE, "=",
-                    resource.getPersistentID());
-            try {
                 return builder.toJSON();
             }
-            catch (KustvaktException e) {
-                throw responseHandler.throwit(e);
+
+
+            else {
+                throw responseHandler.throwit(StatusCodes.ILLEGAL_ARGUMENT,
+                        "Type parameter not supported", type);
             }
         }
-        else {
-            throw responseHandler.throwit(StatusCodes.ILLEGAL_ARGUMENT,
-                    "Type parameter not supported", type);
+        catch (KustvaktException e) {
+            throw responseHandler.throwit(e);
         }
     }
 
@@ -620,7 +623,12 @@
         Map vals = new HashMap();
         vals.put("id", cache.getId());
         vals.put("statistics", cache.getStats());
-        return Response.ok(JsonUtils.toJSON(vals)).build();
+        try {
+            return Response.ok(JsonUtils.toJSON(vals)).build();
+        }
+        catch (KustvaktException e) {
+            throw responseHandler.throwit(e);
+        }
     }
 
 
@@ -736,7 +744,7 @@
                     base = JsonUtils.readTree(query);
                 }
                 catch (KustvaktException e) {
-                  responseHandler.throwit(e);
+                    responseHandler.throwit(e);
                 }
             else
                 // todo: throw exception response for no resource to save!
@@ -775,7 +783,12 @@
                 throw responseHandler.throwit(e);
             }
         }
-        return Response.ok(JsonUtils.toJSON(vals)).build();
+        try {
+            return Response.ok(JsonUtils.toJSON(vals)).build();
+        }
+        catch (KustvaktException e) {
+            throw responseHandler.throwit(e);
+        }
     }
 
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/UserController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/UserController.java
index ff8ccf9..b181178 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/UserController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/UserController.java
@@ -116,7 +116,12 @@
             object.put("confirm_uri", uriBuilder.build());
             object.put("uri_expiration",
                     TimeUtils.format(uri.getUriExpiration()));
-            return Response.ok(JsonUtils.toJSON(object)).build();
+            try {
+                return Response.ok(JsonUtils.toJSON(object)).build();
+            }
+            catch (KustvaktException e) {
+                throw kustvaktResponseHandler.throwit(e);
+            }
         }
         else {
             jlog.error("Failed creating confirmation and expiry tokens.");
@@ -224,7 +229,12 @@
         ObjectNode obj = JsonUtils.createObjectNode();
         obj.put(Attributes.URI, builder.toString());
         obj.put(Attributes.URI_EXPIRATION, objects[1].toString());
-        return Response.ok(JsonUtils.toJSON(obj)).build();
+        try {
+            return Response.ok(JsonUtils.toJSON(obj)).build();
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
     }
 
 
@@ -271,7 +281,12 @@
             throw kustvaktResponseHandler
                     .throwAuthenticationException(ctx.getUsername());
         }
-        return Response.ok(m.toEntity()).build();
+        try {
+            return Response.ok(m.toEntity()).build();
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
     }
 
 
@@ -444,7 +459,12 @@
             jlog.error("Exception encountered!", e);
             throw kustvaktResponseHandler.throwit(e);
         }
-        return Response.ok(JsonUtils.toJSON(add)).build();
+        try {
+            return Response.ok(JsonUtils.toJSON(add)).build();
+        }
+        catch (KustvaktException e) {
+            throw kustvaktResponseHandler.throwit(e);
+        }
     }
 
 
