DIRTY DEMO HACKS
diff --git a/CHANGES b/CHANGES
index bc79ae5..7fe775f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+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!
+
 0.24 2013-12-05
         - Json deserializer finished for virtual collections.
 
diff --git a/src/main/java/de/ids_mannheim/korap/KorapCollection.java b/src/main/java/de/ids_mannheim/korap/KorapCollection.java
index b2b47b8..6c33c7c 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapCollection.java
@@ -117,7 +117,7 @@
 	log.trace("Added extension: {}", filter.toString());
 	this.filter.add(
 	    new FilterOperation(
-				(Filter) new QueryWrapperFilter(filter.toQuery()),
+		(Filter) new QueryWrapperFilter(filter.toQuery()),
                 true
             )
         );
@@ -142,9 +142,6 @@
     public FixedBitSet bits (AtomicReaderContext atomic) throws IOException  {
 
 	/*
-	  TODO:
-	  Don't check the live docs in advance - combine them afterwards with an "and" operation,
-	  so before this you can fully use "and" and "or" on an empty bitset.
 	  Use Bits.MatchAllBits(int len)
 	*/
 
@@ -159,13 +156,14 @@
 	    FilterOperation kcInit = filters.remove(0);
 	    log.trace("FILTER: {}", kcInit);
 
-
 	    // Init vector
 	    DocIdSet docids = kcInit.filter.getDocIdSet(atomic, null);
+
 	    DocIdSetIterator filterIter = docids.iterator();
 
 	    if (filterIter != null) {
 		log.trace("InitFilter has effect");
+		// System.err.println("Init has an effect");
 		bitset.or(filterIter);
 		noDoc = false;
 	    };
@@ -183,11 +181,18 @@
 			if (kc.isFilter()) {
 			    bitset.clear(0, bitset.length());
 			    noDoc = true;
+			}
+			else {
+			    // System.err.println("No term found");
 			};
 			continue;
 		    };
 		    if (kc.isExtension()) {
+			// System.err.println("Term found!");
+			// log.trace("Extend filter");
+			// System.err.println("Old Card:" + bitset.cardinality());
 			bitset.or(filterIter);
+			// System.err.println("New Card:" + bitset.cardinality());
 		    }
 		    else {
 			bitset.and(filterIter);
diff --git a/src/main/java/de/ids_mannheim/korap/KorapIndex.java b/src/main/java/de/ids_mannheim/korap/KorapIndex.java
index 2c5ae31..3f93cd1 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapIndex.java
@@ -332,8 +332,13 @@
 	    };
 
 	    long docCount = 0;
+	    // System.err.println("CHECK");
+	    int i = 1;
 	    for (AtomicReaderContext atomic : this.reader().leaves()) {
+		// System.err.println("READER" + i + "a-" + docCount);
 		docCount += collection.bits(atomic).cardinality();
+		// System.err.println("READER" + i + "b-" + docCount);
+		i++;
 	    };
 	    return docCount;
 	};
diff --git a/src/main/java/de/ids_mannheim/korap/KorapQuery.java b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
index b76b7b8..0ee3895 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
@@ -171,12 +171,18 @@
 		    };
 		    value = value.replace("'", "").replace("\"", "");
 
+		    // Temporary
+		    value = value.replace("_", "/");
+
 		    return this.seg(this.re(value));
 		};
 
 		if (!value.matches("[^:]+?:.+"))
 		    value = "s:" + value;
 
+		// Temporary
+		value = value.replace("_", "/");
+
 		return this.seg(value);
 
 	    case "!=":
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
index a4c83b7..e050a57 100644
--- a/src/main/resources/log4j.properties
+++ b/src/main/resources/log4j.properties
@@ -11,7 +11,7 @@
 #log4j.logger.de.ids_mannheim.korap.query.spans.MatchSpans = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.KorapIndex = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.KorapMatch = TRACE, stdout
-#log4j.logger.de.ids_mannheim.korap.KorapCollection = TRACE, stdout
+# log4j.logger.de.ids_mannheim.korap.KorapCollection = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.index.PositionsToOffset = TRACE, stdout
 
 # log4j.logger.de.ids_mannheim.korap.analysis.MultiTermTokenStream = TRACE, stdout
diff --git a/src/test/java/de/ids_mannheim/korap/filter/TestKorapCollection.java b/src/test/java/de/ids_mannheim/korap/filter/TestKorapCollection.java
index bcd9ed3..54864aa 100644
--- a/src/test/java/de/ids_mannheim/korap/filter/TestKorapCollection.java
+++ b/src/test/java/de/ids_mannheim/korap/filter/TestKorapCollection.java
@@ -70,6 +70,7 @@
 	assertEquals("Documents", 1, kc.numberOf("documents"));
 
 	kc.extend( kf.and("textClass", "wissenschaft") );
+
 	assertEquals("Documents", 3, kc.numberOf("documents"));
 	assertEquals("Tokens", 1669, kc.numberOf("tokens"));
 	assertEquals("Sentences", 188, kc.numberOf("sentences"));
