diff --git a/c_testanalysis.c b/c_testanalysis.c
index 6843480..5a660cb 100644
--- a/c_testanalysis.c
+++ b/c_testanalysis.c
@@ -28,9 +28,9 @@
 }
 
 int main() {
-	COLLOCATORS *cdb = open_collocators("/vol/work/kupietz/Work2/kl/trunk/Analysemethoden/wang2vec/sampledb");
+	COLLOCATORS *cdb = open_collocators_for_read("/vol/work/kupietz/Work2/kl/trunk/Analysemethoden/wang2vec/sample");
   read_vocab("/vol/work/kupietz/Work2/kl/trunk/Analysemethoden/wang2vec/sample.vocab");
-  for(int i=500; i < 600; i++)
+  for(int i=100; i < 1000; i++)
     get_collocators(cdb, i, vocab, total);
   printf("%s\n", get_collocators_as_json(cdb, 500, vocab, total));
 	return 0;
diff --git a/collocatordb.cc b/collocatordb.cc
index e4520c0..56fc53a 100644
--- a/collocatordb.cc
+++ b/collocatordb.cc
@@ -207,10 +207,10 @@
     uint64_t default_;
 
     std::shared_ptr<DB> OpenDb(const char *dbname);
+    std::shared_ptr<DB> OpenDbForRead(const char *dbname);
 
   public:
-    Collocators(const char *db_name);
-		
+    Collocators(const char *db_name, bool read_only);
     ~Collocators();
 
     // public interface of Collocators.
@@ -314,10 +314,12 @@
     CollocatorIterator* SeekIterator(uint64_t w1, uint64_t w2, int8_t dist);
   };
 
-  rocksdb::Collocators::Collocators(const char *db_name) {
-    std::cout << "Test merge-based counters... " << db_name << "\n";
+  rocksdb::Collocators::Collocators(const char *db_name, bool read_only = false) {
 		//		merge_option_.sync = true;
-    db_ = OpenDb(db_name);
+    if(read_only)
+      db_ = OpenDbForRead(db_name);
+    else
+      db_ = OpenDb(db_name);
     assert(db_);
     uint64_t one = 1;
     EncodeFixed64(_one, one);
@@ -336,8 +338,20 @@
     inc(encodeCollocation(w1, w2, dist));
   }
 
+  std::shared_ptr<DB> rocksdb::Collocators::OpenDbForRead(const char *name) {
+		DB* db;
+		Options options;
+    ostringstream dbname;
+    dbname << name << ".rocksdb";
+		auto s = DB::OpenForReadOnly(options, dbname.str(), &db);
+		if (!s.ok()) {
+			std::cerr << s.ToString() << std::endl;
+			assert(false);
+		}
+		return std::shared_ptr<DB>(db);
+  }
+
   std::shared_ptr<DB> rocksdb::Collocators::OpenDb(const char *dbname) {
-		std::cout << "Test merge-based counters... " << dbname << "\n";
 		DB* db;
 		Options options;
 
@@ -526,6 +540,10 @@
 		return new rocksdb::Collocators(dbname);
 	}
 	
+	COLLOCATORS *open_collocators_for_read(char *dbname) {
+		return new rocksdb::Collocators(dbname, true);
+	}
+	
 	void inc_collocators(COLLOCATORS *db, uint32_t w1, uint32_t w2, int8_t dist) {
 		db->inc(w1, w2, dist);
 	}
diff --git a/collocatordb.h b/collocatordb.h
index 95848a3..b370aae 100644
--- a/collocatordb.h
+++ b/collocatordb.h
@@ -50,6 +50,7 @@
 #endif
 
 extern COLLOCATORS *open_collocators(char *s);
+extern COLLOCATORS *open_collocators_for_read(char *s);
 extern void inc_collocators(COLLOCATORS *db, uint64_t w1, uint64_t w2, int8_t dist);
 extern void dump_collocators(COLLOCATORS *db, uint32_t w1, uint32_t w2, int8_t dist);
 extern void get_collocators(COLLOCATORS *db, uint32_t w1, vocab_entry *vocab, uint64_t total);
