diff --git a/matlab/get_error_message.m b/matlab/get_error_message.m
index c0227e5179d638e79bfea32795cbd3692ef27aac..af5ee750f67abbd7338ef4272eb8df68b177732c 100644
--- a/matlab/get_error_message.m
+++ b/matlab/get_error_message.m
@@ -168,6 +168,8 @@ switch info(1)
         message = 'Aim: Problem in SPEIG.';
     case 201
         message = 'Particle Filter: Initial covariance of the states is not positive definite. Try a different nonlinear_filter_initialization';
+    case 202
+        message = 'Particle Filter: Initial covariance of the states based on simulation resulted in NaN/Inf. Use pruning or try a different nonlinear_filter_initialization';
     otherwise
         message = 'This case shouldn''t happen. Contact the authors of Dynare';
 end
\ No newline at end of file
diff --git a/matlab/initial_estimation_checks.m b/matlab/initial_estimation_checks.m
index eda094042745e26b8ee943836fe51b42ad3b9b0c..fa4acfcde8211473a2236eba5ffb4719ff9d1a97 100644
--- a/matlab/initial_estimation_checks.m
+++ b/matlab/initial_estimation_checks.m
@@ -235,9 +235,9 @@ if ~isequal(DynareOptions.mode_compute,11) || ...
         fprintf('initial_estimation_checks:: If you think the latter is the case, you should try with different initial values for the estimated parameters.\n')
         error('initial_estimation_checks:: The forecast error variance in the multivariate Kalman filter became singular.')
     end
-    if info(1)==201
-        fprintf('initial_estimation_checks:: Initial covariance of the states is not positive definite. Try a different nonlinear_filter_initialization.\n')
-        error('initial_estimation_checks:: Initial covariance of the states is not positive definite. Try a different nonlinear_filter_initialization.')
+    if info(1)==201 || info(1)==202
+        message=get_error_message(info,DynareOptions);
+        error('initial_estimation_checks:: %s.',message)
     end
     %reset options
     DynareOptions.use_univariate_filters_if_singularity_is_detected=use_univariate_filters_if_singularity_is_detected_old;
diff --git a/matlab/non_linear_dsge_likelihood.m b/matlab/non_linear_dsge_likelihood.m
index 7f34ab2d3e281d610567f9ad201e25f2688b36f0..e69c9eea9c883c9e19db8cdb8029d391f4bdd795 100644
--- a/matlab/non_linear_dsge_likelihood.m
+++ b/matlab/non_linear_dsge_likelihood.m
@@ -152,7 +152,14 @@ switch DynareOptions.particle.initialization
     DynareOptions.pruning = DynareOptions.particle.pruning;
     y_ = simult(DynareResults.steady_state, dr,Model,DynareOptions,DynareResults);
     y_ = y_(dr.order_var(state_variables_idx),2001:5000); %state_variables_idx is in dr-order while simult_ is in declaration order
-    StateVectorVariance = cov(y_');
+    if any(any(isnan(y_))) ||  any(any(isinf(y_))) && ~ DynareOptions.pruning
+        fval = Inf;
+        info(1) = 202;
+        info(4) = 0.1;
+        exit_flag = 0;
+        return;        
+    end
+    StateVectorVariance = cov(y_');       
     DynareOptions.periods = old_DynareOptionsperiods;
     DynareOptions.pruning = old_DynareOptionspruning;
     clear('old_DynareOptionsperiods','y_');