diff --git a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
index 658208e..d442741 100644
--- a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -125,6 +125,10 @@
     // EM: Maybe needed when we support pipe registration
     @Deprecated
     public static Map<String, String> pipes = new HashMap<>();
+    
+    // EM: default host allowed for piping query and response 
+    // (temporary solution without pipe registration)
+    private String pipeHost; 
 
     public KustvaktConfiguration (Properties properties) throws Exception {
         load(properties);
@@ -240,6 +244,8 @@
         loginTimeout = Integer.parseInt(properties.getProperty(
                 "timeout.login", "90000"));
         
+		pipeHost = properties.getProperty("pipe.host",
+				"https://korap.ids-mannheim.de");
     }
 
     @Deprecated
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
index eeddaba..f5bce26 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
@@ -61,6 +61,9 @@
     @Autowired
 	protected RewriteHandler rewriteHandler;
 
+    @Autowired
+	protected KustvaktConfiguration config;
+    
     @PostConstruct
     private void doPostConstruct () {
         UriBuilder builder = UriBuilder.fromUri("http://10.0.10.13").port(9997);
@@ -122,22 +125,18 @@
     }
 
     @SuppressWarnings("unchecked")
-    public String search (String engine, String username, HttpHeaders headers,
-            String q, String ql, String v, List<String> cqList, String fields,
-            String pipes, Integer pageIndex, Integer pageInteger, String ctx,
-            Integer pageLength, Boolean cutoff, boolean accessRewriteDisabled,
-            boolean showTokens, boolean showSnippet) throws KustvaktException {
+	public String search (String engine, String username, HttpHeaders headers,
+			String q, String ql, String v, List<String> cqList, String fields,
+			String pipes, String responsePipes, Integer pageIndex,
+			Integer pageInteger, String ctx, Integer pageLength, Boolean cutoff,
+			boolean accessRewriteDisabled, boolean showTokens,
+			boolean showSnippet) throws KustvaktException {
 
         if (pageInteger != null && pageInteger < 1) {
             throw new KustvaktException(StatusCodes.INVALID_ARGUMENT,
                     "page must start from 1", "page");
         }
 
-        String[] pipeArray = null;
-        if (pipes != null && !pipes.isEmpty()) {
-            pipeArray = pipes.split(",");
-        }
-
         User user = createUser(username, headers);
         CorpusAccess corpusAccess = user.getCorpusAccess();
 
@@ -178,7 +177,8 @@
             query = addWarning(query, warning);
         }
 
-        query = runPipes(query, pipeArray);
+        // Query pipe rewrite
+        query = runPipes(query, pipes);
 
         query = this.rewriteHandler.processQuery(query, user);
         if (DEBUG) {
@@ -204,7 +204,7 @@
             result = searchKrill.search(query);
         }
         // jlog.debug("Query result: " + result);
-
+        
         if (config.isTotalResultCacheEnabled()) {
             result = afterCheckTotalResultCache(hashedKoralQuery, result);
         }
@@ -212,10 +212,13 @@
         if (!hasCutOff) {
             result = removeCutOff(result);
         }
+        
+        // Response pipe rewrite
+        result = runPipes(result, responsePipes);
         return result;
 
     }
