diff --git a/DynareBison.yy b/DynareBison.yy
index 98274dc7fd13e68a04bf7b7ddb720031b65b635a..9a3bca1b7cbbae97d1075a4c034d78e9d7055f7d 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -118,7 +118,7 @@ class ParsingDriver;
 %token NAN_CONSTANT NO_STATIC NOBS NOCONSTANT NODISPLAY NOCORR NODIAGNOSTIC NOFUNCTIONS
 %token NOGRAPH NOMOMENTS NOPRINT NORMAL_PDF
 %token OBSERVATION_TRENDS OPTIM OPTIM_WEIGHTS ORDER OSR OSR_PARAMS MAX_DIM_COVA_GROUP ADVANCED
-%token PARAMETERS PARAMETER_SET PARTIAL_INFORMATION PERFECT_FORESIGHT PERIODS PLANNER_OBJECTIVE PLOT_CONDITIONAL_FORECAST PLOT_PRIORS PREFILTER PRESAMPLE
+%token PARALLEL_LOCAL_FILES PARAMETERS PARAMETER_SET PARTIAL_INFORMATION PERFECT_FORESIGHT PERIODS PLANNER_OBJECTIVE PLOT_CONDITIONAL_FORECAST PLOT_PRIORS PREFILTER PRESAMPLE
 %token PRINT PRIOR_MC PRIOR_TRUNC PRIOR_MODE PRIOR_MEAN POSTERIOR_MODE POSTERIOR_MEAN POSTERIOR_MEDIAN PRUNING
 %token <string_val> QUOTED_STRING
 %token QZ_CRITERIUM FULL DSGE_VAR DSGE_VARLAG DSGE_PRIOR_WEIGHT TRUNCATE
@@ -571,6 +571,7 @@ model_options : BLOCK { driver.block(); }
               | DIFFERENTIATE_FORWARD_VARS { driver.differentiate_forward_vars_all(); }
               | DIFFERENTIATE_FORWARD_VARS EQUAL '(' symbol_list ')' { driver.differentiate_forward_vars_some(); }
               | o_linear
+              | PARALLEL_LOCAL_FILES EQUAL '(' parallel_local_filename_list ')'
               ;
 
 model_options_list : model_options_list COMMA model_options
@@ -1678,6 +1679,12 @@ filename : symbol
          | QUOTED_STRING
          ;
 
+parallel_local_filename_list : filename
+                               { driver.add_parallel_local_file($1); }
+                             | parallel_local_filename_list COMMA filename
+                               { driver.add_parallel_local_file($3); }
+                             ;
+
 mc_filename_list : filename
                    { driver.add_mc_filename($1); }
                  | filename '(' non_negative_number ')'
diff --git a/DynareFlex.ll b/DynareFlex.ll
index 4ac323d81f62adcf031ad6a885d5a91e3b6e9a6f..626d4b13ae0d7a465b6eeeff1d3e597cb567bbd5 100644
--- a/DynareFlex.ll
+++ b/DynareFlex.ll
@@ -570,6 +570,7 @@ string eofbuff;
 <DYNARE_BLOCK>all_values_required {return token::ALL_VALUES_REQUIRED;}
 <DYNARE_BLOCK>no_static {return token::NO_STATIC;}
 <DYNARE_BLOCK>differentiate_forward_vars {return token::DIFFERENTIATE_FORWARD_VARS;}
+<DYNARE_BLOCK>parallel_local_files {return token::PARALLEL_LOCAL_FILES;}
 
 <DYNARE_STATEMENT,DYNARE_BLOCK>linear {return token::LINEAR;}
 
diff --git a/ModFile.cc b/ModFile.cc
index 86296273fccf48d5c178e049a4f213f193cc55b0..d8a6e2c1ef23d929735c8e17fd49c66b49ac37ca 100644
--- a/ModFile.cc
+++ b/ModFile.cc
@@ -531,6 +531,21 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, b
               << "options_.bytecode=" << byte_code << ";" << endl
               << "options_.use_dll=" << use_dll << ";" << endl;
 
+  if (parallel_local_files.size() > 0)
+    {
+      mOutputFile << "options_.parallel_info.local_files = {" << endl;
+      for (size_t i = 0; i < parallel_local_files.size(); i++)
+        {
+          size_t j = parallel_local_files[i].find_last_of("/\\");
+          if (j == string::npos)
+            mOutputFile << "'', '" << parallel_local_files[i] << "';" << endl;
+          else
+            mOutputFile << "'" << parallel_local_files[i].substr(0, j+1) << "', '"
+                        << parallel_local_files[i].substr(j+1, string::npos) << "';" << endl;
+        }
+      mOutputFile << "};" << endl;
+    }
+
   config_file.writeCluster(mOutputFile);
 
   if (byte_code)
diff --git a/ModFile.hh b/ModFile.hh
index d2784d1a436e9cd4280027aef4987afca8a21379..aa7ccc61657a37bcc4ed53dea0f16b47651eef27 100644
--- a/ModFile.hh
+++ b/ModFile.hh
@@ -94,6 +94,10 @@ public:
   //! Stores the original number of equations in the model_block
   int ramsey_policy_orig_eqn_nbr;
 
+  //! Stores the list of extra files to be transefered during a parallel run
+  /*! (i.e. option parallel_local_files of model block) */
+  vector<string> parallel_local_files;
+
 private:
   //! List of statements
   vector<Statement *> statements;
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index 9747b6408c7fea571314d43f34c1e4d774f42602..a5f345634a5a2930ae5c724cb6714ddc6d8db230 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -2541,3 +2541,11 @@ ParsingDriver::model_diagnostics()
 {
   mod_file->addStatement(new ModelDiagnosticsStatement());
 }
+
+void
+ParsingDriver::add_parallel_local_file(string *filename)
+{
+  mod_file->parallel_local_files.push_back(*filename);
+  delete filename;
+}
+
diff --git a/ParsingDriver.hh b/ParsingDriver.hh
index 6d3fda9f09309234fbb20ac3b2df0eaf23dcca89..1ab71514d4872d3f56359a090e9cce5f4c0126e3 100644
--- a/ParsingDriver.hh
+++ b/ParsingDriver.hh
@@ -117,7 +117,7 @@ private:
   OptionsList options_list;
   //! Temporary storage for trend elements
   ObservationTrendsStatement::trend_elements_t trend_elements;
-  //! Temporary storage for filename list of ModelComparison
+  //! Temporary storage for filename list of ModelComparison (contains weights)
   ModelComparisonStatement::filename_list_t filename_list;
   //! Temporary storage for list of EstimationParams (from estimated_params* statements)
   vector<EstimationParams> estim_params_list;
@@ -648,6 +648,8 @@ public:
   void process_graph_format_option();
   //! Model diagnostics
   void model_diagnostics();
+  //! Processing the parallel_local_files option
+  void add_parallel_local_file(string *filename);
 };
 
 #endif // ! PARSING_DRIVER_HH