diff --git a/matlab/perfect-foresight-models/perfect_foresight_solver.m b/matlab/perfect-foresight-models/perfect_foresight_solver.m
index 1f2586524e5613797ab3121db2582bc41303473f..a7fa866c53f02ad7541fb0858f17ae190b51fd1c 100644
--- a/matlab/perfect-foresight-models/perfect_foresight_solver.m
+++ b/matlab/perfect-foresight-models/perfect_foresight_solver.m
@@ -1,8 +1,10 @@
-function perfect_foresight_solver()
+function perfect_foresight_solver(no_error_if_learnt_in_is_present)
 % Computes deterministic simulations
 %
 % INPUTS
-%   None
+%   no_error_if_learnt_in_is_present [boolean, optional]
+%       if true, then do not error out if a shocks(learnt_in=…) or endval(learnt_in=…)
+%       block is present
 %
 % OUTPUTS
 %   none
@@ -33,6 +35,13 @@ global M_ options_ oo_ ys0_ ex0_
 
 check_input_arguments(options_, M_, oo_);
 
+if nargin == 0
+    no_error_if_learnt_in_is_present = false;
+end
+if (~isempty(M_.learnt_shocks) || ~isempty(M_.learnt_endval)) && ~no_error_if_learnt_in_is_present
+    error('A shocks(learnt_in=...) or endval(learnt_in=...) block is present. You want to call perfect_foresight_with_expectations_error_setup and perfect_foresight_with_expectations_error_solver.')
+end
+
 periods = options_.periods;
 
 if options_.debug
diff --git a/matlab/perfect-foresight-models/perfect_foresight_with_expectation_errors_solver.m b/matlab/perfect-foresight-models/perfect_foresight_with_expectation_errors_solver.m
index 5c05102ebae46623e2f32b679b22656cb714357f..dad8e57a790d7069ce4699ccda3ccf74a385a35e 100644
--- a/matlab/perfect-foresight-models/perfect_foresight_with_expectation_errors_solver.m
+++ b/matlab/perfect-foresight-models/perfect_foresight_with_expectation_errors_solver.m
@@ -67,7 +67,7 @@ while info_period <= periods
 
     options_.periods = sim_length;
 
-    perfect_foresight_solver;
+    perfect_foresight_solver(true);
 
     if ~oo_.deterministic_simulation.status
         error('perfect_foresight_with_expectation_errors_solver: failed to compute solution for information available at period %d\n', info_period)
diff --git a/tests/deterministic_simulations/pfwee.mod b/tests/deterministic_simulations/pfwee.mod
index fb7f4cf0151b444b95a544d4302767ebfc38fa27..8867998f7ac468a9058e9366621075a3f9074c5c 100644
--- a/tests/deterministic_simulations/pfwee.mod
+++ b/tests/deterministic_simulations/pfwee.mod
@@ -42,11 +42,13 @@ oo_.exo_steady_state = orig_exo_steady_state;
 
 perfect_foresight_setup;
 
-// Information arriving in period 1 (temp shock now)
+verbatim;
+
+% Information arriving in period 1 (temp shock now)
 oo_.exo_simul(2,1) = 1.2;
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 
-// Information arriving in period 2 (temp shock now + permanent shock in future)
+% Information arriving in period 2 (temp shock now + permanent shock in future)
 oo_.exo_simul(3,1) = 1.3;
 oo_.exo_steady_state = 1.1;
 oo_.exo_simul(end, 1) = oo_.exo_steady_state;
