diff --git a/Changes b/Changes
index db856cd..2cbdcf7 100644
--- a/Changes
+++ b/Changes
@@ -1,164 +1,170 @@
+0.55.7 2016-10-10
+        - [bugfix] Throw error on optional operands in distance
+          queries (diewald)
+        - [performance] Remember solved problematic queries in the
+          query planner (diewald)
+
 0.55.6 2016-08-10
         - [bugfix] distance with key "t" uses default foundry (diewald)
-	- [cleanup] Renamed fromJson() to fromKoral() (diewald)
-	- [cleanup] Removed deprecated methods in Krill:
-	  setSpanQuery(), getRequest() (diewald)
-	- [cleanup] Removed deprecated method in KrillIndex:
-	  search() (diewald)
+        - [cleanup] Renamed fromJson() to fromKoral() (diewald)
+        - [cleanup] Removed deprecated methods in Krill:
+          setSpanQuery(), getRequest() (diewald)
+        - [cleanup] Removed deprecated method in KrillIndex:
+          search() (diewald)
         - [documentation] Refer to KoralQuery instead of Koral (diewald)
-	- [cleanup] Removed deprecated method in KrillCollection:
-	  getCount() (diewald)
-	- [feature] Added getDoc() method to KrillIndex (diewald)
+        - [cleanup] Removed deprecated method in KrillCollection:
+          getCount() (diewald)
+        - [feature] Added getDoc() method to KrillIndex (diewald)
         - [bugfix] Fixed UID handling (diewald)
-	- [feature] Added document method to Web-API (diewald)
-	- [feature] Added experimental KrillStats class (diewald)
-	- [bugfix] Escape quotes in JSON strings (diewald)
-	- [bugfix] Escape XML and Brackets in snippets correctly (diewald)
-	- [feature] Differ between matching scope and match highlighting,
-	  in case the match was extended to the sentence scope (diewald)
-	- [bugfix] KoralQuery bugs are now correctly moved to responses (diewald)
-	- [security] Do not mirror arbitrary JSON objects (diewald)
-  - [bugfix] Fixed zero-boundary repetition bug (diewald)
+        - [feature] Added document method to Web-API (diewald)
+        - [feature] Added experimental KrillStats class (diewald)
+        - [bugfix] Escape quotes in JSON strings (diewald)
+        - [bugfix] Escape XML and Brackets in snippets correctly (diewald)
+        - [feature] Differ between matching scope and match highlighting,
+          in case the match was extended to the sentence scope (diewald)
+        - [bugfix] KoralQuery bugs are now correctly moved to responses (diewald)
+        - [security] Do not mirror arbitrary JSON objects (diewald)
+        - [bugfix] Fixed zero-boundary repetition bug (diewald)
 
 0.55.5 2016-05-02
-	- [performance] Changed to a dynamic window for sorting in FocusSpans (margaretha)
-	- [bugfix] store skipped spans in Repetitionspans as candidates
-	  (margaretha)
-	- [bugfix] Store lazy loading embedded spans for startsWith in
-	  WithinSpans (diewald)
-	- [bugfix] Fixed loading krill.info in case krill.properties is given
-	  (diewald)
-	- [bugfix] Remove element payloads in SubSpans (similar to Focus)
-	  to prevent wrong highlighting (diewald)
-	- [bugfix] Sort SubSpans (margaretha)
+        - [performance] Changed to a dynamic window for sorting in FocusSpans (margaretha)
+        - [bugfix] store skipped spans in Repetitionspans as candidates
+          (margaretha)
+        - [bugfix] Store lazy loading embedded spans for startsWith in
+          WithinSpans (diewald)
+        - [bugfix] Fixed loading krill.info in case krill.properties is given
+          (diewald)
+        - [bugfix] Remove element payloads in SubSpans (similar to Focus)
+          to prevent wrong highlighting (diewald)
+        - [bugfix] Sort SubSpans (margaretha)
 
 0.55.4 2016-04-22
-	- [bugfix] Wrap <base/s=t> boundaries around right extended queries
-	  (diewald)
-	- [bugfix] Lazy loading bug in WithinSpans (diewald)
-	- [feature] Matching relation nodes with attributes (margaretha)
-	- [bugfix] Removed span id in SegmentSpans, added in NextSpans (margaretha)
-	- [feature] Updated relation deserialization (margaretha)
-	- [feature] Added tests for relation queries and relation deserialization
-	  (margaretha)
-	- [bugfix] Workaround for Nullpointers in SpanOrQuery (diewald)
+        - [bugfix] Wrap <base/s=t> boundaries around right extended queries
+          (diewald)
+        - [bugfix] Lazy loading bug in WithinSpans (diewald)
+        - [feature] Matching relation nodes with attributes (margaretha)
+        - [bugfix] Removed span id in SegmentSpans, added in NextSpans (margaretha)
+        - [feature] Updated relation deserialization (margaretha)
+        - [feature] Added tests for relation queries and relation deserialization
+          (margaretha)
+        - [bugfix] Workaround for Nullpointers in SpanOrQuery (diewald)
 
 0.55.3 2016-02-22
-	- [bugfix] Use base foundry for default sentences and paragraphs
-	  (diewald, margaretha)
-	- [bugfix] Distance constraint exclusion serialized (diewald)
-	- [bugfix] Use indexer without krill.properties packaged (diewald)
-	- [bugfix] Clean pom.xml regarding overlapping dependencies (diewald)
+        - [bugfix] Use base foundry for default sentences and paragraphs
+          (diewald, margaretha)
+        - [bugfix] Distance constraint exclusion serialized (diewald)
+        - [bugfix] Use indexer without krill.properties packaged (diewald)
+        - [bugfix] Clean pom.xml regarding overlapping dependencies (diewald)
 
 0.55.2 2016-02-13
         - [bugfix] Fixed support for corpus and doc IDs containing
-	  dashes (diewald)
-	- [bugfix] Support "s" layer without meaning "surface" -
-	  this is a hack (diewald)
+          dashes (diewald)
+        - [bugfix] Support "s" layer without meaning "surface" -
+          this is a hack (diewald)
 
 0.55.1 2016-02-10
         - [bugfix] Fixed attribute serialization in MatchInfo (diewald)
 
 0.55 2016-02-04
         - [feature] Introducing payload identifiers to the index
