diff --git a/trainer/src/Trainer.cpp b/trainer/src/Trainer.cpp
index 57cc4b01f94df75fd04df94148312875e1c73c15..8890b80fb512cd93620c64a3a93192e1895223d4 100644
--- a/trainer/src/Trainer.cpp
+++ b/trainer/src/Trainer.cpp
@@ -83,7 +83,7 @@ void Trainer::computeScoreOnDev()
     else
     {
       // Print current iter advancement in percentage
-      if (ProgramParameters::interactive && !ProgramParameters::featureExtraction)
+      if (ProgramParameters::interactive) 
       {
         int totalSize = ProgramParameters::devTapeSize;
         int steps = devConfig->getHead();
@@ -223,7 +223,7 @@ void Trainer::doStepTrain()
   }
 
   // Print current iter advancement in percentage
-  if (ProgramParameters::interactive && !ProgramParameters::featureExtraction)
+  if (ProgramParameters::interactive)
   {
     int totalSize = ProgramParameters::iterationSize == -1 ? ProgramParameters::tapeSize : ProgramParameters::iterationSize;
     int steps = ProgramParameters::iterationSize == -1 ? trainConfig.getHead() : nbSteps;
@@ -298,7 +298,7 @@ void Trainer::doStepTrain()
     if (ProgramParameters::featureExtraction)
     {
       auto features = tm.getCurrentClassifier()->getFeatureModel()->getFeatureDescription(trainConfig).featureValues();
-      fprintf(stdout, "%s\t%s\n", oAction.c_str(), features.c_str());
+      fprintf(stdout, "%s\t%s\t%s\n", tm.getCurrentClassifier()->getFeatureModel()->filename.c_str(), oAction.c_str(), features.c_str());
     }
   
     if (TI.getEpoch() >= k && choiceWithProbability(ProgramParameters::dynamicProbability))
diff --git a/transition_machine/include/FeatureModel.hpp b/transition_machine/include/FeatureModel.hpp
index f802ed67bb6c93b145cd8f3b463123c7d9c3e47a..25a7242bdae19d50d576c027a4413f71ad51ee5e 100644
--- a/transition_machine/include/FeatureModel.hpp
+++ b/transition_machine/include/FeatureModel.hpp
@@ -103,6 +103,11 @@ class FeatureModel
 
   public :
 
+  /// @brief The name of the FeatureModel file.
+  std::string filename;
+
+  public :
+
   /// @brief Tranform a Policy into the corresponding string.
   ///
   /// @param policy The Policy.
diff --git a/transition_machine/src/FeatureModel.cpp b/transition_machine/src/FeatureModel.cpp
index 1b0c01dfd7a877b7d29065bae615644435416f15..b4acf3164baf7593878f49187f773025a81f24af 100644
--- a/transition_machine/src/FeatureModel.cpp
+++ b/transition_machine/src/FeatureModel.cpp
@@ -21,6 +21,8 @@ FeatureModel::FeatureDescription & FeatureModel::getFeatureDescription(Config &
 
 FeatureModel::FeatureModel(const std::string & filename)
 {
+  this->filename = getFilenameFromPath(filename);
+
   File file(filename, "r");
   FILE * fd = file.getDescriptor();
   char buffer[1024];
@@ -141,8 +143,8 @@ std::string FeatureModel::FeatureDescription::featureValues()
   std::string res;
 
   for (auto & feature : values)
-    for (auto & value : feature.values)
-      res += value + "\t";
+    for (unsigned int i = 0; i < feature.values.size(); i++)
+      res += feature.values[i] + (i == feature.values.size()-1 ? "\t" : " ");
 
   if (!res.empty())
     res.pop_back();