diff --git a/maca_trans_parser/src/feat_fct.c b/maca_trans_parser/src/feat_fct.c
index e4e02de4707a7fac892195ded4ae4907929efcf3..72bed2af670c6e7dc906d55fb5d636df8f10f7a2 100644
--- a/maca_trans_parser/src/feat_fct.c
+++ b/maca_trans_parser/src/feat_fct.c
@@ -86,6 +86,9 @@ 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 s2g(void *c)  {return (word_get_gov(stack_s2(config_get_stack((config *) c))) == WORD_INVALID_GOV) ? 0 : 1;}
+int s2sf(void *c) {return word_get_label(stack_s2(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)));}
@@ -924,6 +927,9 @@ feat_lib *feat_lib_build(void)
   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_LABEL,  (char *)"s2sf", s2sf);
+  feat_lib_add(fl, FEAT_TYPE_INT,    (char *)"s2g", s2g);
+  
   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);
diff --git a/maca_trans_parser/src/feat_fct.h b/maca_trans_parser/src/feat_fct.h
index 35820ec8dee1b696493efeb76ec91de5dc47646d..8728a438e77e017516ca2b007abdbbfc34e4b9be 100644
--- a/maca_trans_parser/src/feat_fct.h
+++ b/maca_trans_parser/src/feat_fct.h
@@ -88,6 +88,9 @@ int s1Z(void *input);
 
 int s1r(void *input);
 
+int s2g(void *input);
+int s2sf(void *input);
+
 int s2f(void *input);
 int s2l(void *input);
 int s2c(void *input);
diff --git a/maca_trans_parser/src/maca_error_predictor_parser_arc_eager_mcf2cff.c b/maca_trans_parser/src/maca_error_predictor_parser_arc_eager_mcf2cff.c
index 5f20451465b4568f282eb7dc086805e6466ab80d..2a90b3ce84f1561374bcd5102a338e33e9a9660d 100644
--- a/maca_trans_parser/src/maca_error_predictor_parser_arc_eager_mcf2cff.c
+++ b/maca_trans_parser/src/maca_error_predictor_parser_arc_eager_mcf2cff.c
@@ -47,9 +47,18 @@ void maca_error_predictor_parser_mcf2cff_check_options(context *ctx)
   }
 }
 