-	  structure (diewald, margaretha)
-	  ! This is a major release, introducing index features  !
-	  ! not compatible with indices of old versions of Krill !
+          structure (diewald, margaretha)
+          ! This is a major release, introducing index features  !
+          ! not compatible with indices of old versions of Krill !
 
 0.54 2015-11-13
-   	- [performance] Updated Lucene dependency from 4.10.3
-	  to 5.0.0 (diewald)
+        - [performance] Updated Lucene dependency from 4.10.3
+          to 5.0.0 (diewald)
         - [bugfix] Minor fixes regarding invalid tokens in the
-	  test suite (diewald)
-	- [bugfix] Fixed krill.properties test (diewald)
-	- [bugfix] Fixed multiple distances in disjunction query
-	  (GitHub issue #2; margaretha)
+          test suite (diewald)
+        - [bugfix] Fixed krill.properties test (diewald)
+        - [bugfix] Fixed multiple distances in disjunction query
+          (GitHub issue #2; margaretha)
 
 0.53 2015-09-25
         - [feature] Implemented new KrillCollection (diewald)
-	  This should fix a lot of issues with deleted
-	  documents and negation in virtual collections.
-	- [cleanup] REMOVED deprecated collection filtering (diewald)
-	- [cleanup] REMOVED deprecated termRelation API (diewald)
-	- [feature] Added removal methods for documents (diewald)
-	- [cleanup] REMOVED search method in KrillCollection (diewald)
+          This should fix a lot of issues with deleted
+          documents and negation in virtual collections.
+        - [cleanup] REMOVED deprecated collection filtering (diewald)
+        - [cleanup] REMOVED deprecated termRelation API (diewald)
+        - [feature] Added removal methods for documents (diewald)
+        - [cleanup] REMOVED search method in KrillCollection (diewald)
         - [bugfix] Fixed collection statistics (diewald)
-	- [feature] Improved packaging (diewald)
-	- [feature] Introduced cmd options for server (diewald)
-    	- [feature] Return meta data on server-based indexation (diewald)
+        - [feature] Improved packaging (diewald)
+        - [feature] Introduced cmd options for server (diewald)
+        - [feature] Return meta data on server-based indexation (diewald)
 
 0.52 2015-07-08
         - [bugfix] Fixed payload filtering in FocusSpans (margaretha)
-	- [workaround] Reintroduced empty collection support,
-	  as Koral still creates them (diewald)
-	- [bugfix] Escaped characters now supported in MutiTerm (diewald)
-	- [feature] Deserialization of flags (diewald)
-	- [feature] Made responses valid KoralQueries (diewald)
-	- [bugfix] Fixed sequence deserialization bug for simple unordered
-	  constraint (diewald)
-	- [bugfix] Mirror collection (diewald)
-	- [bugfix] Updated default fields for meta data (diewald)
-	- [bugfix] Updated match identifier for "sigle" data (diewald)
-	- [workaround] Support corpusID/docID and textSigle match strings
-	  (diewald)
-	- [workaround] Support matches starting with "contains"
-	  (Kustvakt bug/diewald)
-	- [bugfix] Fixed treatment of several collection types (diewald)
-	- [bugfix] Remove legacy error handling in Match (diewald)
-	- [bugfix] JSON-serialization bug in match in case of
-	  error messages (diewald)
-	- [bugfix] 'fields' serialization (diewald)
-	- [bugfix] Deserialization of group:disjunction (diewald)
-	- [bugfix] Deserialization of wrapped spans (diewald)
-	- [bugfix] Fix KoralQuery mirroring in case of
-	  parsing failures (diewald)
-	- [feature] Support '@all' as a 'fields' value for all meta
-	  data fields (diewald)
-	- [bugfix] Fix case sensitivity bug in filters (diewald)
-	- [bugfix] Fix sentence expansion bug for new data (diewald)
-	- [bugfix] Deserialization of 'containsnot' instead of 'excludes'
-	  (diewald)
+        - [workaround] Reintroduced empty collection support,
+          as Koral still creates them (diewald)
+        - [bugfix] Escaped characters now supported in MutiTerm (diewald)
+        - [feature] Deserialization of flags (diewald)
+        - [feature] Made responses valid KoralQueries (diewald)
+        - [bugfix] Fixed sequence deserialization bug for simple unordered
+          constraint (diewald)
+        - [bugfix] Mirror collection (diewald)
+        - [bugfix] Updated default fields for meta data (diewald)
+        - [bugfix] Updated match identifier for "sigle" data (diewald)
+        - [workaround] Support corpusID/docID and textSigle match strings
+          (diewald)
+        - [workaround] Support matches starting with "contains"
+          (Kustvakt bug/diewald)
+        - [bugfix] Fixed treatment of several collection types (diewald)
+        - [bugfix] Remove legacy error handling in Match (diewald)
+        - [bugfix] JSON-serialization bug in match in case of
+          error messages (diewald)
+        - [bugfix] 'fields' serialization (diewald)
+        - [bugfix] Deserialization of group:disjunction (diewald)
+        - [bugfix] Deserialization of wrapped spans (diewald)
+        - [bugfix] Fix KoralQuery mirroring in case of
+          parsing failures (diewald)
+        - [feature] Support '@all' as a 'fields' value for all meta
+          data fields (diewald)
+        - [bugfix] Fix case sensitivity bug in filters (diewald)
+        - [bugfix] Fix sentence expansion bug for new data (diewald)
+        - [bugfix] Deserialization of 'containsnot' instead of 'excludes'
+          (diewald)
 
 0.51 2015-03-17
         - This is a major version (prepared for the GitHub release)
         - [cleanup] Changed groupID to "de.ids_mannheim.korap",
-	  renamed korap-style.xml to Format.xml (diewald)
-	- [bugfix] Updated Format.xml to work with
-	  recent versions of Eclipse (diewald)
+          renamed korap-style.xml to Format.xml (diewald)
+        - [bugfix] Updated Format.xml to work with
+          recent versions of Eclipse (diewald)
         - [documentation] Improved documentation for API classes (diewald)
-	- [bugfix] Updated AttributeSpans (margaretha)
-	- [bugfix] Updated SpanRelationQuery (margaretha)
-	- [cleanup] Autoformat (diewald)
+        - [bugfix] Updated AttributeSpans (margaretha)
+        - [bugfix] Updated SpanRelationQuery (margaretha)
+        - [cleanup] Autoformat (diewald)
         - [documentation] References added to the Readme (diewald)
-	- [bugfix] Improved failing for missing property file (kupietz)
-	- [bugfix] Fixed tests for server responses to not use
-	  Jackson deserialization (diewald)
-	- [cleanup] No more jersey logging in tests (diewald)
+        - [bugfix] Improved failing for missing property file (kupietz)
+        - [bugfix] Fixed tests for server responses to not use
+          Jackson deserialization (diewald)
+        - [cleanup] No more jersey logging in tests (diewald)
 
 0.50.1 2015-03-02
-	- [feature] Deserialization of arbitrary elements with
-	  attributes (margaretha)
-	- [cleanup] Extracted KrillMeta from Krill,
-	  renamed KorapQuery to KrillQuery,
-	  extracted QueryBuilder from KrillQuery,
-	  renamed KorapIndexer to index/Indexer,
-	  renamed KorapDocument to model/AbstractDocument,
-	  renamed KorapMatch to response/Match,
-	  renamed KorapIndex to KrillIndex,
-	  renamed KorapCollection to KrillCollection,
-	  moved collector classes from index to response,
-	  renamed KorapDate to KrillDate,
-	  renamed KorapArray to KrillArray,
-	  renamed KorapByte to KrillByte,
-	  renamed KorapString to KrillString,
-	  moved KorapNode to server/Node,
-	  moved KorapResult to response/Result,
-	  renamed KorapResponse to Response,
-	  moved model/* to index,
-	  moved meta/SearchContext to response/SearchContext,
-	  krillified property files,
-	  added Errorcodes,
-	  removed KrillIndex#addDocFile (diewald)
+        - [feature] Deserialization of arbitrary elements with
+          attributes (margaretha)
+        - [cleanup] Extracted KrillMeta from Krill,
+          renamed KorapQuery to KrillQuery,
+          extracted QueryBuilder from KrillQuery,
+          renamed KorapIndexer to index/Indexer,
+          renamed KorapDocument to model/AbstractDocument,
+          renamed KorapMatch to response/Match,
+          renamed KorapIndex to KrillIndex,
+          renamed KorapCollection to KrillCollection,
+          moved collector classes from index to response,
+          renamed KorapDate to KrillDate,
+          renamed KorapArray to KrillArray,
+          renamed KorapByte to KrillByte,
+          renamed KorapString to KrillString,
+          moved KorapNode to server/Node,
+          moved KorapResult to response/Result,
+          renamed KorapResponse to Response,
+          moved model/* to index,
+          moved meta/SearchContext to response/SearchContext,
+          krillified property files,
+          added Errorcodes,
+          removed KrillIndex#addDocFile (diewald)
         - [documentation] Improved documentation for API classes (diewald)
 
 0.50 2015-02-23
@@ -166,150 +172,150 @@
 
 0.49.4 2015-02-20
         - [documentation] Improved documentation for API classes (diewald)
-	- [cleanup] Improved test coverage for utility classes (diewald)
-   	- [performance] Updated Lucene dependency from 4.5.1 to 4.10.3,
-	  Updated Jackson dependency from 2.4.0 to 2.4.4,
-   	  Updated Jersey dependency from 2.4.1 to 2.15 (diewald)
+        - [cleanup] Improved test coverage for utility classes (diewald)
+        - [performance] Updated Lucene dependency from 4.5.1 to 4.10.3,
+          Updated Jackson dependency from 2.4.0 to 2.4.4,
+          Updated Jersey dependency from 2.4.1 to 2.15 (diewald)
         - [feature] Presorting of element terms in the index for coherent
-	  SpanQuery sorting; Removed buffering of element candidates (diewald)
-	  Warning: This is a breaking change!
-	- [feature] Added CorpusDataException to deal with data importing bugs;
+          SpanQuery sorting; Removed buffering of element candidates (diewald)
+          Warning: This is a breaking change!
+        - [feature] Added CorpusDataException to deal with data importing bugs;
           made some imports break more easily though (diewald)
-	- [performance] Payloads in ElementSpans can now be lazily loaded,
-	  MatchModifyClassSpans no longer rely on payload copies (diewald)
-	- [cleanup] Renamed /filter to /collection, 
-	  merge KorapHTML and KorapString,
-	  removed KorapSpan, KorapTermSpan and KorapLongSpan,
-	  renamed /analysis to /model,
-	  renamed shrink() to focus(),
-	  removed KorapPrimaryData,
+        - [performance] Payloads in ElementSpans can now be lazily loaded,
+          MatchModifyClassSpans no longer rely on payload copies (diewald)
+        - [cleanup] Renamed /filter to /collection, 
+          merge KorapHTML and KorapString,
+          removed KorapSpan, KorapTermSpan and KorapLongSpan,
+          renamed /analysis to /model,
+          renamed shrink() to focus(),
+          removed KorapPrimaryData,
           fixed a lot of wrong tests for WithinSpans,
-	  renamed KorapFilter to /collection/CollectionBuilder,
-	  renamed SpanMatchModify to SpanFocus,
-	  changed KoralQuery root prefix to "koral",
-	  renamed different kinds of "queries" throughout classes,
-	  renamed KorapSearch#run to KorapSearch#apply (diewald)
+          renamed KorapFilter to /collection/CollectionBuilder,
+          renamed SpanMatchModify to SpanFocus,
+          changed KoralQuery root prefix to "koral",
+          renamed different kinds of "queries" throughout classes,
+          renamed KorapSearch#run to KorapSearch#apply (diewald)
         - [feature] Improved deserialization of SpanSubSpanQueries
           (margaretha)
-	- [feature] Introducing the potential need for resorting queries
-	  on focussing (e.g., set by relations) (diewald)
-	- [bugfix] Hopefully fixing a resource related bug for
-	  server instantiation (diewald)
-	- [bugfix] Changed attribute spans to contain element's
-	  width (margaretha)
-	- [feature] Improved highlighting to use semantic html5 (#193; diewald)
+        - [feature] Introducing the potential need for resorting queries
+          on focussing (e.g., set by relations) (diewald)
+        - [bugfix] Hopefully fixing a resource related bug for
+          server instantiation (diewald)
+        - [bugfix] Changed attribute spans to contain element's
+          width (margaretha)
+        - [feature] Improved highlighting to use semantic html5 (#193; 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
+          API classes (diewald)
+        - [documentation] Improved documentation for
+          various queries (margaretha)
+        - [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,
-	  updating test suite for class and frame attributes (diewald)
-	- [bugfix] Empty class segments are now correctly serialized
-	  in sequences (diewald)
-	- [feature] Started support for position frames (diewald)
-	- [bugfix] Fixed #134 Nullpointer exception in WithinSpans
-	  (diewald, margaretha)
+        - [bugfix] Null filters are now correctly extended (diewald)
+        - [cleanup] Refactoring of KorapResult, KorapResponse, KorapQuery,
+          deprecated operation:or in favor of operation:junction,
+          updating test suite for class and frame attributes (diewald)
+        - [bugfix] Empty class segments are now correctly serialized
+          in sequences (diewald)
+        - [feature] Started support for position frames (diewald)
+        - [bugfix] Fixed #134 Nullpointer exception in WithinSpans
+          (diewald, margaretha)
 
 0.49.2 2014-12-05
-	- [documentation] Improved documentation for
+        - [documentation] Improved documentation for
           various queries (margaretha)
-	- [feature] Added @Experimental support (margaretha)
-	- [feature] Added Eclipse based code formatting (diewald)
+        - [feature] Added @Experimental support (margaretha)
+        - [feature] Added Eclipse based code formatting (diewald)
 
 0.49.1 2014-11-25
         - [cleanup] Major refactoring for new response messages,
-	  removed deprecated error messaging,
+          removed deprecated error messaging,
           removed long-term deprecated methods in KorapResult,
-	  removed long-term deprecated methods in KorapMatch,
-	  renamed toJSON->toJsonString
-	  renamed toJSONnode->toJsonNode,
-	  renamed fromJSON->fromJson (diewald)
-	- [documentation] Improved documentation for notifications (diewald)
+          removed long-term deprecated methods in KorapMatch,
+          renamed toJSON->toJsonString
+          renamed toJSONnode->toJsonNode,
+          renamed fromJSON->fromJson (diewald)
+        - [documentation] Improved documentation for notifications (diewald)
 
 0.49 2014-11-14
         - This is a major version (prepared for the Evaluation Meeting)
         - [bugfix] Rewrite works in repeating expansions (margaretha)
-	- [feature] Clean timeout with parameter support (diewald)
-	- [workaround] Support unknown overlap frame,
-	  if frames are known (diewald)
-	- [bugfix] Class payload fixed in SpanRepetitions (margaretha)
-	- [bugfix] #179 Expansion bug fixed (margaretha)
-	- [bugfix] Corrected small bug where null warnings where
-	  returned in JSON (diewald)
-	- [cleanup] Converted error to failure (diewald)
-	- [bugfix] Added const layer rewrite (diewald)
+        - [feature] Clean timeout with parameter support (diewald)
+        - [workaround] Support unknown overlap frame,
+          if frames are known (diewald)
+        - [bugfix] Class payload fixed in SpanRepetitions (margaretha)
+        - [bugfix] #179 Expansion bug fixed (margaretha)
+        - [bugfix] Corrected small bug where null warnings where
+          returned in JSON (diewald)
+        - [cleanup] Converted error to failure (diewald)
+        - [bugfix] Added const layer rewrite (diewald)
 
 0.48 2014-11-07
         - This is a major version (prepared for the "Tag der Offenen Tür")
         - [feature] Retrieval of token lists (diewald)
-	- [bugfix] Classes can now be highlighted to 127.
-	- [bugfix] Sequences with distances won't be flattened in
-  	  SpanSequenceQueryWrapper (diewald)
-	- [bugfix] Sequences with [problem][problem][anchor] can now
-	  be deserialized (diewald)
-	- [bugfix] Queries with regular expressions in spanNext() are now
-	  correctly rewritten (diewald)
-	- [bugfix] Ignore foundry for orth layer (diewald)
-	- [feature] Support fields in meta (diewald)
-	- [workaround] Support more legacy APIs (diewald)
-	- [bugfix] Check for the existence of @type in JSON-LD groups
-	  to avoid NullPointer (diewald)
-	- [cleanup] Validated query and collection input - limited
-	  to a "don't break anyting" policy (diewald)
+        - [bugfix] Classes can now be highlighted to 127.
+        - [bugfix] Sequences with distances won't be flattened in
+          SpanSequenceQueryWrapper (diewald)
+        - [bugfix] Sequences with [problem][problem][anchor] can now
+          be deserialized (diewald)
+        - [bugfix] Queries with regular expressions in spanNext() are now
+          correctly rewritten (diewald)
+        - [bugfix] Ignore foundry for orth layer (diewald)
+        - [feature] Support fields in meta (diewald)
+        - [workaround] Support more legacy APIs (diewald)
+        - [bugfix] Check for the existence of @type in JSON-LD groups
+          to avoid NullPointer (diewald)
+        - [cleanup] Validated query and collection input - limited
+          to a "don't break anyting" policy (diewald)
 
 0.47 2014-11-05
         - [feature] Support new index format with more metadata (diewald)
-	- [bugfix] #142 Fixed class spans for skipTo() skips (margaretha)
-	- [feature] Added attribute support to relations (margaretha)
-	- [bugfix] Make classes and shrink default to 1 instead of 0 (diewald)
-	- [bugfix] shrink now removes all non-classes payloads (diewald)
+        - [bugfix] #142 Fixed class spans for skipTo() skips (margaretha)
+        - [feature] Added attribute support to relations (margaretha)
+        - [bugfix] Make classes and shrink default to 1 instead of 0 (diewald)
+        - [bugfix] shrink now removes all non-classes payloads (diewald)
 
 0.46 2014-10-21
         - [feature] Support for relation queries (margaretha)
-	- [feature] Wrapping of extension queries
-	  (not completely tested yet; diewald)
+        - [feature] Wrapping of extension queries
+          (not completely tested yet; diewald)
 
 0.45 2014-10-06
         - [bugfix] Correctly respond request in JSON results (diewald)
         - [cleanup] Made SpanQueryWrapper an abstract class instead
-	  of an interface (diewald)
+          of an interface (diewald)
 
 0.44.1 2014-09-29
         - [cleanup] Prepare test suite for publication (diewald)
 
 0.44 2014-09-28
         - [feature] Match collector using database for
-	  distributed search (diewald)
-	- [bugfix] Unified boundary handling and prevent nullpointer
-	  exceptions on parsing (diewald)
-	- [bugfix] Ordering of payloads reversed to make nesting highlights
-	  nest correctly (diewald)
-   	- [performance] Updated Lucene dependency from 4.3.1 to 4.5.1 (diewald)
-   	- [performance] Updated Jackson dependency from 2.2.2 to 2.4.0 (diewald)
-	- [bugfix] Return matches correctly with JSON (diewald)
-	- [bugfix] Repare database tests working with temporary
-	  databases (diewald)
+          distributed search (diewald)
+        - [bugfix] Unified boundary handling and prevent nullpointer
+          exceptions on parsing (diewald)
+        - [bugfix] Ordering of payloads reversed to make nesting highlights
+          nest correctly (diewald)
+        - [performance] Updated Lucene dependency from 4.3.1 to 4.5.1 (diewald)
+        - [performance] Updated Jackson dependency from 2.2.2 to 2.4.0 (diewald)
+        - [bugfix] Return matches correctly with JSON (diewald)
+        - [bugfix] Repare database tests working with temporary
+          databases (diewald)
 
 0.43 2014-09-23
         - [cleanup] Made a lot of stuff rely on KorapResponse (diewald)
-	- [bugfix] Small but ancient collection bug fixed (diewald)
-	- [feature] Collect first matches of documents based on UIDs (diewald)
+        - [bugfix] Small but ancient collection bug fixed (diewald)
+        - [feature] Collect first matches of documents based on UIDs (diewald)
 
 0.42 2014-09-19
         - [cleanup] Extracted private classes from KorapMatch (diewald)
-	- [bugfix] Fix query rewrite in contains-queries (diewald)
+        - [bugfix] Fix query rewrite in contains-queries (diewald)
 
 0.41 2014-09-17
         - [feature] getStartPos(classNr) and getEndPos(classNr)
           in KorapMatch (diewald)
         - [bugfix] SpanExpansionQuery with fixed Constructor
-	  and Exclusion handling (margaretha)
+          and Exclusion handling (margaretha)
         - [feature] Early implementation of match collector (diewald)
 
 0.40 2014-09-03
@@ -321,10 +327,10 @@
 
 0.32 2014-08-01
         - [bugfix] Fix for repetition candidates (margaretha)
- 	- [bugfix] Some fixes for negative segments (diewald)
- 	- [bugfix] SpanMatchModify now skips in case the
-	  requested class isn't found (diewald)
- 	- [performance] Some logging issues fixed (diewald)
+        - [bugfix] Some fixes for negative segments (diewald)
+        - [bugfix] SpanMatchModify now skips in case the
+          requested class isn't found (diewald)
+        - [performance] Some logging issues fixed (diewald)
 
 0.31.8 2014-07-24
         - [feature] Added optionality to querys for quantifiers (diewald)
@@ -335,31 +341,31 @@
 
 0.31.6 2014-06-30
         - [feature] Support for korap:reference deserialization (diewald)
-	- [feature] Preliminary support for attributes in elements (margaretha)
-	- [feature] Preliminary support operation:repetition deserialization
-	  (unfinished and untested; diewald)
+        - [feature] Preliminary support for attributes in elements (margaretha)
+        - [feature] Preliminary support operation:repetition deserialization
+          (unfinished and untested; diewald)
 
 0.31.5 2014-06-17
         - [feature] Batch return of defined foundries and layers in
-	  getMatchInfo() (diewald)
-	- [security] Improve foundry and layer check before injection in
-	  regex (diewald)
+          getMatchInfo() (diewald)
+        - [security] Improve foundry and layer check before injection in
+          regex (diewald)
 
 0.31.4 2014-06-16
         - [feature] MatchModifyClassQuery now can extend (diewald)
-	- [bugfix] Make matchinfo a bit more robust (diewald)
+        - [bugfix] Make matchinfo a bit more robust (diewald)
 
 0.31.3 2014-06-11
         - [bugfix] Minor bugfix regarding treatment of
-	  failed search results (diewald)
+          failed search results (diewald)
 
 0.31.2 2014-05-28
         - [feature] Request parameter "itemsPerResource" limits
-	  hits per document (diewald)
+          hits per document (diewald)
 
 0.31.1 2014-05-21
         - [bugfix] Minor bugfix for wrongly serialized contexts
-	  in responses (diewald)
+          in responses (diewald)
 
 0.31.0 2014-05-20
         - [feature] span contexts in JSON-LD are now supported
@@ -369,39 +375,39 @@
 
 0.30.9 2014-04-11
         - [bugfix] Prevent multiple identifiers in
-	  relation highlighting (diewald)
+          relation highlighting (diewald)
 
 0.30.8 2014-04-10
         - Added getTermRelationJSON() to KorapCollection (diewald)
-	  This is likely to get deprecated!
+          This is likely to get deprecated!
 
 0.30.7 2014-04-09
         - Moved JSON interpretation from BooleanFilter to KorapFilter (diewald)
-	- Added 'or' and group nesting to KorapFilter (diewald)
+        - Added 'or' and group nesting to KorapFilter (diewald)
 
 0.30.6 2014-03-20
         - Refactoring and cleaning of ElementSpans (diewald)
-	- [bugfix] Stabilizing KorapMatch (diewald)
+        - [bugfix] Stabilizing KorapMatch (diewald)
 
 0.30.5 2014-03-18
-	- Support for Quantifier Queries (margaretha)
-	- Some benchmarks (margaretha)
+        - Support for Quantifier Queries (margaretha)
+        - Some benchmarks (margaretha)
         - [bugfix] WithinSpans respect match payloads,
-	  and are now way more correct ;) (diewald)
-	- Support for overlap queries (diewald)
-	- Refactoring of WithinSpans (diewald)
-	- Introducing lazy loading for wrapper .end() in WithinSpans (diewald)
+          and are now way more correct ;) (diewald)
+        - Support for overlap queries (diewald)
+        - Refactoring of WithinSpans (diewald)
+        - Introducing lazy loading for wrapper .end() in WithinSpans (diewald)
 
 0.30.4 2014-02-26
         - [cleanup] Making MultiTerm* more robust (diewald)
 
 0.30.3 2014-02-20
         - Return json request in response if given (diewald)
-	- [bugfix] ClassSpans and WithinSpans check skipTo
-	  in advance now (diewald)
-	- Compilerfriendly logging rules, resulting
-	  in significant performance improvements (diewald)
-	- Small refactorings (diewald)
+        - [bugfix] ClassSpans and WithinSpans check skipTo
+          in advance now (diewald)
+        - Compilerfriendly logging rules, resulting
+          in significant performance improvements (diewald)
+        - Small refactorings (diewald)
 
 0.30.2 2014-02-14
         - [bugfix] wrapper uses correct distance constraint (diewald)
@@ -411,112 +417,112 @@
 
 0.30 2014-02-13
         - This is a major version
-	  (prepared for the IDS meeting on the 17th of february)
-	- Improved stringification for distance queries (margaretha)
+          (prepared for the IDS meeting on the 17th of february)
+        - Improved stringification for distance queries (margaretha)
 
 0.26.4 2014-02-12
         - Serialize SpanDistanceQueries and SpanMultipleDistanceQueries
           (diewald)
-	- [temporarily] Added default foundry "mate" in KorapQuery (diewald)
+        - [temporarily] Added default foundry "mate" in KorapQuery (diewald)
 
 0.26.3 2014-02-12
         - [bugfix] Only open writer in case it's needed (diewald)
 
 0.26.2 2014-02-12
         - Added sequence queries with defined gaps (margaretha)
-	- Support for multiple distance constraints (margaretha)
-	- Updated json-ld deserialization with nested meta (diewald)
-	- [bugfix] Wildcards in segments were ignored (diewald)
+        - Support for multiple distance constraints (margaretha)
+        - Updated json-ld deserialization with nested meta (diewald)
+        - [bugfix] Wildcards in segments were ignored (diewald)
 
 0.26.1 2014-01-21
         - Distinct Match retrieval including spans
-	  and dependency relations (diewald)
+          and dependency relations (diewald)
 
 0.26 2014-01-16
         - Introduced standalone SpanSegmentQueries (margaretha)
         - [bugfix] SpanNextQueries (margaretha)
-	- Support for Match Identifiers (diewald)
-	- Support for distinct Match retrieval (diewald)
+        - Support for Match Identifiers (diewald)
+        - Support for distinct Match retrieval (diewald)
 
 0.25.3 2014-01-10
         - Updated Lucene to 4.3.1 (diewald)
-	- Welcome! Eliza Margaretha has joined the team!
+        - Welcome! Eliza Margaretha has joined the team!
 
 0.25.2 2013-12-29
         - Fixed highlight bug with empty reopened tags
 
 0.25.1 2013-12-28
         - Support for pubDate collections
-	- Changed versioning scheme
+        - Changed versioning scheme
 
 0.25 2013-12-20
         - Support for Wildcard Queries
-	- Improved support for regular expressions
-	- Introduced keyword fields that store no positions
+        - Improved support for regular expressions
+        - Introduced keyword fields that store no positions
 
 0.24_1 2013-12-05
         - This is a pseudo version for demo versions with dirty hacks,
-	  meant to be rolled back!
-	- There is now an ignored broken test in TestKorapCollection
+          meant to be rolled back!
+        - There is now an ignored broken test in TestKorapCollection
 
 0.24 2013-12-05
         - Json deserializer finished for virtual collections
 
 0.23 2013-12-05
         - Error handling corrected in KorapResult
-	- Json deserializer finished for queries
+        - Json deserializer finished for queries
 
 0.22 2013-12-04
         - Introduced KorapSearch
-	- Json deserializer (started)
+        - Json deserializer (started)
 
 0.21 2013-11-28
         - Virtual collections can now be defined,
-	  searched, nested and extended
+          searched, nested and extended
 
 0.20 2013-11-18
         - Unboxing from sandbox repository
 
 0.11 2013-11-14
-	- JSON file importer (plain and gzip)
-	- [bugfix] Element Query
-	- [bugfix] Sequence Query
+        - JSON file importer (plain and gzip)
+        - [bugfix] Element Query
+        - [bugfix] Sequence Query
 
 0.10 2013-11-11
         - Added JSON input to indexer
 
 0.09 2013-11-07
         - Reconstruction of all wrapper queries using an interface
-	- Finished KorapQuery (preliminary feature freeze)
+        - Finished KorapQuery (preliminary feature freeze)
 
 0.08 2013-10-18
         - Changed methods to attributes in KorapMatch
-	- Changed SimpleJSON to Jackson
-	- Fixed Highlighting
-	- Some Refactoring of result classes
-	- Introduced KorapDocument
-	- Introduced KorapHTML utility
+        - Changed SimpleJSON to Jackson
+        - Fixed Highlighting
+        - Some Refactoring of result classes
+        - Introduced KorapDocument
+        - Introduced KorapHTML utility
 
 0.07 2013-10-14
         - Added position to offset matching
 
 0.06 2013-10-01
         - Added SpanElementQuery for working WithinQeries
-	- Added KorapResult and KorapMatching
+        - Added KorapResult and KorapMatching
 
 0.05 2013-09-18
         - Fixed bug in indexing (MultiTermTokenStream)
-	- Fixed SpanNext
-	- Added KorapIndex
-	- First draft for KorapFilter
+        - Fixed SpanNext
+        - Added KorapIndex
+        - First draft for KorapFilter
 
 0.04 2013-09-01
         - Introduced optimized SpanNext class (not working atm),
-	  as SpanNear does not always work with nested synonyms
+          as SpanNear does not always work with nested synonyms
 
 0.03 2013-08-28
         - Added within query (not working atm)
-	- Pushed query part to public repo
+        - Pushed query part to public repo
 
 0.02 2013-08-26
         - Added sequences
diff --git a/pom.xml b/pom.xml
index 4b2b844..31efb78 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
 
   <groupId>de.ids_mannheim.korap</groupId>
   <artifactId>Krill</artifactId>
-  <version>0.55.6</version>
+  <version>0.55.7</version>
   <packaging>jar</packaging>
 
   <name>Krill</name>
diff --git a/src/main/java/de/ids_mannheim/korap/Krill.java b/src/main/java/de/ids_mannheim/korap/Krill.java
index de55528..437e1e9 100644
--- a/src/main/java/de/ids_mannheim/korap/Krill.java
+++ b/src/main/java/de/ids_mannheim/korap/Krill.java
@@ -178,10 +178,10 @@
                 // Throw an error, in case the query matches everywhere
                 if (qw.isEmpty()) {
                     this.addError(780, "This query matches everywhere");
-				}
-				else if (qw.isNull()) {
-					this.addError(783, "This query can't match anywhere");
-				}
+                }
+                else if (qw.isNull()) {
+                    this.addError(783, "This query can't match anywhere");
+                }
 
                 else {
 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillQuery.java b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
index 3185603..3d70505 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
@@ -115,7 +115,7 @@
             // Set max boundary
             this.max = json.has("max") ? json.get("max").asInt(defaultMax)
                     : defaultMax;
-			
+
             if (DEBUG)
                 log.trace("Found koral:boundary with {}:{}", min, max);
         };
@@ -723,12 +723,12 @@
         // Check relation between min and max
         if (min > max)
             max = max;
-		
+
         SpanQueryWrapper sqw = this._fromKoral(operands.get(0));
 
         if (sqw.maybeExtension())
             return sqw.setMin(min).setMax(max);
-		
+
         return new SpanRepetitionQueryWrapper(sqw, min, max);
     };
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
index 82349b2..f31006d 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
@@ -36,7 +36,7 @@
     protected boolean hasClass = false, isNull = true, isOptional = false,
             isNegative = false, isEmpty = false, isExtended = false,
             isExtendedToTheRight = false, maybeUnsorted = false,
-            retrieveNode = false;
+            retrieveNode = false, isProblematic = false;
 
 
     /**
@@ -47,7 +47,6 @@
      * @throws QueryException
      */
     public SpanQuery toFragmentQuery () throws QueryException {
-        System.err.println("||||||||||||||||||||||||||");
         return (SpanQuery) null;
     };
 
@@ -62,8 +61,9 @@
      */
     public SpanQuery toQuery () throws QueryException {
 
-        if (this.isNull() || this.isEmpty())
+        if (this.isNull() || this.isEmpty()) {
             return null;
+        };
 
         // Wrap the query in a <base/s=t>, if it's extended to the right
         if (this.isExtendedToTheRight()) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
index 72fadb2..f100853 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
@@ -612,6 +612,7 @@
 
 
     public boolean isEmpty () {
+
         if (this.segments.size() == 1)
             return this.segments.get(0).isEmpty();
 
@@ -741,6 +742,11 @@
             return (SpanQuery) query;
         };
 
+        if (this.hasConstraints() && this.isProblematic) {
+            throw new QueryException(613,
+                    "Distance constraints not supported with empty, optional or negative operands");
+        };
+
         // DistanceQueries
         if (this.constraints.size() == 1) {
             DistanceConstraint constraint = this.constraints.get(0);
@@ -753,6 +759,11 @@
                     if (this.segments.get(i).isExtended())
                         throw new QueryException(613, limitationError);
 
+                    /* Maybe important
+                    if (this.segments.get(i).isOptional())
+                        throw new QueryException(613, limitationError);
+                    */
+
                     SpanQuery sq = (SpanQuery) this.segments.get(i)
                             .retrieveNode(this.retrieveNode).toFragmentQuery();
                     if (sq == null)
@@ -772,6 +783,11 @@
                     if (this.segments.get(i).isExtended())
                         throw new QueryException(613, limitationError);
 
+                    /* May be necessary
+                    if (this.segments.get(i).isOptional())
+                        throw new QueryException(613, limitationError);
+                    */
+
                     SpanQuery sq = (SpanQuery) this.segments.get(i)
                             .retrieveNode(this.retrieveNode).toFragmentQuery();
                     if (sq == null)
@@ -817,6 +833,8 @@
       - look for an anchor next to it
       - merge the problematic segment with the anchor
       - go on
+
+      - This does not work for distance constraints!
     */
     private boolean _solveProblematicSequence () {
         int size = this.segments.size();
@@ -838,6 +856,18 @@
                 if (DEBUG)
                     log.trace("segment {} is problematic", i);
 
+                // Sequences with distance constraints do not support empty or optional
+                // elemets
+                if (this.hasConstraints()) {
+                    if (DEBUG) {
+                        log.trace("Sequence has constraints, "
+                                + "that do not allow empty or optional elements");
+                    };
+                    this.isSolved = true;
+                    this.isProblematic = true;
+                    return false;
+                };
+
                 // [problem][anchor]
                 if (i < (size - 1) && this.segments.get(i + 1).maybeAnchor()) {
                     if (DEBUG)
@@ -853,6 +883,8 @@
 
                     // An error occurred while solving the problem
                     catch (QueryException e) {
+                        this.isSolved = true;
+                        this.isProblematic = true;
                         return false;
                     };
 
@@ -880,6 +912,8 @@
                                         true));
                     }
                     catch (QueryException e) {
+                        this.isSolved = true;
+                        this.isProblematic = true;
                         return false;
                     };
 
@@ -916,10 +950,12 @@
                 return _solveProblematicSequence();
 
             this.isSolved = true;
-            return true;
+            this.isProblematic = true;
+            return false; // true;
         };
 
         this.isSolved = true;
+        this.isProblematic = false;
         return false;
     };
 
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
index 8a0ac45..072a633 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
@@ -277,10 +277,10 @@
 
         /*
         km = ki.getMatchInfo(
-			"match-GOE!GOE_AGX.00002-p10-20",
-							 "tokens", true, (String) null, (String) null, true, true, false);	
+        	"match-GOE!GOE_AGX.00002-p10-20",
+        					 "tokens", true, (String) null, (String) null, true, true, false);	
         assertEquals("", km.toJsonString());
-		*/		
+        */
     };
 
 
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
index cedb868..131ae70 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
@@ -204,6 +204,7 @@
         //		}
     }
 
