diff --git a/ChangeLog b/ChangeLog
index 28f9955..0255f82 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@
 - Implemented search for protected resources by using public metadata search 
   web-service and adding Diagnostics. (#64)
 - Added support for match-id with signatures. 
+- 
 
 1.0.7-SNAPSHOT
 
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java b/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
index 25fe426..5f42f03 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
@@ -189,14 +189,20 @@
         }
 
         boolean freeAccess = true;
-        
+        String ref = "";
         HttpUriRequest httpRequest = null;
         try {
         	String corpusQuery = obtainCorpusQuery(corpora);
+        	ref = KorapSRU.korapWebUri + "?q="+query+"&ql="+queryLanguage;
+        	if (!corpusQuery.isEmpty()) {
+        		ref = ref +"&cq="+corpusQuery;
+        		corpusQuery = URLDecoder.decode(corpusQuery, "utf-8");
+        	}
             freeAccess = isAccessFree(corpora);
             httpRequest = createSearchRequest(query, queryLanguage, version,
                     startRecord - 1, maximumRecords, corpusQuery,
                     freeAccess);
+            
         }
         catch (URISyntaxException e) {
             throw new IOException("Failed creating http request.");
@@ -212,6 +218,7 @@
                     new BufferedInputStream(response.getEntity().getContent());
             try {
                 result = objectMapper.readValue(jsonStream, KorapResult.class);
+                result.setResourceReference(ref);
             }
             finally {
                 jsonStream.close();
@@ -227,7 +234,6 @@
         if (!freeAccess) {
         	result.getMatches().clear();
         }
-        	
         return result;
     }
 
@@ -249,7 +255,7 @@
 										+ " is not found.");
 					}
 				}
-            	cq = URLDecoder.decode(cq, "utf-8");
+            	//cq = URLDecoder.decode(cq, "utf-8");
         		if (i == 0) {
         			corpusQuery = cq;
         		}
@@ -377,7 +383,7 @@
 		maximumRecords, corpusQuery, freeAccess);
         
 //        logger.info("Query URI: " + uri.toString());
-//        System.out.println(uri.toString());
+        System.out.println(uri.toString());
         HttpGet request = new HttpGet(uri);
         return request;
     }
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapResult.java b/src/main/java/de/ids_mannheim/korap/sru/KorapResult.java
index 0991c6e..f4bc4fa 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapResult.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapResult.java
@@ -11,6 +11,7 @@
     private List<KorapMatch> matches;
     private List<List<Object>> errors;
     private KorapMeta metadata;
+    private String resourceReference;
 
     public KorapResult () {
         matches = new ArrayList<KorapMatch>();
@@ -55,4 +56,12 @@
     public void setMetadata (KorapMeta metadata) {
         this.metadata = metadata;
     }
+
+	public String getResourceReference () {
+		return resourceReference;
+	}
+
+	public void setResourceReference (String resourceReference) {
+		this.resourceReference = resourceReference;
+	}
 }
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java b/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
index 75906be..ecff789 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
@@ -107,7 +107,8 @@
                 isRewitesAllowed(request), diagnostics);
 //        logger.info("Number of records: "+korapResult.getTotalResults());
 
-        return new KorapSRUSearchResultSet(korapClient, diagnostics, korapResult, dataviews,
+        return new KorapSRUSearchResultSet(korapClient, diagnostics, 
+        		korapResult, dataviews,
                 korapEndpointDescription.getTextLayer(),
                 korapEndpointDescription.getAnnotationLayers());
     }
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java b/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
index 657c35c..b950aa4 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
@@ -46,6 +46,7 @@
     private Layer textLayer;
     private AnnotationHandler annotationHandler;
     private KorapClient korapClient;
+    private String reference;
 
     /**
      * Constructs a KorapSRUSearchResultSet for the given KorapResult.
@@ -80,6 +81,7 @@
         this.korapResult = korapResult;
         this.dataviews = dataviews;
         this.textLayer = textlayer;
+        this.reference = korapResult.getResourceReference();
         annotationHandler = new AnnotationHandler(annotationLayers);
     }
 
@@ -114,7 +116,7 @@
         KorapMatch match = korapResult.getMatch(i);
         match.parseMatchId();
         XMLStreamWriterHelper.writeStartResource(writer, match.getMatchId(),
-                null);
+                reference);
         XMLStreamWriterHelper.writeStartResourceFragment(writer, null, null);
 
         List<AnnotationLayer> annotationLayers;
