diff --git a/maca_common/include/ProgramParameters.hpp b/maca_common/include/ProgramParameters.hpp
index 274d3970a2ba18163dd504e96ae5245aba13462f..7534930a2ea9c717c791acd2b266cb2e63dbb3ac 100644
--- a/maca_common/include/ProgramParameters.hpp
+++ b/maca_common/include/ProgramParameters.hpp
@@ -71,6 +71,7 @@ struct ProgramParameters
   static std::string tapeToMask;
   static float maskRate;
   static bool featureExtraction;
+  static bool devEvalOnGold;
 
   private :
 
diff --git a/maca_common/src/ProgramParameters.cpp b/maca_common/src/ProgramParameters.cpp
index ac15fa8de85c340709f1b62400de2e7858553f2f..988120f137cdabec72c2887a5f2733e7d2a99541 100644
--- a/maca_common/src/ProgramParameters.cpp
+++ b/maca_common/src/ProgramParameters.cpp
@@ -65,4 +65,5 @@ int ProgramParameters::dictCapacity;
 std::string ProgramParameters::tapeToMask;
 float ProgramParameters::maskRate;
 bool ProgramParameters::featureExtraction;
+bool ProgramParameters::devEvalOnGold;
 
diff --git a/trainer/src/Trainer.cpp b/trainer/src/Trainer.cpp
index cf0c8449326f64b5cd70744bc1ba985c604d1a99..f3076a416fb540e75808e59d0025f9025832f878 100644
--- a/trainer/src/Trainer.cpp
+++ b/trainer/src/Trainer.cpp
@@ -79,7 +79,16 @@ void Trainer::computeScoreOnDev()
       if (pActionIsZeroCost)
         TI.addDevSuccess(tm.getCurrentClassifier()->name);
 
-      std::string actionName = pAction;
+      std::string actionName;
+      if (ProgramParameters::devEvalOnGold)
+      {
+        int neededActionIndex = tm.getCurrentClassifier()->getOracleActionIndex(*devConfig);
+        actionName = tm.getCurrentClassifier()->getActionName(neededActionIndex);
+      }
+      else
+      {
+        actionName = pAction;
+      }
       Action * action = tm.getCurrentClassifier()->getAction(actionName);
 
       if (ProgramParameters::debug)
diff --git a/trainer/src/macaon_train.cpp b/trainer/src/macaon_train.cpp
index 7885ac4ce7846a636006618aa4b89c41ff350c23..e3036854e7a1d555a21cd8a7bbcd4d02d2feb3dc 100644
--- a/trainer/src/macaon_train.cpp
+++ b/trainer/src/macaon_train.cpp
@@ -87,6 +87,7 @@ po::options_description getOptionsDescription()
       "The rate of elements of the Tape that will be masked.")
     ("printTime", "Print time on stderr.")
     ("featureExtraction", "Use macaon only a feature extractor, print corpus to stdout.")
+    ("devEvalOnGold", "If true, dev accuracy will be computed on gold configurations.")
     ("shuffle", po::value<bool>()->default_value(true),
       "Shuffle examples after each iteration");
 
@@ -270,6 +271,7 @@ int main(int argc, char * argv[])
   ProgramParameters::printEntropy = vm.count("printEntropy") == 0 ? false : true;
   ProgramParameters::printTime = vm.count("printTime") == 0 ? false : true;
   ProgramParameters::featureExtraction = vm.count("featureExtraction") == 0 ? false : true;
+  ProgramParameters::devEvalOnGold = vm.count("devEvalOnGold") == 0 ? false : true;
   ProgramParameters::trainName = vm["train"].as<std::string>();
   ProgramParameters::devName = vm["dev"].as<std::string>();
   ProgramParameters::lang = vm["lang"].as<std::string>();