+
     @Test
     public void testCase5 () throws IOException {
         ki = new KrillIndex();
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
index 31a3612..f11a5da 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
@@ -571,15 +571,17 @@
         };
     };
 
-	@Test
+
+    @Test
     public void queryJSONdistancesWithRegexes () throws QueryException {
-		// "der" []{2,3} [opennlp/p="NN"]
+        // "der" []{2,3} [opennlp/p="NN"]
         try {
             String json = getString(getClass().getResource(
                     "/queries/bugs/distances_with_regex_bug.jsonld").getFile());
             KrillQuery kq = new KrillQuery("tokens");
 
-            assertEquals(kq.fromKoral(json).toQuery().toString(),
+            assertEquals(
+                    kq.fromKoral(json).toQuery().toString(),
                     "spanDistance(SpanMultiTermQueryWrapper(tokens:/s:der/), SpanMultiTermQueryWrapper(tokens:/opennlp/p:NN/), [(w[3:4], ordered, notExcluded)])");
         }
         catch (QueryException e) {
@@ -587,6 +589,7 @@
         };
     };
 
+
     public static String getString (String path) {
         StringBuilder contentBuilder = new StringBuilder();
         try {
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
index e5030f8..97a9eb2 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
@@ -283,7 +283,7 @@
         }
         catch (QueryException qe) {
             assertEquals(
-                    "Distance constraints not supported with empty or negative operands",
+                    "Distance constraints not supported with empty, optional or negative operands",
                     qe.getMessage());
         };
     };
@@ -351,27 +351,34 @@
                 sqwi.toQuery().toString());
     };
 
