diff --git a/matlab/ep/extended_path.m b/matlab/ep/extended_path.m
index 1c73e474d2c09fe418199d750bc6c3e3b54ca330..70fc89de285be12e8c9582e8a3db7c15f6bb0d38 100644
--- a/matlab/ep/extended_path.m
+++ b/matlab/ep/extended_path.m
@@ -1,4 +1,4 @@
-function [ts,results] = extended_path(initial_conditions,sample_size, DynareOptions, DynareModel, DynareResults)
+function [ts,results] = extended_path(initial_conditions,sample_size, exogenousvariables, DynareOptions, DynareModel, DynareResults)
 % Stochastic simulation of a non linear DSGE model using the Extended Path method (Fair and Taylor 1983). A time
 % series of size T  is obtained by solving T perfect foresight models.
 %
@@ -62,7 +62,6 @@ if isempty(initial_conditions)
     end
 end
 
-
 % Set the number of periods for the perfect foresight model
 periods = ep.periods;
 pfm.periods = periods;
@@ -97,12 +96,14 @@ DynareOptions.minimal_solving_period = 100;%DynareOptions.ep.periods;
 time_series = zeros(DynareModel.endo_nbr,sample_size);
 
 % Set the covariance matrix of the structural innovations.
-variances = diag(DynareModel.Sigma_e);
-positive_var_indx = find(variances>0);
-effective_number_of_shocks = length(positive_var_indx);
-stdd = sqrt(variances(positive_var_indx));
-covariance_matrix = DynareModel.Sigma_e(positive_var_indx,positive_var_indx);
-covariance_matrix_upper_cholesky = chol(covariance_matrix);
+if isempty(exogenousvariables)
+    variances = diag(DynareModel.Sigma_e);
+    positive_var_indx = find(variances>0);
+    effective_number_of_shocks = length(positive_var_indx);
+    stdd = sqrt(variances(positive_var_indx));
+    covariance_matrix = DynareModel.Sigma_e(positive_var_indx,positive_var_indx);
+    covariance_matrix_upper_cholesky = chol(covariance_matrix);
+end
 
 % (re)Set exo_nbr
 %exo_nbr = effective_number_of_shocks;
@@ -118,27 +119,35 @@ bytecode_flag = ep.use_bytecode;
 replic_nbr = ep.replic_nbr;
 
 % Simulate shocks.
-switch ep.innovation_distribution
-  case 'gaussian'
-    shocks = transpose(transpose(covariance_matrix_upper_cholesky)* ...
-                       randn(effective_number_of_shocks,sample_size* ...
-                             replic_nbr));
-    shocks(:,positive_var_indx) = shocks;
-  case 'calibrated'
-    replic_nbr = 1;
-    shocks = zeros(sample_size,DynareModel.exo_nbr);
-    for i = 1:length(DynareModel.unanticipated_det_shocks)
-        k = DynareModel.unanticipated_det_shocks(i).periods;
-        ivar = DynareModel.unanticipated_det_shocks(i).exo_id;
-        v = DynareModel.unanticipated_det_shocks(i).value;
-        if ~DynareModel.unanticipated_det_shocks(i).multiplicative
-            shocks(k,ivar) = v;
-        else
-            socks(k,ivar) = shocks(k,ivar) * v;
+if isempty(exogenousvariables)
+    switch ep.innovation_distribution
+      case 'gaussian'
+        shocks = transpose(transpose(covariance_matrix_upper_cholesky)* ...
+                           randn(effective_number_of_shocks,sample_size* ...
+                                 replic_nbr));
+        shocks(:,positive_var_indx) = shocks;
+      case 'calibrated'
+        replic_nbr = 1;
+        shocks = zeros(sample_size,DynareModel.exo_nbr);
+        for i = 1:length(DynareModel.unanticipated_det_shocks)
+            k = DynareModel.unanticipated_det_shocks(i).periods;
+            ivar = DynareModel.unanticipated_det_shocks(i).exo_id;
+            v = DynareModel.unanticipated_det_shocks(i).value;
+            if ~DynareModel.unanticipated_det_shocks(i).multiplicative
+                shocks(k,ivar) = v;
+            else
+                socks(k,ivar) = shocks(k,ivar) * v;
+            end
         end
+      otherwise
+        error(['extended_path:: ' ep.innovation_distribution ' distribution for the structural innovations is not (yet) implemented!'])
     end
-  otherwise
-    error(['extended_path:: ' ep.innovation_distribution ' distribution for the structural innovations is not (yet) implemented!'])
+else
+    shocks = exogenousvariables;
+    testnonzero = abs(shocks)>0;
+    testnonzero = sum(testnonzero);
+    positive_var_indx = find(testnonzero);
+    effective_number_of_shocks = length(positive_var_indx);
 end
 
 % Set waitbar (graphic or text  mode)
diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc
index 24c3f12d3fa7af0bb7c444971f14d8acc196ea41..6618dce0df76447642d6ea6ab64d9d2d613e64a2 100644
--- a/preprocessor/ComputingTasks.cc
+++ b/preprocessor/ComputingTasks.cc
@@ -3200,7 +3200,7 @@ ExtendedPathStatement::writeOutput(ostream &output, const string &basename, bool
       output << "options_." << it->first << " = " << it->second << ";" << endl;
 
   output << "extended_path([], " << options_list.num_options.find("periods")->second
-         << ", options_, M_, oo_);" << endl;
+         << ", [], options_, M_, oo_);" << endl;
 }
 
 ModelDiagnosticsStatement::ModelDiagnosticsStatement()