-
+    
     private String removeCutOff (String result) throws KustvaktException {
         ObjectNode resultNode = (ObjectNode) JsonUtils.readTree(result);
         ObjectNode meta = (ObjectNode) resultNode.at("/meta");
@@ -291,58 +294,66 @@
      * 
      * @param query
      *            the original koral query
-     * @param pipeArray
+     * @param pipes
      *            the pipe service URLs
      * @param serializer
      *            the query serializer
      * @return a modified koral query
      * @throws KustvaktException
      */
-    private String runPipes (String query, String[] pipeArray)
+    private String runPipes (String query, String pipes)
             throws KustvaktException {
-        if (pipeArray != null) {
+    	if (pipes != null && !pipes.isEmpty()) {
+			String[] pipeArray = pipes.split(",");
+			
             for (int i = 0; i < pipeArray.length; i++) {
                 String pipeURL = pipeArray[i];
-                try {
-                    URL url = new URL(pipeURL);
-                    HttpURLConnection connection = (HttpURLConnection) url
-                            .openConnection();
-                    connection.setRequestMethod("POST");
-                    connection.setRequestProperty("Content-Type",
-                            "application/json; charset=UTF-8");
-                    connection.setRequestProperty("Accept", "application/json");
-                    connection.setDoOutput(true);
-                    OutputStream os = connection.getOutputStream();
-                    byte[] input = query.getBytes("utf-8");
-                    os.write(input, 0, input.length);
-
-                    String entity = null;
-                    if (connection.getResponseCode() == HttpStatus.SC_OK) {
-                        BufferedReader br = new BufferedReader(
-                                new InputStreamReader(
-                                        connection.getInputStream(), "utf-8"));
-                        StringBuilder response = new StringBuilder();
-                        String responseLine = null;
-                        while ((responseLine = br.readLine()) != null) {
-                            response.append(responseLine.trim());
+                if (pipeURL.startsWith(config.getPipeHost())) {
+                    try {
+                        URL url = new URL(pipeURL);
+                        HttpURLConnection connection = (HttpURLConnection) url
+                                .openConnection();
+                        connection.setRequestMethod("POST");
+                        connection.setRequestProperty("Content-Type",
+                                "application/json; charset=UTF-8");
+                        connection.setRequestProperty("Accept", "application/json");
+                        connection.setDoOutput(true);
+                        OutputStream os = connection.getOutputStream();
+                        byte[] input = query.getBytes("utf-8");
+                        os.write(input, 0, input.length);
+    
+                        String entity = null;
+                        if (connection.getResponseCode() == HttpStatus.SC_OK) {
+                            BufferedReader br = new BufferedReader(
+                                    new InputStreamReader(
+                                            connection.getInputStream(), "utf-8"));
+                            StringBuilder response = new StringBuilder();
+                            String responseLine = null;
+                            while ((responseLine = br.readLine()) != null) {
+                                response.append(responseLine.trim());
+                            }
+                            entity = response.toString();
                         }
-                        entity = response.toString();
+    
+                        if (entity != null && !entity.isEmpty()) {
+                            query = entity;
+                        }
+                        else {
+                            query = handlePipeError(query, pipeURL,
+                                    connection.getResponseCode() + " "
+                                            + connection.getResponseMessage());
+                        }
                     }
-
-                    if (entity != null && !entity.isEmpty()) {
-                        query = entity;
-                    }
-                    else {
-                        query = handlePipeError(query, pipeURL,
-                                connection.getResponseCode() + " "
-                                        + connection.getResponseMessage());
+                    catch (Exception e) {
+                        query = handlePipeError(query, pipeURL, e.getMessage());
                     }
                 }
-                catch (Exception e) {
-                    query = handlePipeError(query, pipeURL, e.getMessage());
+                else {
+					query = handlePipeError(query, pipeURL,
+							"Unrecognized pipe URL");
                 }
             }
-        }
+    	}
         return query;
     }
 
@@ -361,8 +372,14 @@
 
     private String addWarning (String query, JsonNode warning)
             throws KustvaktException {
-
-        ObjectNode node = (ObjectNode) JsonUtils.readTree(query);
+    	ObjectNode node = null;
+		try {
+			node = (ObjectNode) JsonUtils.readTree(query);
+		}
+		catch (Exception e) {
+			throw new KustvaktException(StatusCodes.DESERIALIZATION_FAILED,
+					"Invalid JSON format");
+		}
         if (node.has("warnings")) {
             warning = warning.at("/warnings/0");
             ArrayNode arrayNode = (ArrayNode) node.get("warnings");
diff --git a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
index 0838cf0..19aea8e 100644
--- a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
+++ b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
@@ -226,6 +226,7 @@
             @QueryParam("page") Integer pageInteger,
             @QueryParam("fields") String fields,
             @QueryParam("pipes") String pipes,
+            @QueryParam("response-pipes") String responsePipes,
             @QueryParam("access-rewrite-disabled") boolean accessRewriteDisabled,
             @QueryParam("show-tokens") boolean showTokens,
             @DefaultValue("true") @QueryParam("show-snippet") boolean showSnippet,
@@ -239,9 +240,9 @@
         try {
             scopeService.verifyScope(context, OAuth2Scope.SEARCH);
             result = searchService.search(engine, context.getUsername(),
-                    headers, q, ql, v, cq, fields, pipes, pageIndex,
-                    pageInteger, ctx, pageLength, cutoff, accessRewriteDisabled,
-                    showTokens, showSnippet);
+                    headers, q, ql, v, cq, fields, pipes, responsePipes, 
+                    pageIndex, pageInteger, ctx, pageLength, cutoff, 
+                    accessRewriteDisabled, showTokens, showSnippet);
         }
         catch (KustvaktException e) {
             throw kustvaktResponseHandler.throwit(e);
diff --git a/src/main/resources/kustvakt-lite.conf b/src/main/resources/kustvakt-lite.conf
index 81c9fe6..eaa8cd5 100644
--- a/src/main/resources/kustvakt-lite.conf
+++ b/src/main/resources/kustvakt-lite.conf
@@ -21,6 +21,9 @@
 # default
 kustvakt.base.url=/api/*
 
+# Pipe (Please change or commented for production!)
+pipe.host = http://localhost
+
 # default foundries for layers
 default.foundry.partOfSpeech = tt
 default.foundry.lemma = tt