+
     @Test
-    public void queryJSONkoralOptionalityInDistanceBug () throws QueryException {
-		// Sonne [] Mond?
-        SpanQueryWrapper sqwi = jsonQueryFile("distance-with-optionality.jsonld");
-        assertEquals(
-			"focus(254: spanContain(<tokens:base/s:t />, {254: spanOr([spanExpansion(tokens:s:Sonne, []{1, 1}, right), spanNext(spanExpansion(tokens:s:Sonne, []{1, 1}, right), tokens:s:Mond)])}))",
-			sqwi.toQuery().toString());
-		// Could also be a distance at the end ... that's a query planner thing.
+    public void queryJSONkoralOptionalityInDistanceBug () {
+        try {
+            // Sonne [] Mond?
+            SpanQueryWrapper sqwi = jsonQueryFile("distance-with-optionality.jsonld");
+            sqwi.toQuery().toString();
+        }
+        catch (QueryException qe) {
+            assertEquals(
+                    "Distance constraints not supported with empty, optional or negative operands",
+                    qe.getMessage());
+        }
+        // Could also be a distance at the end ... that's a query planner thing.
     };
 
-	@Test
+
+    @Test
     public void queryJSONkoralOptionalityAfterEmptyBug () throws QueryException {
-		// Sonne [] Mond?
+        // Sonne [] Mond?
         SpanQueryWrapper sqwi = jsonQueryFile("empty-followed-by-optionality.jsonld");
         assertEquals(
-			"focus(254: spanContain(<tokens:base/s:t />, {254: spanOr([spanExpansion(tokens:s:Sonne, []{1, 1}, right), spanNext(spanExpansion(tokens:s:Sonne, []{1, 1}, right), tokens:s:Mond)])}))",
-			sqwi.toQuery().toString());
-		// Could also be a distance at the end ... that's a query planner thing.
+                "focus(254: spanContain(<tokens:base/s:t />, {254: spanOr([spanExpansion(tokens:s:Sonne, []{1, 1}, right), spanNext(spanExpansion(tokens:s:Sonne, []{1, 1}, right), tokens:s:Mond)])}))",
+                sqwi.toQuery().toString());
+        // Could also be a distance at the end ... that's a query planner thing.
     };
 