-int config_is_equal_parser(config *c1, config *c2, int co1, int co2) // 3 for bm2p , 2 .. , 1 now, 0 no errors 
-{
-  return ((co1==co2) ? 0 : 1);
+int config_is_equal_parser(config *c1, config *c2, int co1, int co2) 
+{// (c1->history)->size > 0 && (c1->history)->size > 0 && (
+  /*printf("COracle : \n");
+  mvt_stack_print(stdout,c1->history);
+  printf("CPredicted : \n");
+  mvt_stack_print(stdout,c2->history);*/
+  //printf("Or : %d\nPred : %d\n",mvt_stack_0(c1->history)->type,mvt_stack_0(c2->history)->type);
+  
+  if (mvt_stack_0(c1->history)->type != mvt_stack_0(c2->history)->type)
+    return 1;
+  else
+    return 0;
 }
 
 int testoracle = 0;
@@ -65,17 +74,18 @@ int test_pred() {
   return 0;
 }
 
-void oracle_movement(int *mvt_code_oracle, char *mvt_type_oracle, int *mvt_label_oracle, config *config_oracle, word_buffer *ref_oracle, int root_label_oracle, context *ctx, feat_vec *fv_oracle, int *sentence_nb)
+void oracle_movement(int *mvt_code_oracle, char *mvt_type_oracle, int *mvt_label_oracle, config *config_oracle, word_buffer *ref_oracle, int root_label_oracle, context *ctx, feat_vec *fv_decoder, int *sentence_nb)
 {
   if (!word_buffer_end(ref_oracle) && (*sentence_nb < ctx->sent_nb)) {
 
+    // decoder here before movement 
+    config2feat_vec_cff(ctx->features_model, config_oracle, ctx->d_perceptron_features, fv_decoder, LOOKUP_MODE);
+          
     *mvt_code_oracle = oracle_parser_arc_eager(config_oracle, ref_oracle, root_label_oracle);
     *mvt_type_oracle = movement_parser_type(*mvt_code_oracle);
     *mvt_label_oracle = movement_parser_label(*mvt_code_oracle);
 
     test_or();
-     
-    config2feat_vec_cff(ctx->features_model, config_oracle, ctx->d_perceptron_features, fv_oracle, LOOKUP_MODE);
 
     switch(*mvt_type_oracle){
     case MVT_PARSER_EOS :
@@ -107,11 +117,11 @@ void oracle_movement(int *mvt_code_oracle, char *mvt_type_oracle, int *mvt_label
     //printf("Oracle finishes its job\n");
   }
 }
-void print_cff(context *ctx, FILE *output_file, config *config_oracle, config *config_predicted, int mvt_code_oracle, int mvt_code_predicted, feat_vec *fv_predicted)
+void print_cff(context *ctx, FILE *output_file, config *config_oracle, config *config_predicted, int mvt_code_oracle, int mvt_code_predicted, feat_vec *fv_error)
 {  
   if(!ctx->debug_mode || output_file!=stdout) {
     fprintf(output_file, "%d", ((config_is_equal_parser(config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted))));
-    feat_vec_print(output_file, fv_predicted);
+    feat_vec_print(output_file, fv_error);
   }
 }
 
@@ -123,7 +133,7 @@ void generate_training_file_error(FILE *output_file, context *ctx)
   int mvt_code_oracle;
   char mvt_type_oracle;
   int mvt_label_oracle;
-  feat_vec *fv_oracle = feat_vec_new(feature_types_nb);
+  feat_vec *fv_decoder = feat_vec_new(feature_types_nb);
   int sentence_nb = 0;
   int root_label_oracle = dico_string2int(ctx->dico_labels, (char *) ctx->root_label);
   word_buffer *ref_oracle = word_buffer_load_mcf(ctx->input_filename, ctx->mcd_struct);
@@ -131,8 +141,8 @@ void generate_training_file_error(FILE *output_file, context *ctx)
 
   // prediction
   config *config_predicted;
-  feat_vec *fv_predicted = feat_vec_new(feature_types_nb);
-  FILE *mcf_file_predicted = (ctx->input_filename)? myfopen(ctx->input_filename, "r") : stdin;
+  feat_vec *fv_error = feat_vec_new(feature_types_nb);
+  FILE *mcf_file_predicted = myfopen(ctx->input_filename, "r");
   feature_table *ft = feature_table_load(ctx->perc_model_filename, ctx->verbose);
   int root_label_predicted;
   int mvt_code_predicted;
@@ -159,7 +169,8 @@ void generate_training_file_error(FILE *output_file, context *ctx)
 
   root_label_predicted = dico_string2int(ctx->dico_labels, ctx->root_label);
   if(root_label_predicted == -1) root_label_predicted = 0;
-  config_predicted = config_new(mcf_file_predicted, ctx->mcd_struct, 5);
+  
+  config_predicted = config_new(mcf_file_predicted, ctx->mcd_struct_error, 5);
 
   config_oracle = config_new(mcf_file_oracle, mcd_struct_hyp, 5);
 
@@ -167,8 +178,8 @@ void generate_training_file_error(FILE *output_file, context *ctx)
 
     //oracle
     
-    oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_oracle, &sentence_nb);
-    
+    oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_decoder, &sentence_nb);
+
     // predicted
 
     /* forced EOS (the element on the top of the stack is eos, but the preceding movement is not MVT_PARSER_EOS */
@@ -180,28 +191,29 @@ void generate_training_file_error(FILE *output_file, context *ctx)
       movement_parser_eos(config_predicted);
       test_pred();
       while(movement_parser_reduce(config_predicted)) {
-        oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_oracle, &sentence_nb);
+        oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_decoder, &sentence_nb);
         test_pred();
-        //print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_predicted);
+        //print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_error);
 
       }
       while(movement_parser_root(config_predicted, root_label_predicted)) {
-        oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_oracle, &sentence_nb);
+        oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_decoder, &sentence_nb);
         test_pred();
