diff --git a/matlab/+occbin/kalman_update_algo_1.m b/matlab/+occbin/kalman_update_algo_1.m
index 697b651f85a6ff3901a5120441b380b079b7f38f..64b350d8180ca3f185e224bdc8a3d316e785e74e 100644
--- a/matlab/+occbin/kalman_update_algo_1.m
+++ b/matlab/+occbin/kalman_update_algo_1.m
@@ -61,11 +61,15 @@ function [a, a1, P, P1, v, T, R, C, regimes_, error_flag, M_, lik, etahat] = kal
 
 warning off
 
-regimes_=[]; %make sure it is always set
-R=[];
-C=[];
+regimes_(1).regime=false;
+regimes_(2).regime=false;
+regimes_(3).regime=false;
+regimes_(1).regimestart=NaN;
+regimes_(2).regimestart=NaN;
+regimes_(3).regimestart=NaN;
+R=NaN(size(RR));
+C=NaN(size(CC));
 lik=Inf;
-etahat=[];
 
 sto.a=a;
 sto.a1=a1;
@@ -111,6 +115,8 @@ else
     [a, a1, P, P1, v, alphahat, etahat, lik, error_flag] = occbin_kalman_update0(a,a1,P,P1,data_index,Z,v,Y,H,QQQ,TT,RR,CC,iF,L,mm, options_.rescale_prediction_error_covariance, options_.occbin.likelihood.IF_likelihood);
 end
 if error_flag
+    etahat=NaN(size(QQQ,1),1);
+    T=NaN(size(TT));
     return;
 end
 
@@ -352,8 +358,8 @@ warning_config;
 end
 
 function [a, a1, P, P1, v, alphahat, etahat, lik, error_flag] = occbin_kalman_update0(a,a1,P,P1,data_index,Z,v,Y,H,QQQ,TT,RR,CC,iF,L,mm, rescale_prediction_error_covariance, IF_likelihood)
-alphahat=[];
-etahat=[];
+alphahat=NaN(size(a));
+etahat=NaN(size(QQQ,1),2);
 lik=Inf; 
 error_flag=0;
 
diff --git a/matlab/dsge_likelihood.m b/matlab/dsge_likelihood.m
index ff5246495ead90144ab7c9df2628318881f14ae8..10f594db02d9e5e55a597d0600fae999bcf4c169 100644
--- a/matlab/dsge_likelihood.m
+++ b/matlab/dsge_likelihood.m
@@ -708,6 +708,12 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter
                                                            DynareOptions.rescale_prediction_error_covariance, ...
                                                            DynareOptions.presample, ...
                                                            T,Q,R,H,Z,mm,pp,rr,Zflag,diffuse_periods, occbin_);
+            if occbin_.status && isinf(LIK)
+                fval = Inf;
+                info(1) = 320;
+                exit_flag = 0;
+                return
+            end
         end
     end
     if analytic_derivation
diff --git a/matlab/get_error_message.m b/matlab/get_error_message.m
index e1a4523b2b825abb445d5d0afcdb5738beb3e4a8..0b700ead6eb743b2cd1bd43f464a62bf74dbec3c 100644
--- a/matlab/get_error_message.m
+++ b/matlab/get_error_message.m
@@ -188,6 +188,8 @@ switch info(1)
         message = 'Occbin: Simulation did not converge, increase maxit or check_ahead_periods.';        
     case 312
         message = 'Occbin: Constraint(s) are binding at the end of the sample.';        
+    case 320
+        message = 'Piecewise linear Kalman filter: There was a problem in obtaining the likelihood.';        
     otherwise
         message = 'This case shouldn''t happen. Contact the authors of Dynare';
 end
\ No newline at end of file
diff --git a/matlab/kalman/likelihood/missing_observations_kalman_filter.m b/matlab/kalman/likelihood/missing_observations_kalman_filter.m
index 9f6f9143bdba9ea3c0a3cb7dd6b8b9ead5da9634..9bdbb6f0d1d096c57e9c1249db32d3a8c12e19e8 100644
--- a/matlab/kalman/likelihood/missing_observations_kalman_filter.m
+++ b/matlab/kalman/likelihood/missing_observations_kalman_filter.m
@@ -232,7 +232,7 @@ while notsteady && t<=last
             Qt = Qvec(:,:,t-1:t+1);
         end
         occbin_options.opts_simul.waitbar=0;
-        [ax, a1x, Px, P1x, vx, Tx, Rx, Cx, regimes_(t:t+2), info, M_, likx, etax(t,:)] = occbin.kalman_update_algo_1(a0(:,t-1),a1(:,t-1:t),P0(:,:,t-1),P1(:,:,t-1:t),data_index(t-1:t),Z,vv(:,t-1:t),Y(:,t-1:t),H,Qt,T0,R0,TT(:,:,t-1:t),RR(:,:,t-1:t),CC(:,t-1:t),regimes_(t:t+1),M_,oo_,options_,occbin_options);
+        [ax, a1x, Px, P1x, vx, Tx, Rx, Cx, regimes_(t:t+2), info, M_, likx] = occbin.kalman_update_algo_1(a0(:,t-1),a1(:,t-1:t),P0(:,:,t-1),P1(:,:,t-1:t),data_index(t-1:t),Z,vv(:,t-1:t),Y(:,t-1:t),H,Qt,T0,R0,TT(:,:,t-1:t),RR(:,:,t-1:t),CC(:,t-1:t),regimes_(t:t+1),M_,oo_,options_,occbin_options);
         if info
             return
         end