diff --git a/pom.xml b/pom.xml
index 0166501..ea5cb49 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
   <groupId>de.mannheim.ids</groupId>
   <artifactId>KorapSRU</artifactId>
-  <version>1.0.1-SNAPSHOT</version>
+  <version>1.0.2-SNAPSHOT</version>
   <packaging>war</packaging>
 
   <name>KorapSRU</name>
@@ -15,7 +15,7 @@
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
-          <version>2.1</version>
+          <version>3.5.1</version>
           <configuration>
               <source>1.7</source>
               <target>1.7</target>
@@ -32,13 +32,13 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>3.8.1</version>
+      <version>4.12</version>
       <scope>test</scope>
     </dependency>
   	<dependency>
       <groupId>eu.clarin.sru.fcs</groupId>
       <artifactId>fcs-simple-endpoint</artifactId>
-      <version>1.2.0</version>
+      <version>1.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>javax.servlet</groupId>
@@ -55,7 +55,7 @@
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
    	  <artifactId>jackson-databind</artifactId>
-   	  <version>2.2.3</version>
+   	  <version>2.7.1</version>
     </dependency>    
     <dependency>
     	<groupId>org.slf4j</groupId>
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapClient.java b/src/main/java/de/mannheim/ids/korap/sru/KorapClient.java
index eecdcb3..0776c56 100644
--- a/src/main/java/de/mannheim/ids/korap/sru/KorapClient.java
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapClient.java
@@ -1,20 +1,13 @@
 package de.mannheim.ids.korap.sru;
 
 import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
 import org.apache.http.HttpStatus;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.HttpResponseException;