-        //print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_predicted);
+        //print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_error);
       }
     }
 
     /* normal behaviour, ask classifier what is the next movement to do and do it */
     else{
-      config2feat_vec_cff(ctx->features_model_error, config_predicted, ctx->d_perceptron_features_error, fv_predicted, TRAIN_MODE);
       
-      mvt_code_predicted = feature_table_argmax(fv_oracle, ft, &max);
+      mvt_code_predicted = feature_table_argmax(fv_decoder, ft, &max);
       mvt_type_predicted = movement_parser_type(mvt_code_predicted);
       mvt_label_predicted = movement_parser_label(mvt_code_predicted);
 
+      //printf("DEBUGGG, label predicted : %d\n",mvt_label_predicted);
+      
       if((mvt_type_predicted == MVT_PARSER_EOS) && (word_get_sent_seg(stack_top(config_get_stack(config_predicted))) == 0)){
-        feature_table_argmax_1_2(fv_oracle, ft, &argmax1, &max1, &argmax2, &max2);
+        feature_table_argmax_1_2(fv_decoder, ft, &argmax1, &max1, &argmax2, &max2);
         mvt_code_predicted = argmax2;
         mvt_type_predicted = movement_parser_type(mvt_code_predicted);
         mvt_label_predicted = movement_parser_label(mvt_code_predicted);
@@ -239,17 +251,19 @@ void generate_training_file_error(FILE *output_file, context *ctx)
         break;
       case MVT_PARSER_SHIFT:
         result = movement_parser_shift(config_predicted);
+        break;
       }
             
       if(result == 0){
+        if(ctx->debug_mode) fprintf(stdout, "WARNING : movement cannot be executed doing a SHIFT instead !\n");
         result = movement_parser_shift(config_predicted);
-        if(result == 0){ /* SHIFT failed no more words to read, let's get out of here ! */
+        if(result == 0){ /* SHIFT failed no more words to read, let's get out of here ! */	  if(ctx->debug_mode) fprintf(stdout, "WARNING : cannot exectue a SHIFT emptying stack !\n");
           if (!stack_is_empty(config_get_stack(config_predicted))) {
             movement_parser_root(config_predicted, root_label_predicted);
             test_pred();
           }
           while(!stack_is_empty(config_get_stack(config_predicted))) {
-            oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_oracle, &sentence_nb);
+            oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_decoder, &sentence_nb);
             movement_parser_root(config_predicted, root_label_predicted);
             test_pred();
           }
@@ -262,17 +276,20 @@ void generate_training_file_error(FILE *output_file, context *ctx)
         test_pred();
       }
     }
-    print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_predicted); 
+    //error training
+    config2feat_vec_cff(ctx->features_model_error, config_predicted, ctx->d_perceptron_features_error, fv_error, TRAIN_MODE);
+    print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_error); 
   }
   fprintf(stdout,"\n");
-  /*
-    config_free(c); 
-    feat_vec_free(fv);
-    feature_table_free(ft);
-    if(ctx->input_filename)
-    fclose(f);*/
+  config_free(config_oracle);
+  config_free(config_predicted); 
+  feat_vec_free(fv_decoder);
+  feat_vec_free(fv_error);
+  feature_table_free(ft);
+  
+  fclose(mcf_file_oracle);
+  fclose(mcf_file_predicted);
   
-
 }
 
 void error_parser_set_linguistic_resources_filename(context *ctx)
diff --git a/maca_trans_parser/src/maca_error_predictor_tagger.c b/maca_trans_parser/src/maca_error_predictor_tagger.c
index 55964e518d86cf02ce2b576a67e0aba50a67040e..c43344722aac451ca4ec143cd0b363d087986f0a 100644
--- a/maca_trans_parser/src/maca_error_predictor_tagger.c
+++ b/maca_trans_parser/src/maca_error_predictor_tagger.c
@@ -108,6 +108,9 @@ int main(int argc, char *argv[])
   ctx->vocabs_error = dico_vec_read(ctx->fann_filename, ctx->hash_ratio);
 
   ctx->features_model_error = feat_model_read(ctx->l_rules_filename, feat_lib_build(), ctx->verbose);
+
+  //ctx->mcd_struct = mcd_read("/home/mathis/maca_data2/fr/bin/maca_trans_tagger.mcd",ctx->verbose);
+  //ctx->mcd_struct_error = mcd_read("/home/mathis/maca_data2/fr/bin/maca_trans_tagger.mcd",ctx->verbose);
   ctx->mcd_struct_error = mcd_build_wpmlgfs();
     
   mcd_link_to_dico(ctx->mcd_struct, ctx->vocabs, ctx->verbose);
diff --git a/maca_trans_parser/src/maca_error_predictor_tagger_mcf2cff.c b/maca_trans_parser/src/maca_error_predictor_tagger_mcf2cff.c
index 0fbc2454ef86160dc809a36985474f1a6c3fb27a..00d553a99f908d24aca820ecef2b56aa33d24ddc 100644
--- a/maca_trans_parser/src/maca_error_predictor_tagger_mcf2cff.c
+++ b/maca_trans_parser/src/maca_error_predictor_tagger_mcf2cff.c
@@ -54,7 +54,7 @@ void maca_error_predictor_help_message(context *ctx)
   context_sent_nb_help_message(ctx);
   //context_mcd_help_message(ctx);
   fprintf(stderr, "INPUT\n");
