diff --git a/maca_common/include/ProgramParameters.hpp b/maca_common/include/ProgramParameters.hpp
index e3aa19f178fb68535d11f28f521b0ffc4566fdc9..14d920fa6af78cf5e452fb3e5c2ee351ea91bc0d 100644
--- a/maca_common/include/ProgramParameters.hpp
+++ b/maca_common/include/ProgramParameters.hpp
@@ -53,6 +53,7 @@ struct ProgramParameters
   static std::string classifierName;
   static int batchSize;
   static std::string loss;
+  static std::string dicts;
 
   private :
 
diff --git a/maca_common/src/ProgramParameters.cpp b/maca_common/src/ProgramParameters.cpp
index c7c56d73a45e4c43993f64927188256a22b9be0e..cd88256d9c49ed2275ab125415ecbe5b1ff325bb 100644
--- a/maca_common/src/ProgramParameters.cpp
+++ b/maca_common/src/ProgramParameters.cpp
@@ -25,6 +25,7 @@ std::string ProgramParameters::devFilename;
 std::string ProgramParameters::devName;
 std::string ProgramParameters::lang;
 std::string ProgramParameters::optimizer;
+std::string ProgramParameters::dicts;
 int ProgramParameters::nbIter;
 int ProgramParameters::seed;
 bool ProgramParameters::removeDuplicates;
diff --git a/trainer/src/macaon_train.cpp b/trainer/src/macaon_train.cpp
index 62d1e0728f3275af7591e07bf8088e42540470b5..ab8111c1eaa87772ff0b48cba2aaee179614e579 100644
--- a/trainer/src/macaon_train.cpp
+++ b/trainer/src/macaon_train.cpp
@@ -41,6 +41,8 @@ po::options_description getOptionsDescription()
     ("help,h", "Produce this help message")
     ("debug,d", "Print infos on stderr")
     ("printEntropy", "Print mean entropy and standard deviation accross sequences")
+    ("dicts", po::value<std::string>()->default_value(""),
+      "The .dict file describing all the dictionaries to be used in the experiement. By default the filename specified in the .tm file will be used")
     ("optimizer", po::value<std::string>()->default_value("amsgrad"),
       "The learning algorithm to use : amsgrad | adam | sgd")
     ("loss", po::value<std::string>()->default_value("neglogsoftmax"),
@@ -265,6 +267,7 @@ int main(int argc, char * argv[])
   ProgramParameters::beta2 = vm["b2"].as<float>();
   ProgramParameters::bias = vm["bias"].as<float>();
   ProgramParameters::optimizer = vm["optimizer"].as<std::string>();
+  ProgramParameters::dicts = vm["dicts"].as<std::string>();
   ProgramParameters::loss = vm["loss"].as<std::string>();
   ProgramParameters::dynamicEpoch = vm["epochd"].as<int>();
   ProgramParameters::dynamicProbability = vm["proba"].as<float>();
diff --git a/transition_machine/src/TransitionMachine.cpp b/transition_machine/src/TransitionMachine.cpp
index e3f8f93a572ab11f0bab9e3885539f293c71c880..63192924351f164db82e992fa8182c5796fc3a84 100644
--- a/transition_machine/src/TransitionMachine.cpp
+++ b/transition_machine/src/TransitionMachine.cpp
@@ -33,7 +33,10 @@ TransitionMachine::TransitionMachine(bool trainMode)
   if(fscanf(fd, "Dicts : %[^\n]\n", buffer) != 1)
     badFormatAndAbort(ERRINFO);
 
-  Dict::readDicts(ProgramParameters::expPath, ProgramParameters::expPath + buffer, trainMode);
+  if (ProgramParameters::dicts.empty())
+    ProgramParameters::dicts = ProgramParameters::expPath + buffer;
+
+  Dict::readDicts(ProgramParameters::expPath, ProgramParameters::dicts, trainMode);
 
   // Reading %CLASSIFIERS
   if(fscanf(fd, "%%%s\n", buffer) != 1 || buffer != std::string("CLASSIFIERS"))