@@ -27,7 +20,6 @@
 import org.apache.http.message.BasicNameValuePair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
 
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
@@ -36,26 +28,23 @@
 
 public class KorapClient {
 	
-	private static final String SERVICE_URI = "http://10.0.10.13:8888/api/v0.1/";
+	private static final String SERVICE_URI = "http://10.0.10.13:7070/api/v0.1/";
 	private String QUERY_LANGUAGE = "CQL";
 	private String CONTEXT_TYPE = "sentence";
 	
-	private int defaultNumOfRecords;
-	private int defaultMaxRecords;
+	private int defaultNumOfRecords = 10;
+	private int defaultMaxRecords = 10;
 	
 	private ObjectMapper objectMapper;
-	private SAXParserFactory saxParserFactory;
 	private Logger logger = (Logger) LoggerFactory.getLogger(KorapClient.class);
 	
 	public KorapClient(int numOfRecords, int maxRecords) {
-		objectMapper = new ObjectMapper();
-		saxParserFactory = SAXParserFactory.newInstance();
-		
+		this.objectMapper = new ObjectMapper();
 		this.defaultNumOfRecords = numOfRecords;
 		this.defaultMaxRecords = maxRecords;
 	}
 	
-	public JsonNode retrieveResources() throws HttpResponseException, Exception{
+	public JsonNode retrieveResources() throws URISyntaxException, IOException {
 		
 		URIBuilder builder = new URIBuilder(SERVICE_URI+"VirtualCollection");
 		//builder.addParameter("type", "VirtualCollection");
@@ -65,7 +54,7 @@
 		
 		CloseableHttpClient client = HttpClients.createDefault();
 		CloseableHttpResponse response = null;		
-		JsonNode resources;
+		JsonNode resources = null;
 		
 		try {
 			response = client.execute(httpRequest);
@@ -80,13 +69,11 @@
 			}
 			
 			BufferedInputStream jsonStream = new BufferedInputStream( 
-					response.getEntity().getContent() );			
+					response.getEntity().getContent() );
 			try {				
 				resources = objectMapper.readValue(jsonStream, JsonNode.class);
-			} catch (JsonParseException e) {
-				throw new Exception("Failed parsing JSON.");
-			} catch (JsonMappingException e) {
-				throw new Exception("Failed mapping JSON.");
+			} catch (JsonParseException | JsonMappingException e) {
+				throw e;
 			}
 			finally{
 				jsonStream.close();
@@ -101,7 +88,8 @@
 	
 	
 	public KorapResult query(String query, String version, int startRecord, 
-			int maximumRecords, String[] corpora) throws HttpResponseException, Exception{
+			int maximumRecords, String[] corpora) throws HttpResponseException,
+			IOException {
 		
 		checkQuery(query, startRecord, maximumRecords);
 		
@@ -157,10 +145,8 @@
 					response.getEntity().getContent() );	
 			try {				
 				result = objectMapper.readValue(jsonStream, KorapResult.class);
-			} catch (JsonParseException e) {
-				throw new Exception("Failed parsing JSON.");
-			} catch (JsonMappingException e) {
-				throw new Exception("Failed mapping JSON.");
+			} catch (IOException e) {
+				throw new IOException("Failed processing response.");
 			}
 			finally{
 				jsonStream.close();
@@ -170,15 +156,6 @@
 			response.close();
 		}
 		
-		try {
-			logger.info("Matches size: "+ result.getMatches().size());
-			logger.debug("Parsing snippets");
-			parseMatchSnippets(result);
-			
-		} catch (ParserConfigurationException | SAXException e) {
-			throw new Exception("Failed parsing snippet.");
-		}
-		
 		return result;
 	}	
 	
@@ -193,20 +170,6 @@
 		return errorItems;						
 	}
 	
-	private void parseMatchSnippets(KorapResult result) 
-			throws ParserConfigurationException, SAXException, IOException {
-				
-		String snippet;
-		InputStream is;
-		SAXParser saxParser = saxParserFactory.newSAXParser();
-		for (KorapMatch m : result.getMatches()){			
-			snippet = "<snippet>"+m.getSnippet()+"</snippet>";
-			is = new ByteArrayInputStream(snippet.getBytes());
-			saxParser.parse(is, new KorapMatchHandler(m));			
-			//logger.info("left {}, key {}, right {} ", m.getLeftContext(), m.getKeyword(), m.getRightContext());
-		}		
-	}
-	
 	private HttpGet createRequest(String query, String version, int startRecord, 
 			int maximumRecords) 
 			throws URISyntaxException {
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapEndpointDescription.java b/src/main/java/de/mannheim/ids/korap/sru/KorapEndpointDescription.java
new file mode 100644
index 0000000..2e7d1f2
--- /dev/null
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapEndpointDescription.java
@@ -0,0 +1,108 @@
+package de.mannheim.ids.korap.sru;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import eu.clarin.sru.server.SRUConfigException;
+import eu.clarin.sru.server.SRUConstants;
+import eu.clarin.sru.server.SRUException;
+import eu.clarin.sru.server.fcs.DataView;
+import eu.clarin.sru.server.fcs.DataView.DeliveryPolicy;
+import eu.clarin.sru.server.fcs.EndpointDescription;
+import eu.clarin.sru.server.fcs.ResourceInfo;
+
+public class KorapEndpointDescription implements EndpointDescription {
+
+	private List<DataView> dataviews;
+	private List<URI> capabilities;
+
+	private List<String> languages;
+	
+	private String defaultDataview = "hits";
+
+	public KorapEndpointDescription() throws SRUConfigException {
+		dataviews = new ArrayList<DataView>();
+		dataviews.add(new DataView("hits", "application/x-clarin-fcs-hits+xml",
+				DeliveryPolicy.SEND_BY_DEFAULT));
+		dataviews.add(new DataView("kwic", "application/x-clarin-fcs-kwic+xml",
+				DeliveryPolicy.NEED_TO_REQUEST));
+
+		capabilities = new ArrayList<URI>();
+		try {
+			capabilities.add(new URI(
+					"http://clarin.eu/fcs/capability/basic-search"));
+		} catch (URISyntaxException e) {
+			throw new SRUConfigException("Found an invalid capability URI.");
+		}
+
+		languages = new ArrayList<String>();
+		languages.add("deu");
+	}
+
+	@Override
+	public void destroy() {
+		dataviews.clear();
+		capabilities.clear();
+		languages.clear();
+	}
+
+	@Override
+	public List<URI> getCapabilities() {
+		return capabilities;
+	}
+
+	@Override
+	public List<DataView> getSupportedDataViews() {
+		return dataviews;
+	}
+
+	@Override
+	public List<ResourceInfo> getResourceList(String pid) throws SRUException {
+
+		List<ResourceInfo> resourceList = new ArrayList<ResourceInfo>();
+		
+		Map<String,String> title;
+		Map<String,String> description;
+
+		JsonNode resources;
+
+		try {
+			resources = KorapSRU.korapClient.retrieveResources();
+		} catch (URISyntaxException | IOException e) {
+			throw new SRUException(SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
+					"Failed retrieving resources.");
+		}
+
+		for (JsonNode r : resources) {
+			title = new HashMap<String, String>();
+			title.put("de", r.get("name").asText());
+			title.put("en", r.get("name").asText());
+
+			description = new HashMap<String, String>();
+			description.put("de", r.get("description").asText());
+
+			ResourceInfo ri = new ResourceInfo(r.get("id").asText(), title,
+					description, KorapSRU.KORAP_WEB_URL, languages, dataviews,
+					null);
+			resourceList.add(ri);
+		}
+		
+		return resourceList;
+	}
+
+	public String getDefaultDataView() {
+		return defaultDataview;
+	}
+
+	public void setDefaultDataView(String defaultDataview) {
+		this.defaultDataview = defaultDataview;
+	}
+
+}
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapMatch.java b/src/main/java/de/mannheim/ids/korap/sru/KorapMatch.java
index d70ec35..5c960af 100644
--- a/src/main/java/de/mannheim/ids/korap/sru/KorapMatch.java
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapMatch.java
@@ -1,15 +1,18 @@
 package de.mannheim.ids.korap.sru;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class KorapMatch {
 	
+	private String ID;
 	private String docID;     
 	private String leftContext;
 	private String keyword;
 	private String rightContext;
 	private String snippet;
+	private String text;
 	     
 	public KorapMatch() {}
 	
@@ -21,6 +24,13 @@
     	this.rightContext = rightContext;
 	}
 
+	@JsonProperty("ID")
+	public String getID() {
+		return ID;
+	}
+	public void setID(String id) {
+		this.ID = id;
+	}
 
 	public String getDocID() {
 		return docID;
@@ -60,6 +70,14 @@
 
 	public void setSnippet(String snippet) {
 		this.snippet = snippet;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
 	} 
 
 }
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapResult.java b/src/main/java/de/mannheim/ids/korap/sru/KorapResult.java
index e5d9f91..ea73fb3 100644
--- a/src/main/java/de/mannheim/ids/korap/sru/KorapResult.java
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapResult.java
@@ -7,8 +7,8 @@
 
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class KorapResult {
-	int totalResults;
-	List<KorapMatch> matches;
+	private int totalResults;
+	private List<KorapMatch> matches;
 	
 	public KorapResult() {
 		matches = new ArrayList<KorapMatch>();
@@ -28,13 +28,13 @@
 	}
 	
 	public KorapMatch getMatch(int i){
-		if (i>=0 && i< getSize())
+		if (i>=0 && i< getMatchSize())
 			return matches.get(i);
 		
 		return null;
 	}
 	
-	public int getSize(){
+	public int getMatchSize(){
 		return matches.size();
 	}
 }
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapSRU.java b/src/main/java/de/mannheim/ids/korap/sru/KorapSRU.java
index 15e2791..e36713e 100644
--- a/src/main/java/de/mannheim/ids/korap/sru/KorapSRU.java
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapSRU.java
@@ -1,22 +1,14 @@
 package de.mannheim.ids.korap.sru;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
+import java.io.IOException;
 import java.util.Map;
 
 import javax.servlet.ServletContext;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.http.client.HttpResponseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.z3950.zing.cql.CQLNode;
-import org.z3950.zing.cql.CQLTermNode;
-
-import com.fasterxml.jackson.databind.JsonNode;
 
 import eu.clarin.sru.server.SRUConfigException;
 import eu.clarin.sru.server.SRUConstants;
@@ -26,11 +18,10 @@
 import eu.clarin.sru.server.SRUSearchResultSet;
 import eu.clarin.sru.server.SRUServerConfig;
 import eu.clarin.sru.server.SRUVersion;
-import eu.clarin.sru.server.fcs.ResourceInfo;
-import eu.clarin.sru.server.fcs.ResourceInfoInventory;
+import eu.clarin.sru.server.fcs.Constants;
+import eu.clarin.sru.server.fcs.DataView;
+import eu.clarin.sru.server.fcs.EndpointDescription;
 import eu.clarin.sru.server.fcs.SimpleEndpointSearchEngineBase;
-import eu.clarin.sru.server.fcs.XMLStreamWriterHelper;
-import eu.clarin.sru.server.fcs.utils.SimpleResourceInfoInventory;
 
 /**
  * @author margaretha
@@ -39,58 +30,27 @@
 
 //	private static final String RESOURCE_INFO_INVENTORY_URL =
 //            "/WEB-INF/resource-info.xml";
-	private static final String CLARIN_FCS_RECORD_SCHEMA =
+	public static final String CLARIN_FCS_RECORD_SCHEMA =
             "http://clarin.eu/fcs/1.0";
-	private static final String KORAP_WEB_URL = 
-			"http://korap.ids-mannheim.de/app/#!login";
+	public static final String KORAP_WEB_URL = 
+			"http://korap.ids-mannheim.de/kalamar";
 	
-	private KorapClient korapClient;
+	public static KorapClient korapClient;
+	private KorapEndpointDescription korapEndpointDescription;
 	private SRUServerConfig serverConfig;
-	private String redirectBaseURI;
+
+	public static String redirectBaseURI;
 	
 	private Logger logger = (Logger) LoggerFactory.getLogger(KorapSRU.class);	
-	
+
 	@Override
-	protected ResourceInfoInventory createResourceInfoInventory(
+	protected EndpointDescription createEndpointDescription(
 			ServletContext context, SRUServerConfig config,
 			Map<String, String> params) throws SRUConfigException {
-		
-		List<ResourceInfo> resourceList = new ArrayList<ResourceInfo>();
-		
-		List<String> languages = new ArrayList<String>();
-		languages.add("deu");
-		
-		/*Locale locale = new Locale.Builder().setRegion("DE").build();
-		for (Locale l : locale.getAvailableLocales()){
-			if (l.getCountry().equals("DE"))
-				logger.info("locale "+l.getISO3Language());
-		}*/
-		
-		Map<String,String> title;
-		Map<String,String> description;
-		try {
-			JsonNode resources = korapClient.retrieveResources();
-			for (JsonNode r : resources){
-				title = new HashMap<String,String>();				
-				title.put("de", r.get("name").asText());
-				title.put("en", r.get("name").asText());
-				
-				description = new HashMap<String,String>();
-				description.put("de", r.get("description").asText());
-				
-				ResourceInfo ri = new ResourceInfo(
-						r.get("id").asText(), -1, title, description, 
-						KORAP_WEB_URL, languages , null);
-				resourceList.add(ri);
-			}
-		
-		} catch (Exception e) {
-			throw new SRUConfigException(
-                    "error initializing resource info inventory", e);
-		}		
-		return new SimpleResourceInfoInventory(resourceList, false);
+		korapEndpointDescription = new KorapEndpointDescription();
+		return korapEndpointDescription;
 	}
-
+	
 	@Override
 	protected void doInit(ServletContext context, SRUServerConfig config,
 			Map<String, String> params) throws SRUConfigException {
@@ -110,28 +70,20 @@
         sb.append("/").append("redirect/");
         this.redirectBaseURI = sb.toString();
 	}
-	
-	private Map<String, String> createLocaleMap(){
-		// country,language
-		Map<String, String> map = new HashMap<String,String>();
-		Locale locale = new Locale("en");		
-		for (String country : locale.getISOCountries()){
-			for (Locale l : locale.getAvailableLocales()){
-				if (l.getCountry().equals(country)){
-					map.put(country, l.getISO3Language());
-				}
-			}	
-		}
-		return map;
-	}
-	
+
 	@Override
 	public SRUSearchResultSet search(SRUServerConfig config,
 			SRURequest request, SRUDiagnosticList diagnostics)
 			throws SRUException {
 				
-		checkSchema(request);		
-		
+		checkRequestRecordSchema(request);
+
+		String dataview = korapEndpointDescription.getDefaultDataView();
+		if (request.getExtraRequestDataNames().contains("x-fcs-dataviews")) {
+			dataview = getRequestDataView(
+					request.getExtraRequestData("x-fcs-dataviews"), diagnostics);
+		}
+
         String korapQuery = translateCQLtoKorapQuery(request.getQuery());
         String version = null;
         if (request.isVersion(SRUVersion.VERSION_1_1)){
@@ -143,10 +95,10 @@
         else {
         	serverConfig.getDefaultVersion();
         }
-       
-		KorapResult result = null;
+
+		KorapResult korapResult = new KorapResult();
 		try {
-			result = korapClient.query(
+			korapResult = korapClient.query(
 					korapQuery,
 					version,
 					request.getStartRecord(), 
@@ -173,15 +125,18 @@
 				throw new SRUException(SRUConstants.SRU_QUERY_FEATURE_UNSUPPORTED, 
 						e.getMessage());
 			default: 
-				throw new SRUException(SRUConstants.SRU_GENERAL_SYSTEM_ERROR);
+					throw new SRUException(
+							SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
+							e.getMessage());
 			}
 			
 		}
-		catch (Exception e) {
-			throw new SRUException(SRUConstants.SRU_GENERAL_SYSTEM_ERROR);
+		catch (IOException e) {
+			throw new SRUException(SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
+					e.getMessage());
 		}		
 		
-		return generateSRUResultSet(diagnostics, result); 
+		return new KorapSRUSearchResultSet(diagnostics, korapResult, dataview);
 	}
 	
 	private String[] getCorporaList(SRURequest request){
@@ -200,7 +155,6 @@
 		}
 	}
 	
-
 	private String translateCQLtoKorapQuery(CQLNode query) throws SRUException {		
 		String queryStr = query.toString();
 		if ((queryStr == null) || queryStr.isEmpty()) {
@@ -210,7 +164,7 @@
 		return queryStr;
 	}
 	
-	private void checkSchema(SRURequest request) throws SRUException{
+	private void checkRequestRecordSchema(SRURequest request) throws SRUException{
 		final String recordSchemaIdentifier =
 	            request.getRecordSchemaIdentifier();
 	        if ((recordSchemaIdentifier != null) &&
@@ -222,55 +176,23 @@
 	                    "\" is not supported by this endpoint.");
 	        }
 	}
-		
-	private SRUSearchResultSet generateSRUResultSet(SRUDiagnosticList diagnostics,
-			final KorapResult result) {
-		
-		return new SRUSearchResultSet(diagnostics) {
-			
-			private int i = -1;
-			
-			@Override
-			public void writeRecord(XMLStreamWriter writer) throws XMLStreamException {
-				KorapMatch match = result.getMatch(i);				
-				XMLStreamWriterHelper.writeResourceWithKWICDataView(writer,
-						match.getDocID(), redirectBaseURI + match.getDocID(),
-						match.getLeftContext(), match.getKeyword(),
-						match.getRightContext()
-					);
-//				FCSResultWriter.writeResource(writer,
-//					// pid, ref
-//					"", redirectBaseURI + match.getDocID(),
-//					match.getLeftContext(), match.getKeyword(),
-//					match.getRightContext()
-//				);
-				//logger.info("left {}, key {}, right {} ", match.getLeftContext(), match.getKeyword(), match.getRightContext());
+
+	private String getRequestDataView(String requestDataview,
+			SRUDiagnosticList diagnostics) {
+		if (requestDataview != null & !requestDataview.isEmpty()) {
+			for (DataView dv : korapEndpointDescription.getSupportedDataViews()) {
+				if (dv.getIdentifier().equals(requestDataview)) {
+					return requestDataview;
+				}
 			}
-			
-			@Override
-			public boolean nextRecord() throws SRUException {
-				return (++i < result.getSize() ? true : false );
-			}
-			
-			@Override
-			public int getTotalRecordCount() {
-				return result.getTotalResults();
-			}
-			
-			@Override
-			public String getRecordSchemaIdentifier() {
-				return CLARIN_FCS_RECORD_SCHEMA;
-			}
-			
-			@Override
-			public String getRecordIdentifier() {
-				return null;
-			}
-			
-			@Override
-			public int getRecordCount() {
-				return result.getSize();
-			}
-		};
+			diagnostics.addDiagnostic(
+					Constants.FCS_DIAGNOSTIC_REQUESTED_DATA_VIEW_INVALID,
+					"The requested Data View " + requestDataview
+							+ " is not supported.", "The default Data View "
+							+ korapEndpointDescription.getDefaultDataView()
+							+ " is used.");
+		}
+		return korapEndpointDescription.getDefaultDataView();
 	}
+		
 }
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapSRUSearchResultSet.java b/src/main/java/de/mannheim/ids/korap/sru/KorapSRUSearchResultSet.java
new file mode 100644
index 0000000..78a2309
--- /dev/null
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapSRUSearchResultSet.java
@@ -0,0 +1,98 @@
+package de.mannheim.ids.korap.sru;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.SAXException;
+
+import eu.clarin.sru.server.SRUConstants;
+import eu.clarin.sru.server.SRUDiagnosticList;
+import eu.clarin.sru.server.SRUException;
+import eu.clarin.sru.server.SRUSearchResultSet;
+import eu.clarin.sru.server.fcs.XMLStreamWriterHelper;
+
+public class KorapSRUSearchResultSet extends SRUSearchResultSet {
+
+	private Logger logger = (Logger) LoggerFactory
+			.getLogger(KorapSRUSearchResultSet.class);
+	
+	private int i = -1;
+	private KorapResult korapResult;
+	private String dataview;
+	private SAXParser saxParser;
+
+	public KorapSRUSearchResultSet(SRUDiagnosticList diagnostics,
+			KorapResult korapResult, String dataview)
+			throws SRUException {
+		super(diagnostics);
+
+		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+		try {
+			saxParser = saxParserFactory.newSAXParser();
+		} catch (ParserConfigurationException | SAXException e) {
+			throw new SRUException(SRUConstants.SRU_GENERAL_SYSTEM_ERROR);
+		}
+
+		this.korapResult = korapResult;
+		this.dataview = dataview;
+	}
+
+	@Override
+	public int getTotalRecordCount() {
+		return korapResult.getTotalResults();
+	}
+
+	@Override
+	public int getRecordCount() {
+		return korapResult.getMatchSize();
+	}
+
+	@Override
+	public String getRecordSchemaIdentifier() {		
+		return KorapSRU.CLARIN_FCS_RECORD_SCHEMA;
+	}
+
+	@Override
+	public boolean nextRecord() throws SRUException {
+		return (++i < korapResult.getMatchSize() ? true : false);
+	}
+
+	@Override
+	public String getRecordIdentifier() {
+		return korapResult.getMatch(i).getID();
+	}
+
+	@Override
+	public void writeRecord(XMLStreamWriter writer) throws XMLStreamException {
+		KorapMatch match = korapResult.getMatch(i);
+		String snippet = "<snippet>" + match.getSnippet() + "</snippet>";
+		InputStream is = new ByteArrayInputStream(snippet.getBytes());
+		try {
+			saxParser.parse(is, new KorapMatchHandler(match));
+		} catch (SAXException | IOException e) {
+			// /throw e;
+		}
+		
+		if (dataview.equals("kwic")) {
+			XMLStreamWriterHelper.writeResourceWithKWICDataView(writer,
+					match.getID(), KorapSRU.redirectBaseURI + match.getID(),
+					match.getLeftContext(), match.getKeyword(),
+					match.getRightContext());
+			
+		} else {
+			XMLStreamWriterHelper.writeResourceWithHitsDataView(writer,
+					match.getID(), KorapSRU.redirectBaseURI + match.getID(),
+					match.getLeftContext(), match.getKeyword(),
+					match.getRightContext());
+		}
+	}
+}
diff --git a/src/main/webapp/WEB-INF/resource-info.xml b/src/main/webapp/WEB-INF/resource-info.xml
deleted file mode 100644
index dedb24c..0000000
--- a/src/main/webapp/WEB-INF/resource-info.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ResourceCollection xmlns="http://clarin.eu/fcs/1.0/resource-info">
-	<ResourceInfo pid="Wikipedia">
-		<Title xml:lang="de">Wikipedia</Title>
-		<Title xml:lang="en">Wikipedia</Title>
-        <Description xml:lang="de">
-            The German Wikipedia.
-        </Description>
-		<Description xml:lang="en">
-            The German Wikipedia.
-		</Description>
-		<LandingPageURI>http://korap.ids-mannheim.de/app/#!login</LandingPageURI>
-		<Languages>
-			<Language>deu</Language>
-		</Languages>
-	</ResourceInfo>
-</ResourceCollection>
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 5b3a74b..b1cc769 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -58,7 +58,7 @@
     <jsp-file>/_redirect.jsp</jsp-file>
     <init-param>
       <param-name>korapWebUrl</param-name>
-      <param-value>http://korap.ids-mannheim.de/app/#!login</param-value>
+      <param-value>http://korap.ids-mannheim.de/kalamar</param-value>
     </init-param>
   </servlet>
   <servlet-mapping>
