diff --git a/Changes b/Changes
index 27c7e07..2bfc523 100644
--- a/Changes
+++ b/Changes
@@ -13,12 +13,14 @@
 	  merge KorapHTML and KorapString,
 	  removed KorapSpan, KorapTermSpan and KorapLongSpan,
 	  renamed /analysis to /model,
-	  renamed shrink() to focus() (diewald)
+	  renamed shrink() to focus(),
+	  removed KorapPrimaryData (diewald)
 
 0.49.3 2015-02-03
         - [documentation] Improved documentation for API classes (diewald)
 	- [documentation] Improved documentation for various queries (margaretha)
-	- [feature] Added deserialization of SpanSubSpanQueries (margaretha,diewald)
+	- [feature] Added deserialization of SpanSubSpanQueries
+          (margaretha, diewald)
 	- [bugfix] Null filters are now correctly extended (diewald)
 	- [cleanup] Refactoring of KorapResult, KorapResponse, KorapQuery,
 	  deprecated operation:or in favor of operation:junction,
diff --git a/src/main/java/de/ids_mannheim/korap/KorapDocument.java b/src/main/java/de/ids_mannheim/korap/KorapDocument.java
index e24828a..e4c9263 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapDocument.java
@@ -3,7 +3,6 @@
 import java.util.*;
 
 import de.ids_mannheim.korap.util.KorapDate;
-import de.ids_mannheim.korap.document.KorapPrimaryData;
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.response.KorapResponse;
 
@@ -27,7 +26,7 @@
  */
 @JsonIgnoreProperties(ignoreUnknown = true)
 public abstract class KorapDocument extends KorapResponse {
-    private KorapPrimaryData primaryData;
+    private String primaryData;
 
     @JsonIgnore
     public int
@@ -315,7 +314,7 @@
     public String getPrimaryData () {
         if (this.primaryData == null)
             return "";
-        return this.primaryData.toString();
+        return this.primaryData;
     };
 
 
@@ -348,26 +347,13 @@
     /**
      * Set the primary data of the document.
      *
-     * @param primary The primary data of the document as a string.
-     */
-    @JsonIgnore
-    public void setPrimaryData (String primary) {
-        this.primaryData = new KorapPrimaryData(primary);
-    };
-    
-
-    /**
-     * Set the primary data of the document.
-     *
      * @param primary The primary data of the document
-     *        as a KorapPrimaryData object.
-     * @see KorapPrimaryData
+     *        as a string.
      */
-    public void setPrimaryData (KorapPrimaryData primary) {
+    public void setPrimaryData (String primary) {
         this.primaryData = primary;
     };
 
-
     /**
      * Get the length of the primary data of the document
      * (i.e. the number of characters).
diff --git a/src/main/java/de/ids_mannheim/korap/KorapMatch.java b/src/main/java/de/ids_mannheim/korap/KorapMatch.java
index 8697aef..e0e033e 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapMatch.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapMatch.java
@@ -12,7 +12,6 @@
 
 import de.ids_mannheim.korap.index.PositionsToOffset;
 import de.ids_mannheim.korap.index.SearchContext;
-import de.ids_mannheim.korap.document.KorapPrimaryData;
 
 import de.ids_mannheim.korap.match.HighlightCombinator;
 import de.ids_mannheim.korap.match.HighlightCombinatorElement;
@@ -362,7 +361,7 @@
      */
     public void populateDocument (Document doc, String field, HashSet<String> fields) {
 	this.setField(field);
-	this.setPrimaryData( new KorapPrimaryData(doc.get(field)) );
+	this.setPrimaryData( doc.get(field) );
 	if (fields.contains("corpusID"))
 	    this.setCorpusID(doc.get("corpusID"));
 	if (fields.contains("ID"))
diff --git a/src/main/java/de/ids_mannheim/korap/document/KorapPrimaryData.java b/src/main/java/de/ids_mannheim/korap/document/KorapPrimaryData.java
deleted file mode 100644
index 1ee7022..0000000
--- a/src/main/java/de/ids_mannheim/korap/document/KorapPrimaryData.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package de.ids_mannheim.korap.document;
-
-public class KorapPrimaryData {
-    private String primary;
-
-    public KorapPrimaryData (String text) {
-	this.primary = text;
-    };
-
-    public String substring (int startOffset) {
-	return this.primary.substring(startOffset);
-    };
-
-    public String substring (int startOffset, int endOffset) {
-	return this.primary.substring(startOffset, endOffset);
-    };
-
-    public String toString () {
-	return this.primary;
-    };
-
-    public int length () {
-	return this.primary.length();
-    };
-};
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanMatchModifyClassQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanMatchModifyClassQuery.java
index 59a271a..3f42322 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanMatchModifyClassQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanMatchModifyClassQuery.java
@@ -129,7 +129,7 @@
 
 
     @Override
-    public int hashCode() {
+    public int hashCode () {
         int result = operand.hashCode();
         result = 31 * result + number;
         result += Float.floatToRawIntBits(getBoost());
