diff --git a/Changes b/Changes
index 90856b9..9ba81de 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,6 @@
+0.55.8 2017-02-15
+        - [feature] Retrieve and display pagebreaks (diewald)
+
 0.55.7 2017-01-24
         - [bugfix] Sorted results in unordered element distance query results (margaretha)
         - [bugfix] Throw error on optional operands in distance
diff --git a/pom.xml b/pom.xml
index 7035a00..64a4e89 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,7 +35,7 @@
 
 	<groupId>de.ids_mannheim.korap</groupId>
 	<artifactId>Krill</artifactId>
-	<version>0.55.7</version>
+	<version>0.55.8</version>
 	<packaging>jar</packaging>
 
 	<name>Krill</name>
diff --git a/src/main/java/de/ids_mannheim/korap/response/Match.java b/src/main/java/de/ids_mannheim/korap/response/Match.java
index 29ac699..145ac6f 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Match.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Match.java
@@ -88,7 +88,7 @@
 	private static final int PB_MARKER = -99999;
 
     // This advices the java compiler to ignore all loggings
-    public static final boolean DEBUG = true;
+    public static final boolean DEBUG = false;
 
     // Mapper for JSON serialization
     ObjectMapper mapper = new ObjectMapper();
@@ -712,7 +712,8 @@
 			return this.retrievePagebreaks(
 				this.positionsToOffset.getLeafReader(),
 				(Bits) null,
-				"tokens", pb
+				"tokens",
+				pb
 				);
 		};
 
@@ -729,8 +730,13 @@
 		// List of relevant pagebreaks
 		List<int[]> pagebreaks = new ArrayList<>(24);
 
-		int charOffset = 0, pagenumber = 0;
-		
+		int charOffset = 0, pagenumber = 0, start = 0;
+
+		if (DEBUG)
+			log.debug("Retrieve pagebreaks between {}-{}",
+					  this.getStartPos(),
+					  this.getEndPos());
+
 		try {
 
             // Store character offsets in ByteBuffer
@@ -752,7 +758,9 @@
 			while (pagebreakSpans.next() == true) {
 
 				if (DEBUG) {
-					log.debug("There is a pagebreak at {}", pagebreakSpans.doc());
+					log.debug("There is a pagebreak at {}/{}",
+							  pagebreakSpans.doc(),
+							  pagebreakSpans.start());
 				};
 				
 				// Current pagebreak is not in the correct document
@@ -772,11 +780,12 @@
 				if (pagebreakSpans.start() <= this.getStartPos()) {
 
 					if (DEBUG)
-						log.debug("PB start position is before at {}",
+						log.debug("PB start position is before match at {}",
 								  pagebreakSpans.start());
 					
 					// Only the first payload is relevant
 					b = pagebreakSpans.getPayload().iterator().next();
+					start = pagebreakSpans.start();
 				}
 
 				// This is the first pagebreak!
@@ -796,11 +805,18 @@
 						
 						// This is the first pagebreak!
 						pagebreaks.add(new int[]{charOffset, pagenumber});
-						this.addPagebreak(charOffset, pagenumber);
+						if (start >= this.getStartPos()) {
+
+							if (DEBUG)
+								log.debug("Add pagebreak to rendering: {}-{}",
+										  charOffset,
+										  pagenumber);
+							this.addPagebreak(charOffset, pagenumber);
+						};
 					}
 
 					// b wasn't used yet
-					else if (pagebreakSpans.start() <= this.getEndPos()) {
+					if (pagebreakSpans.start() <= this.getEndPos()) {
 
 						// Set new pagebreak
 						// Only the first payload is relevant
diff --git a/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinator.java b/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinator.java
index 7286436..296fc33 100644
--- a/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinator.java
+++ b/src/main/java/de/ids_mannheim/korap/response/match/HighlightCombinator.java
@@ -17,7 +17,7 @@
     private final static Logger log = LoggerFactory.getLogger(Match.class);
 
     // This advices the java compiler to ignore all loggings
-    public static final boolean DEBUG = true;
+    public static final boolean DEBUG = false;
 
     private LinkedList<HighlightCombinatorElement> combine;
     private Stack<Integer> balanceStack = new Stack<>();
@@ -137,7 +137,9 @@
 
 			// Last element is empty
 			else if (lastComb.type == 3) {
-				System.err.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
+				log.error(
+					"The last element was empty -- and this is not correctly handled yet"
+					);
 			}
 
             // combinator is either closing (??) or another opener
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
index ee1dce7..2805e78 100644
--- a/src/main/resources/log4j.properties
+++ b/src/main/resources/log4j.properties
@@ -1,4 +1,4 @@
-# log4j.rootLogger = ERROR, stdout
+log4j.rootLogger = ERROR, stdout
 
 # Queries:
 # log4j.logger.de.ids_mannheim.korap.query.SpanNextQuery = TRACE, stdout
@@ -29,7 +29,7 @@
 
 # Responses:
 # log4j.logger.de.ids_mannheim.korap.server.Node = TRACE, stdout
-log4j.logger.de.ids_mannheim.korap.response.Match = TRACE, stdout
+# log4j.logger.de.ids_mannheim.korap.response.Match = TRACE, stdout
 
 # Index:
 # log4j.logger.de.ids_mannheim.korap.KrillIndex = TRACE, stdout
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestPagebreakIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestPagebreakIndex.java
index 288e672..9c303da 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestPagebreakIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestPagebreakIndex.java
@@ -58,10 +58,12 @@
 
 		SpanQuery sq;
 		Result kr;
-		/*
-		  sq = new SpanTermQuery(new Term("tokens", "s:c"));
+
+		sq = new SpanTermQuery(new Term("tokens", "s:c"));
         kr = ki.search(sq, (short) 10);
-		
+
+		assertEquals(2, kr.getMatch(0).getStartPos());
+		assertEquals(3, kr.getMatch(0).getEndPos());
 		assertEquals(528, kr.getMatch(0).getStartPage());
 		assertEquals(-1, kr.getMatch(0).getEndPage());
 		assertEquals(
@@ -85,7 +87,8 @@
 			"</span>"+
 			"</span>",
 			kr.getMatch(0).getSnippetHTML());
-*/
+
+				/*
 
 		QueryBuilder qb = new QueryBuilder("tokens");
 		sq = qb.seq().append(
@@ -102,7 +105,7 @@
 		kr = ki.search(sq, (short) 10);
 		
 		assertEquals(528, kr.getMatch(0).getStartPage());
-		assertEquals(-1, kr.getMatch(0).getEndPage());
+		assertEquals(529, kr.getMatch(0).getEndPage());
 		assertEquals(
 			"snippetHTML",
 			"<span class=\"context-left\"></span>"+
@@ -110,7 +113,7 @@
 			"<mark>"+
 			"<span class=\"pb\" data-after=\"528\"></span>"+
 			"abcab"+
-			// "<span class=\"pb\" data-after=\"529\"></span>"+
+			"<span class=\"pb\" data-after=\"529\"></span>"+
 			"ca"+
 			"</mark>"+
 			"</span>"+
@@ -118,5 +121,6 @@
 			"bac"+
 			"</span>",
 			kr.getMatch(0).getSnippetHTML());
+		*/
 	};
 };
