diff --git a/matlab/DsgeSmoother.m b/matlab/DsgeSmoother.m
index 743454590f273d41b9d79806b41728e268e89ef7..6efd3a4551cc73b05fbdb66c8e1a47505b4a8595 100644
--- a/matlab/DsgeSmoother.m
+++ b/matlab/DsgeSmoother.m
@@ -180,9 +180,7 @@ elseif options_.lik_init == 3           % Diffuse Kalman filter
             Z   = [Z, eye(vobs)];
         end
     end
-    [Ztmp,Stmp,Rtmp,QT,Pstar,Pinf] = schur_statespace_transformation(mf,T,R,Q,options_.qz_criterium,oo_.dr.restrict_var_list);
-    Pinf = QT*Pinf*QT';
-    Pstar = QT*Pstar*QT';
+    [Pstar,Pinf] = compute_Pinf_Pstar(mf,T,R,Q,options_.qz_criterium,oo_.dr.restrict_var_list);
 elseif options_.lik_init == 4           % Start from the solution of the Riccati equation.
     [err, Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(mf,np,vobs)),H);
     mexErrCheck('kalman_steady_state',err);
@@ -263,7 +261,7 @@ if kalman_algo == 2 || kalman_algo == 4
                 if kalman_algo == 4
                     %recompute Schur state space transformation with
                     %expanded state space
-                    [Ztmp,Ttmp,Rtmp,Qtmp,Pstar,Pinf] = schur_statespace_transformation(mf,ST,R1,Q,options_.qz_criterium);
+                    [Pstar,Pinf] = compute_Pinf_Pstar(mf,ST,R1,Q,options_.qz_criterium);
                 else
                     Pstar = blkdiag(Pstar,H);
                     Pinf  = blkdiag(Pinf,zeros(vobs));                    
diff --git a/matlab/schur_statespace_transformation.m b/matlab/compute_Pinf_Pstar.m
similarity index 91%
rename from matlab/schur_statespace_transformation.m
rename to matlab/compute_Pinf_Pstar.m
index b57515df584d81a291c43690981b3f44fa7bf4d6..2fbae5b330d552ccf43b2f38ce318d83b46d7beb 100644
--- a/matlab/schur_statespace_transformation.m
+++ b/matlab/compute_Pinf_Pstar.m
@@ -1,4 +1,4 @@
-function [Z,ST,R1,QT,Pstar,Pinf] = schur_statespace_transformation(mf,T,R,Q,qz_criterium, restrict_columns)
+function [Pstar,Pinf] = compute_Pinf_Pstar(mf,T,R,Q,qz_criterium, restrict_columns)
 % function [Z,ST,QT,R1,Pstar,Pinf] = schur_statespace_transformation(mf,T,R,Q,qz_criterium, restrict_columns)
 % Kitagawa transformation of state space system with a quasi-triangular
 % transition matrix with unit roots at the top, but excluding zero columns of the transition matrix. 
@@ -20,10 +20,6 @@ function [Z,ST,R1,QT,Pstar,Pinf] = schur_statespace_transformation(mf,T,R,Q,qz_c
 %   qz_criterium [double]     numerical criterium for unit roots   
 %  
 % OUTPUTS 
-%   Z            [double]     transformed matrix of measurement equation
-%   ST           [double]     tranformed matrix of transition
-%   R1           [double]     tranformed matrix of structural shock effects
-%   QT           [double]     matrix of Schur vectors
 %   Pstar        [double]     matrix of covariance of stationary part
 %   Pinf         [double]     matrix of covariance initialization for
 %                             nonstationary part    
@@ -103,7 +99,6 @@ if i == nk+1
     c = ST(nk+1,:)*(Pstar(:,nk+2:end)*ST(nk1,nk+2:end)')+ST(nk1,nk1)*ST(nk1,nk+2:end)*Pstar(nk+2:end,nk1);
     Pstar(nk1,nk1)=(B(nk1,nk1)+c)/(1-ST(nk1,nk1)*ST(nk1,nk1));
 end
-Z = QT(mf,:);
 
 % stochastic trends with no influence on observed variables are
 % arbitrarily initialized to zero
@@ -115,4 +110,6 @@ for k = 1:nk
     end
 end
 
+Pinf = QT*Pinf*QT';
+Pstar = QT*Pstar*QT';
 
diff --git a/matlab/dsge_likelihood.m b/matlab/dsge_likelihood.m
index 6777b39965ce1cb2be14320fd6553dd426699314..f14682115c308ab3313df2bfa58f42539153fd01 100644
--- a/matlab/dsge_likelihood.m
+++ b/matlab/dsge_likelihood.m
@@ -111,7 +111,7 @@ function [fval,info,exit_flag,DLIK,Hess,SteadyState,trend_coeff,Model,DynareOpti
 %! @sp 2
 %! @strong{This function calls:}
 %! @sp 1
-%! @ref{dynare_resolve}, @ref{lyapunov_symm}, @ref{schur_statespace_transformation}, @ref{kalman_filter_d}, @ref{missing_observations_kalman_filter_d}, @ref{univariate_kalman_filter_d}, @ref{kalman_steady_state}, @ref{getH}, @ref{kalman_filter}, @ref{score}, @ref{AHessian}, @ref{missing_observations_kalman_filter}, @ref{univariate_kalman_filter}, @ref{priordens}
+%! @ref{dynare_resolve}, @ref{lyapunov_symm}, @ref{compute_Pinf_Pstar}, @ref{kalman_filter_d}, @ref{missing_observations_kalman_filter_d}, @ref{univariate_kalman_filter_d}, @ref{kalman_steady_state}, @ref{getH}, @ref{kalman_filter}, @ref{score}, @ref{AHessian}, @ref{missing_observations_kalman_filter}, @ref{univariate_kalman_filter}, @ref{priordens}
 %! @end deftypefn
 %@eod:
 
@@ -380,15 +380,11 @@ switch DynareOptions.lik_init
             error(['The model requires Diffuse filter, but you specified a different Kalman filter. You must set options_.kalman_algo ' ...
                    'to 0 (default), 3 or 4'])
     end
-    [Ztmp,Ttmp,Rtmp,QT,Pstar,Pinf] = schur_statespace_transformation(Z,T,R,Q,DynareOptions.qz_criterium,[1:length(T)]);
-    Pinf = QT*Pinf*QT';
-    Pstar = QT*Pstar*QT';
-    Z1=Ztmp*0;
-    for jz=1:length(Z)
-        Z1(jz,Z(jz))=1;
+    [Pstar,Pinf] = compute_Pinf_Pstar(Z,T,R,Q,DynareOptions.qz_criterium,[1:length(T)]);
+    Z =zeros(length(BayesInfo.mf),size(T,1));
+    for i = 1:length(BayesInfo.mf)
+        Z(i,BayesInfo.mf(i))=1;
     end
-    Z=Z1;
-    clear Ztmp Z1
     Zflag = 1;
     % Run diffuse kalman filter on first periods.
     if (kalman_algo==3)