@@ -77,6 +78,78 @@
 	// System.err.println(kr.toJSON());
     };
 
+    @Ignore
+    public void filterExampleAtomic () throws IOException {
+	
+	// That's exactly the same test class, but with multiple atomic indices
+
+	// Construct index
+	KorapIndex ki = new KorapIndex();
+	// Indexing test files
+	for (String i : new String[] {"00001", "00002", "00003", "00004", "00005", "00006", "02439"}) {
+	    FieldDocument fd = ki.addDocFile(
+	      getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+            );
+	    ki.commit();
+	};
+
+	KorapFilter kf = new KorapFilter();
+
+	// Create Virtual collections:
+	KorapCollection kc = new KorapCollection(ki);
+
+	assertEquals("Documents", 7, kc.numberOf("documents"));
+
+	/*
+	  If this is set - everything is fine automatically ...
+	kc.filter(kf.and("corpusID", "WPD"));
+	assertEquals("Documents", 7, kc.numberOf("documents"));
+	*/
+
+	// The virtual collection consists of all documents that have the textClass "reisen" and "freizeit"
+	kc.filter( kf.and("textClass", "reisen").and("textClass", "freizeit-unterhaltung") );
+
+	assertEquals("Documents", 5, kc.numberOf("documents"));
+	assertEquals("Tokens", 1678, kc.numberOf("tokens"));
+	assertEquals("Sentences", 194, kc.numberOf("sentences"));
+	assertEquals("Paragraphs", 139, kc.numberOf("paragraphs"));
+
+	// Subset this to all documents that have also the text
+	kc.filter(kf.and("textClass", "kultur"));
+
+	assertEquals("Documents", 1, kc.numberOf("documents"));
+	assertEquals("Tokens", 405, kc.numberOf("tokens"));
+	assertEquals("Sentences", 75, kc.numberOf("sentences"));
+	assertEquals("Paragraphs", 48, kc.numberOf("paragraphs"));
+
+	kc.filter(kf.and("corpusID", "WPD"));
+
+	assertEquals("Documents", 1, kc.numberOf("documents"));
+	assertEquals("Tokens", 405, kc.numberOf("tokens"));
+	assertEquals("Sentences", 75, kc.numberOf("sentences"));
+	assertEquals("Paragraphs", 48, kc.numberOf("paragraphs"));
+
+	// Create a query
+	KorapQuery kq = new KorapQuery("tokens");
+	SpanQuery query = kq.seg("opennlp/p:NN").with("tt/p:NN").toQuery();
+
+	KorapResult kr = kc.search(query);
+	assertEquals(70, kr.totalResults());
+
+	kc.extend( kf.and("textClass", "uninteresting") );
+	assertEquals("Documents", 1, kc.numberOf("documents"));
+
+	kc.extend( kf.and("textClass", "wissenschaft") );
+
+	System.err.println("+++++++++++++++++++++++");
+	assertEquals("Documents", 3, kc.numberOf("documents"));
+	assertEquals("Tokens", 1669, kc.numberOf("tokens"));
+	assertEquals("Sentences", 188, kc.numberOf("sentences"));
+	assertEquals("Paragraphs", 130, kc.numberOf("paragraphs"));
+	// System.err.println(kr.toJSON());
+    };
+
+
 
     @Test
     public void filterExample2 () throws IOException {
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
index c995068..c62a71a 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
@@ -172,6 +172,14 @@
 	assertEquals(sqwi.toQuery().toString(), "spanWithin(<tokens:np />, tokens:"+defaultFoundry+"l:Mann)");
     };
 
+    @Test
+    public void queryJSONDemo () throws QueryException {
+	SpanQueryWrapperInterface sqwi = new KorapQuery("tokens").fromJSON("{ \"query\" : { \"@type\" : \"korap:token\", \"@value\" : { \"@type\" : \"korap:term\", \"@value\" : \"base_p:foo\", \"relation\" : \"=\" }}}");
+
+	assertEquals(sqwi.toQuery().toString(), "tokens:base/p:foo");
+    };
+
+
     public static String getString (String path) {
 	StringBuilder contentBuilder = new StringBuilder();
 	try {
diff --git a/src/test/resources/wiki/readme.txt b/src/test/resources/wiki/readme.txt
index 32fc818..6f60d05 100644
--- a/src/test/resources/wiki/readme.txt
+++ b/src/test/resources/wiki/readme.txt
@@ -3,5 +3,5 @@
 00003: kultur,musik
 00004: wissenschaft,populaerwissenschaft
 00005: freizeit-unterhaltung,reisen
-00006: freizeit-unterhaltung,reisen
-02439: kultur,musik,freizeit-unterhaltung,reisen
+00006: freizeit-unterhaltung,reisen (WPD)
+02439: kultur,musik,freizeit-unterhaltung,reisen (WPD)