-	
+
 
     // get query wrapper based on json file
     public SpanQueryWrapper jsonQueryFile (String filename) {
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
index 1fb1f2b..7ecf1c2 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
@@ -1019,28 +1019,29 @@
                 "Operation needs operand list");
     };
 
-	
-	@Test
+
+    @Test
     public void searchJSONdistanceWithRegexesBug () throws IOException {
         // Construct index
         KrillIndex ki = new KrillIndex();
         // Indexing test files
         for (String i : new String[] { "00001" }) {
-			// , "00002", "00003", "00004", "00005", "00006", "02439"
+            // , "00002", "00003", "00004", "00005", "00006", "02439"
             ki.addDoc(
                     getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                     true);
         };
         ki.commit();
 
-		// "der" []{2,3} [opennlp/p="NN"]
-       String json = getString(getClass().getResource(
+        // "der" []{2,3} [opennlp/p="NN"]
+        String json = getString(getClass().getResource(
                 "/queries/bugs/distances_with_regex_bug.jsonld").getFile());
 
         Result kr = new Krill(json).apply(ki);
 
-		assertEquals(kr.getMatch(0).getSnippetBrackets(),
-					 "Mit Ausnahme von Fremdwörtern und Namen ist das A der einzige Buchstabe im Deutschen, [[der zweifach am Anfang]] eines Wortes stehen darf, etwa im Wort Aal.");
+        assertEquals(
+                kr.getMatch(0).getSnippetBrackets(),
+                "Mit Ausnahme von Fremdwörtern und Namen ist das A der einzige Buchstabe im Deutschen, [[der zweifach am Anfang]] eines Wortes stehen darf, etwa im Wort Aal.");
 
     };
 
@@ -1128,22 +1129,24 @@
         assertEquals(kr.getTotalResults(), 1);
     };
 
-	
-	@Test
+
+    @Test
     public void queryJSONzeroRepetitionBug () throws IOException {
-		// der{0}
-		KrillIndex ki = new KrillIndex();
-		ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
-		ki.commit();
-			
-		String json = getString(getClass().getResource(
-									"/queries/bugs/zero_repetition_bug.jsonld").getFile());
+        // der{0}
+        KrillIndex ki = new KrillIndex();
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
+        ki.commit();
 
-		Result kr = new Krill(json).apply(ki);
+        String json = getString(getClass().getResource(
+                "/queries/bugs/zero_repetition_bug.jsonld").getFile());
 
-		assertEquals(783, kr.getError(0).getCode());
-		assertEquals("This query can't match anywhere", kr.getError(0).getMessage());
-	};
+        Result kr = new Krill(json).apply(ki);
+
+        assertEquals(783, kr.getError(0).getCode());
+        assertEquals("This query can't match anywhere", kr.getError(0)
+                .getMessage());
+    };
+
 
     /**
      * This is a Schreibgebrauch ressource that didn't work for
