diff --git a/matlab/AIM_first_order_solver.m b/matlab/AIM_first_order_solver.m
index f0c391013ad187efa67e7e7815607dd5b002aa67..2e6adec8a53dc5aa37bb2c75b37063b1f48fc128 100644
--- a/matlab/AIM_first_order_solver.m
+++ b/matlab/AIM_first_order_solver.m
@@ -77,8 +77,10 @@ function [dr,info]=AIM_first_order_solver(jacobia,M,dr,qz_criterium)
         info(2) = 1.0e+8;
         return
     end
-    [A,B] =transition_matrix(dr);
+    A = kalman_transition_matrix(dr,M.nstatic+(1:M.nspred), 1:M.nspred,...
+                                 M.exo_nbr);
     dr.eigval = eig(A);
+    disp(dr.eigval)
     nd = size(dr.kstate,1);
     nba = nd-sum( abs(dr.eigval) < qz_criterium );
 
diff --git a/matlab/kalman_transition_matrix.m b/matlab/kalman_transition_matrix.m
index 3c3397208dbc2a32ee629c7dfd428f2b312293c3..9252a9fe61c353845f4d4fd45a55c099d0550ef4 100644
--- a/matlab/kalman_transition_matrix.m
+++ b/matlab/kalman_transition_matrix.m
@@ -36,11 +36,9 @@ n_iv = length(iv);
 
 A = zeros(n_iv,n_iv);
 
-i_n_iv = 1:n_iv;
-A(i_n_iv,ic) = dr.ghx(iv,:);
+A(:,ic) = dr.ghx(iv,:);
 
 if nargout>1
-    B = zeros(n_iv,exo_nbr);
-    B(i_n_iv,:) = dr.ghu(iv,:);
+    B = dr.ghu(iv,:);
 end
 
diff --git a/matlab/stochastic_solvers.m b/matlab/stochastic_solvers.m
index 8e4504905bd8ebf770bc5e34d4efa50f9330b16b..1c3971b0e31a50df15d9d2c7ec0441c60f87a95b 100644
--- a/matlab/stochastic_solvers.m
+++ b/matlab/stochastic_solvers.m
@@ -210,7 +210,7 @@ if M_.maximum_endo_lead == 0
         if M_.exo_nbr
             dr.ghu =  -b\jacobia_(:,nz+1:end); 
         end
-        dr.eigval = eig(transition_matrix(dr));
+        dr.eigval = eig(kalman_transition_matrix(dr,nstatic+(1:nspred),1:nspred,M_.exo_nbr));
         dr.full_rank = 1;
         if any(abs(dr.eigval) > options_.qz_criterium)
             temp = sort(abs(dr.eigval));
diff --git a/matlab/transition_matrix.m b/matlab/transition_matrix.m
deleted file mode 100644
index f43364172544bc5845d465fcad019d3505efec29..0000000000000000000000000000000000000000
--- a/matlab/transition_matrix.m
+++ /dev/null
@@ -1,63 +0,0 @@
-function [A,B] = transition_matrix(dr, varargin)
-% function [A,B] = transition_matrix(dr, varargin)
-% Makes transition matrices out of ghx and ghu
-%
-% INPUTS
-%    dr:        structure of decision rules for stochastic simulations
-% varargin:     {1}: M_
-%
-% OUTPUTS
-%    A:         matrix of effects of predetermined variables in linear solution (ghx)
-%    B:         matrix of effects of shocks in linear solution (ghu)
-%
-% SPECIAL REQUIREMENTS
-%    none
-
-% Copyright (C) 2003-2012 Dynare Team
-%
-% This file is part of Dynare.
-%
-% Dynare is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version.
-%
-% Dynare is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
-
-if(length(varargin)<=0)
-    global M_
-else
-    M_=varargin{1};
-end;
-
-exo_nbr = M_.exo_nbr;
-ykmin_ = M_.maximum_endo_lag;
-
-nx = size(dr.ghx,2);
-kstate = dr.kstate;
-ikx = [M_.nstatic+1:M_.nstatic+M_.nspred];
-
-A = zeros(nx,nx);
-k0 = kstate(find(kstate(:,2) <= ykmin_+1),:);
-i0 = find(k0(:,2) == ykmin_+1);
-A(i0,:) = dr.ghx(ikx,:);
-B = zeros(nx,exo_nbr);
-if(isfield(dr,'ghu'))
-    B(i0,:) = dr.ghu(ikx,:);
-end;
-for i=ykmin_:-1:2
-    i1 = find(k0(:,2) == i);
-    n1 = size(i1,1);
-    j = zeros(n1,1);
-    for j1 = 1:n1
-        j(j1) = find(k0(i0,1)==k0(i1(j1),1));
-    end
-    A(i1,i0(j))=eye(n1);
-    i0 = i1;
-end