diff --git a/CMakeLists.txt b/CMakeLists.txt
index 51f640f4d38aefff35ae0c903b3c62e31fdda7a8..389bdf0e217738811da3e08daf8eaac4d5703f23 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,8 @@ if (${CMAKE_C_COMPILER_VERSION} VERSION_LESS 5.3)
 	#set_property(GLOBAL PROPERTY C_STANDARD 11)
 endif()
 
+set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
+
 # activate with cmake -DMACA_EXPORT=TRUE 
 # to use macaon in python/java (with swig)
 if(MACA_EXPORT)
diff --git a/maca_common/CMakeLists.txt b/maca_common/CMakeLists.txt
index 75b9fad8808f8e5a646425313efde9c554b62ae0..503e9214c5a8190648c7c237e0e7e5f96b12cd54 100644
--- a/maca_common/CMakeLists.txt
+++ b/maca_common/CMakeLists.txt
@@ -9,6 +9,11 @@ set(SOURCES  src/util.c
  src/sentence.c
  src/word_buffer.c
  src/trie.c
+  src/feat_desc.c
+  src/feat_lib.c
+  src/feat_model.c
+
+
 )
 
 #compiling library
diff --git a/maca_trans_parser/src/feat_desc.h b/maca_common/include/feat_desc.h
similarity index 55%
rename from maca_trans_parser/src/feat_desc.h
rename to maca_common/include/feat_desc.h
index e32390d1691f76dc3bb412bf01c1d3d5d1a26971..62dd7c9725e112c81edf8872074b61915d3bb212 100644
--- a/maca_trans_parser/src/feat_desc.h
+++ b/maca_common/include/feat_desc.h
@@ -1,7 +1,7 @@
 #ifndef __FEAT_DESC__
 #define __FEAT_DESC__
 