-  fprintf(stderr, "\t-i --input      <file> : input is in conll07 format (default is dev.conll07)\n");
+  fprintf(stderr, "\t-i --input      <file> : input is in mcf format (default is new_dev.mcf)\n");
   //fprintf(stderr, "IN TEST MODE\n");
   context_vocabs_help_message(ctx);
 
@@ -74,7 +74,7 @@ void maca_error_predictor_check_options(context *ctx)
 }
 
 
-int config_is_equal_tagger(config *c1, config *c2, int p1, int p2) // 3 for bm2p , 2 .. , 1 now, 0 no errors 
+/*int config_is_equal_tagger(config *c1, config *c2, int p1, int p2) // 3 for bm2p , 2 .. , 1 now, 0 no errors 
 {
   if (bm2p(c1)!=bm2p(c2))
     return 3;
@@ -85,25 +85,35 @@ int config_is_equal_tagger(config *c1, config *c2, int p1, int p2) // 3 for bm2p
   else
     return 0;
 }
+*/
+
+int config_is_equal_tagger(config *c1, config *c2, int p1, int p2)
+{
+  //  if (bm2p(c1)!=bm2p(c2))
+  //  return 3;
+  if (bm1p(c1)!=bm1p(c2))
+    return 1;
+  else
+    return 0;
+}
 
 
 void generate_error_train(FILE *output_file, context *ctx)
 {
   config *config_oracle;
-  feat_vec *fv_oracle = feat_vec_new(feature_types_nb);
+  feat_vec *fv_decoder = feat_vec_new(feature_types_nb);
   FILE *mcf_file_oracle = myfopen(ctx->input_filename, "r");
   int postag_oracle;
   word *b0;
   
   config *config_predicted;
   feature_table *ft = feature_table_load(ctx->perc_model_filename, ctx->verbose);
-  feat_vec *fv_predicted = feat_vec_new(feature_types_nb);
+  feat_vec *fv_error = feat_vec_new(feature_types_nb);
   FILE *mcf_file_predicted = myfopen(ctx->input_filename, "r");
   int postag_predicted;
   float max;
   dico *dico_pos = dico_vec_get_dico(ctx->vocabs, (char *)"POS");
-  dico *dico_pos_error = dico_vec_get_dico(ctx->vocabs_error, (char *)"POS");
- 
+   
   config_oracle = config_new(mcf_file_oracle, ctx->mcd_struct, 5); 
   config_predicted = config_new(mcf_file_predicted, ctx->mcd_struct, 5);
   
@@ -114,7 +124,7 @@ void generate_error_train(FILE *output_file, context *ctx)
     }
 
     // oracle
-    config2feat_vec_cff(ctx->features_model, config_oracle, ctx->d_perceptron_features, fv_oracle, LOOKUP_MODE);
+    config2feat_vec_cff(ctx->features_model, config_oracle, ctx->d_perceptron_features, fv_decoder, LOOKUP_MODE);
     postag_oracle = oracle_tagger(config_oracle);
     
     if(ctx->debug_mode){
@@ -124,21 +134,19 @@ void generate_error_train(FILE *output_file, context *ctx)
     
     // predicted
     b0 = word_buffer_b0(config_predicted->bf);
-    config2feat_vec_cff(ctx->features_model_error, config_predicted, ctx->d_perceptron_features_error, fv_predicted, TRAIN_MODE);
-    
     
-    postag_predicted = feature_table_argmax(fv_oracle, ft, &max);
+    postag_predicted = feature_table_argmax(fv_decoder, ft, &max);
     
     if(ctx->debug_mode){
       printf("Predicted : ");
-      print_word_simple(b0, ctx->mcd_struct_error, dico_pos_error, postag_predicted);
+      print_word_simple(b0, ctx->mcd_struct, dico_pos, postag_predicted);
     }
     
     if(ctx->debug_mode){
-      vcode *vcode_array = feature_table_get_vcode_array(fv_oracle, ft);
+      vcode *vcode_array = feature_table_get_vcode_array(fv_decoder, ft);
       for(int i=0; i < 3; i++){
         printf("%d\t", i);
-        printf("%s\t%.4f\n", dico_int2string(dico_pos_error, vcode_array[i].class_code), vcode_array[i].score);
+        printf("%s\t%.4f\n", dico_int2string(dico_pos, vcode_array[i].class_code), vcode_array[i].score);
       }
       free(vcode_array);
       
@@ -150,9 +158,12 @@ void generate_error_train(FILE *output_file, context *ctx)
 
     }
     
+    // error training
+    config2feat_vec_cff(ctx->features_model_error, config_predicted, ctx->d_perceptron_features_error, fv_error, TRAIN_MODE);
+
     if(!ctx->debug_mode || output_file!=stdout) {
-      fprintf(output_file, "%d", ((config_is_equal_tagger(config_oracle, config_predicted,postag_oracle,postag_predicted))));
-      feat_vec_print(output_file, fv_predicted);
+      fprintf(output_file, "%d", ((config_is_equal_tagger(config_oracle, config_predicted, postag_oracle,postag_predicted))));
+      feat_vec_print(output_file, fv_error);
     }
     
     movement_tagger(config_oracle, postag_oracle);
@@ -160,8 +171,8 @@ void generate_error_train(FILE *output_file, context *ctx)
   }
   
 
