diff --git a/maca_common/src/mcd.c b/maca_common/src/mcd.c
index 6cc0e7f2e6129ea97cacc2b405f06715e4a11a35..ca924f23f1b3c13860f177e70555e4ed4b8c5494 100644
--- a/maca_common/src/mcd.c
+++ b/maca_common/src/mcd.c
@@ -75,6 +75,7 @@ void mcd_free(mcd *m)
     if(m->dico_array[i]) dico_free(m->dico_array[i]);
     if(m->word_emb_array[i]) word_emb_free(m->word_emb_array[i]);
     if(m->wf_str[i]) free(m->wf_str[i]);
+    if (m->filename[i]) free(m->filename[i]);
   }
   free(m->representation);
   free(m->filename);
@@ -124,6 +125,7 @@ int mcd_max_column_index_in_file(char *mcd_filename)
     }
     if(column > max_col) max_col = column;
   }
+  if (f != NULL) fclose(f);
   return max_col;
 }
 
diff --git a/maca_common/src/word_buffer.c b/maca_common/src/word_buffer.c
index bf53a2d61ef2bd273376ce2b876e0810581d7926..e9355d50e3fc8d271b13205dbbcd0f7678a4f65d 100644
--- a/maca_common/src/word_buffer.c
+++ b/maca_common/src/word_buffer.c
@@ -63,12 +63,13 @@ void word_buffer_print_compact(FILE *f, word_buffer *wb)
 void word_buffer_free(word_buffer *wb)
 {
   int i;
-  free(wb->array);
-  free(wb);
+
   for(i=0; i < wb->nbelem; i++){
     if(wb->array[i])
       word_free(wb->array[i]);
   }
+  free(wb->array);
+  free(wb);
 }
 
 int word_buffer_add(word_buffer *wb, word *w)
@@ -106,8 +107,8 @@ word_buffer *word_buffer_load_mcf(char *mcf_filename, mcd *mcd_struct)
   while(word_buffer_read_next_word(wb)){
     /* printf("load word %d\n", wb->nbelem - 1); */
   }
-  if(mcf_filename != NULL)
-    fclose(f);
+  //if(mcf_filename != NULL)
+  //  fclose(f);
   return wb;
 }
 
diff --git a/maca_tools/src/mcf2conll.c b/maca_tools/src/mcf2conll.c
index 272c18105954caed384c5aa23086ec7e203c4813..c5f506447112a354ff5fba162688b3435cfa044b 100644
--- a/maca_tools/src/mcf2conll.c
+++ b/maca_tools/src/mcf2conll.c
@@ -205,7 +205,13 @@ int main(int argc, char *argv[])
       index ++;
     }
   } while(word_buffer_move_right(wb));
+
+
+  if (wb->input_file != stdin)
+    fclose(wb->input_file);
     
+  word_buffer_free(wb);
+
   if(ctx->conll_filename)
     fclose(output_file);
   context_free(ctx);
diff --git a/maca_trans_parser/src/context.c b/maca_trans_parser/src/context.c
index f8fca20f3c9607adc211bc775c5de6488df64e80..1b9704e1b1e97862cd0b80c00c753a8ccea3f37e 100644
--- a/maca_trans_parser/src/context.c
+++ b/maca_trans_parser/src/context.c
@@ -270,6 +270,29 @@ context *context_read_options(int argc, char *argv[])
     ctx->mcd_struct = mcd_read(ctx->mcd_filename, ctx->verbose);
   else
     ctx->mcd_struct = mcd_build_wplgfs();
+
+
+  /* initialize maca_data_path field */
+  
+  char absolute_path[500];
+  absolute_path[0] = '\0';
+  if(ctx->maca_data_path){
+    strcpy(absolute_path, ctx->maca_data_path);
+    free(ctx->maca_data_path);
+  }
+  else {
+      char *e = getenv("MACAON_DIR");
+      if (e != NULL) {
+	  strcpy(absolute_path, e);	  
+      } else {
+	  fprintf(stderr, "WARNING: the environment variable MACAON_DIR is not defined\n");
+      }
+  }
+  strcat(absolute_path, "/");
+  strcat(absolute_path, ctx->language);
+  strcat(absolute_path, "/bin/");
+  ctx->maca_data_path = strdup(absolute_path);
+
   
   return ctx;
 }
