diff --git a/matlab/dsge_likelihood.m b/matlab/dsge_likelihood.m
index 647c17ecbe223e72faf153b267ab4ce486233d64..fc06ff0ddff59c24be3168830566ea02e9716410 100644
--- a/matlab/dsge_likelihood.m
+++ b/matlab/dsge_likelihood.m
@@ -614,7 +614,7 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter
                                                kalman_tol, DynareOptions.riccati_tol, ...
                                                DynareOptions.presample, ...
                                                T,Q,R,H,Z,mm,pp,rr,Zflag,diffuse_periods);
-        end;
+        end
     end
     if analytic_derivation,
         LIK1=LIK;
@@ -623,10 +623,19 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter
         lik=lik1{1};
     end
     if isinf(LIK)
-        if kalman_algo == 1
-            kalman_algo = 2;
+        if DynareOptions.use_univariate_filters_if_singularity_is_detected
+            if kalman_algo == 1
+                kalman_algo = 2;
+            else
+                kalman_algo = 4;
+            end
         else
-            kalman_algo = 4;
+            if isinf(LIK)
+                info = 66;
+                fval = objective_function_penalty_base+1;
+                exit_flag = 0;
+                return
+            end
         end
     else
         if DynareOptions.lik_init==3
diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m
index 93857f2251c903959a594dabbe0eb2cdf87ef929..03f164eeba7cb0246b4e70610a2f2a4659405c5c 100644
--- a/matlab/global_initialization.m
+++ b/matlab/global_initialization.m
@@ -330,6 +330,7 @@ options_.filtered_vars = 0;
 options_.first_obs = 1;
 options_.kalman_algo = 0;
 options_.kalman_tol = 1e-10;
+options_.use_univariate_filters_if_singularity_is_detected = 1;
 options_.riccati_tol = 1e-6;
 options_.lik_algo = 1;
 options_.lik_init = 1;