-  feat_vec_free(fv_oracle);
-  feat_vec_free(fv_predicted);
+  feat_vec_free(fv_decoder);
+  feat_vec_free(fv_error);
   feature_table_free(ft);
   config_free(config_oracle);
   config_free(config_predicted); 
@@ -194,10 +205,6 @@ void error_tagger_set_linguistic_resources_filename(context *ctx)
     ctx->input_filename = strdup(absolute_filename);
   }
 
-  if(!ctx->mcd_filename) {
-    ctx->mcd_struct = mcd_build_wpmlgfs();
-  }
-
   if(!ctx->cff_filename){
     //printf("cff -> stdout\n")
   }
@@ -236,7 +243,7 @@ int main(int argc, char *argv[])
   maca_error_predictor_check_options(ctx);
 
   ctx->mcd_struct = mcd_read(ctx->mcd_filename, ctx->verbose);
-  ctx->mcd_struct_error = mcd_read(ctx->l_rules_filename, ctx->verbose);
+  ctx->mcd_struct_error = mcd_read(ctx->mcd_filename, ctx->verbose);//mcd_read(ctx->l_rules_filename, ctx->verbose);
 
   //error
   mcd_extract_dico_from_corpus(ctx->mcd_struct_error, ctx->input_filename);
diff --git a/maca_trans_parser/src/movement_parser.c b/maca_trans_parser/src/movement_parser.c
index d53556822e141778d4a7908aa5e4b40e2c0b95ab..7aa7c5e30cd2d30b2fd7d61fd465fcb6c5b2256c 100644
--- a/maca_trans_parser/src/movement_parser.c
+++ b/maca_trans_parser/src/movement_parser.c
@@ -45,7 +45,8 @@ int movement_left_arc(config *c, int label, float score)
 
   /* depset_add(c->ds, word_buffer_b0(c->bf), label, stack_top(c->st)); */
   stack_pop(c->st);
-  config_add_mvt(c, movement_left_code(label)); 
+  
+  config_add_mvt(c, movement_left_code(label));
   return 1;
 }
 
@@ -76,8 +77,9 @@ int movement_shift(config *c, int stream, float score)
 
   stack_push(c->st, word_buffer_b0(c->bf));
   word_buffer_move_right(c->bf);
-  
+  printf("JE FAIS UN TEST ICI :\n");
   config_add_mvt(c, MVT_SHIFT);
+  printf("TEST TERMINÉ :\n\n");
   return 1;
 }
 
