diff --git a/matlab/DiffuseKalmanSmoother3.m b/matlab/DiffuseKalmanSmoother3.m
index 7d725f542a19417353190729f339a60fe429776b..fdbb0d112a4810b4ad005f7beb3d60d855fee13f 100644
--- a/matlab/DiffuseKalmanSmoother3.m
+++ b/matlab/DiffuseKalmanSmoother3.m
@@ -27,17 +27,24 @@ v       	= zeros(pp,smpl);
 a       	= zeros(mm,smpl+1);
 a1			= a;
 aK          = zeros(nk,mm,smpl+nk);
-Fstar   	= zeros(pp,smpl);
-Finf		= zeros(pp,smpl);
+
+if isempty(options_.diffuse_d),
+  smpl_diff = 1;
+else
+  smpl_diff=rank(Pinf1);
+end
+
+Fstar   	= zeros(pp,smpl_diff);
+Finf		= zeros(pp,smpl_diff);
 Ki       	= zeros(mm,pp,smpl);
 Li      	= zeros(mm,mm,pp,smpl);
-Linf    	= zeros(mm,mm,pp,smpl);
-L0      	= zeros(mm,mm,pp,smpl);
-Kstar   	= zeros(mm,pp,smpl);
+Linf    	= zeros(mm,mm,pp,smpl_diff);
+L0      	= zeros(mm,mm,pp,smpl_diff);
+Kstar   	= zeros(mm,pp,smpl_diff);
 P       	= zeros(mm,mm,smpl+1);
 P1			= P;
-Pstar   	= zeros(spstar(1),spstar(2),smpl+1); Pstar(:,:,1) = Pstar1;
-Pinf    	= zeros(spinf(1),spinf(2),smpl+1); Pinf(:,:,1) = Pinf1;
+Pstar   	= zeros(spstar(1),spstar(2),smpl_diff+1); Pstar(:,:,1) = Pstar1;
+Pinf    	= zeros(spinf(1),spinf(2),smpl_diff+1); Pinf(:,:,1) = Pinf1;
 Pstar1 		= Pstar;
 Pinf1  		= Pinf;
 crit   	 	= options_.kalman_tol;