diff --git a/maca_trans_parser/src/decode_forrest.c b/maca_trans_parser/src/decode_forrest.c
index ec3d199d6e79319caf88a956944961d796e26aab..8a54c6c655263fc5dad61c8dd6c35158194abfc9 100644
--- a/maca_trans_parser/src/decode_forrest.c
+++ b/maca_trans_parser/src/decode_forrest.c
@@ -42,41 +42,28 @@ void decode_check_options(context *ctx){
 
 void set_linguistic_resources_filenames_parser(context *ctx)
 {
-  char absolute_path[500];
   char absolute_filename[500];
 
-  absolute_path[0] = '\0';
-
-  if(ctx->maca_data_path)
-    strcat(absolute_path, ctx->maca_data_path);
-  else
-    strcat(absolute_path, getenv("MACAON_DIR"));
-	   
-  strcat(absolute_path, "/");
-  strcat(absolute_path, ctx->language);
-  strcat(absolute_path, "/bin/");
-
-
   if(!ctx->perc_model_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_MODEL_FILENAME);
     ctx->perc_model_filename = strdup(absolute_filename);
   }
 
   if(!ctx->vocabs_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_VOCABS_FILENAME);
     ctx->vocabs_filename = strdup(absolute_filename);
   }
 
   /*  if(!ctx->mcd_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_MULTI_COL_DESC_FILENAME);
     ctx->mcd_filename = strdup(absolute_filename);
     }*/
 
   if(!ctx->features_model_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_FEATURES_MODEL_FILENAME);
     ctx->features_model_filename = strdup(absolute_filename);
   }
diff --git a/maca_trans_parser/src/maca_trans_lemmatizer.c b/maca_trans_parser/src/maca_trans_lemmatizer.c
index 2cda79f19eac2fbab8cb9c424e71c5841a2fdbac..6b71bc98401b1cf99efa3af21311af1bf374812e 100644
--- a/maca_trans_parser/src/maca_trans_lemmatizer.c
+++ b/maca_trans_parser/src/maca_trans_lemmatizer.c
@@ -28,22 +28,10 @@ void maca_lemmatizer_check_options(context *ctx){
 
 void maca_lemmatizer_set_linguistic_resources_filenames(context *ctx)
 {
-  char absolute_path[500];
   char absolute_filename[500];
 
-  absolute_path[0] = '\0';
-
-  if(ctx->maca_data_path)
-    strcat(absolute_path, ctx->maca_data_path);
-  else
-    strcat(absolute_path, getenv("MACAON_DIR"));
-	   
-  strcat(absolute_path, "/");
-  strcat(absolute_path, ctx->language);
-  strcat(absolute_path, "/bin/");
-
   if(!ctx->fplm_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_FPLM_FILENAME);
     ctx->fplm_filename = strdup(absolute_filename);
   }
diff --git a/maca_trans_parser/src/maca_trans_parser.c b/maca_trans_parser/src/maca_trans_parser.c
index d48a4d8cbf776183706752f30b9b1ce5a0a4841e..3ecbcd4a0d74980a0b13ba6f8df7195db96411a8 100644
--- a/maca_trans_parser/src/maca_trans_parser.c
+++ b/maca_trans_parser/src/maca_trans_parser.c
@@ -40,43 +40,32 @@ void decode_check_options(context *ctx){
   }
 }
 
+
+
 void set_linguistic_resources_filenames_parser(context *ctx)
 {
-  char absolute_path[500];
   char absolute_filename[500];
 
-  absolute_path[0] = '\0';
-
-  if(ctx->maca_data_path)
-    strcat(absolute_path, ctx->maca_data_path);
-  else
-    strcat(absolute_path, getenv("MACAON_DIR"));
-	   
-  strcat(absolute_path, "/");
-  strcat(absolute_path, ctx->language);
-  strcat(absolute_path, "/bin/");
-
-
   if(!ctx->perc_model_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_MODEL_FILENAME);
     ctx->perc_model_filename = strdup(absolute_filename);
   }
 
   if(!ctx->vocabs_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_VOCABS_FILENAME);
     ctx->vocabs_filename = strdup(absolute_filename);
   }
 
   /*  if(!ctx->mcd_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_MULTI_COL_DESC_FILENAME);
     ctx->mcd_filename = strdup(absolute_filename);
     }*/
 
   if(!ctx->features_model_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_FEATURES_MODEL_FILENAME);
     ctx->features_model_filename = strdup(absolute_filename);
   }
