diff --git a/decoder/src/Decoder.cpp b/decoder/src/Decoder.cpp
index 5766d64e8d1e651180c2f5aef0240ff775a47fa9..d1bb7063b8d40b3a654b0b522e42abeb86acaa06 100644
--- a/decoder/src/Decoder.cpp
+++ b/decoder/src/Decoder.cpp
@@ -180,8 +180,8 @@ void applyActionAndTakeTransition(TransitionMachine & tm, const std::string & ac
 {
     Action * action = tm.getCurrentClassifier()->getAction(actionName);
     TransitionMachine::Transition * transition = tm.getTransition(actionName);
-    action->setInfos(transition->headMvt, tm.getCurrentState());
-    config.addToActionsHistory(config.getCurrentStateName(), actionName, 0);
+    action->setInfos(transition->headMvt, tm.getCurrentClassifier()->name);
+    config.addToActionsHistory(tm.getCurrentClassifier()->name, actionName, 0);
     action->apply(config);
     tm.takeTransition(transition);
 }
diff --git a/trainer/src/Trainer.cpp b/trainer/src/Trainer.cpp
index 04c4ac6d1625a9cc00ab60273d3d72c7c83b9be6..9f41dfc2a8111ea6431f7473c4bba33dd0e88418 100644
--- a/trainer/src/Trainer.cpp
+++ b/trainer/src/Trainer.cpp
@@ -65,7 +65,7 @@ void Trainer::computeScoreOnDev()
   while (!devConfig->isFinal())
   {
     setDebugValue();
-    devConfig->setCurrentStateName(tm.getCurrentState());
+    devConfig->setCurrentStateName(tm.getCurrentClassifier()->name);
     Dict::currentClassifierName = tm.getCurrentClassifier()->name;
     tm.getCurrentClassifier()->initClassifier(*devConfig);
 
@@ -75,7 +75,7 @@ void Trainer::computeScoreOnDev()
       std::string neededActionName = tm.getCurrentClassifier()->getActionName(neededActionIndex);
       Action * action = tm.getCurrentClassifier()->getAction(neededActionName);
       TransitionMachine::Transition * transition = tm.getTransition(neededActionName);
-      action->setInfos(transition->headMvt, tm.getCurrentState());
+      action->setInfos(transition->headMvt, tm.getCurrentClassifier()->name);
 
       action->apply(*devConfig);
       tm.takeTransition(transition);
@@ -134,8 +134,8 @@ void Trainer::computeScoreOnDev()
       }
 
       TransitionMachine::Transition * transition = tm.getTransition(actionName);
-      action->setInfos(transition->headMvt, tm.getCurrentState());
-      devConfig->addToActionsHistory(devConfig->getCurrentStateName(), actionName, tm.getCurrentClassifier()->getActionCost(*devConfig, actionName));
+      action->setInfos(transition->headMvt, tm.getCurrentClassifier()->name);
+      devConfig->addToActionsHistory(tm.getCurrentClassifier()->name, actionName, tm.getCurrentClassifier()->getActionCost(*devConfig, actionName));
 
       action->apply(*devConfig);
       tm.takeTransition(transition);
@@ -210,7 +210,8 @@ void Trainer::doStepNoTrain()
 
   Action * action = tm.getCurrentClassifier()->getAction(neededActionName);
   TransitionMachine::Transition * transition = tm.getTransition(neededActionName);
-  action->setInfos(transition->headMvt, tm.getCurrentState());
+  action->setInfos(transition->headMvt, tm.getCurrentClassifier()->name);
+  trainConfig.addToActionsHistory(tm.getCurrentClassifier()->name, action->name, tm.getCurrentClassifier()->getActionCost(trainConfig, action->name));
 
   action->apply(trainConfig);
   tm.takeTransition(transition);
@@ -373,9 +374,9 @@ void Trainer::doStepTrain()
       actionName = oAction;
 
     char buffer[1024];
-    if (sscanf(trainConfig.getCurrentStateName().c_str(), "error_%s", buffer) != 1)
+    if (sscanf(trainConfig.getCurrentStateName().c_str(), "Error_%s", buffer) != 1)
     {
-      fprintf(stderr, "ERROR (%s) : unexpected classifier name. Aborting.\n", ERRINFO);
+      fprintf(stderr, "ERROR (%s) : unexpected classifier name \'%s\'. Aborting.\n", ERRINFO, trainConfig.getCurrentStateName().c_str());
       exit(1);
     }
     std::string normalStateName(buffer);
@@ -433,9 +434,9 @@ void Trainer::doStepTrain()
 
   Action * action = tm.getCurrentClassifier()->getAction(actionName);
   TransitionMachine::Transition * transition = tm.getTransition(actionName);
-  action->setInfos(transition->headMvt, tm.getCurrentState());
+  action->setInfos(transition->headMvt, tm.getCurrentClassifier()->name);
 
-  trainConfig.addToActionsHistory(trainConfig.getCurrentStateName(), actionName, tm.getCurrentClassifier()->getActionCost(trainConfig, actionName));
+  trainConfig.addToActionsHistory(tm.getCurrentClassifier()->name, actionName, tm.getCurrentClassifier()->getActionCost(trainConfig, actionName));
 
   action->apply(trainConfig);
   tm.takeTransition(transition);
@@ -482,7 +483,7 @@ void Trainer::train()
     while (!trainConfig.isFinal())
     {
       setDebugValue();
-      trainConfig.setCurrentStateName(tm.getCurrentState());
+      trainConfig.setCurrentStateName(tm.getCurrentClassifier()->name);
       Dict::currentClassifierName = tm.getCurrentClassifier()->name;
       tm.getCurrentClassifier()->initClassifier(trainConfig);