diff --git a/maca_trans_parser/src/movements.c b/maca_trans_parser/src/movements.c
index fe865416dc2c43e37d5b613e04ab271c67ac3e8e..2a01f10c9b7f4a503902cf3cc574db5b245e3595 100644
--- a/maca_trans_parser/src/movements.c
+++ b/maca_trans_parser/src/movements.c
@@ -32,12 +32,13 @@ int movement_eos_undo(config *c)
 
 int movement_left_arc(config *c, int movement_code, int label)
 {
+  //printf("BEGINNING 1\n");
   if(stack_is_empty(config_get_stack(c))) return 0;  
   /* if(word_buffer_is_empty(config_get_buffer(c))) return 0; */
-
-  /* word on top of the stack should not have a governor */
-  if(word_get_gov(stack_top(config_get_stack(c))) != WORD_INVALID_GOV) return 0; 
-
+  //printf("BEGINNING 2\n");
+  /* word on top of the stack should not have a governor */ // com here bug ?
+  //if(word_get_gov(stack_top(config_get_stack(c))) != WORD_INVALID_GOV) return 0; 
+  //printf("BEGINNING 3\n");
   word *gov = word_buffer_b0(config_get_buffer(c));
   word *dep = stack_top(config_get_stack(c));
   int dist = (word_get_index(gov)) - (word_get_index(dep));
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 9cb7a91cd87b2ea7926a7240981449110f882840..6cc38ebbbb71bb41e5d56579dc5b0ffdaea148da 100644
--- a/maca_trans_parser/src/simple_decoder_parser_arc_eager.c
+++ b/maca_trans_parser/src/simple_decoder_parser_arc_eager.c
@@ -219,7 +219,7 @@ void simple_decoder_parser_arc_eager(context *ctx)
       }
       
       if(result == 0){
-	if(ctx->debug_mode) fprintf(stdout, "WARNING : movement cannot be executed doing a SHIFT instead !\n");
+        if(ctx->debug_mode) fprintf(stdout, "WARNING : movement cannot be executed doing a SHIFT instead !\n");
 	result = movement_parser_shift(c);
 	if(result == 0){ /* SHIFT failed no more words to read, let's get out of here ! */
 	  if(ctx->debug_mode) fprintf(stdout, "WARNING : cannot exectue a SHIFT emptying stack !\n");
diff --git a/maca_trans_parser/src/simple_decoder_tagger_error_predictor.c b/maca_trans_parser/src/simple_decoder_tagger_error_predictor.c
index 1e98a8972a8ba0be4486565a1250617194888ce6..4d96a0909ddb4916c10727c2ef24e40d9bbafa96 100644
--- a/maca_trans_parser/src/simple_decoder_tagger_error_predictor.c
+++ b/maca_trans_parser/src/simple_decoder_tagger_error_predictor.c
@@ -179,7 +179,7 @@ void simple_decoder_tagger_error_predictor(context *ctx, char *perc_error_filena
         break;
       
       case 1 :
-        sprintf(impr[nb]+strlen(impr[nb]),"\t✖\t0");
+        sprintf(impr[nb]+strlen(impr[nb]),"\t✖\t-1");
         break;
 
       case 2 :
@@ -217,17 +217,18 @@ void simple_decoder_tagger_error_predictor(context *ctx, char *perc_error_filena
     
     if(ctx->debug_mode){
       fprintf(stdout, " ***Error detection***\n");
-      for(int i=0; i < 4; i++){
+      for(int i=0; i < 2; i++){
         fprintf(stdout, "   %d\t", i);
         fprintf(stdout, "   %d\t%.4f\n", vcode_array_err[i].class_code, vcode_array_err[i].score);
       }
     }
+    float scoreError = vcode_array_err[0].score;
     free(vcode_array_err);
     
-    if (error_detect == 3 && !ctx->trace_mode && !no_back && word_buffer_bm1(c->bf) && word_buffer_bm2(c->bf)){// && (vcode_array_err[0].score-vcode_array_err[1].score)>2.5) {
-      backward(c);
+    if (error_detect == 1 && !ctx->trace_mode && scoreError > 0.28 && !no_back && word_buffer_bm1(c->bf) && word_buffer_bm2(c->bf)){
+      //backward(c);
       backward(c);
-      nb -= 3;
+      nb -= 2;
 
       if(ctx->f2p)
         add_signature_to_words_in_word_buffer(c->bf, ctx->f2p);
@@ -283,7 +284,7 @@ void simple_decoder_tagger_error_predictor(context *ctx, char *perc_error_filena
       nb += 1;
     }
     
-    else if(error_detect == 3 && !ctx->trace_mode && no_back)
+    else if(error_detect == 1 && !ctx->trace_mode && no_back)
       no_back = 0;
     
     word_buffer_move_right(c->bf);
@@ -291,9 +292,10 @@ void simple_decoder_tagger_error_predictor(context *ctx, char *perc_error_filena
   for (int i = 0; i < nb; i++) {
     printf("%s",impr[i]);
   }
-  /* config_print(stdout, c);  */
-  //feat_vec_free(fv);
-  //feature_table_free(ft);
-  //config_free(c); 
+  feat_vec_free(fv_error);
+  feat_vec_free(fv);
+  feature_table_free(ft_error);
+  feature_table_free(ft);
+  config_free(c); 
   //if (ctx->input_filename) fclose(f);
 }