diff --git a/tests/ep/ar.mod b/tests/ep/ar.mod
index 4cc34cf4ad3a2e99808cd9747e7208866e492334..9582f5aada25141888fa443cd571e2711d8f83e8 100644
--- a/tests/ep/ar.mod
+++ b/tests/ep/ar.mod
@@ -44,7 +44,7 @@ options_.ep.IntegrationAlgorithm='Tensor-Gaussian-Quadrature';
 options_.ep.stochastic.nodes = 3;
 options_.console_mode = 0;
 
-sts = extended_path([], 10, options_, M_, oo_);
+sts = extended_path([], 10, [], options_, M_, oo_);
 
 if max(max(abs(ts-sts)))>pi*options_.dynatol.x
    disp('Stochastic Extended Path:: Something is wrong here (potential bug in extended_path.m)!!!')
diff --git a/tests/ep/burnside.mod b/tests/ep/burnside.mod
index cd863b8215134f5bfa6ebd23a579eb42e6895058..4d0bb6dc37684f78edef466995d30ee8bd36dbd2 100644
--- a/tests/ep/burnside.mod
+++ b/tests/ep/burnside.mod
@@ -50,12 +50,12 @@ options_.ep.stochastic.nodes = 2;
 options_.console_mode = 0;
 
 set_dynare_seed('default');
-ts = extended_path([], 5000, options_, M_, oo_);
+ts = extended_path([], 5000, [], options_, M_, oo_);
 
 options_.ep.stochastic.order = 2;
 options_.ep.IntegrationAlgorithm='Tensor-Gaussian-Quadrature';
 set_dynare_seed('default');
-ts1_4 = extended_path([], 5000, options_, M_, oo_);
+ts1_4 = extended_path([], 5000, [], options_, M_, oo_);
 
 set_dynare_seed('default');
 ytrue=exact_solution(M_,oo_, 800);
diff --git a/tests/ep/linearmodel.mod b/tests/ep/linearmodel.mod
index a36902dd6c4ddc6195febe6daec2b729526b4280..3cadb061aecabf446c4e7d06bbc95ef75791ca16 100644
--- a/tests/ep/linearmodel.mod
+++ b/tests/ep/linearmodel.mod
@@ -33,13 +33,13 @@ options_.ep.order = 0;
 options_.ep.nnodes = 0;
 options_.console_mode = 0;
 
-ts = extended_path([], 10, options_, M_, oo_);
+ts = extended_path([], 10, [], options_, M_, oo_);
 
 options_.ep.stochastic.status = 1;
 options_.ep.IntegrationAlgorithm='Tensor-Gaussian-Quadrature';
 options_.ep.order = 1;
 options_.ep.nnodes = 3;
-sts = extended_path([], 10, options_, M_, oo_);
+sts = extended_path([], 10, [], options_, M_, oo_);
 
 if max(max(abs(ts.data-sts.data))) > 1e-12
    error('extended path algorithm fails in ./tests/ep/linearmodel.mod')
diff --git a/tests/ep/rbc.mod b/tests/ep/rbc.mod
index 4c2e3dc475b5b85984a9cc27075e20370bc47980..a03d0a5f4970743aaf4f45ce5e3fc6a3c7e63e20 100644
--- a/tests/ep/rbc.mod
+++ b/tests/ep/rbc.mod
@@ -75,19 +75,19 @@ steady(nocheck);
 options_.ep.verbosity = 0;
 
 options_.ep.stochastic.order = 0;
-ts0 = extended_path([], 10, options_, M_, oo_);
+ts0 = extended_path([], 10, [], options_, M_, oo_);
 
 options_.ep.stochastic.order = 1;
 options_.ep.stochastic.nodes = 3;
 options_.ep.IntegrationAlgorithm='Tensor-Gaussian-Quadrature';
-ts1_3 = extended_path([], 10, options_, M_, oo_);
+ts1_3 = extended_path([], 10, [], options_, M_, oo_);
 
 options_.ep.stochastic.nodes = 5;
-ts1_5 = extended_path([], 10, options_, M_, oo_);
+ts1_5 = extended_path([], 10, [], options_, M_, oo_);
 
 options_.ep.stochastic.order = 2;
 options_.ep.stochastic.nodes = 3;
-ts2_3 = extended_path([], 10, options_, M_, oo_);
+ts2_3 = extended_path([], 10, [], options_, M_, oo_);
 
 options_.ep.stochastic.nodes = 5;
-ts2_5 = extended_path([], 10, options_, M_, oo_);
+ts2_5 = extended_path([], 10, [], options_, M_, oo_);
diff --git a/tests/ep/rbcii.mod b/tests/ep/rbcii.mod
index 2fa42bffa1daa98658afc16b7cf25e83fe897d6f..a51c01a8f4737a7ccfa25633e62bf21d3f201bb8 100644
--- a/tests/ep/rbcii.mod
+++ b/tests/ep/rbcii.mod
@@ -72,12 +72,12 @@ copyfile('rbcii_steady_state.m','rbcii_steadystate2.m');
     options_.ep.stochastic.nodes = 2;
     options_.console_mode = 0;
 
-    ts = extended_path([], 20, options_, M_, oo_);
+    ts = extended_path([], 20, [], options_, M_, oo_);
 
     options_.ep.stochastic.order = 1;
     options_.ep.IntegrationAlgorithm='Tensor-Gaussian-Quadrature';
 //    profile on
-    ts1_4 = extended_path([], 20, options_, M_, oo_);
+    ts1_4 = extended_path([], 20, [], options_, M_, oo_);
 //    profile off
 //    profile viewer
 @#else