diff --git a/maca_trans_parser/src/maca_trans_tagger.c b/maca_trans_parser/src/maca_trans_tagger.c
index db91da68724c1b4d0a20a8b5ff79f9d9585668f2..0bec1311ee5d70b0749ae260a9f80d83d46bf8fb 100644
--- a/maca_trans_parser/src/maca_trans_tagger.c
+++ b/maca_trans_parser/src/maca_trans_tagger.c
@@ -42,47 +42,34 @@ void decode_tagger_check_options(context *ctx){
 
 void decode_tagger_set_linguistic_resources_filenames(context *ctx)
 {
-  char absolute_path[500];
   char absolute_filename[500];
-
-  absolute_path[0] = '\0';
-
-  if(ctx->maca_data_path)
-    strcat(absolute_path, ctx->maca_data_path);
-  else
-    strcat(absolute_path, getenv("MACAON_DIR"));
-	   
-  strcat(absolute_path, "/");
-  strcat(absolute_path, ctx->language);
-  strcat(absolute_path, "/bin/");
-
   
   if(!ctx->perc_model_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_MODEL_TAGGER_FILENAME);
     ctx->perc_model_filename = strdup(absolute_filename);
   }
 
   if(!ctx->vocabs_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_VOCABS_TAGGER_FILENAME);
     ctx->vocabs_filename = strdup(absolute_filename);
   }
 
   /*  if(!ctx->mcd_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_MULTI_COL_DESC_TAGGER_FILENAME);
     ctx->mcd_filename = strdup(absolute_filename);
     }*/
 
   if(!ctx->features_model_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_FEATURES_MODEL_TAGGER_FILENAME);
     ctx->features_model_filename = strdup(absolute_filename);
   }
 
   if(!ctx->f2p_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_F2P_FILENAME);
     ctx->f2p_filename = strdup(absolute_filename);
     ctx->f2p = form2pos_read(ctx->f2p_filename);
diff --git a/maca_trans_parser/src/maca_trans_tagparser.c b/maca_trans_parser/src/maca_trans_tagparser.c
index 6f990743965dbd5192e90a14e0ed4dcf8fc154c9..608eea94e320da33d596966ead44950d07fb43d8 100644
--- a/maca_trans_parser/src/maca_trans_tagparser.c
+++ b/maca_trans_parser/src/maca_trans_tagparser.c
@@ -40,47 +40,34 @@ void decode_check_options(context *ctx){
 
 void set_linguistic_resources_filenames_tagparser(context *ctx)
 {
-  char absolute_path[500];
   char absolute_filename[500];
 
-  absolute_path[0] = '\0';
-
-  if(ctx->maca_data_path)
-    strcat(absolute_path, ctx->maca_data_path);
-  else
-    strcat(absolute_path, getenv("MACAON_DIR"));
-	   
-  strcat(absolute_path, "/");
-  strcat(absolute_path, ctx->language);
-  strcat(absolute_path, "/bin/");
-
-
   if(!ctx->perc_model_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_MODEL_TAGPARSER_FILENAME);
     ctx->perc_model_filename = strdup(absolute_filename);
   }
 
   if(!ctx->vocabs_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_VOCABS_TAGPARSER_FILENAME);
     ctx->vocabs_filename = strdup(absolute_filename);
   }
 
   /*  if(!ctx->mcd_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_MULTI_COL_DESC_TAGPARSER_FILENAME);
     ctx->mcd_filename = strdup(absolute_filename);
     }*/
 
   if(!ctx->features_model_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_FEATURES_MODEL_TAGPARSER_FILENAME);
     ctx->features_model_filename = strdup(absolute_filename);
   }
 
   if(!ctx->f2p_filename){
-    strcpy(absolute_filename, absolute_path);
+    strcpy(absolute_filename, ctx->maca_data_path);
     strcat(absolute_filename, DEFAULT_F2P_FILENAME);
     ctx->f2p_filename = strdup(absolute_filename);
     ctx->f2p = form2pos_read(ctx->f2p_filename);