diff --git a/README.md b/README.md
index 31b59f2..f89ceb6 100644
--- a/README.md
+++ b/README.md
@@ -30,13 +30,36 @@
 ```
 ## Provided API
 ```
-COLLOCATORDB *open_collocatordb(const char *path_to_rocksdb_without_extension);
-COLLOCATORDB *open_collocatordb_for_write(const char *path_to_rocksdb_without_extension);
+typedef struct {
+    uint32_t w2;
+    uint64_t f2;
+    uint64_t raw;
+    double pmi;
+    double npmi;
+    double llr;
+    double lfmd;
+    double md;
+    uint64_t left_raw;
+    uint64_t right_raw;
+    double left_pmi;
+    double right_pmi;
+    double dice;
+    double logdice;
+    double ldaf;
+    int window;
+    int af_window;
+} Collocator ;
+
+COLLOCATORDB *open_collocatordb(const char *s);
+COLLOCATORDB *open_collocatordb_for_write(const char *s);
 void inc_collocator(COLLOCATORDB *db, uint64_t w1, uint64_t w2, int8_t dist);
 void dump_collocators(COLLOCATORDB *db, uint32_t w1, uint32_t w2, int8_t dist);
+Collocator *get_collocators(COLLOCATORDB *db, uint32_t w1);
+Collocator *get_collocation_scores(COLLOCATORDB *db, uint32_t w1, uint32_t w2);
 char *get_collocators_as_json(COLLOCATORDB *db, uint32_t w1);
 char *get_collocation_scores_as_json(COLLOCATORDB *db, uint32_t w1, uint32_t w2);
 char *get_word(COLLOCATORDB *db, uint32_t w1);
+void read_vocab(COLLOCATORDB *db, char *fname);
 ```
 
 ## TODO
diff --git a/src/collocatordb.cc b/src/collocatordb.cc
index c611994..eef1860 100644
--- a/src/collocatordb.cc
+++ b/src/collocatordb.cc
@@ -320,9 +320,9 @@
 
                                             std::shared_ptr<DB> OpenDbForRead(const char *dbname);
 
-                                            void read_vocab(string fname);
 
   public:
+                                            void readVocab(string fname);
                                             string getWord(uint32_t w1);
 
                                             CollocatorDB(const char *db_name, bool read_only);
@@ -461,7 +461,7 @@
     inc(encodeCollocation(w1, w2, dist));
   }
 
-  void rocksdb::CollocatorDB::read_vocab(string fname) {
+  void rocksdb::CollocatorDB::readVocab(string fname) {
     char strbuf[2048];
     uint64_t freq;
     FILE *fin = fopen(fname.c_str(), "rb");
@@ -496,7 +496,7 @@
                 total, sentences, sl, avg_window_size);
         fclose(fp);
       } else {
-        std::cout << "size file " << size_fname << " not found\n";
+       // std::cout << "size file " << size_fname << " not found\n";
       }
     } else {
       std::cout << "cannot determine size file " << size_fname << "\n";
@@ -522,7 +522,7 @@
       assert(false);
     }
     vocabname << name << ".vocab";
-    read_vocab(vocabname.str());
+    readVocab(vocabname.str());
     return std::shared_ptr<DB>(db);
   }
 
@@ -562,6 +562,7 @@
       std::cerr << s.ToString() << std::endl;
       assert(false);
     }
+    total = 1000;
     return std::shared_ptr<DB>(db);
   }
 
@@ -857,18 +858,23 @@
     db->dump(w1, w2, dist);
   }
 
-  void get_collocators(COLLOCATORS *db, uint32_t w1) {
-    db->get_collocators(w1);
+  Collocator *get_collocators(COLLOCATORS *db, uint32_t w1) {
+    return &db->get_collocators(w1)[0];
   }
 
-  void get_collocation_scores(COLLOCATORS *db, uint32_t w1, uint32_t w2) {
-    db->get_collocation_scores(w1, w2);
+  Collocator *get_collocation_scores(COLLOCATORS *db, uint32_t w1, uint32_t w2) {
+    return &db->get_collocation_scores(w1, w2)[0];
   }
 
   const char *get_word(COLLOCATORS *db, uint32_t w) {
     return strdup(db->getWord(w).c_str());
   }
 
+  void read_vocab(COLLOCATORS *db, char *fname) {
+    std::string fName(fname);
+    db->readVocab(fName);
+  }
+
   const char *get_collocators_as_json(COLLOCATORS *db, uint32_t w1) {
     return strdup(db->collocators2json(w1, db->get_collocators(w1)).c_str());
   }
@@ -876,6 +882,7 @@
   const char *get_collocation_scores_as_json(COLLOCATORS *db, uint32_t w1, uint32_t w2) {
     return strdup(db->collocators2json(w1, db->get_collocation_scores(w1, w2)).c_str());
   }
+
 #ifdef __clang__
 #pragma clang diagnostic push
 #endif
diff --git a/src/collocatordb.h b/src/collocatordb.h
index a033dcb..4e1d412 100644
--- a/src/collocatordb.h
+++ b/src/collocatordb.h
@@ -86,14 +86,35 @@
 
 #else
 typedef struct COLLOCATORDB COLLOCATORDB;
+typedef struct {
+    uint32_t w2;
+    uint64_t f2;
+    uint64_t raw;
+    double pmi;
+    double npmi;
+    double llr;
+    double lfmd;
+    double md;
+    uint64_t left_raw;
+    uint64_t right_raw;
+    double left_pmi;
+    double right_pmi;
+    double dice;
+    double logdice;
+    double ldaf;
+    int window;
+    int af_window;
+} Collocator ;
 #endif
 
 extern COLLOCATORDB *open_collocatordb(const char *s);
 extern COLLOCATORDB *open_collocatordb_for_write(const char *s);
 extern void inc_collocator(COLLOCATORDB *db, uint64_t w1, uint64_t w2, int8_t dist);
 extern void dump_collocators(COLLOCATORDB *db, uint32_t w1, uint32_t w2, int8_t dist);
-extern void get_collocators(COLLOCATORDB *db, uint32_t w1);
-extern void get_collocation_scores(COLLOCATORDB *db, uint32_t w1, uint32_t w2);
+extern Collocator *get_collocators(COLLOCATORDB *db, uint32_t w1);
+extern Collocator *get_collocation_scores(COLLOCATORDB *db, uint32_t w1, uint32_t w2);
 extern char *get_collocators_as_json(COLLOCATORDB *db, uint32_t w1);
 extern char *get_collocation_scores_as_json(COLLOCATORDB *db, uint32_t w1, uint32_t w2);
 extern char *get_word(COLLOCATORDB *db, uint32_t w1);
+extern void read_vocab(COLLOCATORDB *db, char *fname);
+