@@ -57,11 +59,11 @@ saved_endo = oo_.endo_simul(:, 1);
 saved_exo = oo_.exo_simul(1, :);
 oo_.endo_simul = oo_.endo_simul(:, 2:end);
 oo_.exo_simul = oo_.exo_simul(2:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
-// Information arriving in period 3 (temp shock now + permanent shock in future)
+% Information arriving in period 3 (temp shock now + permanent shock in future)
 oo_.exo_simul(4,1) = 1.4;
 oo_.exo_steady_state = 1.2;
 oo_.exo_simul(end, 1) = oo_.exo_steady_state;
@@ -72,11 +74,11 @@ saved_endo = oo_.endo_simul(:, 1:2);
 saved_exo = oo_.exo_simul(1:2, :);
 oo_.endo_simul = oo_.endo_simul(:, 3:end);
 oo_.exo_simul = oo_.exo_simul(3:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
-// Information arriving in period 6 (permanent shock arriving now)
+% Information arriving in period 6 (permanent shock arriving now)
 oo_.exo_simul(7,1) = 1.1;
 oo_.exo_simul(8,1) = 1.1;
 oo_.exo_steady_state = 1.1;
@@ -88,7 +90,7 @@ saved_endo = oo_.endo_simul(:, 1:5);
 saved_exo = oo_.exo_simul(1:5, :);
 oo_.endo_simul = oo_.endo_simul(:, 6:end);
 oo_.exo_simul = oo_.exo_simul(6:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
@@ -97,3 +99,5 @@ oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 if any(any(pfwee_simul-oo_.endo_simul ~= 0))
     error('Error in perfect_foresight_with_expectation_errors')
 end
+
+end; // verbatim
diff --git a/tests/deterministic_simulations/pfwee_constant_sim_length.mod b/tests/deterministic_simulations/pfwee_constant_sim_length.mod
index efe0d2efa2d217ffcba5b94c1da99b708992fc8e..109d047b2c85dcad6dbeb3ca56100f7d3456acbb 100644
--- a/tests/deterministic_simulations/pfwee_constant_sim_length.mod
+++ b/tests/deterministic_simulations/pfwee_constant_sim_length.mod
@@ -41,11 +41,13 @@ oo_.exo_steady_state = orig_exo_steady_state;
 
 perfect_foresight_setup;
 
-// Information arriving in period 1 (temp shock now)
+verbatim;
+
+% Information arriving in period 1 (temp shock now)
 oo_.exo_simul(2,1) = 1.2;
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 
-// Information arriving in period 2 (temp shock now + permanent shock in future)
+% Information arriving in period 2 (temp shock now + permanent shock in future)
 oo_.exo_simul(3,1) = 1.3;
 oo_.exo_steady_state = 1.1;
 oo_.exo_simul(9:10, 1) = repmat(oo_.exo_steady_state', 2, 1);
@@ -55,11 +57,11 @@ saved_endo = oo_.endo_simul(:, 1);
 saved_exo = oo_.exo_simul(1, :);
 oo_.endo_simul = oo_.endo_simul(:, 2:end);
 oo_.exo_simul = oo_.exo_simul(2:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
-// Information arriving in period 3 (temp shock now + permanent shock in future)
+% Information arriving in period 3 (temp shock now + permanent shock in future)
 oo_.exo_simul(4,1) = 1.4;
 oo_.exo_steady_state = 1.2;
 oo_.exo_simul(9:11, 1) = repmat(oo_.exo_steady_state', 3, 1);
@@ -69,11 +71,11 @@ saved_endo = oo_.endo_simul(:, 1:2);
 saved_exo = oo_.exo_simul(1:2, :);
 oo_.endo_simul = oo_.endo_simul(:, 3:end);
 oo_.exo_simul = oo_.exo_simul(3:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
-// Information arriving in period 6 (permanent shock arriving now)
+% Information arriving in period 6 (permanent shock arriving now)
 oo_.exo_simul(7,1) = 1.1;
 oo_.exo_simul(8,1) = 1.1;
 oo_.exo_steady_state = 1.1;
@@ -85,7 +87,7 @@ saved_endo = oo_.endo_simul(:, 1:5);
 saved_exo = oo_.exo_simul(1:5, :);
 oo_.endo_simul = oo_.endo_simul(:, 6:end);
 oo_.exo_simul = oo_.exo_simul(6:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
@@ -94,3 +96,5 @@ oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 if any(any(pfwee_simul-oo_.endo_simul ~= 0))
     error('Error in perfect_foresight_with_expectation_errors')
 end
+
+end; // verbatim
diff --git a/tests/deterministic_simulations/pfwee_learnt_in.mod b/tests/deterministic_simulations/pfwee_learnt_in.mod
index 780117fd0cf4e12e31b27b900ac91469ad458d40..3a4a45c47ce691693f89f4bf6b8d182d5e3937c3 100644
--- a/tests/deterministic_simulations/pfwee_learnt_in.mod
+++ b/tests/deterministic_simulations/pfwee_learnt_in.mod
@@ -91,11 +91,13 @@ oo_.exo_steady_state = orig_exo_steady_state;
 
 perfect_foresight_setup;
 
-// Information arriving in period 1 (temp shock now and tomorrow)
+verbatim;
+
+% Information arriving in period 1 (temp shock now and tomorrow)
 oo_.exo_simul(2:3,1) = 1.2;
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 
-// Information arriving in period 2 (temp shock now + permanent shock in future)
+% Information arriving in period 2 (temp shock now + permanent shock in future)
 oo_.exo_simul(3,1) = 1.3;
 oo_.exo_steady_state = 1.1;
 oo_.exo_simul(end, 1) = oo_.exo_steady_state;
@@ -106,11 +108,11 @@ saved_endo = oo_.endo_simul(:, 1);
 saved_exo = oo_.exo_simul(1, :);
 oo_.endo_simul = oo_.endo_simul(:, 2:end);
 oo_.exo_simul = oo_.exo_simul(2:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
-// Information arriving in period 3 (temp shocks + permanent shock in future)
+% Information arriving in period 3 (temp shocks + permanent shock in future)
 oo_.exo_simul(4,1) = 1.4;
 oo_.exo_steady_state = 1.1+0.1;
 oo_.exo_simul(8,1) = (1.5/1.2)*oo_.exo_steady_state;
@@ -122,11 +124,11 @@ saved_endo = oo_.endo_simul(:, 1:2);
 saved_exo = oo_.exo_simul(1:2, :);
 oo_.endo_simul = oo_.endo_simul(:, 3:end);
 oo_.exo_simul = oo_.exo_simul(3:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
-// Information arriving in period 6 (temp shocks + permanent shock)
+% Information arriving in period 6 (temp shocks + permanent shock)
 oo_.exo_simul(7,1) = 1*0.8;
 oo_.exo_simul(8,1) = 1.5*0.8;
 oo_.exo_steady_state = (1.1+0.1)*0.75;
@@ -138,7 +140,7 @@ saved_endo = oo_.endo_simul(:, 1:5);
 saved_exo = oo_.exo_simul(1:5, :);
 oo_.endo_simul = oo_.endo_simul(:, 6:end);
 oo_.exo_simul = oo_.exo_simul(6:end, :);
-perfect_foresight_solver;
+perfect_foresight_solver(true);
 oo_.endo_simul = [ saved_endo oo_.endo_simul ];
 oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 
@@ -147,3 +149,5 @@ oo_.exo_simul = [ saved_exo; oo_.exo_simul ];
 if any(any(pfwee_simul-oo_.endo_simul ~= 0))
     error('Error in perfect_foresight_with_expectation_errors')
 end
+
+end; // verbatim