diff --git a/.gitignore b/.gitignore
index d7c1747..13c3b07 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,5 +13,6 @@
 
 # /src/main/resources/
 /src/main/resources/server.properties
+/src/main/resources/krill.properties
 /src/main/resources/korap.conf
 /bin
diff --git a/Changes b/Changes
index a6f30b2..7410203 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,6 @@
+0.52 2015-06-10
+        - [bugfix] Fixed payload filtering in FocusSpans (margaretha)
+
 0.51 2015-03-17
         - This is a major version (prepared for the GitHub release)
         - [cleanup] Changed groupID to "de.ids_mannheim.korap",
diff --git a/pom.xml b/pom.xml
index 821b2f1..1757cd9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
 
   <groupId>de.ids_mannheim.korap</groupId>
   <artifactId>Krill</artifactId>
-  <version>0.51</version>
+  <version>0.52</version>
   <packaging>jar</packaging>
 
   <name>Krill</name>
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/FocusSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/FocusSpans.java
index ae3fe59..9598ac0 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/FocusSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/FocusSpans.java
@@ -182,7 +182,8 @@
                 }
             }
 
-            if (removeTemporaryClasses && payload.length == 10) {
+            if (payload.length == 8
+                    || (removeTemporaryClasses && payload.length == 10)) {
                 continue;
             }
             candidateSpan.getPayloads().add(payload.clone());
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
index a183fe8..63d2a64 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
@@ -16,7 +16,6 @@
 import de.ids_mannheim.korap.query.SpanFocusQuery;
 import de.ids_mannheim.korap.query.SpanRelationMatchQuery;
 import de.ids_mannheim.korap.query.SpanRelationQuery;
-import de.ids_mannheim.korap.query.SpanSegmentQuery;
 import de.ids_mannheim.korap.query.SpanTermWithIdQuery;
 import de.ids_mannheim.korap.query.SpanWithAttributeQuery;
 import de.ids_mannheim.korap.response.Result;
@@ -346,6 +345,10 @@
         SpanFocusQuery rv = new SpanFocusQuery(rm, (byte) 1);
         rv.setSorted(false);
 
+        assertEquals(
+                "focus(1: focus(#[1,2]spanSegment(spanRelation(base:>:child-of), {1: <base:np />})))",
+                rv.toString());
+
         kr = ki.search(rv, (short) 10);
 
         assertEquals(4, kr.getTotalResults());
@@ -428,15 +431,14 @@
     }
 
     /**
-     * Relation with specific targets, return any sources
+     * Relation with specific sources, return any targets
      * */
     @Test
     public void testCase7 () throws IOException {
         ki.addDoc(createFieldDoc2());
         ki.commit();
 
-        // return all children that are NP
-
+        // match all children that are NP
         SpanElementQuery seq1 = new SpanElementQuery("base", "np");
         SpanClassQuery scq1 = new SpanClassQuery(seq1, (byte) 1);
 
@@ -445,12 +447,16 @@
         srq.setTargetClass((byte) 2);
 
         SpanRelationMatchQuery rm = new SpanRelationMatchQuery(srq, scq1, true);
-        SpanQuery rv = new SpanFocusQuery(rm, (byte) 1);
-
+        // SpanQuery rv = new SpanFocusQuery(rm, (byte) 1);
 
         //return all parents of np
-        SpanFocusQuery rv2 = new SpanFocusQuery(rv, (byte) 2);
+        SpanFocusQuery rv2 = new SpanFocusQuery(rm, (byte) 2);
         rv2.setSorted(false);
+
+        assertEquals(
+                "focus(2: focus(#[1,2]spanSegment({2: target:spanRelation(base:>:child-of)}, {1: <base:np />})))",
+                rv2.toString());
+
         kr = ki.search(rv2, (short) 10);
 
         assertEquals((long) 4, kr.getTotalResults());
@@ -537,9 +543,12 @@
         srq.setSourceClass((byte) 2);
         SpanRelationMatchQuery rm = new SpanRelationMatchQuery(srq, scq1, true);
         SpanFocusQuery rv = new SpanFocusQuery(rm, (byte) 2);
-
         rv.setSorted(false);
 
+        assertEquals(
+                "focus(2: focus(#[1,2]spanSegment({2: source:spanRelation(base:<:child-of)}, {1: <base:np />})))",
+                rv.toString());
+
         kr = ki.search(rv, (short) 10);
 
         assertEquals((long) 7, kr.getTotalResults());
@@ -569,6 +578,10 @@
         rm = new SpanRelationMatchQuery(srq, scq2, scq1, true);
         rv = new SpanFocusQuery(rm, (byte) 2);
 
+        assertEquals(
+                "focus(2: focus(#[1,2]spanSegment(focus(#2: spanSegment(spanRelation(base:>:child-of), {2: spanTermWithId(base:pos:ART)})), {1: <base:np />})))",
+                rv.toString());
+
         kr = ki.search(rv, (short) 10);
 
         assertEquals((long) 2, kr.getTotalResults());
@@ -578,10 +591,11 @@
         assertEquals(6, kr.getMatch(1).getEndPos());
 
         // return all nps whose children are articles
-        SpanSegmentQuery rv3 = new SpanSegmentQuery(rv,
-                new SpanTermWithIdQuery(new Term("base", "pos:ART"), true));
-        
-        SpanFocusQuery sf = new SpanFocusQuery(rv3, (byte) 1);
+        SpanFocusQuery sf = new SpanFocusQuery(rm, (byte) 1);
+        assertEquals(
+                "focus(1: focus(#[1,2]spanSegment(focus(#2: spanSegment(spanRelation(base:>:child-of), {2: spanTermWithId(base:pos:ART)})), {1: <base:np />})))",
+                sf.toString());
+
         kr = ki.search(sf, (short) 10);
 
         assertEquals((long) 2, kr.getTotalResults());
