diff --git a/ChangeLog b/ChangeLog
index c0e1279..0699384 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,10 +3,13 @@
 - handle resource pid and resolve resources (virtual corpora) using map (#62)
 - handle empty description.
 - Add cache for virtual corpus access.(#63)
-- Implemented search for protected resources by using public metadata search 
+- Implement search for protected resources by using public metadata search 
   web-service and adding Diagnostics. (#64)
-- Added support for match-id with signatures. 
+- Add support for match-id with signatures. 
 - Add resource reference.
+- Disable pid for resource in the results
+- Implement search on a protected resource returning one result with 
+  a URL reference
 
 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 f843df9..9290b43 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
@@ -384,7 +384,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/test/java/de/ids_mannheim/korap/test/BaseTest.java b/src/test/java/de/ids_mannheim/korap/test/BaseTest.java
index 1dbf484..07fba5e 100644
--- a/src/test/java/de/ids_mannheim/korap/test/BaseTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/BaseTest.java
@@ -1,6 +1,7 @@
 package de.ids_mannheim.korap.test;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.mockserver.integration.ClientAndServer.startClientAndServer;
 import static org.mockserver.model.HttpRequest.request;
 import static org.mockserver.model.HttpResponse.response;
@@ -124,7 +125,8 @@
                         .withBody(matchInfoResult).withStatusCode(200));
     }
 
-    protected Document checkSearchRetrieveResponseSRUVersion1_2 (InputStream entity)
+    protected Document checkSearchRetrieveResponseSRUVersion1_2 (InputStream 
+    		entity, String url)
             throws SAXException, IOException, ParserConfigurationException {
 
         docBuilder = factory.newDocumentBuilder();
@@ -137,9 +139,12 @@
                 nodelist.item(0).getTextContent());
 
         NodeList resources = doc.getElementsByTagName("fcs:Resource");
-        String attr = resources.item(0).getAttributes().getNamedItem("pid")
+        String attr = resources.item(0).getAttributes().getNamedItem("ref")
                 .getNodeValue();
 
+        assertNotNull(attr);
+        assertEquals(url, attr);
+        
         nodelist = doc.getElementsByTagName("fcs:DataView");
         attr = nodelist.item(0).getAttributes().getNamedItem("type")
                 .getNodeValue();
@@ -181,9 +186,11 @@
                 nodelist.item(0).getTextContent());
 
         NodeList resources = doc.getElementsByTagName("fcs:Resource");
-        String attr = resources.item(0).getAttributes().getNamedItem("pid")
+        String attr = resources.item(0).getAttributes().getNamedItem("ref")
                 .getNodeValue();
 
+        assertNotNull(attr);
+
         nodelist = doc.getElementsByTagName("fcs:DataView");
         attr = nodelist.item(0).getAttributes().getNamedItem("type")
                 .getNodeValue();
diff --git a/src/test/java/de/ids_mannheim/korap/test/KorapClientTest.java b/src/test/java/de/ids_mannheim/korap/test/KorapClientTest.java
index 922526f..007d090 100644
--- a/src/test/java/de/ids_mannheim/korap/test/KorapClientTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/KorapClientTest.java
@@ -135,8 +135,9 @@
 			@Override
 			public void addDiagnostic (String uri, String details,
 					String message) {
-				System.out.println("Diagnostics: " + uri + "; Details: "
-						+ details + "; Message: "+message);
+				assertEquals("info:srw/diagnostic/1/3", uri);
+				assertEquals("The results could not be shown due to lack of authentication.", details);
+				assertEquals("Authentication required.", message);
 
 			}
 		};
diff --git a/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java b/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java
index 91b1a0c..657a98f 100644
--- a/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/KorapSRUTest.java
@@ -138,7 +138,8 @@
                         .queryParam("query", "fein").get(ClientResponse.class);
 
         InputStream entity = response.getEntity(InputStream.class);
-        checkSearchRetrieveResponseSRUVersion1_2(entity);
+        String url = "http://localhost:1080?q=fein&ql=cql";
+        checkSearchRetrieveResponseSRUVersion1_2(entity,url);
     }
 
     @Test
@@ -155,7 +156,8 @@
                 .queryParam("x-fcs-context", "http://hdl.handle.net/10932/00-03B6-558F-4E10-6201-1").get(ClientResponse.class);
 
         InputStream entity = response.getEntity(InputStream.class);
-        checkSearchRetrieveResponseSRUVersion1_2(entity);
+        String url = "http://localhost:1080?q=fein&ql=cql&cq=corpusSigle%3DWPD17";
+        checkSearchRetrieveResponseSRUVersion1_2(entity,url);
     }
     
     @Test
