diff --git a/matlab/dr_block.m b/matlab/dr_block.m
index 24243c27c2b6ac64bf698825c03d17f7641c71e7..ce28abdb61ed05a82ecd65aac1d2526a7c0abc87 100644
--- a/matlab/dr_block.m
+++ b/matlab/dr_block.m
@@ -70,10 +70,16 @@ else
     data = M_;
     Size = 1;
 end
-if (options_.bytecode)
-    [zz, data]= bytecode('dynamic','evaluate', z, zx, M_.params, dr.ys, 1, data);
+if options_.bytecode
+    [~, data]= bytecode('dynamic','evaluate', z, zx, M_.params, dr.ys, 1, data);
 else
-    [r, data] = feval([M_.fname '.dynamic'], options_, M_, oo_, dynvars_from_endo_simul(z, M_.maximum_lag+1, M_), zx, M_.params, dr.ys, M_.maximum_lag+1, data);
+    T=NaN(M_.block_structure.dyn_tmp_nbr, 1);
+    it_=M_.maximum_lag+1;
+    y=dynvars_from_endo_simul(z, it_, M_);
+    for blk = 1:length(M_.block_structure.block)
+        funcname = sprintf('%s.block.dynamic_%d', M_.fname, blk);
+        [~, T, data(blk).g1, data(blk).g1_x, data(blk).g1_xd, data(blk).g1_o]=feval(funcname, y, zx, M_.params, dr.ys, T, it_, true);
+    end
 end
 dr.full_rank = 1;
 dr.eigval = [];
diff --git a/preprocessor b/preprocessor
index 92aff91066315b7975f5de60542a255b912278f3..f4d2ce70dafd1331791b2fd96f3468b3f6c103da 160000
--- a/preprocessor
+++ b/preprocessor
@@ -1 +1 @@
-Subproject commit 92aff91066315b7975f5de60542a255b912278f3
+Subproject commit f4d2ce70dafd1331791b2fd96f3468b3f6c103da