diff --git a/dev/js/src/api.js b/dev/js/src/api.js
index 3b3b821..effa9f8 100644
--- a/dev/js/src/api.js
+++ b/dev/js/src/api.js
@@ -41,11 +41,11 @@
     }
 
     docFragment += '/' + match.matchID;
-    url += '/' + docFragment;
+    url += '/' + docFragment + '?';
 
     // { spans: true, layer:x, foundry : y}
     if (param['spans'] == true) {
-      url += '?spans=true';
+      url += 'spans=true';
       docFragment += ' +spans ';
       if (param['foundry'] !== undefined) {
 	      url += '&foundry=' + param['foundry'];
@@ -61,8 +61,11 @@
     else {
       // TODO
       docFragment += ' -spans';
-      url += '?spans=false';
-    }
+      url += 'spans=false';
+    };
+
+    if (KorAP.ResponsePipe != null)
+      url += '&response-pipe=' + KorAP.ResponsePipe.toString();
 
     KorAP.API.getJSON(url, cb, "MatchInfo: " + docFragment);
   };
@@ -81,8 +84,12 @@
     }
     else {
       url += '?fields=@all'; // TODO: Maybe '*'?
-    }
+    };
 
+    if (KorAP.ResponsePipe != null)
+      url += '&response-pipe=' + KorAP.ResponsePipe.toString();
+
+    
     KorAP.API.getJSON(url, cb, "TextInfo: " + doc.textSigle);
   };
 
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index 706d898..b5c3baf 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -586,6 +586,13 @@
             pipeE.removeAttribute("name");
         };
 
+        if (KorAP.ResponsePipe != null) {
+          const pipeE = KorAP.ResponsePipe.element();
+          if (pipeE.value == "")
+            pipeE.removeAttribute("name");
+        };
+
+	
         // This would preferably set the query to be "disabled",
         // but in that case the query wouldn't be submitted
         // at all.
@@ -696,8 +703,13 @@
             d.head.appendChild(KorAP.Plugin.element());
 
             // Add pipe form
-            KorAP.Pipe = pipeClass.create();
-            d.getElementById("searchform").appendChild(KorAP.Pipe.element());
+            KorAP.Pipe = pipeClass.create("pipe");
+            let searchF = d.getElementById("searchform");
+	    searchF.appendChild(KorAP.Pipe.element());
+
+            // Add pipe form
+            KorAP.ResponsePipe = pipeClass.create("response-pipe");
+            searchF.appendChild(KorAP.ResponsePipe.element());
 
             try {
               
diff --git a/dev/js/src/pipe.js b/dev/js/src/pipe.js
index 7f0f6be..f10853e 100644
--- a/dev/js/src/pipe.js
+++ b/dev/js/src/pipe.js
@@ -1,12 +1,13 @@
 /**
  * Create a pipe object, that holds a list of services
  * meant to transform the KQ passed before it's finally
- * passed to the search engine.
+ * passed to the search engine or to transform the response
+ * afterwards.
  *
  * @author Nils Diewald
  */
 "use strict";
-define(function () {
+define(['util'], function () {
   const notNullRe = new RegExp("[a-zA-Z0-9]");
 
   // Trim and check
@@ -23,8 +24,9 @@
     /**
      * Constructor
      */
-    create : function () {
+    create : function (name) {
       const obj = Object.create(this);
+      obj._name = (name == undefined) ? 'pipe' : name;
       obj._pipe = [];
       return obj;
     },
@@ -81,6 +83,13 @@
       return this._pipe.join(',');
     },
 
+    /**
+     * Return the pipe as a an URI compliant string.
+     */
+    toUriString : function () {
+      return encodeURIComponent(this.toString());
+    },
+
 
     /**
      * Update the pipe value.
@@ -100,7 +109,7 @@
       if (e == null) {
         e = this.e = document.createElement('input');
         e.setAttribute("type","text");
-        e.setAttribute("name","pipe");
+        e.setAttribute("name",this._name);
         e.classList.add("pipe");
       };
       return e;
diff --git a/dev/js/src/plugin/server.js b/dev/js/src/plugin/server.js
index bdc4873..f8c9855 100644
--- a/dev/js/src/plugin/server.js
+++ b/dev/js/src/plugin/server.js
@@ -479,12 +479,24 @@
 
       // Modify pipes
       case 'pipe':
-        if (KorAP.Pipe != undefined) {
-          if (d.job == 'del') {
-            KorAP.Pipe.remove(d.service);
-          } else {
-            KorAP.Pipe.append(d.service);
-          };
+	let j = d.job;
+        if (
+	  ((j == 'del-after' || j == 'add-after') &&
+	   KorAP.ResponsePipe == undefined) ||
+	    KorAP.Pipe == undefined) {
+	  
+	  KorAP.log(0,"No Pipe established");
+	  break;
+	};
+
+	if (j == 'del') {
+          KorAP.Pipe.remove(d.service);
+	} else if (j == 'del-after') {
+	  KorAP.ResponsePipe.remove(d.service);
+        } else if (j == 'add-after') {
+	  KorAP.ResponsePipe.append(d.service);
+	} else {
+          KorAP.Pipe.append(d.service);
         };
         break;
 