-#include "feat_fct.h"
+typedef int (*feat_fct) (void *c);
 
 typedef struct {
   char *name;
@@ -19,11 +19,11 @@ typedef struct {
 #include "util.h"
 
 
-feat_desc *feat_desc_new(void);
-void feat_desc_free(feat_desc *fd);
-feat_desc *feat_desc_add(feat_desc *fd, simple_feat_desc *sfd);
+feat_desc        *feat_desc_new(void);
+void              feat_desc_free(feat_desc *fd);
+feat_desc        *feat_desc_add(feat_desc *fd, simple_feat_desc *sfd);
 simple_feat_desc *simple_feat_desc_new(char *name, int type, feat_fct fct);
-void simple_feat_desc_free(simple_feat_desc *sfd);
+void              simple_feat_desc_free(simple_feat_desc *sfd);
 
 #endif
 
diff --git a/maca_common/include/feat_lib.h b/maca_common/include/feat_lib.h
new file mode 100644
index 0000000000000000000000000000000000000000..ef4f7aa6aa4cc1d28f6e28c45ea3a5b0d4b3a332
--- /dev/null
+++ b/maca_common/include/feat_lib.h
@@ -0,0 +1,18 @@
+#ifndef __FEAT_LIB__
+#define __FEAT_LIB__
+
+#include "feat_desc.h"
+#include "dico.h"
+
+typedef struct {
+  int                nbelem;
+  dico              *d_features;
+  simple_feat_desc **array;
+} feat_lib;
+
+feat_lib         *feat_lib_new(void);
+void              feat_lib_add(feat_lib *fl, int feature_type, char *feature_name, feat_fct feature_fct);
+simple_feat_desc *feat_lib_get_simple_feat_desc(feat_lib *fl, char *feat_name);
+feat_lib         *feat_lib_build(void);
+void              feat_lib_free(feat_lib *fl);
+#endif
diff --git a/maca_common/include/feat_model.h b/maca_common/include/feat_model.h
new file mode 100644
index 0000000000000000000000000000000000000000..f7c234cd0ea14ca4015cfa93f1826ecc2e7acc00
--- /dev/null
+++ b/maca_common/include/feat_model.h
@@ -0,0 +1,28 @@
+#ifndef __FEAT_MODEL__
+#define __FEAT_MODEL__
+
+#include "feat_desc.h"
+#include "feat_lib.h"
+
+typedef struct {
+  char string[2048];
+  char *name;
+  int nbelem;
+  feat_desc **array;
+  int dim;
+  feat_lib *fl; // stores all simple features 
+} feat_model;
+
+/* #include "config.h" */
+#include "dico.h"
+#include "mcd.h"
+
+void        feat_model_free(feat_model *fm);
+feat_model *feat_model_new(char *name);
+void        feat_model_print(FILE *f, feat_model *fm);
+feat_desc  *feat_model_add(feat_model *fm, feat_desc *fd);
+feat_model *feat_model_read(char *filename, feat_lib *fl, int verbose);
+void        feat_model_compute_ranges(feat_model *fm, mcd *m, int mvt_nb);
+int         feat_model_get_type_feat_n(feat_model *fm, int n);
+
+#endif
diff --git a/maca_common/include/mcd.h b/maca_common/include/mcd.h
index fe4eecf2e8f13aac08e418f3973606db8e1ce32e..881b98e80fff65bd5031a234cd16ebea0f9f14fc 100644
--- a/maca_common/include/mcd.h
+++ b/maca_common/include/mcd.h
@@ -96,20 +96,20 @@
 /* mcd (multi column description) files describe the format of corpus files */
 /* every line of an mcd file describes the content of a column of the corpus file */
 /* every line contains four fields separated by a space character */
-/* first field is the index of the column described (first column corresponds to index zero) */
-/* second field is the name of the column. Such must be taken from the following list: */
+/* first field is the index of the column described (first column corresponds to index one) */
+/* second field is the name of the column. Such name must be taken from the following list: */
 /* INDEX, FORM, LEMMA, CPOS, POS, FEAT, LABEL, STAG, INT, GOV, A ... Z */
-/* third field correspond to the internal representation of the tokens found in the column described. Four values are possible : */
+/* third field corresponds to the internal representation of the tokens found in the column described. Four values are possible : */
 /* VOCAB if the internal representation is an integer code corresponding to the token */
 /* INT if the token is already an integer and its corresponding internal value is the same integer */
-/* EMB if the internal representation of the token is a real valued vector. */
+/* EMB if the internal representation of the token is a real valued vector (an embedding). */
 /* _   if no internal representation is associated to the field */
 /* fourth field is the name of a file in which the encoding is represented, this file can either be a dico (see dico.h) format file or an embedding file (see word_emb.h)*/
 
 typedef struct {
   int nb_col;                 /* number of columns in the mcd file */
-  int wf2col[MCD_WF_NB];      /* in which column are the word features (MCD_WF_FORM, MCD_WF_LEMMA ...) represented */ 
-  int *wf;                    /* array containing the word feature that correspond to each column */
+  int wf2col[MCD_WF_NB];      /* in which column are the word features (MCD_WF_FORM, MCD_WF_LEMMA ... MCD_WF_A ... MCD_WF_Z) represented */ 
+  int *wf;                    /* array containing the word feature that corresponds to each column */
   char **wf_str;              /* a string version of array word feature */
   int *representation;        /* array containing the representation mode of every column (integer, vocabulary, embedding, NULL) */
   char **filename;            /* array containing the file in which the different values for a columnn is represented */
@@ -122,15 +122,15 @@ mcd *mcd_build_ifpls(void);
 mcd *mcd_build_wplgf(void);
 mcd *mcd_build_wplgfs(void);
 
-mcd *mcd_read(char *mcd_filename, int verbose);
-void mcd_link_to_dico(mcd *m, dico_vec *vocabs, int verbose);
-void mcd_extract_dico_from_corpus(mcd *m, char *corpus_filename);
-void mcd_free(mcd *m);
-int mcd_get_code(mcd *m, char *str, int col);
+mcd      *mcd_read(char *mcd_filename, int verbose);
+void      mcd_link_to_dico(mcd *m, dico_vec *vocabs, int verbose);
+void      mcd_extract_dico_from_corpus(mcd *m, char *corpus_filename);
+void      mcd_free(mcd *m);
+int       mcd_get_code(mcd *m, char *str, int col);
 dico_vec *mcd_build_dico_vec(mcd *mcd_struct);
-int mcd_wf_code(char *wf);
-void mcd_remove_wf_column(mcd *m, int wf_code);
-mcd *mcd_copy(mcd *m);
-char *mcd_get_str(mcd *m, int code, int col);
+int       mcd_wf_code(char *wf);
+void      mcd_remove_wf_column(mcd *m, int wf_code);
+mcd      *mcd_copy(mcd *m);
+char     *mcd_get_str(mcd *m, int code, int col);
 
 #endif
diff --git a/maca_trans_parser/src/feat_desc.c b/maca_common/src/feat_desc.c
similarity index 100%
rename from maca_trans_parser/src/feat_desc.c
rename to maca_common/src/feat_desc.c
diff --git a/maca_common/src/feat_lib.c b/maca_common/src/feat_lib.c
new file mode 100644
index 0000000000000000000000000000000000000000..a47c9b6176d87ffd323b13aa5c64bb1e84c9539a
--- /dev/null
+++ b/maca_common/src/feat_lib.c
@@ -0,0 +1,42 @@
+#include "feat_lib.h"
+/* #include "feat_types.h" */
+/* #include "feat_fct.h" */
+
+void feat_lib_add(feat_lib *fl, int feature_type, char *feature_name, feat_fct feature_fct)
+{
+  int feature_nb = dico_add(fl->d_features, feature_name); 
+  fl->array = (simple_feat_desc **)realloc(fl->array, (feature_nb + 1) * sizeof(simple_feat_desc *));
+  fl->array[feature_nb] = simple_feat_desc_new(feature_name, feature_type, feature_fct);
+  fl->nbelem = feature_nb+1;
+}
+
+simple_feat_desc *feat_lib_get_simple_feat_desc(feat_lib *fl, char *feat_name)
+{
+  int index = dico_string2int(fl->d_features, feat_name);
+  if(index == -1){
+    fprintf(stderr, "features function %s unknown\n", feat_name);
+    return NULL;
+  }
+  return fl->array[index];
+}
+
+feat_lib *feat_lib_new(void)
+{
+  feat_lib *fl = (feat_lib *)memalloc(sizeof(feat_lib));
+  fl->nbelem = 0;
+  fl->d_features = dico_new(NULL, 100);
+  fl->array = NULL;
+  return fl;
+}
+
+void feat_lib_free(feat_lib *fl) {
+
+    for(int i=0; i < fl->nbelem; ++i) {
+	simple_feat_desc_free(fl->array[i]);
+    }
+    dico_free(fl->d_features);
+    free(fl->array);
+    free(fl); // ne devrait pas etre en commentaire
+
+}
+
diff --git a/maca_trans_parser/src/feat_model.c b/maca_common/src/feat_model.c
similarity index 92%
rename from maca_trans_parser/src/feat_model.c
rename to maca_common/src/feat_model.c
index 9772058c2f778dd28c40498a2fe37f9c431ef593..503da467a15a184d03978b13bbbe2f511a6bc3d1 100644
--- a/maca_trans_parser/src/feat_model.c
+++ b/maca_common/src/feat_model.c
@@ -5,8 +5,8 @@
 #include "feat_model.h"
 #include "feat_lib.h"
 #include "feat_desc.h"
-#include "feat_types.h"
-#include "config2feat_vec.h"
+/* #include "feat_types.h" */
+/* #include "config2feat_vec.h" */
 
 /* returns type of the nth feature in fm */
 /* if it is a complex feature, or if n is too large, returns -1 */
@@ -50,7 +50,7 @@ void feat_model_free(feat_model *fm)
   free(fm);
 }
 
-feat_model *feat_model_read(char *filename, int verbose)
+feat_model *feat_model_read(char *filename, feat_lib *fl, int verbose)
 {
   FILE *f = myfopen(filename, "r");
   feat_model *fm = feat_model_new(filename);
@@ -58,10 +58,13 @@ feat_model *feat_model_read(char *filename, int verbose)
   char buffer[1000]; /* ugly */
   char *feat_name;
   //feat_lib *fl
-  fm->fl = feat_lib_build(); // must be preserved in feature_model to delete correctly features at the end
+  /*fm->fl = feat_lib_build();*/ // must be preserved in feature_model to delete correctly features at the end
   simple_feat_desc *sfd;
   feat_desc *fd;
 
+
+    fm->fl = fl;
+
   while(fgets(buffer, 1000, f)){
     if(feof(f)) break;
     if((buffer[0] == '\n') || (buffer[0] == '#')) continue;
@@ -82,7 +85,8 @@ feat_model *feat_model_read(char *filename, int verbose)
   return fm;
 }
 
-
+void feat_model_compute_ranges(feat_model *fm, mcd *m, int mvt_nb){}
+#if(0)
 void feat_model_compute_ranges(feat_model *fm, mcd *m, int mvt_nb)
 {
   int i;
@@ -118,7 +122,7 @@ void feat_model_compute_ranges(feat_model *fm, mcd *m, int mvt_nb)
   }
   fm->dim = total;
 }
-
+#endif
 void catenate_int(char *string, int val)
 {
   char s[10];
diff --git a/maca_crf_tagger/src/crf_barebones_decoder.cc b/maca_crf_tagger/src/crf_barebones_decoder.cc
index 8a3aeb47e18e5260dc2470cff9730d118ce43920..fd2ab3af6fb2005b1e5bad447d032a8ea4b8f55e 100644
--- a/maca_crf_tagger/src/crf_barebones_decoder.cc
+++ b/maca_crf_tagger/src/crf_barebones_decoder.cc
@@ -1,3 +1,4 @@
+#include <cstdlib>
 #include <vector>
 #include "crf_decoder.hh"
 #include "crf_binlexicon.hh"
@@ -42,15 +43,20 @@ void tag_sentence(macaon::Decoder& decoder, macaon::BinaryLexicon* lexicon, cons
 }
 
 void usage(const char* argv0) {
-    std::cerr << "usage: " << argv0 << " [--conll07|--column <num>] <model> [lexicon]\n";
+    std::cerr << "usage: " << argv0 << " [--conll07|--column <num>] [<model> [lexicon]|-L <lang> [-D <model-dir>] [--nolexicon]]\n";
     exit(1);
 }
 
 int main(int argc, char** argv) {
     bool isConll07 = false; // warning: no verification of conll07 format
     int word_offset = 0;
+    std::string modelDir = "";
+    std::string modelLang = "";
+    char* macaon_dir = getenv("MACAON_DIR");
+    if(macaon_dir != NULL) modelDir = macaon_dir;
     std::string modelName = "";
     std::string lexiconName = "";
+    bool noLexicon = false;
 
     for(int i = 1; i < argc; i++) {
         std::string arg = argv[i];
@@ -63,6 +69,16 @@ int main(int argc, char** argv) {
             arg = argv[i + 1];
             word_offset = strtol(arg.c_str(), NULL, 10) - 1;
             i++;
+        } else if(arg == "-L") {
+            arg = argv[i + 1];
+            modelLang = arg;
+            i++;
+        } else if(arg == "-D") {
+            arg = argv[i + 1];
+            modelDir = arg;
+            i++;
+        } else if(arg == "--nolexicon") {
+            noLexicon = true;
         } else if(modelName == "") {
             modelName = arg;
         } else if(lexiconName =="") {
@@ -71,11 +87,19 @@ int main(int argc, char** argv) {
             usage(argv[0]);
         }
     }
+    if(modelDir != "" && modelLang != "") {
+        modelName = modelDir + "/" + modelLang + "/bin/crf_tagger_model.bin";
+        if(!noLexicon) lexiconName = modelDir + "/" + modelLang + "/bin/crf_tagger_wordtag_lexicon.bin";
+    }
     if(modelName == "" || word_offset < 0) usage(argv[0]);
 
     macaon::Decoder decoder(modelName);
+    if(!decoder.IsLoaded()) return 1;
     macaon::BinaryLexicon *lexicon = NULL;
-    if(lexiconName != "") lexicon = new macaon::BinaryLexicon(lexiconName, decoder.getTagset());
+    if(lexiconName != "") {
+        lexicon = new macaon::BinaryLexicon(lexiconName, decoder.getTagset());
+        if(!lexicon->IsLoaded()) return 1;
+    }
 
     std::string line;
     std::vector<std::vector<std::string> > lines;
diff --git a/maca_export/CMakeLists.txt b/maca_export/CMakeLists.txt
index 8ba50a4640cc14b73c305bb2c28270f9a1bb6cd8..8afb0b1aac07e64cf394c666fa848d67066a419e 100644
--- a/maca_export/CMakeLists.txt
+++ b/maca_export/CMakeLists.txt
@@ -94,6 +94,31 @@ if(MACA_EXPORT)
   else()
     message("swig >= 3.0 not installed on your system")
   endif()
+
+
+  
+
+  set(TESTSOURCES 
+	src/maca_lemmatizer_export.cc
+	src/maca_trans_parser_export.cc
+	src/maca_trans_tagger_export.cc
+  )
+
+#  #compiling library
+#  include_directories(src)
+#  add_library(swigtransparse ${TESOURCES})
+#target_link_libraries(transparse perceptron)
+
+
+
+   add_executable(testcxx ./src/test.cc ${TESTSOURCES})
+   target_link_libraries(testcxx perceptron)
+   target_link_libraries(testcxx transparse)
+   target_link_libraries(testcxx maca_common)
+#   install (TARGETS testcxx DESTINATION bin)
+
+
+
 endif()
 
 
diff --git a/maca_export/src/test.cc b/maca_export/src/test.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f8208ee3595cc16e053d5c29059d17fa672290a5
--- /dev/null
+++ b/maca_export/src/test.cc
@@ -0,0 +1,39 @@
+#include <iostream>
+#include <fstream>
+
+#include "maca_lemmatizer_export.h"
+#include "maca_trans_parser_export.h"
+#include "maca_trans_tagger_export.h"
+
+// test programme to be able using valgrind on the exported part of macaon
+
+using namespace std ;
+
+int main(int argc, char *argv[]) {
+    if (argc < 4) {
+	cerr << "usage: " << argv[0] << " <langue> <mcd-file> <mcf-file>" << endl;
+	return 1;
+    }
+
+    //MacaonTransTagger *mt = new MacaonTransTagger(argv[1], argv[2]);
+    //MacaonTransLemmatizer *ml = new MacaonTransLemmatizer(argv[1], argv[2]);
+    MacaonTransParser *mp = new MacaonTransParser(argv[1], argv[2]);
+
+    ifstream ifp(argv[3]);
+    string text;
+    string line;
+    while (!ifp.eof()) {
+	getline(ifp, line);
+	text += line + "\n";
+    }
+
+    //const char *tags = mt->tagmcf(text.c_str());
+    //const char *lemmas = ml->lemmatizemcf(tags);
+    //const char *deps = mp->parsemcf(lemmas);
+    const char *deps = mp->parsemcf(text.c_str());
+
+    cout << deps << endl;
+    delete mp;
+    //delete ml;
+    //delete mt;
+}
diff --git a/maca_tokenizer/src/fr_tok_rules.l b/maca_tokenizer/src/fr_tok_rules.l
index 7e7fba8a832c30fd94c7eef96f23fa68212023b6..d0f391d2994acf6a9260da5047fd6d576f6cd241 100644
--- a/maca_tokenizer/src/fr_tok_rules.l
+++ b/maca_tokenizer/src/fr_tok_rules.l
@@ -15,11 +15,20 @@ extern int defait_amalgames;
 
 [0-9]+,[0-9]* printf("%s", yytext);
 [ \t]+   printf("\n");
-\.       printf("\n.");
-\,       printf("\n,");
-…        printf("\n…");
+[ ]*\.       printf("\n.");
+[ ]*\?       printf("\n?");
+[ ]*\!       printf("\n!");
+[ ]*,       printf("\n,");
+[ ]*:       printf("\n:");
+[ ]*;       printf("\n;");
+[ ]*…        printf("\n…");
+[ ]*\)        printf("\n)");
+[ ]*»        printf("\n»");
+\(        printf("(\n");
 '        printf("'\n");
 ’        printf("'\n");
+\"	printf("\"\n");
+«	printf("»\n");
 -je      printf("\n-je");
 -tu      printf("\n-tu");
 -on      printf("\n-on");
diff --git a/maca_tools/src/mcf2conll.c b/maca_tools/src/mcf2conll.c
index c5f506447112a354ff5fba162688b3435cfa044b..078be933aab23179c11fd238430864c720fa8f58 100644
--- a/maca_tools/src/mcf2conll.c
+++ b/maca_tools/src/mcf2conll.c
@@ -181,7 +181,7 @@ int main(int argc, char *argv[])
       fprintf(output_file, "\t");
       
       if(gov_col){
-	if(word_get_gov(w) == 0)
+	if((word_get_gov(w) == 0) || ((word_get_gov(w) + index) < 0))
 	  fprintf(output_file, "0\t");
 	else
 	  fprintf(output_file, "%d\t", word_get_gov(w) + index);
diff --git a/maca_trans_parser/CMakeLists.txt b/maca_trans_parser/CMakeLists.txt
index 0b2703968f9d3c44b69a5d2070b931b7ce99f149..04cb203535aeab61e6e514d8f5ebfef941368eed 100644
--- a/maca_trans_parser/CMakeLists.txt
+++ b/maca_trans_parser/CMakeLists.txt
@@ -1,5 +1,4 @@
 set(SOURCES src/context.c
-  src/feat_desc.c
   src/movements.c
   src/movement_parser_arc_eager.c
   src/movement_tagparser_arc_eager.c
@@ -15,18 +14,17 @@ set(SOURCES src/context.c
   src/simple_decoder_tagparser_arc_eager.c
 #  src/simple_decoder_forrest.c
   src/simple_decoder_tagger.c
-  src/simple_decoder_tagger_bt.c
-  src/feat_lib.c
+#  src/simple_decoder_tagger_bt.c
   src/stack.c
   src/config2feat_vec.c
   src/depset.c
-  src/feat_model.c
   src/config.c
 #  src/queue.c
   # src/beam.c
   src/feat_types.c
   src/mvt.c
   src/mvt_stack.c
+
   )
 
 #compiling library
@@ -42,11 +40,11 @@ target_link_libraries(maca_trans_tagger_mcf2cff transparse)
 target_link_libraries(maca_trans_tagger_mcf2cff maca_common)
 install (TARGETS maca_trans_tagger_mcf2cff DESTINATION bin)
 
-add_executable(maca_trans_tagger_mcf2cff_bt ./src/maca_trans_tagger_mcf2cff_bt.c)
-target_link_libraries(maca_trans_tagger_mcf2cff_bt perceptron)
-target_link_libraries(maca_trans_tagger_mcf2cff_bt transparse)
-target_link_libraries(maca_trans_tagger_mcf2cff_bt maca_common)
-install (TARGETS maca_trans_tagger_mcf2cff_bt DESTINATION bin)
+#add_executable(maca_trans_tagger_mcf2cff_bt ./src/maca_trans_tagger_mcf2cff_bt.c)
+#target_link_libraries(maca_trans_tagger_mcf2cff_bt perceptron)
+#target_link_libraries(maca_trans_tagger_mcf2cff_bt transparse)
+#target_link_libraries(maca_trans_tagger_mcf2cff_bt maca_common)
+#install (TARGETS maca_trans_tagger_mcf2cff_bt DESTINATION bin)
 
 # add_executable(maca_trans_parser_mcf2fann ./src/maca_trans_parser_mcf2fann.c)
 # target_link_libraries(maca_trans_parser_mcf2fann perceptron)
@@ -102,11 +100,11 @@ target_link_libraries(maca_trans_tagger transparse)
 target_link_libraries(maca_trans_tagger maca_common)
 install (TARGETS maca_trans_tagger DESTINATION bin)
 
-add_executable(maca_trans_tagger_bt ./src/maca_trans_tagger_bt.c)
-target_link_libraries(maca_trans_tagger_bt perceptron)
-target_link_libraries(maca_trans_tagger_bt transparse)
-target_link_libraries(maca_trans_tagger_bt maca_common)
-install (TARGETS maca_trans_tagger_bt DESTINATION bin)
+#add_executable(maca_trans_tagger_bt ./src/maca_trans_tagger_bt.c)
+#target_link_libraries(maca_trans_tagger_bt perceptron)
+#target_link_libraries(maca_trans_tagger_bt transparse)
+#target_link_libraries(maca_trans_tagger_bt maca_common)
+#install (TARGETS maca_trans_tagger_bt DESTINATION bin)
 
 #add_executable(maca_trans_parser_train ./src/train_perceptron.c)
 #target_compile_options(maca_trans_parser_train INTERFACE -Wall)
diff --git a/maca_trans_parser/src/cff2fann.c b/maca_trans_parser/src/cff2fann.c
index 38336968a1d63fd7d81c14fb3e5b8076dfb1e78f..86492988b16881cd2bb6d00cb9e61a75e928b11a 100644
--- a/maca_trans_parser/src/cff2fann.c
+++ b/maca_trans_parser/src/cff2fann.c
@@ -114,7 +114,7 @@ int main(int argc, char *argv[])
 
   ctx->vocabs = dico_vec_read(ctx->vocabs_filename, ctx->hash_ratio);
 
-  ctx->features_model = feat_model_read(ctx->features_model_filename, ctx->verbose);
+  ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose);
 
   look_for_number_of_features_and_classes(ctx->input_filename, &nb_feat, &nb_class);
   ctx->mvt_nb = nb_class;
diff --git a/maca_trans_parser/src/config2feat_vec.c b/maca_trans_parser/src/config2feat_vec.c
index 47916fa1bd85436d2d216e8181ecf1a51820eb52..0b63b1633ca98ed0d4b7c6d6eea27e37a3e7001d 100644
--- a/maca_trans_parser/src/config2feat_vec.c
+++ b/maca_trans_parser/src/config2feat_vec.c
@@ -5,12 +5,44 @@
 #include"feat_model.h"
 #include"config2feat_vec.h"
 
+
+int get_feat_value_fann(feat_model *fm, config *c, int feat_nb)
+{
+  feat_desc *fd = fm->array[feat_nb];
+  /* fm must be exclusively  composed of simple features */
+  return fd->array[0]->fct(c);
+}
+
+int get_feat_value_cff(feat_model *fm, config *c, dico *dico_features, int feat_nb, int mode)
+{
+  feat_desc *fd = fm->array[feat_nb];
+  int i;
+  int feat_val;
+
+  /*  the name of the feature is built in fm->string and its value in the dictionnary (dico_features) is returned */
+  fm->string[0] = '\0';
+  for(i=0; i < fd->nbelem; i++){
+    strcat(fm->string, fd->array[i]->name);
+    feat_val = fd->array[i]->fct(c);
+    catenate_int(fm->string, feat_val);
+  }
+ 
+  if(mode == LOOKUP_MODE){
+    if(fm->string)
+    /* printf("fmstring = %s\n", fm->string); */
+    return dico_string2int(dico_features, fm->string);
+  } 
+  return dico_add(dico_features, fm->string);
+}
+
+
+
 feat_vec *config2feat_vec_fann(feat_model *fm, config *c, feat_vec *fv, int mode)
 {
   int i;
   feat_vec_empty(fv);
   for(i=0; i < fm->nbelem; i++)
-    feat_vec_add(fv, feat_model_get_feat_value_fann(fm, c, i));
+    feat_vec_add(fv, get_feat_value_fann(fm, c, i));
   return fv;
 }
 
@@ -19,7 +51,7 @@ feat_vec *config2feat_vec_cff(feat_model *fm, config *c, dico *dico_features, fe
   int i;
   feat_vec_empty(fv);
   for(i=0; i < fm->nbelem; i++)
-    feat_vec_add(fv, feat_model_get_feat_value_cff(fm, c, dico_features, i, mode));
+    feat_vec_add(fv, get_feat_value_cff(fm, c, dico_features, i, mode));
   return fv;
 }
 
diff --git a/maca_trans_parser/src/config2feat_vec.h b/maca_trans_parser/src/config2feat_vec.h
index de5fd974007bea2c725c0365e6773f4c6b45f178..2e661a13cbcbe472a967ea6f9ca93df9ec2038cf 100644
--- a/maca_trans_parser/src/config2feat_vec.h
+++ b/maca_trans_parser/src/config2feat_vec.h
@@ -15,6 +15,11 @@
 
 feat_vec *config2feat_vec_fann(feat_model *fm, config *c, feat_vec *fv, int mode);
 feat_vec *config2feat_vec_cff(feat_model *fm, config *c, dico *dico_features, feat_vec *fv, int mode);
+
+/* int         feat_model_get_feat_value_fann(feat_model *fm, config *c, int feat_nb); */
+/* int         feat_model_get_feat_value_cff(feat_model *fm, config *c, dico *dico_features, int feat_nb, int mode); */
+
+
 /*
 feat_vec *config2feat_vec(config *c, dico *dico_features, feat_vec *fv, int mode);
 feat_vec *config2feat_vec_add_features(config *c, dico *dico_features, feat_vec *fv);
diff --git a/maca_trans_parser/src/feat_fct.c b/maca_trans_parser/src/feat_fct.c
index 608c53baa35fe23793a780235c8a78bfdf7b8117..ec84300011c7bbd72c51601c9cf1774455f8cfb4 100644
--- a/maca_trans_parser/src/feat_fct.c
+++ b/maca_trans_parser/src/feat_fct.c
@@ -5,160 +5,162 @@
 #include"stack.h"
 #include"feat_fct.h"
 #include"feat_types.h"
+#include"config.h"
+
 
 /* word features */
 
 /* words in the stack */
-int s0g(config *c) {return (word_get_gov(stack_s0(config_get_stack(c))) == WORD_INVALID_GOV) ? 0 : 1;}
-int s0sf(config *c) {return word_get_label(stack_s0(config_get_stack(c)));}
-
-int s0f(config *c) {return word_get_form(stack_s0(config_get_stack(c)));}
-int s0l(config *c) {return word_get_lemma(stack_s0(config_get_stack(c)));}
-int s0c(config *c) {return word_get_cpos(stack_s0(config_get_stack(c)));}
-int s0p(config *c) {return word_get_pos(stack_s0(config_get_stack(c)));}
-int s0m(config *c) {return word_get_feats(stack_s0(config_get_stack(c)));}
-int s0s(config *c) {return word_get_stag(stack_s0(config_get_stack(c)));}
-int s0A(config *c) {return word_get_A(stack_s0(config_get_stack(c)));}
-int s0B(config *c) {return word_get_B(stack_s0(config_get_stack(c)));}
-int s0C(config *c) {return word_get_C(stack_s0(config_get_stack(c)));}
-int s0D(config *c) {return word_get_D(stack_s0(config_get_stack(c)));}
-int s0E(config *c) {return word_get_E(stack_s0(config_get_stack(c)));}
-int s0F(config *c) {return word_get_F(stack_s0(config_get_stack(c)));}
-int s0G(config *c) {return word_get_G(stack_s0(config_get_stack(c)));}
-int s0H(config *c) {return word_get_H(stack_s0(config_get_stack(c)));}
-int s0I(config *c) {return word_get_I(stack_s0(config_get_stack(c)));}
-int s0J(config *c) {return word_get_J(stack_s0(config_get_stack(c)));}
-int s0K(config *c) {return word_get_K(stack_s0(config_get_stack(c)));}
-int s0L(config *c) {return word_get_L(stack_s0(config_get_stack(c)));}
-int s0M(config *c) {return word_get_M(stack_s0(config_get_stack(c)));}
-int s0N(config *c) {return word_get_N(stack_s0(config_get_stack(c)));}
-int s0O(config *c) {return word_get_O(stack_s0(config_get_stack(c)));}
-int s0P(config *c) {return word_get_P(stack_s0(config_get_stack(c)));}
-int s0Q(config *c) {return word_get_Q(stack_s0(config_get_stack(c)));}
-int s0R(config *c) {return word_get_R(stack_s0(config_get_stack(c)));}
-int s0S(config *c) {return word_get_S(stack_s0(config_get_stack(c)));}
-int s0T(config *c) {return word_get_T(stack_s0(config_get_stack(c)));}
-int s0U(config *c) {return word_get_U(stack_s0(config_get_stack(c)));}
-int s0V(config *c) {return word_get_V(stack_s0(config_get_stack(c)));}
-int s0W(config *c) {return word_get_W(stack_s0(config_get_stack(c)));}
-int s0X(config *c) {return word_get_X(stack_s0(config_get_stack(c)));}
-int s0Y(config *c) {return word_get_Y(stack_s0(config_get_stack(c)));}
-int s0Z(config *c) {return word_get_Z(stack_s0(config_get_stack(c)));}
-
-int s0U1(config *c) {return word_get_U1(stack_s0(config_get_stack(c)));}
-int s0sgn(config *c) {return word_get_signature(stack_s0(config_get_stack(c)));}
-
-int s1g(config *c)  {return (word_get_gov(stack_s1(config_get_stack(c))) == WORD_INVALID_GOV) ? 0 : 1;}
-int s1sf(config *c) {return word_get_label(stack_s1(config_get_stack(c)));}
-
-int s1f(config *c) {return word_get_form(stack_s1(config_get_stack(c)));}
-int s1l(config *c) {return word_get_lemma(stack_s1(config_get_stack(c)));}
-int s1c(config *c) {return word_get_cpos(stack_s1(config_get_stack(c)));}
-int s1p(config *c) {return word_get_pos(stack_s1(config_get_stack(c)));}
-int s1m(config *c) {return word_get_feats(stack_s1(config_get_stack(c)));}
-int s1s(config *c) {return word_get_stag(stack_s1(config_get_stack(c)));}
-int s1A(config *c) {return word_get_A(stack_s1(config_get_stack(c)));}
-int s1B(config *c) {return word_get_B(stack_s1(config_get_stack(c)));}
-int s1C(config *c) {return word_get_C(stack_s1(config_get_stack(c)));}
-int s1D(config *c) {return word_get_D(stack_s1(config_get_stack(c)));}
-int s1E(config *c) {return word_get_E(stack_s1(config_get_stack(c)));}
-int s1F(config *c) {return word_get_F(stack_s1(config_get_stack(c)));}
-int s1G(config *c) {return word_get_G(stack_s1(config_get_stack(c)));}
-int s1H(config *c) {return word_get_H(stack_s1(config_get_stack(c)));}
-int s1I(config *c) {return word_get_I(stack_s1(config_get_stack(c)));}
-int s1J(config *c) {return word_get_J(stack_s1(config_get_stack(c)));}
-int s1K(config *c) {return word_get_K(stack_s1(config_get_stack(c)));}
-int s1L(config *c) {return word_get_L(stack_s1(config_get_stack(c)));}
-int s1M(config *c) {return word_get_M(stack_s1(config_get_stack(c)));}
-int s1N(config *c) {return word_get_N(stack_s1(config_get_stack(c)));}
-int s1O(config *c) {return word_get_O(stack_s1(config_get_stack(c)));}
-int s1P(config *c) {return word_get_P(stack_s1(config_get_stack(c)));}
-int s1Q(config *c) {return word_get_Q(stack_s1(config_get_stack(c)));}
-int s1R(config *c) {return word_get_R(stack_s1(config_get_stack(c)));}
-int s1S(config *c) {return word_get_S(stack_s1(config_get_stack(c)));}
-int s1T(config *c) {return word_get_T(stack_s1(config_get_stack(c)));}
-int s1U(config *c) {return word_get_U(stack_s1(config_get_stack(c)));}
-int s1V(config *c) {return word_get_V(stack_s1(config_get_stack(c)));}
-int s1W(config *c) {return word_get_W(stack_s1(config_get_stack(c)));}
-int s1X(config *c) {return word_get_X(stack_s1(config_get_stack(c)));}
-int s1Y(config *c) {return word_get_Y(stack_s1(config_get_stack(c)));}
-int s1Z(config *c) {return word_get_Z(stack_s1(config_get_stack(c)));}
-
-int s2f(config *c) {return word_get_form(stack_s2(config_get_stack(c)));}
-int s2l(config *c) {return word_get_lemma(stack_s2(config_get_stack(c)));}
-int s2c(config *c) {return word_get_cpos(stack_s2(config_get_stack(c)));}
-int s2p(config *c) {return word_get_pos(stack_s2(config_get_stack(c)));}
-int s2m(config *c) {return word_get_feats(stack_s2(config_get_stack(c)));}
-int s2s(config *c) {return word_get_stag(stack_s2(config_get_stack(c)));}
-int s2A(config *c) {return word_get_A(stack_s2(config_get_stack(c)));}
-int s2B(config *c) {return word_get_B(stack_s2(config_get_stack(c)));}
-int s2C(config *c) {return word_get_C(stack_s2(config_get_stack(c)));}
-int s2D(config *c) {return word_get_D(stack_s2(config_get_stack(c)));}
-int s2E(config *c) {return word_get_E(stack_s2(config_get_stack(c)));}
-int s2F(config *c) {return word_get_F(stack_s2(config_get_stack(c)));}
-int s2G(config *c) {return word_get_G(stack_s2(config_get_stack(c)));}
-int s2H(config *c) {return word_get_H(stack_s2(config_get_stack(c)));}
-int s2I(config *c) {return word_get_I(stack_s2(config_get_stack(c)));}
-int s2J(config *c) {return word_get_J(stack_s2(config_get_stack(c)));}
-int s2K(config *c) {return word_get_K(stack_s2(config_get_stack(c)));}
-int s2L(config *c) {return word_get_L(stack_s2(config_get_stack(c)));}
-int s2M(config *c) {return word_get_M(stack_s2(config_get_stack(c)));}
-int s2N(config *c) {return word_get_N(stack_s2(config_get_stack(c)));}
-int s2O(config *c) {return word_get_O(stack_s2(config_get_stack(c)));}
-int s2P(config *c) {return word_get_P(stack_s2(config_get_stack(c)));}
-int s2Q(config *c) {return word_get_Q(stack_s2(config_get_stack(c)));}
-int s2R(config *c) {return word_get_R(stack_s2(config_get_stack(c)));}
-int s2S(config *c) {return word_get_S(stack_s2(config_get_stack(c)));}
-int s2T(config *c) {return word_get_T(stack_s2(config_get_stack(c)));}
-int s2U(config *c) {return word_get_U(stack_s2(config_get_stack(c)));}
-int s2V(config *c) {return word_get_V(stack_s2(config_get_stack(c)));}
-int s2W(config *c) {return word_get_W(stack_s2(config_get_stack(c)));}
-int s2X(config *c) {return word_get_X(stack_s2(config_get_stack(c)));}
-int s2Y(config *c) {return word_get_Y(stack_s2(config_get_stack(c)));}
-int s2Z(config *c) {return word_get_Z(stack_s2(config_get_stack(c)));}
-
-int s3f(config *c) {return word_get_form(stack_s3(config_get_stack(c)));}
-int s3l(config *c) {return word_get_lemma(stack_s3(config_get_stack(c)));}
-int s3c(config *c) {return word_get_cpos(stack_s3(config_get_stack(c)));}
-int s3p(config *c) {return word_get_pos(stack_s3(config_get_stack(c)));}
-int s3m(config *c) {return word_get_feats(stack_s3(config_get_stack(c)));}
-int s3s(config *c) {return word_get_stag(stack_s3(config_get_stack(c)));}
-int s3A(config *c) {return word_get_A(stack_s3(config_get_stack(c)));}
-int s3B(config *c) {return word_get_B(stack_s3(config_get_stack(c)));}
-int s3C(config *c) {return word_get_C(stack_s3(config_get_stack(c)));}
-int s3D(config *c) {return word_get_D(stack_s3(config_get_stack(c)));}
-int s3E(config *c) {return word_get_E(stack_s3(config_get_stack(c)));}
-int s3F(config *c) {return word_get_F(stack_s3(config_get_stack(c)));}
-int s3G(config *c) {return word_get_G(stack_s3(config_get_stack(c)));}
-int s3H(config *c) {return word_get_H(stack_s3(config_get_stack(c)));}
-int s3I(config *c) {return word_get_I(stack_s3(config_get_stack(c)));}
-int s3J(config *c) {return word_get_J(stack_s3(config_get_stack(c)));}
-int s3K(config *c) {return word_get_K(stack_s3(config_get_stack(c)));}
-int s3L(config *c) {return word_get_L(stack_s3(config_get_stack(c)));}
-int s3M(config *c) {return word_get_M(stack_s3(config_get_stack(c)));}
-int s3N(config *c) {return word_get_N(stack_s3(config_get_stack(c)));}
-int s3O(config *c) {return word_get_O(stack_s3(config_get_stack(c)));}
-int s3P(config *c) {return word_get_P(stack_s3(config_get_stack(c)));}
-int s3Q(config *c) {return word_get_Q(stack_s3(config_get_stack(c)));}
-int s3R(config *c) {return word_get_R(stack_s3(config_get_stack(c)));}
-int s3S(config *c) {return word_get_S(stack_s3(config_get_stack(c)));}
-int s3T(config *c) {return word_get_T(stack_s3(config_get_stack(c)));}
-int s3U(config *c) {return word_get_U(stack_s3(config_get_stack(c)));}
-int s3V(config *c) {return word_get_V(stack_s3(config_get_stack(c)));}
-int s3W(config *c) {return word_get_W(stack_s3(config_get_stack(c)));}
-int s3X(config *c) {return word_get_X(stack_s3(config_get_stack(c)));}
-int s3Y(config *c) {return word_get_Y(stack_s3(config_get_stack(c)));}
-int s3Z(config *c) {return word_get_Z(stack_s3(config_get_stack(c)));}
+int s0g(void *c) {return (word_get_gov(stack_s0(config_get_stack((config *) c))) == WORD_INVALID_GOV) ? 0 : 1;}
+int s0sf(void *c) {return word_get_label(stack_s0(config_get_stack((config *) c)));}
+
+int s0f(void *c) {return word_get_form(stack_s0(config_get_stack((config *) c)));}
+int s0l(void *c) {return word_get_lemma(stack_s0(config_get_stack((config *) c)));}
+int s0c(void *c) {return word_get_cpos(stack_s0(config_get_stack((config *) c)));}
+int s0p(void *c) {return word_get_pos(stack_s0(config_get_stack((config *) c)));}
+int s0m(void *c) {return word_get_feats(stack_s0(config_get_stack((config *) c)));}
+int s0s(void *c) {return word_get_stag(stack_s0(config_get_stack((config *) c)));}
+int s0A(void *c) {return word_get_A(stack_s0(config_get_stack((config *) c)));}
+int s0B(void *c) {return word_get_B(stack_s0(config_get_stack((config *) c)));}
+int s0C(void *c) {return word_get_C(stack_s0(config_get_stack((config *) c)));}
+int s0D(void *c) {return word_get_D(stack_s0(config_get_stack((config *) c)));}
+int s0E(void *c) {return word_get_E(stack_s0(config_get_stack((config *) c)));}
+int s0F(void *c) {return word_get_F(stack_s0(config_get_stack((config *) c)));}
+int s0G(void *c) {return word_get_G(stack_s0(config_get_stack((config *) c)));}
+int s0H(void *c) {return word_get_H(stack_s0(config_get_stack((config *) c)));}
+int s0I(void *c) {return word_get_I(stack_s0(config_get_stack((config *) c)));}
+int s0J(void *c) {return word_get_J(stack_s0(config_get_stack((config *) c)));}
+int s0K(void *c) {return word_get_K(stack_s0(config_get_stack((config *) c)));}
+int s0L(void *c) {return word_get_L(stack_s0(config_get_stack((config *) c)));}
+int s0M(void *c) {return word_get_M(stack_s0(config_get_stack((config *) c)));}
+int s0N(void *c) {return word_get_N(stack_s0(config_get_stack((config *) c)));}
+int s0O(void *c) {return word_get_O(stack_s0(config_get_stack((config *) c)));}
+int s0P(void *c) {return word_get_P(stack_s0(config_get_stack((config *) c)));}
+int s0Q(void *c) {return word_get_Q(stack_s0(config_get_stack((config *) c)));}
+int s0R(void *c) {return word_get_R(stack_s0(config_get_stack((config *) c)));}
+int s0S(void *c) {return word_get_S(stack_s0(config_get_stack((config *) c)));}
+int s0T(void *c) {return word_get_T(stack_s0(config_get_stack((config *) c)));}
+int s0U(void *c) {return word_get_U(stack_s0(config_get_stack((config *) c)));}
+int s0V(void *c) {return word_get_V(stack_s0(config_get_stack((config *) c)));}
+int s0W(void *c) {return word_get_W(stack_s0(config_get_stack((config *) c)));}
+int s0X(void *c) {return word_get_X(stack_s0(config_get_stack((config *) c)));}
+int s0Y(void *c) {return word_get_Y(stack_s0(config_get_stack((config *) c)));}
+int s0Z(void *c) {return word_get_Z(stack_s0(config_get_stack((config *) c)));}
+
+int s0U1(void *c) {return word_get_U1(stack_s0(config_get_stack((config *) c)));}
+int s0sgn(void *c) {return word_get_signature(stack_s0(config_get_stack((config *) c)));}
+
+int s1g(void *c)  {return (word_get_gov(stack_s1(config_get_stack((config *) c))) == WORD_INVALID_GOV) ? 0 : 1;}
+int s1sf(void *c) {return word_get_label(stack_s1(config_get_stack((config *) c)));}
+
+int s1f(void *c) {return word_get_form(stack_s1(config_get_stack((config *) c)));}
+int s1l(void *c) {return word_get_lemma(stack_s1(config_get_stack((config *) c)));}
+int s1c(void *c) {return word_get_cpos(stack_s1(config_get_stack((config *) c)));}
+int s1p(void *c) {return word_get_pos(stack_s1(config_get_stack((config *) c)));}
+int s1m(void *c) {return word_get_feats(stack_s1(config_get_stack((config *) c)));}
+int s1s(void *c) {return word_get_stag(stack_s1(config_get_stack((config *) c)));}
+int s1A(void *c) {return word_get_A(stack_s1(config_get_stack((config *) c)));}
+int s1B(void *c) {return word_get_B(stack_s1(config_get_stack((config *) c)));}
+int s1C(void *c) {return word_get_C(stack_s1(config_get_stack((config *) c)));}
+int s1D(void *c) {return word_get_D(stack_s1(config_get_stack((config *) c)));}
+int s1E(void *c) {return word_get_E(stack_s1(config_get_stack((config *) c)));}
+int s1F(void *c) {return word_get_F(stack_s1(config_get_stack((config *) c)));}
+int s1G(void *c) {return word_get_G(stack_s1(config_get_stack((config *) c)));}
+int s1H(void *c) {return word_get_H(stack_s1(config_get_stack((config *) c)));}
+int s1I(void *c) {return word_get_I(stack_s1(config_get_stack((config *) c)));}
+int s1J(void *c) {return word_get_J(stack_s1(config_get_stack((config *) c)));}
+int s1K(void *c) {return word_get_K(stack_s1(config_get_stack((config *) c)));}
+int s1L(void *c) {return word_get_L(stack_s1(config_get_stack((config *) c)));}
+int s1M(void *c) {return word_get_M(stack_s1(config_get_stack((config *) c)));}
+int s1N(void *c) {return word_get_N(stack_s1(config_get_stack((config *) c)));}
+int s1O(void *c) {return word_get_O(stack_s1(config_get_stack((config *) c)));}
+int s1P(void *c) {return word_get_P(stack_s1(config_get_stack((config *) c)));}
+int s1Q(void *c) {return word_get_Q(stack_s1(config_get_stack((config *) c)));}
+int s1R(void *c) {return word_get_R(stack_s1(config_get_stack((config *) c)));}
+int s1S(void *c) {return word_get_S(stack_s1(config_get_stack((config *) c)));}
+int s1T(void *c) {return word_get_T(stack_s1(config_get_stack((config *) c)));}
+int s1U(void *c) {return word_get_U(stack_s1(config_get_stack((config *) c)));}
+int s1V(void *c) {return word_get_V(stack_s1(config_get_stack((config *) c)));}
+int s1W(void *c) {return word_get_W(stack_s1(config_get_stack((config *) c)));}
+int s1X(void *c) {return word_get_X(stack_s1(config_get_stack((config *) c)));}
+int s1Y(void *c) {return word_get_Y(stack_s1(config_get_stack((config *) c)));}
+int s1Z(void *c) {return word_get_Z(stack_s1(config_get_stack((config *) c)));}
+
+int s2f(void *c) {return word_get_form(stack_s2(config_get_stack((config *) c)));}
+int s2l(void *c) {return word_get_lemma(stack_s2(config_get_stack((config *) c)));}
+int s2c(void *c) {return word_get_cpos(stack_s2(config_get_stack((config *) c)));}
+int s2p(void *c) {return word_get_pos(stack_s2(config_get_stack((config *) c)));}
+int s2m(void *c) {return word_get_feats(stack_s2(config_get_stack((config *) c)));}
+int s2s(void *c) {return word_get_stag(stack_s2(config_get_stack((config *) c)));}
+int s2A(void *c) {return word_get_A(stack_s2(config_get_stack((config *) c)));}
+int s2B(void *c) {return word_get_B(stack_s2(config_get_stack((config *) c)));}
+int s2C(void *c) {return word_get_C(stack_s2(config_get_stack((config *) c)));}
+int s2D(void *c) {return word_get_D(stack_s2(config_get_stack((config *) c)));}
+int s2E(void *c) {return word_get_E(stack_s2(config_get_stack((config *) c)));}
+int s2F(void *c) {return word_get_F(stack_s2(config_get_stack((config *) c)));}
+int s2G(void *c) {return word_get_G(stack_s2(config_get_stack((config *) c)));}
+int s2H(void *c) {return word_get_H(stack_s2(config_get_stack((config *) c)));}
+int s2I(void *c) {return word_get_I(stack_s2(config_get_stack((config *) c)));}
+int s2J(void *c) {return word_get_J(stack_s2(config_get_stack((config *) c)));}
+int s2K(void *c) {return word_get_K(stack_s2(config_get_stack((config *) c)));}
+int s2L(void *c) {return word_get_L(stack_s2(config_get_stack((config *) c)));}
+int s2M(void *c) {return word_get_M(stack_s2(config_get_stack((config *) c)));}
+int s2N(void *c) {return word_get_N(stack_s2(config_get_stack((config *) c)));}
+int s2O(void *c) {return word_get_O(stack_s2(config_get_stack((config *) c)));}
+int s2P(void *c) {return word_get_P(stack_s2(config_get_stack((config *) c)));}
+int s2Q(void *c) {return word_get_Q(stack_s2(config_get_stack((config *) c)));}
+int s2R(void *c) {return word_get_R(stack_s2(config_get_stack((config *) c)));}
+int s2S(void *c) {return word_get_S(stack_s2(config_get_stack((config *) c)));}
+int s2T(void *c) {return word_get_T(stack_s2(config_get_stack((config *) c)));}
+int s2U(void *c) {return word_get_U(stack_s2(config_get_stack((config *) c)));}
+int s2V(void *c) {return word_get_V(stack_s2(config_get_stack((config *) c)));}
+int s2W(void *c) {return word_get_W(stack_s2(config_get_stack((config *) c)));}
+int s2X(void *c) {return word_get_X(stack_s2(config_get_stack((config *) c)));}
+int s2Y(void *c) {return word_get_Y(stack_s2(config_get_stack((config *) c)));}
+int s2Z(void *c) {return word_get_Z(stack_s2(config_get_stack((config *) c)));}
+
+int s3f(void *c) {return word_get_form(stack_s3(config_get_stack((config *) c)));}
+int s3l(void *c) {return word_get_lemma(stack_s3(config_get_stack((config *) c)));}
+int s3c(void *c) {return word_get_cpos(stack_s3(config_get_stack((config *) c)));}
+int s3p(void *c) {return word_get_pos(stack_s3(config_get_stack((config *) c)));}
+int s3m(void *c) {return word_get_feats(stack_s3(config_get_stack((config *) c)));}
+int s3s(void *c) {return word_get_stag(stack_s3(config_get_stack((config *) c)));}
+int s3A(void *c) {return word_get_A(stack_s3(config_get_stack((config *) c)));}
+int s3B(void *c) {return word_get_B(stack_s3(config_get_stack((config *) c)));}
+int s3C(void *c) {return word_get_C(stack_s3(config_get_stack((config *) c)));}
+int s3D(void *c) {return word_get_D(stack_s3(config_get_stack((config *) c)));}
+int s3E(void *c) {return word_get_E(stack_s3(config_get_stack((config *) c)));}
+int s3F(void *c) {return word_get_F(stack_s3(config_get_stack((config *) c)));}
+int s3G(void *c) {return word_get_G(stack_s3(config_get_stack((config *) c)));}
+int s3H(void *c) {return word_get_H(stack_s3(config_get_stack((config *) c)));}
+int s3I(void *c) {return word_get_I(stack_s3(config_get_stack((config *) c)));}
+int s3J(void *c) {return word_get_J(stack_s3(config_get_stack((config *) c)));}
+int s3K(void *c) {return word_get_K(stack_s3(config_get_stack((config *) c)));}
+int s3L(void *c) {return word_get_L(stack_s3(config_get_stack((config *) c)));}
+int s3M(void *c) {return word_get_M(stack_s3(config_get_stack((config *) c)));}
+int s3N(void *c) {return word_get_N(stack_s3(config_get_stack((config *) c)));}
+int s3O(void *c) {return word_get_O(stack_s3(config_get_stack((config *) c)));}
+int s3P(void *c) {return word_get_P(stack_s3(config_get_stack((config *) c)));}
+int s3Q(void *c) {return word_get_Q(stack_s3(config_get_stack((config *) c)));}
+int s3R(void *c) {return word_get_R(stack_s3(config_get_stack((config *) c)));}
+int s3S(void *c) {return word_get_S(stack_s3(config_get_stack((config *) c)));}
+int s3T(void *c) {return word_get_T(stack_s3(config_get_stack((config *) c)));}
+int s3U(void *c) {return word_get_U(stack_s3(config_get_stack((config *) c)));}
+int s3V(void *c) {return word_get_V(stack_s3(config_get_stack((config *) c)));}
+int s3W(void *c) {return word_get_W(stack_s3(config_get_stack((config *) c)));}
+int s3X(void *c) {return word_get_X(stack_s3(config_get_stack((config *) c)));}
+int s3Y(void *c) {return word_get_Y(stack_s3(config_get_stack((config *) c)));}
+int s3Z(void *c) {return word_get_Z(stack_s3(config_get_stack((config *) c)));}
 
 /* words in the buffer */
 
-int b0g(config *c) {return (word_get_gov(word_buffer_b0(config_get_buffer(c))) == WORD_INVALID_GOV) ? 0 : 1;}
-int b0sf(config *c) {return word_get_label(word_buffer_b0(config_get_buffer(c)));}
+int b0g(void *c) {return (word_get_gov(word_buffer_b0(config_get_buffer((config *) c))) == WORD_INVALID_GOV) ? 0 : 1;}
+int b0sf(void *c) {return word_get_label(word_buffer_b0(config_get_buffer((config *) c)));}
 
 
-int b0len(config *c) {
+int b0len(void *c) {
   int len = 0;
-  word *w = word_buffer_b0(config_get_buffer(c));
+  word *w = word_buffer_b0(config_get_buffer((config *) c));
   if(w->input)
     len = strlen(w->input);
   return (len > 7)? 7 : len;
@@ -166,262 +168,263 @@ int b0len(config *c) {
 
 
 
-int b0f(config *c) {return word_get_form(word_buffer_b0(config_get_buffer(c)));}
-int b0l(config *c) {return word_get_lemma(word_buffer_b0(config_get_buffer(c)));}
-int b0c(config *c) {return word_get_cpos(word_buffer_b0(config_get_buffer(c)));}
-int b0p(config *c) {return word_get_pos(word_buffer_b0(config_get_buffer(c)));}
-int b0m(config *c) {return word_get_feats(word_buffer_b0(config_get_buffer(c)));}
-int b0s(config *c) {return word_get_stag(word_buffer_b0(config_get_buffer(c)));}
-int b0A(config *c) {return word_get_A(word_buffer_b0(config_get_buffer(c)));}
-int b0B(config *c) {return word_get_B(word_buffer_b0(config_get_buffer(c)));}
-int b0C(config *c) {return word_get_C(word_buffer_b0(config_get_buffer(c)));}
-int b0D(config *c) {return word_get_D(word_buffer_b0(config_get_buffer(c)));}
-int b0E(config *c) {return word_get_E(word_buffer_b0(config_get_buffer(c)));}
-int b0F(config *c) {return word_get_F(word_buffer_b0(config_get_buffer(c)));}
-int b0G(config *c) {return word_get_G(word_buffer_b0(config_get_buffer(c)));}
-int b0H(config *c) {return word_get_H(word_buffer_b0(config_get_buffer(c)));}
-int b0I(config *c) {return word_get_I(word_buffer_b0(config_get_buffer(c)));}
-int b0J(config *c) {return word_get_J(word_buffer_b0(config_get_buffer(c)));}
-int b0K(config *c) {return word_get_K(word_buffer_b0(config_get_buffer(c)));}
-int b0L(config *c) {return word_get_L(word_buffer_b0(config_get_buffer(c)));}
-int b0M(config *c) {return word_get_M(word_buffer_b0(config_get_buffer(c)));}
-int b0N(config *c) {return word_get_N(word_buffer_b0(config_get_buffer(c)));}
-int b0O(config *c) {return word_get_O(word_buffer_b0(config_get_buffer(c)));}
-int b0P(config *c) {return word_get_P(word_buffer_b0(config_get_buffer(c)));}
-int b0Q(config *c) {return word_get_Q(word_buffer_b0(config_get_buffer(c)));}
-int b0R(config *c) {return word_get_R(word_buffer_b0(config_get_buffer(c)));}
-int b0S(config *c) {return word_get_S(word_buffer_b0(config_get_buffer(c)));}
-int b0T(config *c) {return word_get_T(word_buffer_b0(config_get_buffer(c)));}
-int b0U(config *c) {return word_get_U(word_buffer_b0(config_get_buffer(c)));}
-int b0V(config *c) {return word_get_V(word_buffer_b0(config_get_buffer(c)));}
-int b0W(config *c) {return word_get_W(word_buffer_b0(config_get_buffer(c)));}
-int b0X(config *c) {return word_get_X(word_buffer_b0(config_get_buffer(c)));}
-int b0Y(config *c) {return word_get_Y(word_buffer_b0(config_get_buffer(c)));}
-int b0Z(config *c) {return word_get_Z(word_buffer_b0(config_get_buffer(c)));}
-
-int b0U1(config *c) {return word_get_U1(word_buffer_b0(config_get_buffer(c)));}
-int b0sgn(config *c) {return word_get_signature(word_buffer_b0(config_get_buffer(c)));}
-
-int b1f(config *c) {return word_get_form(word_buffer_b1(config_get_buffer(c)));}
-int b1l(config *c) {return word_get_lemma(word_buffer_b1(config_get_buffer(c)));}
-int b1c(config *c) {return word_get_cpos(word_buffer_b1(config_get_buffer(c)));}
-int b1p(config *c) {return word_get_pos(word_buffer_b1(config_get_buffer(c)));}
-int b1m(config *c) {return word_get_feats(word_buffer_b1(config_get_buffer(c)));}
-int b1s(config *c) {return word_get_stag(word_buffer_b1(config_get_buffer(c)));}
-int b1A(config *c) {return word_get_A(word_buffer_b1(config_get_buffer(c)));}
-int b1B(config *c) {return word_get_B(word_buffer_b1(config_get_buffer(c)));}
-int b1C(config *c) {return word_get_C(word_buffer_b1(config_get_buffer(c)));}
-int b1D(config *c) {return word_get_D(word_buffer_b1(config_get_buffer(c)));}
-int b1E(config *c) {return word_get_E(word_buffer_b1(config_get_buffer(c)));}
-int b1F(config *c) {return word_get_F(word_buffer_b1(config_get_buffer(c)));}
-int b1G(config *c) {return word_get_G(word_buffer_b1(config_get_buffer(c)));}
-int b1H(config *c) {return word_get_H(word_buffer_b1(config_get_buffer(c)));}
-int b1I(config *c) {return word_get_I(word_buffer_b1(config_get_buffer(c)));}
-int b1J(config *c) {return word_get_J(word_buffer_b1(config_get_buffer(c)));}
-int b1K(config *c) {return word_get_K(word_buffer_b1(config_get_buffer(c)));}
-int b1L(config *c) {return word_get_L(word_buffer_b1(config_get_buffer(c)));}
-int b1M(config *c) {return word_get_M(word_buffer_b1(config_get_buffer(c)));}
-int b1N(config *c) {return word_get_N(word_buffer_b1(config_get_buffer(c)));}
-int b1O(config *c) {return word_get_O(word_buffer_b1(config_get_buffer(c)));}
-int b1P(config *c) {return word_get_P(word_buffer_b1(config_get_buffer(c)));}
-int b1Q(config *c) {return word_get_Q(word_buffer_b1(config_get_buffer(c)));}
-int b1R(config *c) {return word_get_R(word_buffer_b1(config_get_buffer(c)));}
-int b1S(config *c) {return word_get_S(word_buffer_b1(config_get_buffer(c)));}
-int b1T(config *c) {return word_get_T(word_buffer_b1(config_get_buffer(c)));}
-int b1U(config *c) {return word_get_U(word_buffer_b1(config_get_buffer(c)));}
-int b1V(config *c) {return word_get_V(word_buffer_b1(config_get_buffer(c)));}
-int b1W(config *c) {return word_get_W(word_buffer_b1(config_get_buffer(c)));}
-int b1X(config *c) {return word_get_X(word_buffer_b1(config_get_buffer(c)));}
-int b1Y(config *c) {return word_get_Y(word_buffer_b1(config_get_buffer(c)));}
-int b1Z(config *c) {return word_get_Z(word_buffer_b1(config_get_buffer(c)));}
-
-int b1U1(config *c) {return word_get_U1(word_buffer_b1(config_get_buffer(c)));}
-int b1sgn(config *c) {return word_get_signature(word_buffer_b1(config_get_buffer(c)));}
-
-int b2f(config *c) {return word_get_form(word_buffer_b2(config_get_buffer(c)));}
-int b2l(config *c) {return word_get_lemma(word_buffer_b2(config_get_buffer(c)));}
-int b2c(config *c) {return word_get_cpos(word_buffer_b2(config_get_buffer(c)));}
-int b2p(config *c) {return word_get_pos(word_buffer_b2(config_get_buffer(c)));}
-int b2m(config *c) {return word_get_feats(word_buffer_b2(config_get_buffer(c)));}
-int b2s(config *c) {return word_get_stag(word_buffer_b2(config_get_buffer(c)));}
-int b2A(config *c) {return word_get_A(word_buffer_b2(config_get_buffer(c)));}
-int b2B(config *c) {return word_get_B(word_buffer_b2(config_get_buffer(c)));}
-int b2C(config *c) {return word_get_C(word_buffer_b2(config_get_buffer(c)));}
-int b2D(config *c) {return word_get_D(word_buffer_b2(config_get_buffer(c)));}
-int b2E(config *c) {return word_get_E(word_buffer_b2(config_get_buffer(c)));}
-int b2F(config *c) {return word_get_F(word_buffer_b2(config_get_buffer(c)));}
-int b2G(config *c) {return word_get_G(word_buffer_b2(config_get_buffer(c)));}
-int b2H(config *c) {return word_get_H(word_buffer_b2(config_get_buffer(c)));}
-int b2I(config *c) {return word_get_I(word_buffer_b2(config_get_buffer(c)));}
-int b2J(config *c) {return word_get_J(word_buffer_b2(config_get_buffer(c)));}
-int b2K(config *c) {return word_get_K(word_buffer_b2(config_get_buffer(c)));}
-int b2L(config *c) {return word_get_L(word_buffer_b2(config_get_buffer(c)));}
-int b2M(config *c) {return word_get_M(word_buffer_b2(config_get_buffer(c)));}
-int b2N(config *c) {return word_get_N(word_buffer_b2(config_get_buffer(c)));}
-int b2O(config *c) {return word_get_O(word_buffer_b2(config_get_buffer(c)));}
-int b2P(config *c) {return word_get_P(word_buffer_b2(config_get_buffer(c)));}
-int b2Q(config *c) {return word_get_Q(word_buffer_b2(config_get_buffer(c)));}
-int b2R(config *c) {return word_get_R(word_buffer_b2(config_get_buffer(c)));}
-int b2S(config *c) {return word_get_S(word_buffer_b2(config_get_buffer(c)));}
-int b2T(config *c) {return word_get_T(word_buffer_b2(config_get_buffer(c)));}
-int b2U(config *c) {return word_get_U(word_buffer_b2(config_get_buffer(c)));}
-int b2V(config *c) {return word_get_V(word_buffer_b2(config_get_buffer(c)));}
-int b2W(config *c) {return word_get_W(word_buffer_b2(config_get_buffer(c)));}
-int b2X(config *c) {return word_get_X(word_buffer_b2(config_get_buffer(c)));}
-int b2Y(config *c) {return word_get_Y(word_buffer_b2(config_get_buffer(c)));}
-int b2Z(config *c) {return word_get_Z(word_buffer_b2(config_get_buffer(c)));}
-
-int b2U1(config *c) {return word_get_U1(word_buffer_b2(config_get_buffer(c)));}
-int b2sgn(config *c) {return word_get_signature(word_buffer_b2(config_get_buffer(c)));}
-
-
-
-int b3f(config *c) {return word_get_form(word_buffer_b3(config_get_buffer(c)));}
-int b3l(config *c) {return word_get_lemma(word_buffer_b3(config_get_buffer(c)));}
-int b3c(config *c) {return word_get_cpos(word_buffer_b3(config_get_buffer(c)));}
-int b3p(config *c) {return word_get_pos(word_buffer_b3(config_get_buffer(c)));}
-int b3m(config *c) {return word_get_feats(word_buffer_b3(config_get_buffer(c)));}
-int b3s(config *c) {return word_get_stag(word_buffer_b3(config_get_buffer(c)));}
-int b3A(config *c) {return word_get_A(word_buffer_b3(config_get_buffer(c)));}
-int b3B(config *c) {return word_get_B(word_buffer_b3(config_get_buffer(c)));}
-int b3C(config *c) {return word_get_C(word_buffer_b3(config_get_buffer(c)));}
-int b3D(config *c) {return word_get_D(word_buffer_b3(config_get_buffer(c)));}
-int b3E(config *c) {return word_get_E(word_buffer_b3(config_get_buffer(c)));}
-int b3F(config *c) {return word_get_F(word_buffer_b3(config_get_buffer(c)));}
-int b3G(config *c) {return word_get_G(word_buffer_b3(config_get_buffer(c)));}
-int b3H(config *c) {return word_get_H(word_buffer_b3(config_get_buffer(c)));}
-int b3I(config *c) {return word_get_I(word_buffer_b3(config_get_buffer(c)));}
-int b3J(config *c) {return word_get_J(word_buffer_b3(config_get_buffer(c)));}
-int b3K(config *c) {return word_get_K(word_buffer_b3(config_get_buffer(c)));}
-int b3L(config *c) {return word_get_L(word_buffer_b3(config_get_buffer(c)));}
-int b3M(config *c) {return word_get_M(word_buffer_b3(config_get_buffer(c)));}
-int b3N(config *c) {return word_get_N(word_buffer_b3(config_get_buffer(c)));}
-int b3O(config *c) {return word_get_O(word_buffer_b3(config_get_buffer(c)));}
-int b3P(config *c) {return word_get_P(word_buffer_b3(config_get_buffer(c)));}
-int b3Q(config *c) {return word_get_Q(word_buffer_b3(config_get_buffer(c)));}
-int b3R(config *c) {return word_get_R(word_buffer_b3(config_get_buffer(c)));}
-int b3S(config *c) {return word_get_S(word_buffer_b3(config_get_buffer(c)));}
-int b3T(config *c) {return word_get_T(word_buffer_b3(config_get_buffer(c)));}
-int b3U(config *c) {return word_get_U(word_buffer_b3(config_get_buffer(c)));}
-int b3V(config *c) {return word_get_V(word_buffer_b3(config_get_buffer(c)));}
-int b3W(config *c) {return word_get_W(word_buffer_b3(config_get_buffer(c)));}
-int b3X(config *c) {return word_get_X(word_buffer_b3(config_get_buffer(c)));}
-int b3Y(config *c) {return word_get_Y(word_buffer_b3(config_get_buffer(c)));}
-int b3Z(config *c) {return word_get_Z(word_buffer_b3(config_get_buffer(c)));}
-
-int bm1f(config *c) {return word_get_form(word_buffer_bm1(config_get_buffer(c)));}
-int bm1l(config *c) {return word_get_lemma(word_buffer_bm1(config_get_buffer(c)));}
-int bm1c(config *c) {return word_get_cpos(word_buffer_bm1(config_get_buffer(c)));}
-int bm1p(config *c) {return word_get_pos(word_buffer_bm1(config_get_buffer(c)));}
-int bm1m(config *c) {return word_get_feats(word_buffer_bm1(config_get_buffer(c)));}
-int bm1s(config *c) {return word_get_stag(word_buffer_bm1(config_get_buffer(c)));}
-int bm1A(config *c) {return word_get_A(word_buffer_bm1(config_get_buffer(c)));}
-int bm1B(config *c) {return word_get_B(word_buffer_bm1(config_get_buffer(c)));}
-int bm1C(config *c) {return word_get_C(word_buffer_bm1(config_get_buffer(c)));}
-int bm1D(config *c) {return word_get_D(word_buffer_bm1(config_get_buffer(c)));}
-int bm1E(config *c) {return word_get_E(word_buffer_bm1(config_get_buffer(c)));}
-int bm1F(config *c) {return word_get_F(word_buffer_bm1(config_get_buffer(c)));}
-int bm1G(config *c) {return word_get_G(word_buffer_bm1(config_get_buffer(c)));}
-int bm1H(config *c) {return word_get_H(word_buffer_bm1(config_get_buffer(c)));}
-int bm1I(config *c) {return word_get_I(word_buffer_bm1(config_get_buffer(c)));}
-int bm1J(config *c) {return word_get_J(word_buffer_bm1(config_get_buffer(c)));}
-int bm1K(config *c) {return word_get_K(word_buffer_bm1(config_get_buffer(c)));}
-int bm1L(config *c) {return word_get_L(word_buffer_bm1(config_get_buffer(c)));}
-int bm1M(config *c) {return word_get_M(word_buffer_bm1(config_get_buffer(c)));}
-int bm1N(config *c) {return word_get_N(word_buffer_bm1(config_get_buffer(c)));}
-int bm1O(config *c) {return word_get_O(word_buffer_bm1(config_get_buffer(c)));}
-int bm1P(config *c) {return word_get_P(word_buffer_bm1(config_get_buffer(c)));}
-int bm1Q(config *c) {return word_get_Q(word_buffer_bm1(config_get_buffer(c)));}
-int bm1R(config *c) {return word_get_R(word_buffer_bm1(config_get_buffer(c)));}
-int bm1S(config *c) {return word_get_S(word_buffer_bm1(config_get_buffer(c)));}
-int bm1T(config *c) {return word_get_T(word_buffer_bm1(config_get_buffer(c)));}
-int bm1U(config *c) {return word_get_U(word_buffer_bm1(config_get_buffer(c)));}
-int bm1V(config *c) {return word_get_V(word_buffer_bm1(config_get_buffer(c)));}
-int bm1W(config *c) {return word_get_W(word_buffer_bm1(config_get_buffer(c)));}
-int bm1X(config *c) {return word_get_X(word_buffer_bm1(config_get_buffer(c)));}
-int bm1Y(config *c) {return word_get_Y(word_buffer_bm1(config_get_buffer(c)));}
-int bm1Z(config *c) {return word_get_Z(word_buffer_bm1(config_get_buffer(c)));}
-
-int bm1U1(config *c) {return word_get_U1(word_buffer_bm1(config_get_buffer(c)));}
-int bm1sgn(config *c) {return word_get_signature(word_buffer_bm1(config_get_buffer(c)));}
-
-int bm2f(config *c) {return word_get_form(word_buffer_bm2(config_get_buffer(c)));}
-int bm2l(config *c) {return word_get_lemma(word_buffer_bm2(config_get_buffer(c)));}
-int bm2c(config *c) {return word_get_cpos(word_buffer_bm2(config_get_buffer(c)));}
-int bm2p(config *c) {return word_get_pos(word_buffer_bm2(config_get_buffer(c)));}
-int bm2m(config *c) {return word_get_feats(word_buffer_bm2(config_get_buffer(c)));}
-int bm2s(config *c) {return word_get_stag(word_buffer_bm2(config_get_buffer(c)));}
-int bm2A(config *c) {return word_get_A(word_buffer_bm2(config_get_buffer(c)));}
-int bm2B(config *c) {return word_get_B(word_buffer_bm2(config_get_buffer(c)));}
-int bm2C(config *c) {return word_get_C(word_buffer_bm2(config_get_buffer(c)));}
-int bm2D(config *c) {return word_get_D(word_buffer_bm2(config_get_buffer(c)));}
-int bm2E(config *c) {return word_get_E(word_buffer_bm2(config_get_buffer(c)));}
-int bm2F(config *c) {return word_get_F(word_buffer_bm2(config_get_buffer(c)));}
-int bm2G(config *c) {return word_get_G(word_buffer_bm2(config_get_buffer(c)));}
-int bm2H(config *c) {return word_get_H(word_buffer_bm2(config_get_buffer(c)));}
-int bm2I(config *c) {return word_get_I(word_buffer_bm2(config_get_buffer(c)));}
-int bm2J(config *c) {return word_get_J(word_buffer_bm2(config_get_buffer(c)));}
-int bm2K(config *c) {return word_get_K(word_buffer_bm2(config_get_buffer(c)));}
-int bm2L(config *c) {return word_get_L(word_buffer_bm2(config_get_buffer(c)));}
-int bm2M(config *c) {return word_get_M(word_buffer_bm2(config_get_buffer(c)));}
-int bm2N(config *c) {return word_get_N(word_buffer_bm2(config_get_buffer(c)));}
-int bm2O(config *c) {return word_get_O(word_buffer_bm2(config_get_buffer(c)));}
-int bm2P(config *c) {return word_get_P(word_buffer_bm2(config_get_buffer(c)));}
-int bm2Q(config *c) {return word_get_Q(word_buffer_bm2(config_get_buffer(c)));}
-int bm2R(config *c) {return word_get_R(word_buffer_bm2(config_get_buffer(c)));}
-int bm2S(config *c) {return word_get_S(word_buffer_bm2(config_get_buffer(c)));}
-int bm2T(config *c) {return word_get_T(word_buffer_bm2(config_get_buffer(c)));}
-int bm2U(config *c) {return word_get_U(word_buffer_bm2(config_get_buffer(c)));}
-int bm2V(config *c) {return word_get_V(word_buffer_bm2(config_get_buffer(c)));}
-int bm2W(config *c) {return word_get_W(word_buffer_bm2(config_get_buffer(c)));}
-int bm2X(config *c) {return word_get_X(word_buffer_bm2(config_get_buffer(c)));}
-int bm2Y(config *c) {return word_get_Y(word_buffer_bm2(config_get_buffer(c)));}
-int bm2Z(config *c) {return word_get_Z(word_buffer_bm2(config_get_buffer(c)));}
-
-int bm3f(config *c) {return word_get_form(word_buffer_bm3(config_get_buffer(c)));}
-int bm3l(config *c) {return word_get_lemma(word_buffer_bm3(config_get_buffer(c)));}
-int bm3c(config *c) {return word_get_cpos(word_buffer_bm3(config_get_buffer(c)));}
-int bm3p(config *c) {return word_get_pos(word_buffer_bm3(config_get_buffer(c)));}
-int bm3m(config *c) {return word_get_feats(word_buffer_bm3(config_get_buffer(c)));}
-int bm3s(config *c) {return word_get_stag(word_buffer_bm3(config_get_buffer(c)));}
-int bm3A(config *c) {return word_get_A(word_buffer_bm3(config_get_buffer(c)));}
-int bm3B(config *c) {return word_get_B(word_buffer_bm3(config_get_buffer(c)));}
-int bm3C(config *c) {return word_get_C(word_buffer_bm3(config_get_buffer(c)));}
-int bm3D(config *c) {return word_get_D(word_buffer_bm3(config_get_buffer(c)));}
-int bm3E(config *c) {return word_get_E(word_buffer_bm3(config_get_buffer(c)));}
-int bm3F(config *c) {return word_get_F(word_buffer_bm3(config_get_buffer(c)));}
-int bm3G(config *c) {return word_get_G(word_buffer_bm3(config_get_buffer(c)));}
-int bm3H(config *c) {return word_get_H(word_buffer_bm3(config_get_buffer(c)));}
-int bm3I(config *c) {return word_get_I(word_buffer_bm3(config_get_buffer(c)));}
-int bm3J(config *c) {return word_get_J(word_buffer_bm3(config_get_buffer(c)));}
-int bm3K(config *c) {return word_get_K(word_buffer_bm3(config_get_buffer(c)));}
-int bm3L(config *c) {return word_get_L(word_buffer_bm3(config_get_buffer(c)));}
-int bm3M(config *c) {return word_get_M(word_buffer_bm3(config_get_buffer(c)));}
-int bm3N(config *c) {return word_get_N(word_buffer_bm3(config_get_buffer(c)));}
-int bm3O(config *c) {return word_get_O(word_buffer_bm3(config_get_buffer(c)));}
-int bm3P(config *c) {return word_get_P(word_buffer_bm3(config_get_buffer(c)));}
-int bm3Q(config *c) {return word_get_Q(word_buffer_bm3(config_get_buffer(c)));}
-int bm3R(config *c) {return word_get_R(word_buffer_bm3(config_get_buffer(c)));}
-int bm3S(config *c) {return word_get_S(word_buffer_bm3(config_get_buffer(c)));}
-int bm3T(config *c) {return word_get_T(word_buffer_bm3(config_get_buffer(c)));}
-int bm3U(config *c) {return word_get_U(word_buffer_bm3(config_get_buffer(c)));}
-int bm3V(config *c) {return word_get_V(word_buffer_bm3(config_get_buffer(c)));}
-int bm3W(config *c) {return word_get_W(word_buffer_bm3(config_get_buffer(c)));}
-int bm3X(config *c) {return word_get_X(word_buffer_bm3(config_get_buffer(c)));}
-int bm3Y(config *c) {return word_get_Y(word_buffer_bm3(config_get_buffer(c)));}
-int bm3Z(config *c) {return word_get_Z(word_buffer_bm3(config_get_buffer(c)));}
+int b0f(void *c) {return word_get_form(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0l(void *c) {return word_get_lemma(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0c(void *c) {return word_get_cpos(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0p(void *c) {return word_get_pos(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0m(void *c) {return word_get_feats(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0s(void *c) {return word_get_stag(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0A(void *c) {return word_get_A(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0B(void *c) {return word_get_B(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0C(void *c) {return word_get_C(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0D(void *c) {return word_get_D(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0E(void *c) {return word_get_E(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0F(void *c) {return word_get_F(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0G(void *c) {return word_get_G(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0H(void *c) {return word_get_H(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0I(void *c) {return word_get_I(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0J(void *c) {return word_get_J(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0K(void *c) {return word_get_K(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0L(void *c) {return word_get_L(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0M(void *c) {return word_get_M(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0N(void *c) {return word_get_N(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0O(void *c) {return word_get_O(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0P(void *c) {return word_get_P(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0Q(void *c) {return word_get_Q(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0R(void *c) {return word_get_R(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0S(void *c) {return word_get_S(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0T(void *c) {return word_get_T(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0U(void *c) {return word_get_U(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0V(void *c) {return word_get_V(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0W(void *c) {return word_get_W(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0X(void *c) {return word_get_X(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0Y(void *c) {return word_get_Y(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0Z(void *c) {return word_get_Z(word_buffer_b0(config_get_buffer((config *) c)));}
+
+int b0U1(void *c) {return word_get_U1(word_buffer_b0(config_get_buffer((config *) c)));}
+int b0sgn(void *c) {return word_get_signature(word_buffer_b0(config_get_buffer((config *) c)));}
+
+int b1f(void *c) {return word_get_form(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1l(void *c) {return word_get_lemma(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1c(void *c) {return word_get_cpos(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1p(void *c) {return word_get_pos(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1m(void *c) {return word_get_feats(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1s(void *c) {return word_get_stag(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1A(void *c) {return word_get_A(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1B(void *c) {return word_get_B(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1C(void *c) {return word_get_C(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1D(void *c) {return word_get_D(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1E(void *c) {return word_get_E(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1F(void *c) {return word_get_F(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1G(void *c) {return word_get_G(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1H(void *c) {return word_get_H(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1I(void *c) {return word_get_I(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1J(void *c) {return word_get_J(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1K(void *c) {return word_get_K(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1L(void *c) {return word_get_L(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1M(void *c) {return word_get_M(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1N(void *c) {return word_get_N(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1O(void *c) {return word_get_O(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1P(void *c) {return word_get_P(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1Q(void *c) {return word_get_Q(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1R(void *c) {return word_get_R(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1S(void *c) {return word_get_S(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1T(void *c) {return word_get_T(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1U(void *c) {return word_get_U(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1V(void *c) {return word_get_V(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1W(void *c) {return word_get_W(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1X(void *c) {return word_get_X(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1Y(void *c) {return word_get_Y(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1Z(void *c) {return word_get_Z(word_buffer_b1(config_get_buffer((config *) c)));}
+
+int b1U1(void *c) {return word_get_U1(word_buffer_b1(config_get_buffer((config *) c)));}
+int b1sgn(void *c) {return word_get_signature(word_buffer_b1(config_get_buffer((config *) c)));}
+
+int b2f(void *c) {return word_get_form(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2l(void *c) {return word_get_lemma(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2c(void *c) {return word_get_cpos(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2p(void *c) {return word_get_pos(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2m(void *c) {return word_get_feats(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2s(void *c) {return word_get_stag(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2A(void *c) {return word_get_A(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2B(void *c) {return word_get_B(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2C(void *c) {return word_get_C(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2D(void *c) {return word_get_D(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2E(void *c) {return word_get_E(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2F(void *c) {return word_get_F(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2G(void *c) {return word_get_G(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2H(void *c) {return word_get_H(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2I(void *c) {return word_get_I(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2J(void *c) {return word_get_J(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2K(void *c) {return word_get_K(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2L(void *c) {return word_get_L(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2M(void *c) {return word_get_M(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2N(void *c) {return word_get_N(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2O(void *c) {return word_get_O(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2P(void *c) {return word_get_P(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2Q(void *c) {return word_get_Q(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2R(void *c) {return word_get_R(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2S(void *c) {return word_get_S(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2T(void *c) {return word_get_T(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2U(void *c) {return word_get_U(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2V(void *c) {return word_get_V(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2W(void *c) {return word_get_W(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2X(void *c) {return word_get_X(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2Y(void *c) {return word_get_Y(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2Z(void *c) {return word_get_Z(word_buffer_b2(config_get_buffer((config *) c)));}
+
+int b2U1(void *c) {return word_get_U1(word_buffer_b2(config_get_buffer((config *) c)));}
+int b2sgn(void *c) {return word_get_signature(word_buffer_b2(config_get_buffer((config *) c)));}
+
+
+
+int b3f(void *c) {return word_get_form(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3l(void *c) {return word_get_lemma(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3c(void *c) {return word_get_cpos(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3p(void *c) {return word_get_pos(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3m(void *c) {return word_get_feats(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3s(void *c) {return word_get_stag(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3A(void *c) {return word_get_A(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3B(void *c) {return word_get_B(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3C(void *c) {return word_get_C(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3D(void *c) {return word_get_D(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3E(void *c) {return word_get_E(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3F(void *c) {return word_get_F(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3G(void *c) {return word_get_G(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3H(void *c) {return word_get_H(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3I(void *c) {return word_get_I(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3J(void *c) {return word_get_J(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3K(void *c) {return word_get_K(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3L(void *c) {return word_get_L(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3M(void *c) {return word_get_M(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3N(void *c) {return word_get_N(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3O(void *c) {return word_get_O(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3P(void *c) {return word_get_P(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3Q(void *c) {return word_get_Q(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3R(void *c) {return word_get_R(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3S(void *c) {return word_get_S(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3T(void *c) {return word_get_T(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3U(void *c) {return word_get_U(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3V(void *c) {return word_get_V(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3W(void *c) {return word_get_W(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3X(void *c) {return word_get_X(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3Y(void *c) {return word_get_Y(word_buffer_b3(config_get_buffer((config *) c)));}
+int b3Z(void *c) {return word_get_Z(word_buffer_b3(config_get_buffer((config *) c)));}
+
+int bm1f(void *c) {return word_get_form(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1l(void *c) {return word_get_lemma(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1c(void *c) {return word_get_cpos(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1p(void *c) {return word_get_pos(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1m(void *c) {return word_get_feats(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1s(void *c) {return word_get_stag(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1A(void *c) {return word_get_A(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1B(void *c) {return word_get_B(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1C(void *c) {return word_get_C(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1D(void *c) {return word_get_D(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1E(void *c) {return word_get_E(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1F(void *c) {return word_get_F(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1G(void *c) {return word_get_G(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1H(void *c) {return word_get_H(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1I(void *c) {return word_get_I(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1J(void *c) {return word_get_J(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1K(void *c) {return word_get_K(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1L(void *c) {return word_get_L(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1M(void *c) {return word_get_M(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1N(void *c) {return word_get_N(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1O(void *c) {return word_get_O(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1P(void *c) {return word_get_P(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1Q(void *c) {return word_get_Q(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1R(void *c) {return word_get_R(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1S(void *c) {return word_get_S(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1T(void *c) {return word_get_T(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1U(void *c) {return word_get_U(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1V(void *c) {return word_get_V(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1W(void *c) {return word_get_W(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1X(void *c) {return word_get_X(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1Y(void *c) {return word_get_Y(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1Z(void *c) {return word_get_Z(word_buffer_bm1(config_get_buffer((config *) c)));}
+
+int bm1U1(void *c) {return word_get_U1(word_buffer_bm1(config_get_buffer((config *) c)));}
+int bm1sgn(void *c) {return word_get_signature(word_buffer_bm1(config_get_buffer((config *) c)));}
+
+int bm2f(void *c) {return word_get_form(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2l(void *c) {return word_get_lemma(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2c(void *c) {return word_get_cpos(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2p(void *c) {return word_get_pos(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2m(void *c) {return word_get_feats(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2s(void *c) {return word_get_stag(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2A(void *c) {return word_get_A(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2B(void *c) {return word_get_B(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2C(void *c) {return word_get_C(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2D(void *c) {return word_get_D(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2E(void *c) {return word_get_E(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2F(void *c) {return word_get_F(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2G(void *c) {return word_get_G(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2H(void *c) {return word_get_H(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2I(void *c) {return word_get_I(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2J(void *c) {return word_get_J(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2K(void *c) {return word_get_K(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2L(void *c) {return word_get_L(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2M(void *c) {return word_get_M(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2N(void *c) {return word_get_N(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2O(void *c) {return word_get_O(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2P(void *c) {return word_get_P(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2Q(void *c) {return word_get_Q(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2R(void *c) {return word_get_R(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2S(void *c) {return word_get_S(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2T(void *c) {return word_get_T(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2U(void *c) {return word_get_U(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2V(void *c) {return word_get_V(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2W(void *c) {return word_get_W(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2X(void *c) {return word_get_X(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2Y(void *c) {return word_get_Y(word_buffer_bm2(config_get_buffer((config *) c)));}
+int bm2Z(void *c) {return word_get_Z(word_buffer_bm2(config_get_buffer((config *) c)));}
+
+int bm3f(void *c) {return word_get_form(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3l(void *c) {return word_get_lemma(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3c(void *c) {return word_get_cpos(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3p(void *c) {return word_get_pos(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3m(void *c) {return word_get_feats(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3s(void *c) {return word_get_stag(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3A(void *c) {return word_get_A(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3B(void *c) {return word_get_B(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3C(void *c) {return word_get_C(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3D(void *c) {return word_get_D(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3E(void *c) {return word_get_E(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3F(void *c) {return word_get_F(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3G(void *c) {return word_get_G(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3H(void *c) {return word_get_H(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3I(void *c) {return word_get_I(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3J(void *c) {return word_get_J(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3K(void *c) {return word_get_K(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3L(void *c) {return word_get_L(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3M(void *c) {return word_get_M(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3N(void *c) {return word_get_N(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3O(void *c) {return word_get_O(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3P(void *c) {return word_get_P(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3Q(void *c) {return word_get_Q(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3R(void *c) {return word_get_R(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3S(void *c) {return word_get_S(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3T(void *c) {return word_get_T(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3U(void *c) {return word_get_U(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3V(void *c) {return word_get_V(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3W(void *c) {return word_get_W(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3X(void *c) {return word_get_X(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3Y(void *c) {return word_get_Y(word_buffer_bm3(config_get_buffer((config *) c)));}
+int bm3Z(void *c) {return word_get_Z(word_buffer_bm3(config_get_buffer((config *) c)));}
 
 /* structural features */
 
-int ldep_s0r(config *c){
-  word *gov = stack_s0(config_get_stack(c));
+int ldep_s0r(void *input){
+  config *c = input;
+  word *gov = stack_s0(config_get_stack((config *) c));
   int i;
   word *dep;
   int dist;
   
   if(gov){
     for(i=word_get_index(gov) - 1; i > 0  ; i--){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
       if(word_get_sent_seg(dep) == 1) return -1;
       dist = word_get_index(gov) - i;
       if(word_get_gov(dep) == dist){
@@ -432,15 +435,16 @@ int ldep_s0r(config *c){
   return -1;
 }
 
-int ldep_s1r(config *c){
-  word *gov = stack_s1(config_get_stack(c));
+int ldep_s1r(void *input){
+  config *c = input;
+  word *gov = stack_s1(config_get_stack((config *) c));
   int i;
   word *dep;
   int dist;
   
   if(gov){
     for(i=word_get_index(gov) - 1; i > 0  ; i--){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
       if(word_get_sent_seg(dep) == 1) return -1;
       dist = word_get_index(gov) - i;
       if(word_get_gov(dep) == dist){
@@ -451,15 +455,16 @@ int ldep_s1r(config *c){
   return -1;
 }
 
-int ldep_b0r(config *c){
-  word *gov = word_buffer_b0(config_get_buffer(c));
+int ldep_b0r(void *input){
+  config *c = input;
+  word *gov = word_buffer_b0(config_get_buffer((config *) c));
   int i;
   word *dep;
   int dist;
   
   if(gov){
     for(i=word_get_index(gov) - 1; i > 0  ; i--){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
       if(word_get_sent_seg(dep) == 1) return -1;
       dist = word_get_index(gov) - i;
       if(word_get_gov(dep) == dist){
@@ -470,16 +475,17 @@ int ldep_b0r(config *c){
   return -1;
 }
 
-int rdep_s0r(config *c){
-  word *gov = stack_s0(config_get_stack(c));
+int rdep_s0r(void *input){
+  config *c = input;
+  word *gov = stack_s0(config_get_stack((config *) c));
   int i;
   word *dep;
   int dist;
   
   if(gov){
-    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer(c))  ; i++){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
-      if(i >= word_get_index(word_buffer_b0(config_get_buffer(c)))) return -1;
+    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer((config *) c))  ; i++){
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
+      if(i >= word_get_index(word_buffer_b0(config_get_buffer((config *) c)))) return -1;
       dist = i - word_get_index(gov);
       if(word_get_gov(dep) == - dist){
 	return word_get_label(dep);
@@ -489,16 +495,17 @@ int rdep_s0r(config *c){
   return -1;
 }
 
-int rdep_s1r(config *c){
-  word *gov = stack_s1(config_get_stack(c));
+int rdep_s1r(void *input){
+  config *c = input;
+  word *gov = stack_s1(config_get_stack((config *) c));
   int i;
   word *dep;
   int dist;
   
   if(gov){
-    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer(c))  ; i++){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
-      if(i >= word_get_index(word_buffer_b0(config_get_buffer(c)))) return -1;
+    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer((config *) c))  ; i++){
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
+      if(i >= word_get_index(word_buffer_b0(config_get_buffer((config *) c)))) return -1;
       dist = i - word_get_index(gov);
       if(word_get_gov(dep) == - dist){
 	return word_get_label(dep);
@@ -508,16 +515,17 @@ int rdep_s1r(config *c){
   return -1;
 }
 
-int rdep_b0r(config *c){
-  word *gov = word_buffer_b0(config_get_buffer(c));
+int rdep_b0r(void *input){
+  config *c = input;
+  word *gov = word_buffer_b0(config_get_buffer((config *) c));
   int i;
   word *dep;
   int dist;
   
   if(gov){
-    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer(c))  ; i++){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
-      if(i >= word_get_index(word_buffer_b0(config_get_buffer(c)))) return -1;
+    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer((config *) c))  ; i++){
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
+      if(i >= word_get_index(word_buffer_b0(config_get_buffer((config *) c)))) return -1;
       dist = i - word_get_index(gov);
       if(word_get_gov(dep) == - dist){
 	return word_get_label(dep);
@@ -528,8 +536,9 @@ int rdep_b0r(config *c){
 }
 
 
-int ndep_b0(config *c){
-  word *gov = word_buffer_b0(config_get_buffer(c));
+int ndep_b0(void *input){
+  config *c = input;
+  word *gov = word_buffer_b0(config_get_buffer((config *) c));
   int i;
   int n = 0;
   word *dep;
@@ -537,15 +546,15 @@ int ndep_b0(config *c){
   
   if(gov){
     for(i=word_get_index(gov) - 1; i > 0  ; i--){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
       if(word_get_sent_seg(dep) == 1) break;
       dist = word_get_index(gov) - i;
       if(word_get_gov(dep) == dist)
 	n++;
     }
-    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer(c))  ; i++){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
-      if(i >= word_get_index(word_buffer_b0(config_get_buffer(c)))) break;
+    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer((config *) c))  ; i++){
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
+      if(i >= word_get_index(word_buffer_b0(config_get_buffer((config *) c)))) break;
       dist = i - word_get_index(gov);
       if(word_get_gov(dep) == - dist)
 	n++;
@@ -554,8 +563,9 @@ int ndep_b0(config *c){
   return (n > 6)? 6 : n;
 }
 
-int ndep_s0(config *c){
-  word *gov = stack_s0(config_get_stack(c));
+int ndep_s0(void *input){
+  config *c = input;
+  word *gov = stack_s0(config_get_stack((config *) c));
   int i;
   int n = 0;
   word *dep;
@@ -563,15 +573,15 @@ int ndep_s0(config *c){
   
   if(gov){
     for(i=word_get_index(gov) - 1; i > 0  ; i--){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
       if(word_get_sent_seg(dep) == 1) break;
       dist = word_get_index(gov) - i;
       if(word_get_gov(dep) == dist)
 	n++;
     }
-    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer(c))  ; i++){
-      dep = word_buffer_get_word_n(config_get_buffer(c), i);
-      if(i >= word_get_index(word_buffer_b0(config_get_buffer(c)))) break;
+    for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer((config *) c))  ; i++){
+      dep = word_buffer_get_word_n(config_get_buffer((config *) c), i);
+      if(i >= word_get_index(word_buffer_b0(config_get_buffer((config *) c)))) break;
       dist = i - word_get_index(gov);
       if(word_get_gov(dep) == - dist)
 	n++;
@@ -583,105 +593,564 @@ int ndep_s0(config *c){
 
 /* distance features */
 
-int dist_s0_b0(config *c){
+int dist_s0_b0(void *input){
+  config *c = input;
   int dist;
   
-  if(stack_is_empty(config_get_stack(c)) || word_buffer_is_empty(config_get_buffer(c)))
+  if(stack_is_empty(config_get_stack((config *) c)) || word_buffer_is_empty(config_get_buffer((config *) c)))
     return 0;
 
-  dist =  word_get_index(word_buffer_b0(config_get_buffer(c))) - word_get_index(stack_top(config_get_stack(c)));
+  dist =  word_get_index(word_buffer_b0(config_get_buffer((config *) c))) - word_get_index(stack_top(config_get_stack((config *) c)));
 
    return (abs(dist) > 6)? 6 : dist; 
 }
 
 /* configurational features */
-
-int sh(config *c) /* stack height */
+ /* stack height */
+int sh(void *input)
 {
-   return (config_get_stack(c)->top > 7)? 7 : config_get_stack(c)->top; 
-  /* return (stack_nbelem(config_get_stack(c)) > 0)? 1 : 0; */
-}
+config *c = input;
 
-int bh(config *c) /* buffer size */
+   return (config_get_stack((config *) c)->top > 7)? 7 : config_get_stack((config *) c)->top; 
+  /* return (stack_nbelem(config_get_stack((config *) c)) > 0)? 1 : 0; */
+}
+ /* buffer size */
+int bh(void *input)
 {
-  return (config_get_buffer(c)->size > 7)? 7 : config_get_buffer(c)->size;
+config *c = input;
+
+  return (config_get_buffer((config *) c)->size > 7)? 7 : config_get_buffer((config *) c)->size;
 }
 
 #if 0
-int dh(config *c) /* depset size */
+/* depset size */
+int dh(void *c) 
 {
  return (c->ds->length > 7)? 7 : c->ds->length; 
   /* return c->ds->length; */
 }
 #endif
-
-int t1(config *c) /* previous transition */
+/* previous transition */
+int t1(void *c) 
 {
-  mvt *m = mvt_stack_0(config_get_history(c));
+  mvt *m = mvt_stack_0(config_get_history((config *) c));
   return (m == NULL)? -1 : mvt_get_type(m); 
 }
-
-int t2(config *c) /* previous transition */
+/* previous transition */
+int t2(void *c) 
 {
-  mvt *m = mvt_stack_1(config_get_history(c));
+  mvt *m = mvt_stack_1(config_get_history((config *) c));
   return (m == NULL)? -1 : mvt_get_type(m); 
 }
-
-int t3(config *c) /* previous transition */
+/* previous transition */
+int t3(void *c) 
 {
-  mvt *m = mvt_stack_2(config_get_history(c));
+  mvt *m = mvt_stack_2(config_get_history((config *) c));
   return (m == NULL)? -1 : mvt_get_type(m); 
 }
-
-int t4(config *c) /* previous transition */
+/* previous transition */
+int t4(void *c) 
 {
-  mvt *m = mvt_stack_3(config_get_history(c));
+  mvt *m = mvt_stack_3(config_get_history((config *) c));
   return (m == NULL)? -1 : mvt_get_type(m); 
 }
 
 
 
-int mvt0(config *c)
+int mvt0(void *input)
 {
+  config *c = input;
   if(c->vcode_array == NULL) return -1;
   return c->vcode_array[0].class_code;
 }
 
-int mvt1(config *c)
+int mvt1(void *input)
 {
+  config *c = input;
   if(c->vcode_array == NULL) return -1;
   return c->vcode_array[1].class_code;
 }
 
-int delta1(config *c)
+int delta1(void *input)
 {
+  config *c = input;
   if(c->vcode_array == NULL) return -1;
   int delta = (int) (c->vcode_array[0].score - c->vcode_array[1].score); 
   return (delta >= 10)? 10: delta;
 }
 
-int mvt2(config *c)
+int mvt2(void *input)
 {
+  config *c = input;
   if(c->vcode_array == NULL) return -1;
   return c->vcode_array[2].class_code;
 }
 
-int delta2(config *c)
+int delta2(void *input)
 {
+  config *c = input;
   if(c->vcode_array == NULL) return -1;
   int delta = (int) (c->vcode_array[0].score - c->vcode_array[2].score);
   return (delta >= 10)? 10: delta;
 }
 
-int mvt3(config *c)
+int mvt3(void *input)
 {
+  config *c = input;
   if(c->vcode_array == NULL) return -1;
   return c->vcode_array[3].class_code;
 }
 
-int delta3(config *c)
+int delta3(void *input)
 {
+  config *c = input;
   if(c->vcode_array == NULL) return -1;
   int delta = (int) (c->vcode_array[0].score - c->vcode_array[3].score);
   return (delta >= 10)? 10: delta;
 }
+
+feat_lib *feat_lib_build(void)
+{
+  feat_lib *fl = feat_lib_new();
+  
+  feat_lib_add(fl, FEAT_TYPE_LABEL,  (char *)"s0sf", s0sf);
+  feat_lib_add(fl, FEAT_TYPE_INT,    (char *)"s0g", s0g);
+
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s0f", s0f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s0l", s0l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"s0c", s0c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"s0p", s0p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"s0m", s0m);
+  feat_lib_add(fl, FEAT_TYPE_STAG , (char *)"s0s", s0s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s0r", s0r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"s0A", s0A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"s0B", s0B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"s0C", s0C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"s0D", s0D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"s0E", s0E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"s0F", s0F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"s0G", s0G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"s0H", s0H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"s0I", s0I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"s0J", s0J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"s0K", s0K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"s0L", s0L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"s0M", s0M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"s0N", s0N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"s0O", s0O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"s0P", s0P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"s0Q", s0Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"s0R", s0R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"s0S", s0S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"s0T", s0T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"s0U", s0U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"s0V", s0V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"s0W", s0W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"s0X", s0X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s0Y", s0Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s0Z", s0Z);
+  feat_lib_add(fl, FEAT_TYPE_INT_3, (char *)"s0U1", s0U1);
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"s0sgn", s0sgn);
+  
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s1g", s1g);
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s1sf", s1sf);
+
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s1f", s1f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s1l", s1l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"s1c", s1c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"s1p", s1p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"s1m", s1m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"s1s", s1s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s1r", s1r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"s1A", s1A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"s1B", s1B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"s1C", s1C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"s1D", s1D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"s1E", s1E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"s1F", s1F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"s1G", s1G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"s1H", s1H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"s1I", s1I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"s1J", s1J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"s1K", s1K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"s1L", s1L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"s1M", s1M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"s1N", s1N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"s1O", s1O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"s1P", s1P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"s1Q", s1Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"s1R", s1R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"s1S", s1S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"s1T", s1T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"s1U", s1U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"s1V", s1V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"s1W", s1W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"s1X", s1X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s1Y", s1Y);
+  feat_lib_add(fl, FEAT_TYPE_Z,     (char *)"s1Z", s1Z);
+  
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s2f", s2f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s2l", s2l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"s2c", s2c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"s2p", s2p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"s2m", s2m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"s2s", s2s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s2r", s2r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"s2A", s2A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"s2B", s2B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"s2C", s2C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"s2D", s2D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"s2E", s2E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"s2F", s2F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"s2G", s2G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"s2H", s2H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"s2I", s2I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"s2J", s2J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"s2K", s2K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"s2L", s2L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"s2M", s2M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"s2N", s2N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"s2O", s2O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"s2P", s2P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"s2Q", s2Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"s2R", s2R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"s2S", s2S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"s2T", s2T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"s2U", s2U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"s2V", s2V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"s2W", s2W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"s2X", s2X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s2Y", s2Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s2Z", s2Z);
+  
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s3f", s3f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s3l", s3l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"s3c", s3c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"s3p", s3p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"s3m", s3m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"s3s", s3s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s3r", s3r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"s3A", s3A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"s3B", s3B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"s3C", s3C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"s3D", s3D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"s3E", s3E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"s3F", s3F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"s3G", s3G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"s3H", s3H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"s3I", s3I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"s3J", s3J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"s3K", s3K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"s3L", s3L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"s3M", s3M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"s3N", s3N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"s3O", s3O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"s3P", s3P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"s3Q", s3Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"s3R", s3R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"s3S", s3S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"s3T", s3T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"s3U", s3U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"s3V", s3V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"s3W", s3W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"s3X", s3X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s3Y", s3Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s3Z", s3Z);
+
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b0g", b0g);
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b0sf", b0sf);
+
+  feat_lib_add(fl, FEAT_TYPE_INT,  (char *)"b0len", b0len);
+
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b0f", b0f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"b0l", b0l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"b0c", b0c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"b0p", b0p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"b0m", b0m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"b0s", b0s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"b0r", b0r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"b0A", b0A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"b0B", b0B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"b0C", b0C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"b0D", b0D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"b0E", b0E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"b0F", b0F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"b0G", b0G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"b0H", b0H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"b0I", b0I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"b0J", b0J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"b0K", b0K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"b0L", b0L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"b0M", b0M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"b0N", b0N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"b0O", b0O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"b0P", b0P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"b0Q", b0Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"b0R", b0R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"b0S", b0S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"b0T", b0T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"b0U", b0U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"b0V", b0V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"b0W", b0W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"b0X", b0X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b0Y", b0Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b0Z", b0Z);
+  feat_lib_add(fl, FEAT_TYPE_INT_3, (char *)"b0U1", b0U1);
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"b0sgn", b0sgn);
+
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"bm1f", bm1f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"bm1l", bm1l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"bm1c", bm1c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"bm1p", bm1p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"bm1m", bm1m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"bm1s", bm1s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"bm1r", bm1r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"bm1A", bm1A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"bm1B", bm1B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"bm1C", bm1C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"bm1D", bm1D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"bm1E", bm1E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"bm1F", bm1F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"bm1G", bm1G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"bm1H", bm1H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"bm1I", bm1I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"bm1J", bm1J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"bm1K", bm1K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"bm1L", bm1L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"bm1M", bm1M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"bm1N", bm1N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"bm1O", bm1O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"bm1P", bm1P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"bm1Q", bm1Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"bm1R", bm1R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"bm1S", bm1S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"bm1T", bm1T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"bm1U", bm1U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"bm1V", bm1V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"bm1W", bm1W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"bm1X", bm1X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm1Y", bm1Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm1Z", bm1Z);
+  feat_lib_add(fl, FEAT_TYPE_INT_3,     (char *)"bm1U1", bm1U1);
+  feat_lib_add(fl, FEAT_TYPE_INT,     (char *)"bm1sgn", bm1sgn);
+
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"bm2f", bm2f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"bm2l", bm2l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"bm2c", bm2c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"bm2p", bm2p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"bm2m", bm2m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"bm2s", bm2s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"bm2r", bm2r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"bm2A", bm2A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"bm2B", bm2B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"bm2C", bm2C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"bm2D", bm2D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"bm2E", bm2E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"bm2F", bm2F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"bm2G", bm2G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"bm2H", bm2H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"bm2I", bm2I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"bm2J", bm2J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"bm2K", bm2K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"bm2L", bm2L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"bm2M", bm2M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"bm2N", bm2N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"bm2O", bm2O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"bm2P", bm2P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"bm2Q", bm2Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"bm2R", bm2R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"bm2S", bm2S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"bm2T", bm2T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"bm2U", bm2U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"bm2V", bm2V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"bm2W", bm2W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"bm2X", bm2X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm2Y", bm2Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm2Z", bm2Z);
+  /* feat_lib_add(fl, FEAT_TYPE_INT_3,     (char *)"bm2U1", bm2U1); */
+  /* feat_lib_add(fl, FEAT_TYPE_INT,     (char *)"bm2sgn", bm2sgn); */
+
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"bm3f", bm3f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"bm3l", bm3l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"bm3c", bm3c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"bm3p", bm3p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"bm3m", bm3m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"bm3s", bm3s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"bm3r", bm3r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"bm3A", bm3A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"bm3B", bm3B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"bm3C", bm3C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"bm3D", bm3D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"bm3E", bm3E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"bm3F", bm3F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"bm3G", bm3G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"bm3H", bm3H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"bm3I", bm3I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"bm3J", bm3J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"bm3K", bm3K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"bm3L", bm3L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"bm3M", bm3M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"bm3N", bm3N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"bm3O", bm3O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"bm3P", bm3P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"bm3Q", bm3Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"bm3R", bm3R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"bm3S", bm3S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"bm3T", bm3T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"bm3U", bm3U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"bm3V", bm3V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"bm3W", bm3W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"bm3X", bm3X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm3Y", bm3Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm3Z", bm3Z);
+  /* feat_lib_add(fl, FEAT_TYPE_INT_3,     (char *)"bm3U1", bm3U1); */
+  /* feat_lib_add(fl, FEAT_TYPE_INT,     (char *)"bm3sgn", bm3sgn); */
+  
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b1f", b1f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"b1l", b1l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"b1c", b1c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"b1p", b1p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"b1m", b1m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"b1s", b1s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"b1r", b1r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"b1A", b1A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"b1B", b1B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"b1C", b1C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"b1D", b1D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"b1E", b1E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"b1F", b1F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"b1G", b1G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"b1H", b1H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"b1I", b1I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"b1J", b1J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"b1K", b1K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"b1L", b1L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"b1M", b1M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"b1N", b1N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"b1O", b1O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"b1P", b1P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"b1Q", b1Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"b1R", b1R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"b1S", b1S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"b1T", b1T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"b1U", b1U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"b1V", b1V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"b1W", b1W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"b1X", b1X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b1Y", b1Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b1Z", b1Z);
+  feat_lib_add(fl, FEAT_TYPE_INT_3, (char *)"b1U1", b1U1);
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"b1sgn", b1sgn);
+  
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b2f", b2f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"b2l", b2l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"b2c", b2c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"b2p", b2p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"b2m", b2m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"b2s", b2s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"b2r", b2r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"b2A", b2A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"b2B", b2B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"b2C", b2C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"b2D", b2D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"b2E", b2E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"b2F", b2F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"b2G", b2G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"b2H", b2H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"b2I", b2I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"b2J", b2J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"b2K", b2K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"b2L", b2L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"b2M", b2M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"b2N", b2N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"b2O", b2O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"b2P", b2P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"b2Q", b2Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"b2R", b2R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"b2S", b2S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"b2T", b2T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"b2U", b2U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"b2V", b2V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"b2W", b2W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"b2X", b2X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b2Y", b2Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b2Z", b2Z);
+
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b2U1", b2U1);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b2sgn", b2sgn);
+
+  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b3f", b3f);
+  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"b3l", b3l);
+  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"b3c", b3c);
+  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"b3p", b3p);
+  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"b3m", b3m);
+  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"b3s", b3s);
+  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"b3r", b3r); */
+  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"b3A", b3A);
+  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"b3B", b3B);
+  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"b3C", b3C);
+  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"b3D", b3D);
+  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"b3E", b3E);
+  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"b3F", b3F);
+  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"b3G", b3G);
+  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"b3H", b3H);
+  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"b3I", b3I);
+  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"b3J", b3J);
+  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"b3K", b3K);
+  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"b3L", b3L);
+  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"b3M", b3M);
+  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"b3N", b3N);
+  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"b3O", b3O);
+  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"b3P", b3P);
+  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"b3Q", b3Q);
+  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"b3R", b3R);
+  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"b3S", b3S);
+  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"b3T", b3T);
+  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"b3U", b3U);
+  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"b3V", b3V);
+  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"b3W", b3W);
+  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"b3X", b3X);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b3Y", b3Y);
+  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b3Z", b3Z);
+
+  /* feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"gs0l", gs0l); */
+  /* feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"gs0p", gs0p); */
+  
+  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_s0r", ldep_s0r);
+  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_s0r", rdep_s0r);
+  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_s1r", ldep_s1r);
+  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_s1r", rdep_s1r);
+  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_b0r", ldep_b0r);
+  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_b0r", rdep_b0r);
+
+  feat_lib_add(fl, FEAT_TYPE_INT_7, (char *)"ndep_b0", ndep_b0);
+  feat_lib_add(fl, FEAT_TYPE_INT_7, (char *)"ndep_s0", ndep_s0);
+  
+  /* distance features */
+  feat_lib_add(fl, FEAT_TYPE_INT_7, (char *)"dist_s0_b0", dist_s0_b0);
+
+/* configurational features */
+
+  feat_lib_add(fl, FEAT_TYPE_INT_8, (char *)"sh", sh);
+  feat_lib_add(fl, FEAT_TYPE_INT_8, (char *)"bh", bh);
+  /* feat_lib_add(fl, FEAT_TYPE_INT_8, (char *)"dh", dh); */
+
+  feat_lib_add(fl, FEAT_TYPE_TRANS, (char *)"t1", t1);
+  feat_lib_add(fl, FEAT_TYPE_TRANS, (char *)"t2", t2);
+  feat_lib_add(fl, FEAT_TYPE_TRANS, (char *)"t3", t3);
+  feat_lib_add(fl, FEAT_TYPE_TRANS, (char *)"t4", t4);
+
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"mvt0", mvt0);
+
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"mvt1", mvt1);
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"delta1", delta1);
+
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"mvt2", mvt2);
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"delta2", delta2);
+
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"mvt3", mvt3);
+  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"delta3", delta3);
+
+  return fl;
+}
+
diff --git a/maca_trans_parser/src/feat_fct.h b/maca_trans_parser/src/feat_fct.h
index 6d8cca86fbe9df9d6fe7e1e55ec214c1758f5c60..8650e6bf303f20529c7ebd0efb1d91720dc3cdea 100644
--- a/maca_trans_parser/src/feat_fct.h
+++ b/maca_trans_parser/src/feat_fct.h
@@ -1,457 +1,456 @@
 #ifndef __FEATURES__
 #define __FEATURES__
 
-#include"config.h"
+#include "feat_lib.h"
+/* typedef int (*feat_fct) (config *c); */
+/* typedef int (*feat_fct) (void *c); */
 
-typedef int (*feat_fct) (config *c);
+feat_lib *feat_lib_build(void);
 
 /* word features */
-int s0g(config *c);
-int s0sf(config *c);
-
-int s0f(config *c);
-int s0l(config *c);
-int s0c(config *c);
-int s0p(config *c);
-int s0m(config *c);
-int s0s(config *c);
-int s0A(config *c);
-int s0B(config *c);
-int s0C(config *c);
-int s0D(config *c);
-int s0E(config *c);
-int s0F(config *c);
-int s0G(config *c);
-int s0H(config *c);
-int s0I(config *c);
-int s0J(config *c);
-int s0K(config *c);
-int s0L(config *c);
-int s0M(config *c);
-int s0N(config *c);
-int s0O(config *c);
-int s0P(config *c);
-int s0Q(config *c);
-int s0R(config *c);
-int s0S(config *c);
-int s0T(config *c);
-int s0U(config *c);
-int s0V(config *c);
-int s0W(config *c);
-int s0X(config *c);
-int s0Y(config *c);
-int s0Z(config *c);
-
-int s0U1(config *c);
-int s0sgn(config *c);
-
-int s0r(config *c);
-
-int s1g(config *c);
-int s1sf(config *c);
-
-
-int s1f(config *c);
-int s1l(config *c);
-int s1c(config *c);
-int s1p(config *c);
-int s1m(config *c);
-int s1s(config *c);
-int s1A(config *c);
-int s1B(config *c);
-int s1C(config *c);
-int s1D(config *c);
-int s1E(config *c);
-int s1F(config *c);
-int s1G(config *c);
-int s1H(config *c);
-int s1I(config *c);
-int s1J(config *c);
-int s1K(config *c);
-int s1L(config *c);
-int s1M(config *c);
-int s1N(config *c);
-int s1O(config *c);
-int s1P(config *c);
-int s1Q(config *c);
-int s1R(config *c);
-int s1S(config *c);
-int s1T(config *c);
-int s1U(config *c);
-int s1V(config *c);
-int s1W(config *c);
-int s1X(config *c);
-int s1Y(config *c);
-int s1Z(config *c);
-
-int s1r(config *c);
-
-int s2f(config *c);
-int s2l(config *c);
-int s2c(config *c);
-int s2p(config *c);
-int s2m(config *c);
-int s2s(config *c);
-int s2A(config *c);
-int s2B(config *c);
-int s2C(config *c);
-int s2D(config *c);
-int s2E(config *c);
-int s2F(config *c);
-int s2G(config *c);
-int s2H(config *c);
-int s2I(config *c);
-int s2J(config *c);
-int s2K(config *c);
-int s2L(config *c);
-int s2M(config *c);
-int s2N(config *c);
-int s2O(config *c);
-int s2P(config *c);
-int s2Q(config *c);
-int s2R(config *c);
-int s2S(config *c);
-int s2T(config *c);
-int s2U(config *c);
-int s2V(config *c);
-int s2W(config *c);
-int s2X(config *c);
-int s2Y(config *c);
-int s2Z(config *c);
-
-int s2r(config *c);
-
-int s3f(config *c);
-int s3l(config *c);
-int s3c(config *c);
-int s3p(config *c);
-int s3m(config *c);
-int s3s(config *c);
-int s3A(config *c);
-int s3B(config *c);
-int s3C(config *c);
-int s3D(config *c);
-int s3E(config *c);
-int s3F(config *c);
-int s3G(config *c);
-int s3H(config *c);
-int s3I(config *c);
-int s3J(config *c);
-int s3K(config *c);
-int s3L(config *c);
-int s3M(config *c);
-int s3N(config *c);
-int s3O(config *c);
-int s3P(config *c);
-int s3Q(config *c);
-int s3R(config *c);
-int s3S(config *c);
-int s3T(config *c);
-int s3U(config *c);
-int s3V(config *c);
-int s3W(config *c);
-int s3X(config *c);
-int s3Y(config *c);
-int s3Z(config *c);
-int s3r(config *c);
-
-int b0g(config *c);
-int b0sf(config *c);
-int b0len(config *c);
-
-
-int b0f(config *c);
-int b0l(config *c);
-int b0c(config *c);
-int b0p(config *c);
-int b0m(config *c);
-int b0s(config *c);
-int b0A(config *c);
-int b0B(config *c);
-int b0C(config *c);
-int b0D(config *c);
-int b0E(config *c);
-int b0F(config *c);
-int b0G(config *c);
-int b0H(config *c);
-int b0I(config *c);
-int b0J(config *c);
-int b0K(config *c);
-int b0L(config *c);
-int b0M(config *c);
-int b0N(config *c);
-int b0O(config *c);
-int b0P(config *c);
-int b0Q(config *c);
-int b0R(config *c);
-int b0S(config *c);
-int b0T(config *c);
-int b0U(config *c);
-int b0V(config *c);
-int b0W(config *c);
-int b0X(config *c);
-int b0Y(config *c);
-int b0Z(config *c);
-int b0r(config *c);
-
-int b0U1(config *c);
-int b0sgn(config *c);
-
-int b1f(config *c);
-int b1l(config *c);
-int b1c(config *c);
-int b1p(config *c);
-int b1m(config *c);
-int b1s(config *c);
-int b1A(config *c);
-int b1B(config *c);
-int b1C(config *c);
-int b1D(config *c);
-int b1E(config *c);
-int b1F(config *c);
-int b1G(config *c);
-int b1H(config *c);
-int b1I(config *c);
-int b1J(config *c);
-int b1K(config *c);
-int b1L(config *c);
-int b1M(config *c);
-int b1N(config *c);
-int b1O(config *c);
-int b1P(config *c);
-int b1Q(config *c);
-int b1R(config *c);
-int b1S(config *c);
-int b1T(config *c);
-int b1U(config *c);
-int b1V(config *c);
-int b1W(config *c);
-int b1X(config *c);
-int b1Y(config *c);
-int b1Z(config *c);
-
-int b1U1(config *c);
-int b1sgn(config *c);
-
-int b1r(config *c);
-
-
-
-int b2f(config *c);
-int b2l(config *c);
-int b2c(config *c);
-int b2p(config *c);
-int b2m(config *c);
-int b2s(config *c);
-int b2A(config *c);
-int b2B(config *c);
-int b2C(config *c);
-int b2D(config *c);
-int b2E(config *c);
-int b2F(config *c);
-int b2G(config *c);
-int b2H(config *c);
-int b2I(config *c);
-int b2J(config *c);
-int b2K(config *c);
-int b2L(config *c);
-int b2M(config *c);
-int b2N(config *c);
-int b2O(config *c);
-int b2P(config *c);
-int b2Q(config *c);
-int b2R(config *c);
-int b2S(config *c);
-int b2T(config *c);
-int b2U(config *c);
-int b2V(config *c);
-int b2W(config *c);
-int b2X(config *c);
-int b2Y(config *c);
-int b2Z(config *c);
-
-int b2r(config *c);
-
-int b2U1(config *c);
-int b2sgn(config *c);
-
-
-int b3f(config *c);
-int b3l(config *c);
-int b3c(config *c);
-int b3p(config *c);
-int b3m(config *c);
-int b3s(config *c);
-int b3A(config *c);
-int b3B(config *c);
-int b3C(config *c);
-int b3D(config *c);
-int b3E(config *c);
-int b3F(config *c);
-int b3G(config *c);
-int b3H(config *c);
-int b3I(config *c);
-int b3J(config *c);
-int b3K(config *c);
-int b3L(config *c);
-int b3M(config *c);
-int b3N(config *c);
-int b3O(config *c);
-int b3P(config *c);
-int b3Q(config *c);
-int b3R(config *c);
-int b3S(config *c);
-int b3T(config *c);
-int b3U(config *c);
-int b3V(config *c);
-int b3W(config *c);
-int b3X(config *c);
-int b3Y(config *c);
-int b3Z(config *c);
-
-int b3r(config *c);
-
-
-int bm1f(config *c);
-int bm1l(config *c);
-int bm1c(config *c);
-int bm1p(config *c);
-int bm1m(config *c);
-int bm1s(config *c);
-int bm1A(config *c);
-int bm1B(config *c);
-int bm1C(config *c);
-int bm1D(config *c);
-int bm1E(config *c);
-int bm1F(config *c);
-int bm1G(config *c);
-int bm1H(config *c);
-int bm1I(config *c);
-int bm1J(config *c);
-int bm1K(config *c);
-int bm1L(config *c);
-int bm1M(config *c);
-int bm1N(config *c);
-int bm1O(config *c);
-int bm1P(config *c);
-int bm1Q(config *c);
-int bm1R(config *c);
-int bm1S(config *c);
-int bm1T(config *c);
-int bm1U(config *c);
-int bm1V(config *c);
-int bm1W(config *c);
-int bm1X(config *c);
-int bm1Y(config *c);
-int bm1Z(config *c);
-
-int bm1U1(config *c);
-int bm1sgn(config *c);
-
-int bm2f(config *c);
-int bm2l(config *c);
-int bm2c(config *c);
-int bm2p(config *c);
-int bm2m(config *c);
-int bm2s(config *c);
-int bm2A(config *c);
-int bm2B(config *c);
-int bm2C(config *c);
-int bm2D(config *c);
-int bm2E(config *c);
-int bm2F(config *c);
-int bm2G(config *c);
-int bm2H(config *c);
-int bm2I(config *c);
-int bm2J(config *c);
-int bm2K(config *c);
-int bm2L(config *c);
-int bm2M(config *c);
-int bm2N(config *c);
-int bm2O(config *c);
-int bm2P(config *c);
-int bm2Q(config *c);
-int bm2R(config *c);
-int bm2S(config *c);
-int bm2T(config *c);
-int bm2U(config *c);
-int bm2V(config *c);
-int bm2W(config *c);
-int bm2X(config *c);
-int bm2Y(config *c);
-int bm2Z(config *c);
-
-int bm3f(config *c);
-int bm3l(config *c);
-int bm3c(config *c);
-int bm3p(config *c);
-int bm3m(config *c);
-int bm3s(config *c);
-int bm3A(config *c);
-int bm3B(config *c);
-int bm3C(config *c);
-int bm3D(config *c);
-int bm3E(config *c);
-int bm3F(config *c);
-int bm3G(config *c);
-int bm3H(config *c);
-int bm3I(config *c);
-int bm3J(config *c);
-int bm3K(config *c);
-int bm3L(config *c);
-int bm3M(config *c);
-int bm3N(config *c);
-int bm3O(config *c);
-int bm3P(config *c);
-int bm3Q(config *c);
-int bm3R(config *c);
-int bm3S(config *c);
-int bm3T(config *c);
-int bm3U(config *c);
-int bm3V(config *c);
-int bm3W(config *c);
-int bm3X(config *c);
-int bm3Y(config *c);
-int bm3Z(config *c);
+int s0g(void *input);
+int s0sf(void *input);
+
+int s0f(void *input);
+int s0l(void *input);
+int s0c(void *input);
+int s0p(void *input);
+int s0m(void *input);
+int s0s(void *input);
+int s0A(void *input);
+int s0B(void *input);
+int s0C(void *input);
+int s0D(void *input);
+int s0E(void *input);
+int s0F(void *input);
+int s0G(void *input);
+int s0H(void *input);
+int s0I(void *input);
+int s0J(void *input);
+int s0K(void *input);
+int s0L(void *input);
+int s0M(void *input);
+int s0N(void *input);
+int s0O(void *input);
+int s0P(void *input);
+int s0Q(void *input);
+int s0R(void *input);
+int s0S(void *input);
+int s0T(void *input);
+int s0U(void *input);
+int s0V(void *input);
+int s0W(void *input);
+int s0X(void *input);
+int s0Y(void *input);
+int s0Z(void *input);
+
+int s0U1(void *input);
+int s0sgn(void *input);
+
+int s0r(void *input);
+
+int s1g(void *input);
+int s1sf(void *input);
+
+
+int s1f(void *input);
+int s1l(void *input);
+int s1c(void *input);
+int s1p(void *input);
+int s1m(void *input);
+int s1s(void *input);
+int s1A(void *input);
+int s1B(void *input);
+int s1C(void *input);
+int s1D(void *input);
+int s1E(void *input);
+int s1F(void *input);
+int s1G(void *input);
+int s1H(void *input);
+int s1I(void *input);
+int s1J(void *input);
+int s1K(void *input);
+int s1L(void *input);
+int s1M(void *input);
+int s1N(void *input);
+int s1O(void *input);
+int s1P(void *input);
+int s1Q(void *input);
+int s1R(void *input);
+int s1S(void *input);
+int s1T(void *input);
+int s1U(void *input);
+int s1V(void *input);
+int s1W(void *input);
+int s1X(void *input);
+int s1Y(void *input);
+int s1Z(void *input);
+
+int s1r(void *input);
+
+int s2f(void *input);
+int s2l(void *input);
+int s2c(void *input);
+int s2p(void *input);
+int s2m(void *input);
+int s2s(void *input);
+int s2A(void *input);
+int s2B(void *input);
+int s2C(void *input);
+int s2D(void *input);
+int s2E(void *input);
+int s2F(void *input);
+int s2G(void *input);
+int s2H(void *input);
+int s2I(void *input);
+int s2J(void *input);
+int s2K(void *input);
+int s2L(void *input);
+int s2M(void *input);
+int s2N(void *input);
+int s2O(void *input);
+int s2P(void *input);
+int s2Q(void *input);
+int s2R(void *input);
+int s2S(void *input);
+int s2T(void *input);
+int s2U(void *input);
+int s2V(void *input);
+int s2W(void *input);
+int s2X(void *input);
+int s2Y(void *input);
+int s2Z(void *input);
+
+int s2r(void *input);
+
+int s3f(void *input);
+int s3l(void *input);
+int s3c(void *input);
+int s3p(void *input);
+int s3m(void *input);
+int s3s(void *input);
+int s3A(void *input);
+int s3B(void *input);
+int s3C(void *input);
+int s3D(void *input);
+int s3E(void *input);
+int s3F(void *input);
+int s3G(void *input);
+int s3H(void *input);
+int s3I(void *input);
+int s3J(void *input);
+int s3K(void *input);
+int s3L(void *input);
+int s3M(void *input);
+int s3N(void *input);
+int s3O(void *input);
+int s3P(void *input);
+int s3Q(void *input);
+int s3R(void *input);
+int s3S(void *input);
+int s3T(void *input);
+int s3U(void *input);
+int s3V(void *input);
+int s3W(void *input);
+int s3X(void *input);
+int s3Y(void *input);
+int s3Z(void *input);
+int s3r(void *input);
+
+int b0g(void *input);
+int b0sf(void *input);
+int b0len(void *input);
+
+
+int b0f(void *input);
+int b0l(void *input);
+int b0c(void *input);
+int b0p(void *input);
+int b0m(void *input);
+int b0s(void *input);
+int b0A(void *input);
+int b0B(void *input);
+int b0C(void *input);
+int b0D(void *input);
+int b0E(void *input);
+int b0F(void *input);
+int b0G(void *input);
+int b0H(void *input);
+int b0I(void *input);
+int b0J(void *input);
+int b0K(void *input);
+int b0L(void *input);
+int b0M(void *input);
+int b0N(void *input);
+int b0O(void *input);
+int b0P(void *input);
+int b0Q(void *input);
+int b0R(void *input);
+int b0S(void *input);
+int b0T(void *input);
+int b0U(void *input);
+int b0V(void *input);
+int b0W(void *input);
+int b0X(void *input);
+int b0Y(void *input);
+int b0Z(void *input);
+int b0r(void *input);
+
+int b0U1(void *input);
+int b0sgn(void *input);
+
+int b1f(void *input);
+int b1l(void *input);
+int b1c(void *input);
+int b1p(void *input);
+int b1m(void *input);
+int b1s(void *input);
+int b1A(void *input);
+int b1B(void *input);
+int b1C(void *input);
+int b1D(void *input);
+int b1E(void *input);
+int b1F(void *input);
+int b1G(void *input);
+int b1H(void *input);
+int b1I(void *input);
+int b1J(void *input);
+int b1K(void *input);
+int b1L(void *input);
+int b1M(void *input);
+int b1N(void *input);
+int b1O(void *input);
+int b1P(void *input);
+int b1Q(void *input);
+int b1R(void *input);
+int b1S(void *input);
+int b1T(void *input);
+int b1U(void *input);
+int b1V(void *input);
+int b1W(void *input);
+int b1X(void *input);
+int b1Y(void *input);
+int b1Z(void *input);
+
+int b1U1(void *input);
+int b1sgn(void *input);
+
+int b1r(void *input);
+
+
+
+int b2f(void *input);
+int b2l(void *input);
+int b2c(void *input);
+int b2p(void *input);
+int b2m(void *input);
+int b2s(void *input);
+int b2A(void *input);
+int b2B(void *input);
+int b2C(void *input);
+int b2D(void *input);
+int b2E(void *input);
+int b2F(void *input);
+int b2G(void *input);
+int b2H(void *input);
+int b2I(void *input);
+int b2J(void *input);
+int b2K(void *input);
+int b2L(void *input);
+int b2M(void *input);
+int b2N(void *input);
+int b2O(void *input);
+int b2P(void *input);
+int b2Q(void *input);
+int b2R(void *input);
+int b2S(void *input);
+int b2T(void *input);
+int b2U(void *input);
+int b2V(void *input);
+int b2W(void *input);
+int b2X(void *input);
+int b2Y(void *input);
+int b2Z(void *input);
+
+int b2r(void *input);
+
+int b2U1(void *input);
+int b2sgn(void *input);
+
+
+int b3f(void *input);
+int b3l(void *input);
+int b3c(void *input);
+int b3p(void *input);
+int b3m(void *input);
+int b3s(void *input);
+int b3A(void *input);
+int b3B(void *input);
+int b3C(void *input);
+int b3D(void *input);
+int b3E(void *input);
+int b3F(void *input);
+int b3G(void *input);
+int b3H(void *input);
+int b3I(void *input);
+int b3J(void *input);
+int b3K(void *input);
+int b3L(void *input);
+int b3M(void *input);
+int b3N(void *input);
+int b3O(void *input);
+int b3P(void *input);
+int b3Q(void *input);
+int b3R(void *input);
+int b3S(void *input);
+int b3T(void *input);
+int b3U(void *input);
+int b3V(void *input);
+int b3W(void *input);
+int b3X(void *input);
+int b3Y(void *input);
+int b3Z(void *input);
+
+int b3r(void *input);
+
+
+int bm1f(void *input);
+int bm1l(void *input);
+int bm1c(void *input);
+int bm1p(void *input);
+int bm1m(void *input);
+int bm1s(void *input);
+int bm1A(void *input);
+int bm1B(void *input);
+int bm1C(void *input);
+int bm1D(void *input);
+int bm1E(void *input);
+int bm1F(void *input);
+int bm1G(void *input);
+int bm1H(void *input);
+int bm1I(void *input);
+int bm1J(void *input);
+int bm1K(void *input);
+int bm1L(void *input);
+int bm1M(void *input);
+int bm1N(void *input);
+int bm1O(void *input);
+int bm1P(void *input);
+int bm1Q(void *input);
+int bm1R(void *input);
+int bm1S(void *input);
+int bm1T(void *input);
+int bm1U(void *input);
+int bm1V(void *input);
+int bm1W(void *input);
+int bm1X(void *input);
+int bm1Y(void *input);
+int bm1Z(void *input);
+
+int bm1U1(void *input);
+int bm1sgn(void *input);
+
+int bm2f(void *input);
+int bm2l(void *input);
+int bm2c(void *input);
+int bm2p(void *input);
+int bm2m(void *input);
+int bm2s(void *input);
+int bm2A(void *input);
+int bm2B(void *input);
+int bm2C(void *input);
+int bm2D(void *input);
+int bm2E(void *input);
+int bm2F(void *input);
+int bm2G(void *input);
+int bm2H(void *input);
+int bm2I(void *input);
+int bm2J(void *input);
+int bm2K(void *input);
+int bm2L(void *input);
+int bm2M(void *input);
+int bm2N(void *input);
+int bm2O(void *input);
+int bm2P(void *input);
+int bm2Q(void *input);
+int bm2R(void *input);
+int bm2S(void *input);
+int bm2T(void *input);
+int bm2U(void *input);
+int bm2V(void *input);
+int bm2W(void *input);
+int bm2X(void *input);
+int bm2Y(void *input);
+int bm2Z(void *input);
+
+int bm3f(void *input);
+int bm3l(void *input);
+int bm3c(void *input);
+int bm3p(void *input);
+int bm3m(void *input);
+int bm3s(void *input);
+int bm3A(void *input);
+int bm3B(void *input);
+int bm3C(void *input);
+int bm3D(void *input);
+int bm3E(void *input);
+int bm3F(void *input);
+int bm3G(void *input);
+int bm3H(void *input);
+int bm3I(void *input);
+int bm3J(void *input);
+int bm3K(void *input);
+int bm3L(void *input);
+int bm3M(void *input);
+int bm3N(void *input);
+int bm3O(void *input);
+int bm3P(void *input);
+int bm3Q(void *input);
+int bm3R(void *input);
+int bm3S(void *input);
+int bm3T(void *input);
+int bm3U(void *input);
+int bm3V(void *input);
+int bm3W(void *input);
+int bm3X(void *input);
+int bm3Y(void *input);
+int bm3Z(void *input);
 
 /* structural features */
 
-int gs0l(config *c);
-int gs0p(config *c);
+int gs0l(void *input);
+int gs0p(void *input);
 
-int ldep_s0r(config *c);
-int rdep_s0r(config *c);
-int ldep_s1r(config *c);
-int rdep_s1r(config *c);
-int ndep_b0(config *c);
-int ndep_s0(config *c);
-int ldep_b0r(config *c);
-int rdep_b0r(config *c);
+int ldep_s0r(void *input);
+int rdep_s0r(void *input);
+int ldep_s1r(void *input);
+int rdep_s1r(void *input);
+int ndep_b0(void *input);
+int ndep_s0(void *input);
+int ldep_b0r(void *input);
+int rdep_b0r(void *input);
 
 /* distance features */
 
-int dist_s0_b0(config *c);
+int dist_s0_b0(void *input);
 
 /* configurational features */
 
-int sh(config *c);
-int bh(config *c);
-/* int dh(config *c); */
-
-int t1(config *c);
-int t2(config *c);
-int t3(config *c);
-int t4(config *c);
-
-
-
-
-int mvt0(config *c);
-int mvt1(config *c);
-int delta1(config *c);
-int mvt2(config *c);
-int delta2(config *c);
-int mvt3(config *c);
-int delta3(config *c);
+int sh(void *input);
+int bh(void *input);
+/* int dh(void *input); */
+
+int t1(void *input);
+int t2(void *input);
+int t3(void *input);
+int t4(void *input);
+
+int mvt0(void *input);
+int mvt1(void *input);
+int delta1(void *input);
+int mvt2(void *input);
+int delta2(void *input);
+int mvt3(void *input);
+int delta3(void *input);
 
 #endif
diff --git a/maca_trans_parser/src/feat_lib.c b/maca_trans_parser/src/feat_lib.c
deleted file mode 100644
index 50da18f19028c829fe044b7ba51df7560bf1b582..0000000000000000000000000000000000000000
--- a/maca_trans_parser/src/feat_lib.c
+++ /dev/null
@@ -1,487 +0,0 @@
-#include "feat_lib.h"
-#include "feat_types.h"
-#include "feat_fct.h"
-
-void feat_lib_add(feat_lib *fl, int feature_type, char *feature_name, feat_fct feature_fct)
-{
-  int feature_nb = dico_add(fl->d_features, feature_name); 
-  fl->array = (simple_feat_desc **)realloc(fl->array, (feature_nb + 1) * sizeof(simple_feat_desc *));
-  fl->array[feature_nb] = simple_feat_desc_new(feature_name, feature_type, feature_fct);
-  fl->nbelem = feature_nb+1;
-}
-
-simple_feat_desc *feat_lib_get_simple_feat_desc(feat_lib *fl, char *feat_name)
-{
-  int index = dico_string2int(fl->d_features, feat_name);
-  if(index == -1){
-    fprintf(stderr, "features function %s unknown\n", feat_name);
-    return NULL;
-  }
-  return fl->array[index];
-}
-
-feat_lib *feat_lib_new(void)
-{
-  feat_lib *fl = (feat_lib *)memalloc(sizeof(feat_lib));
-  fl->nbelem = 0;
-  fl->d_features = dico_new(NULL, 100);
-  fl->array = NULL;
-  return fl;
-}
-
-void feat_lib_free(feat_lib *fl) {
-
-    for(int i=0; i < fl->nbelem; ++i) {
-	simple_feat_desc_free(fl->array[i]);
-    }
-    dico_free(fl->d_features);
-    free(fl->array);
-    free(fl); // ne devrait pas etre en commentaire
-
-}
-
-feat_lib *feat_lib_build(void)
-{
-  feat_lib *fl = feat_lib_new();
-  
-  feat_lib_add(fl, FEAT_TYPE_LABEL,  (char *)"s0sf", s0sf);
-  feat_lib_add(fl, FEAT_TYPE_INT,    (char *)"s0g", s0g);
-
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s0f", s0f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s0l", s0l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"s0c", s0c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"s0p", s0p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"s0m", s0m);
-  feat_lib_add(fl, FEAT_TYPE_STAG , (char *)"s0s", s0s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s0r", s0r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"s0A", s0A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"s0B", s0B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"s0C", s0C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"s0D", s0D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"s0E", s0E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"s0F", s0F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"s0G", s0G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"s0H", s0H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"s0I", s0I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"s0J", s0J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"s0K", s0K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"s0L", s0L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"s0M", s0M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"s0N", s0N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"s0O", s0O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"s0P", s0P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"s0Q", s0Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"s0R", s0R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"s0S", s0S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"s0T", s0T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"s0U", s0U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"s0V", s0V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"s0W", s0W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"s0X", s0X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s0Y", s0Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s0Z", s0Z);
-  feat_lib_add(fl, FEAT_TYPE_INT_3, (char *)"s0U1", s0U1);
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"s0sgn", s0sgn);
-  
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s1g", s1g);
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s1sf", s1sf);
-
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s1f", s1f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s1l", s1l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"s1c", s1c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"s1p", s1p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"s1m", s1m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"s1s", s1s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s1r", s1r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"s1A", s1A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"s1B", s1B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"s1C", s1C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"s1D", s1D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"s1E", s1E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"s1F", s1F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"s1G", s1G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"s1H", s1H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"s1I", s1I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"s1J", s1J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"s1K", s1K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"s1L", s1L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"s1M", s1M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"s1N", s1N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"s1O", s1O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"s1P", s1P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"s1Q", s1Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"s1R", s1R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"s1S", s1S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"s1T", s1T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"s1U", s1U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"s1V", s1V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"s1W", s1W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"s1X", s1X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s1Y", s1Y);
-  feat_lib_add(fl, FEAT_TYPE_Z,     (char *)"s1Z", s1Z);
-  
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s2f", s2f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s2l", s2l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"s2c", s2c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"s2p", s2p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"s2m", s2m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"s2s", s2s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s2r", s2r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"s2A", s2A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"s2B", s2B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"s2C", s2C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"s2D", s2D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"s2E", s2E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"s2F", s2F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"s2G", s2G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"s2H", s2H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"s2I", s2I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"s2J", s2J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"s2K", s2K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"s2L", s2L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"s2M", s2M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"s2N", s2N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"s2O", s2O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"s2P", s2P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"s2Q", s2Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"s2R", s2R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"s2S", s2S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"s2T", s2T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"s2U", s2U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"s2V", s2V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"s2W", s2W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"s2X", s2X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s2Y", s2Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s2Z", s2Z);
-  
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"s3f", s3f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s3l", s3l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"s3c", s3c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"s3p", s3p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"s3m", s3m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"s3s", s3s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s3r", s3r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"s3A", s3A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"s3B", s3B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"s3C", s3C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"s3D", s3D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"s3E", s3E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"s3F", s3F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"s3G", s3G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"s3H", s3H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"s3I", s3I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"s3J", s3J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"s3K", s3K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"s3L", s3L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"s3M", s3M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"s3N", s3N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"s3O", s3O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"s3P", s3P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"s3Q", s3Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"s3R", s3R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"s3S", s3S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"s3T", s3T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"s3U", s3U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"s3V", s3V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"s3W", s3W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"s3X", s3X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s3Y", s3Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"s3Z", s3Z);
-
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b0g", b0g);
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b0sf", b0sf);
-
-  feat_lib_add(fl, FEAT_TYPE_INT,  (char *)"b0len", b0len);
-
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b0f", b0f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"b0l", b0l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"b0c", b0c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"b0p", b0p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"b0m", b0m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"b0s", b0s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"b0r", b0r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"b0A", b0A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"b0B", b0B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"b0C", b0C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"b0D", b0D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"b0E", b0E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"b0F", b0F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"b0G", b0G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"b0H", b0H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"b0I", b0I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"b0J", b0J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"b0K", b0K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"b0L", b0L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"b0M", b0M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"b0N", b0N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"b0O", b0O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"b0P", b0P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"b0Q", b0Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"b0R", b0R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"b0S", b0S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"b0T", b0T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"b0U", b0U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"b0V", b0V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"b0W", b0W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"b0X", b0X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b0Y", b0Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b0Z", b0Z);
-  feat_lib_add(fl, FEAT_TYPE_INT_3, (char *)"b0U1", b0U1);
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"b0sgn", b0sgn);
-
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"bm1f", bm1f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"bm1l", bm1l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"bm1c", bm1c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"bm1p", bm1p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"bm1m", bm1m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"bm1s", bm1s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"bm1r", bm1r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"bm1A", bm1A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"bm1B", bm1B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"bm1C", bm1C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"bm1D", bm1D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"bm1E", bm1E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"bm1F", bm1F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"bm1G", bm1G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"bm1H", bm1H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"bm1I", bm1I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"bm1J", bm1J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"bm1K", bm1K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"bm1L", bm1L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"bm1M", bm1M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"bm1N", bm1N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"bm1O", bm1O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"bm1P", bm1P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"bm1Q", bm1Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"bm1R", bm1R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"bm1S", bm1S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"bm1T", bm1T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"bm1U", bm1U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"bm1V", bm1V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"bm1W", bm1W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"bm1X", bm1X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm1Y", bm1Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm1Z", bm1Z);
-  feat_lib_add(fl, FEAT_TYPE_INT_3,     (char *)"bm1U1", bm1U1);
-  feat_lib_add(fl, FEAT_TYPE_INT,     (char *)"bm1sgn", bm1sgn);
-
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"bm2f", bm2f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"bm2l", bm2l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"bm2c", bm2c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"bm2p", bm2p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"bm2m", bm2m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"bm2s", bm2s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"bm2r", bm2r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"bm2A", bm2A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"bm2B", bm2B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"bm2C", bm2C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"bm2D", bm2D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"bm2E", bm2E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"bm2F", bm2F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"bm2G", bm2G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"bm2H", bm2H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"bm2I", bm2I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"bm2J", bm2J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"bm2K", bm2K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"bm2L", bm2L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"bm2M", bm2M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"bm2N", bm2N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"bm2O", bm2O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"bm2P", bm2P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"bm2Q", bm2Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"bm2R", bm2R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"bm2S", bm2S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"bm2T", bm2T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"bm2U", bm2U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"bm2V", bm2V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"bm2W", bm2W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"bm2X", bm2X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm2Y", bm2Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm2Z", bm2Z);
-  /* feat_lib_add(fl, FEAT_TYPE_INT_3,     (char *)"bm2U1", bm2U1); */
-  /* feat_lib_add(fl, FEAT_TYPE_INT,     (char *)"bm2sgn", bm2sgn); */
-
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"bm3f", bm3f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"bm3l", bm3l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"bm3c", bm3c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"bm3p", bm3p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"bm3m", bm3m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"bm3s", bm3s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"bm3r", bm3r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"bm3A", bm3A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"bm3B", bm3B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"bm3C", bm3C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"bm3D", bm3D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"bm3E", bm3E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"bm3F", bm3F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"bm3G", bm3G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"bm3H", bm3H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"bm3I", bm3I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"bm3J", bm3J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"bm3K", bm3K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"bm3L", bm3L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"bm3M", bm3M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"bm3N", bm3N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"bm3O", bm3O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"bm3P", bm3P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"bm3Q", bm3Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"bm3R", bm3R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"bm3S", bm3S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"bm3T", bm3T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"bm3U", bm3U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"bm3V", bm3V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"bm3W", bm3W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"bm3X", bm3X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm3Y", bm3Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"bm3Z", bm3Z);
-  /* feat_lib_add(fl, FEAT_TYPE_INT_3,     (char *)"bm3U1", bm3U1); */
-  /* feat_lib_add(fl, FEAT_TYPE_INT,     (char *)"bm3sgn", bm3sgn); */
-  
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b1f", b1f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"b1l", b1l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"b1c", b1c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"b1p", b1p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"b1m", b1m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"b1s", b1s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"b1r", b1r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"b1A", b1A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"b1B", b1B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"b1C", b1C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"b1D", b1D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"b1E", b1E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"b1F", b1F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"b1G", b1G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"b1H", b1H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"b1I", b1I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"b1J", b1J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"b1K", b1K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"b1L", b1L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"b1M", b1M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"b1N", b1N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"b1O", b1O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"b1P", b1P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"b1Q", b1Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"b1R", b1R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"b1S", b1S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"b1T", b1T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"b1U", b1U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"b1V", b1V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"b1W", b1W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"b1X", b1X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b1Y", b1Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b1Z", b1Z);
-  feat_lib_add(fl, FEAT_TYPE_INT_3, (char *)"b1U1", b1U1);
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"b1sgn", b1sgn);
-  
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b2f", b2f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"b2l", b2l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"b2c", b2c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"b2p", b2p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"b2m", b2m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"b2s", b2s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"b2r", b2r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"b2A", b2A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"b2B", b2B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"b2C", b2C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"b2D", b2D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"b2E", b2E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"b2F", b2F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"b2G", b2G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"b2H", b2H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"b2I", b2I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"b2J", b2J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"b2K", b2K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"b2L", b2L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"b2M", b2M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"b2N", b2N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"b2O", b2O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"b2P", b2P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"b2Q", b2Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"b2R", b2R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"b2S", b2S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"b2T", b2T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"b2U", b2U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"b2V", b2V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"b2W", b2W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"b2X", b2X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b2Y", b2Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b2Z", b2Z);
-
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b2U1", b2U1);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b2sgn", b2sgn);
-
-  feat_lib_add(fl, FEAT_TYPE_FORM,  (char *)"b3f", b3f);
-  feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"b3l", b3l);
-  feat_lib_add(fl, FEAT_TYPE_CPOS,  (char *)"b3c", b3c);
-  feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"b3p", b3p);
-  feat_lib_add(fl, FEAT_TYPE_FEATS, (char *)"b3m", b3m);
-  feat_lib_add(fl, FEAT_TYPE_STAG,  (char *)"b3s", b3s);
-  /* feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"b3r", b3r); */
-  feat_lib_add(fl, FEAT_TYPE_A,     (char *)"b3A", b3A);
-  feat_lib_add(fl, FEAT_TYPE_B,     (char *)"b3B", b3B);
-  feat_lib_add(fl, FEAT_TYPE_C,     (char *)"b3C", b3C);
-  feat_lib_add(fl, FEAT_TYPE_D,     (char *)"b3D", b3D);
-  feat_lib_add(fl, FEAT_TYPE_E,     (char *)"b3E", b3E);
-  feat_lib_add(fl, FEAT_TYPE_F,     (char *)"b3F", b3F);
-  feat_lib_add(fl, FEAT_TYPE_G,     (char *)"b3G", b3G);
-  feat_lib_add(fl, FEAT_TYPE_H,     (char *)"b3H", b3H);
-  feat_lib_add(fl, FEAT_TYPE_I,     (char *)"b3I", b3I);
-  feat_lib_add(fl, FEAT_TYPE_J,     (char *)"b3J", b3J);
-  feat_lib_add(fl, FEAT_TYPE_K,     (char *)"b3K", b3K);
-  feat_lib_add(fl, FEAT_TYPE_L,     (char *)"b3L", b3L);
-  feat_lib_add(fl, FEAT_TYPE_M,     (char *)"b3M", b3M);
-  feat_lib_add(fl, FEAT_TYPE_N,     (char *)"b3N", b3N);
-  feat_lib_add(fl, FEAT_TYPE_O,     (char *)"b3O", b3O);
-  feat_lib_add(fl, FEAT_TYPE_P,     (char *)"b3P", b3P);
-  feat_lib_add(fl, FEAT_TYPE_Q,     (char *)"b3Q", b3Q);
-  feat_lib_add(fl, FEAT_TYPE_R,     (char *)"b3R", b3R);
-  feat_lib_add(fl, FEAT_TYPE_S,     (char *)"b3S", b3S);
-  feat_lib_add(fl, FEAT_TYPE_T,     (char *)"b3T", b3T);
-  feat_lib_add(fl, FEAT_TYPE_U,     (char *)"b3U", b3U);
-  feat_lib_add(fl, FEAT_TYPE_V,     (char *)"b3V", b3V);
-  feat_lib_add(fl, FEAT_TYPE_W,     (char *)"b3W", b3W);
-  feat_lib_add(fl, FEAT_TYPE_X,     (char *)"b3X", b3X);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b3Y", b3Y);
-  feat_lib_add(fl, FEAT_TYPE_Y,     (char *)"b3Z", b3Z);
-
-  /* feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"gs0l", gs0l); */
-  /* feat_lib_add(fl, FEAT_TYPE_POS,   (char *)"gs0p", gs0p); */
-  
-  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_s0r", ldep_s0r);
-  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_s0r", rdep_s0r);
-  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_s1r", ldep_s1r);
-  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_s1r", rdep_s1r);
-  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_b0r", ldep_b0r);
-  feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_b0r", rdep_b0r);
-
-  feat_lib_add(fl, FEAT_TYPE_INT_7, (char *)"ndep_b0", ndep_b0);
-  feat_lib_add(fl, FEAT_TYPE_INT_7, (char *)"ndep_s0", ndep_s0);
-  
-  /* distance features */
-  feat_lib_add(fl, FEAT_TYPE_INT_7, (char *)"dist_s0_b0", dist_s0_b0);
-
-/* configurational features */
-
-  feat_lib_add(fl, FEAT_TYPE_INT_8, (char *)"sh", sh);
-  feat_lib_add(fl, FEAT_TYPE_INT_8, (char *)"bh", bh);
-  /* feat_lib_add(fl, FEAT_TYPE_INT_8, (char *)"dh", dh); */
-
-  feat_lib_add(fl, FEAT_TYPE_TRANS, (char *)"t1", t1);
-  feat_lib_add(fl, FEAT_TYPE_TRANS, (char *)"t2", t2);
-  feat_lib_add(fl, FEAT_TYPE_TRANS, (char *)"t3", t3);
-  feat_lib_add(fl, FEAT_TYPE_TRANS, (char *)"t4", t4);
-
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"mvt0", mvt0);
-
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"mvt1", mvt1);
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"delta1", delta1);
-
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"mvt2", mvt2);
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"delta2", delta2);
-
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"mvt3", mvt3);
-  feat_lib_add(fl, FEAT_TYPE_INT,   (char *)"delta3", delta3);
-
-  return fl;
-}
-
diff --git a/maca_trans_parser/src/feat_lib.h b/maca_trans_parser/src/feat_lib.h
deleted file mode 100644
index b0af82298b2c1bf84be57da60a6d8bc9c5cf4f32..0000000000000000000000000000000000000000
--- a/maca_trans_parser/src/feat_lib.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __FEAT_LIB__
-#define __FEAT_LIB__
-
-#include "config.h"
-#include "features.h"
-#include "feat_desc.h"
-#include "dico.h"
-
-typedef struct {
-  int nbelem;
-  dico *d_features;
-  simple_feat_desc **array;
-} feat_lib;
-
-feat_lib *feat_lib_new(void);
-void feat_lib_add(feat_lib *fl, int feature_type, char *feature_name, feat_fct feature_fct);
-simple_feat_desc *feat_lib_get_simple_feat_desc(feat_lib *fl, char *feat_name);
-feat_lib *feat_lib_build(void);
-void feat_lib_free(feat_lib *fl);
-#endif
diff --git a/maca_trans_parser/src/feat_model.h b/maca_trans_parser/src/feat_model.h
deleted file mode 100644
index 4fa12d4a9f176e4fc3d4a56e4fb171d0feafefd4..0000000000000000000000000000000000000000
--- a/maca_trans_parser/src/feat_model.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef __FEAT_MODEL__
-#define __FEAT_MODEL__
-
-#include "feat_desc.h"
-#include "feat_lib.h"
-
-typedef struct {
-  char string[2048];
-  char *name;
-  int nbelem;
-  feat_desc **array;
-  int dim;
-    feat_lib *fl; // stores all simple features 
-} feat_model;
-
-#include "config.h"
-#include "dico.h"
-#include "mcd.h"
-
-
-
-void feat_model_free(feat_model *fm);
-feat_model *feat_model_new(char *name);
-void feat_model_print(FILE *f, feat_model *fm);
-feat_desc *feat_model_add(feat_model *fm, feat_desc *fd);
-int feat_model_get_feat_value_fann(feat_model *fm, config *c, int feat_nb);
-int feat_model_get_feat_value_cff(feat_model *fm, config *c, dico *dico_features, int feat_nb, int mode);
-feat_model *feat_model_read(char *filename, int verbose);
-void feat_model_compute_ranges(feat_model *fm, mcd *m, int mvt_nb);
-int feat_model_get_type_feat_n(feat_model *fm, int n);
-
-#endif
diff --git a/maca_trans_parser/src/maca_trans_lemmatizer.c b/maca_trans_parser/src/maca_trans_lemmatizer.c
index 1044ddad92280eae381b9a806357fc1508f78a02..351305c873ab062f8990aeb0c6a25f04d785655e 100644
--- a/maca_trans_parser/src/maca_trans_lemmatizer.c
+++ b/maca_trans_parser/src/maca_trans_lemmatizer.c
@@ -7,6 +7,7 @@
 
 #include"context.h"
 #include"dico.h"
+#include"config.h"
 
 void maca_lemmatizer_help_message(context *ctx)
 {
diff --git a/maca_trans_parser/src/maca_trans_parser.c b/maca_trans_parser/src/maca_trans_parser.c
index fa44e9b51c6be52cb019d0ca4abde650c649cd67..390ac1c49391e76e25511d9ec81e76173fbc2ff3 100644
--- a/maca_trans_parser/src/maca_trans_parser.c
+++ b/maca_trans_parser/src/maca_trans_parser.c
@@ -87,7 +87,7 @@ int main(int argc, char *argv[])
   maca_trans_parser_check_options(ctx);
 
   set_linguistic_resources_filenames_parser(ctx);
-  ctx->features_model = feat_model_read(ctx->features_model_filename, ctx->verbose);
+  ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose);
   ctx->vocabs = dico_vec_read(ctx->vocabs_filename, ctx->hash_ratio);
 
   mcd_link_to_dico(ctx->mcd_struct, ctx->vocabs, ctx->verbose);
diff --git a/maca_trans_parser/src/maca_trans_parser_arc_eager_mcf2cff.c b/maca_trans_parser/src/maca_trans_parser_arc_eager_mcf2cff.c
index dfca5e53f46d2a8674047e7c1685c81062c87d1f..eeb228824e1275480e4e749b8699ed3800c74a79 100644
--- a/maca_trans_parser/src/maca_trans_parser_arc_eager_mcf2cff.c
+++ b/maca_trans_parser/src/maca_trans_parser_arc_eager_mcf2cff.c
@@ -127,7 +127,7 @@ int main(int argc, char *argv[])
   ctx = context_read_options(argc, argv);
   maca_trans_parser_mcf2cff_check_options(ctx);
 
-  ctx->features_model = feat_model_read(ctx->features_model_filename, ctx->verbose);
+  ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose);
   
   if(ctx->mode == TRAIN_MODE){
     mcd_extract_dico_from_corpus(ctx->mcd_struct, ctx->input_filename);
diff --git a/maca_trans_parser/src/maca_trans_tagger.c b/maca_trans_parser/src/maca_trans_tagger.c
index 0bec1311ee5d70b0749ae260a9f80d83d46bf8fb..e9ad38d5e1fcdf194da8bcbad92872a16b44530b 100644
--- a/maca_trans_parser/src/maca_trans_tagger.c
+++ b/maca_trans_parser/src/maca_trans_tagger.c
@@ -91,7 +91,7 @@ int main(int argc, char *argv[])
   decode_tagger_check_options(ctx);
 
   decode_tagger_set_linguistic_resources_filenames(ctx);
-  ctx->features_model = feat_model_read(ctx->features_model_filename, ctx->verbose);
+  ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose);
   ctx->vocabs = dico_vec_read(ctx->vocabs_filename, ctx->hash_ratio);
   mcd_link_to_dico(ctx->mcd_struct, ctx->vocabs, ctx->verbose);
 
diff --git a/maca_trans_parser/src/maca_trans_tagger_bt.c b/maca_trans_parser/src/maca_trans_tagger_bt.c
index 778c634e64bdd04fa5d2ecd8442ea768a8423e0b..1f3318e9d2306bff31edbee3d003bc44bca8fd4a 100644
--- a/maca_trans_parser/src/maca_trans_tagger_bt.c
+++ b/maca_trans_parser/src/maca_trans_tagger_bt.c
@@ -91,7 +91,7 @@ int main(int argc, char *argv[])
   decode_tagger_check_options(ctx);
 
   decode_tagger_set_linguistic_resources_filenames(ctx);
-  ctx->features_model = feat_model_read(ctx->features_model_filename, ctx->verbose);
+  ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose);
   ctx->vocabs = dico_vec_read(ctx->vocabs_filename, ctx->hash_ratio);
   mcd_link_to_dico(ctx->mcd_struct, ctx->vocabs, ctx->verbose);
 
diff --git a/maca_trans_parser/src/maca_trans_tagger_mcf2cff.c b/maca_trans_parser/src/maca_trans_tagger_mcf2cff.c
index 916863ba90807f16dc82b52cc9e6a183393b8e1a..f6c966c6abd824d68fd82397ff7af136e9f70993 100644
--- a/maca_trans_parser/src/maca_trans_tagger_mcf2cff.c
+++ b/maca_trans_parser/src/maca_trans_tagger_mcf2cff.c
@@ -116,7 +116,7 @@ int main(int argc, char *argv[])
   ctx = context_read_options(argc, argv);
   maca_trans_parser_mcf2cff_check_options(ctx);
   
-  ctx->features_model = feat_model_read(ctx->features_model_filename, ctx->verbose);
+  ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose);
 
 
   if(ctx->mode == TRAIN_MODE){
diff --git a/maca_trans_parser/src/maca_trans_tagparser.c b/maca_trans_parser/src/maca_trans_tagparser.c
index 608eea94e320da33d596966ead44950d07fb43d8..dc325dd3d9994212a2dfb0d5f18e875a1090fbf4 100644
--- a/maca_trans_parser/src/maca_trans_tagparser.c
+++ b/maca_trans_parser/src/maca_trans_tagparser.c
@@ -91,7 +91,7 @@ int main(int argc, char *argv[])
   decode_check_options(ctx);
 
   set_linguistic_resources_filenames_tagparser(ctx);
-  ctx->features_model = feat_model_read(ctx->features_model_filename, ctx->verbose);
+  ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose);
   ctx->vocabs = dico_vec_read(ctx->vocabs_filename, ctx->hash_ratio);
 
   /* dico_vec_print(NULL, ctx->vocabs); */
diff --git a/maca_trans_parser/src/maca_trans_tagparser_arc_eager_mcf2cff.c b/maca_trans_parser/src/maca_trans_tagparser_arc_eager_mcf2cff.c
index cf95405eefd6c91fc3b3392164eb7f76c16feabf..ef78339a7f5b55edf273e2332e11d0a0d1205eed 100644
--- a/maca_trans_parser/src/maca_trans_tagparser_arc_eager_mcf2cff.c
+++ b/maca_trans_parser/src/maca_trans_tagparser_arc_eager_mcf2cff.c
@@ -152,7 +152,7 @@ int main(int argc, char *argv[])
   ctx = context_read_options(argc, argv);
   maca_trans_parser_mcf2cff_check_options(ctx);
 
-  ctx->features_model = feat_model_read(ctx->features_model_filename, ctx->verbose);
+  ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose);
   
   if(ctx->mode == TRAIN_MODE){
     mcd_extract_dico_from_corpus(ctx->mcd_struct, ctx->input_filename);
diff --git a/maca_trans_parser/src/simple_decoder_parser_arc_eager.c b/maca_trans_parser/src/simple_decoder_parser_arc_eager.c
index e523e5fb0490589e8a464dbbd0588d9ee825781d..7c44a6b32fe89378c75722a610cbdece3a1905ba 100644
--- a/maca_trans_parser/src/simple_decoder_parser_arc_eager.c
+++ b/maca_trans_parser/src/simple_decoder_parser_arc_eager.c
@@ -156,7 +156,7 @@ void simple_decoder_parser_arc_eager(context *ctx)
       if(ctx->debug_mode) printf("force EOS\n");
     }
 
-    /* normal behavious, ask classifier what is the next movement to do and do it */
+    /* normal behaviour, ask classifier what is the next movement to do and do it */
     else{
       config2feat_vec_cff(ctx->features_model, c, ctx->d_perceptron_features, fv, LOOKUP_MODE);
       mvt_code = feature_table_argmax(fv, ft, &max);