Index: tol/stdlib/math/stat/models/bayesian/arima/_arma_process.tol
===================================================================
--- tol/stdlib/math/stat/models/bayesian/arima/_arma_process.tol	(revision 004c02115e7c5b655b5d6525805dbc3c074268a3)
+++ tol/stdlib/math/stat/models/bayesian/arima/_arma_process.tol	(revision b643fae35955a6b28f609a7f3c2c10b0a3de85fd)
@@ -354,8 +354,5 @@
     Real _.det_cov_G = 2*VMatSum(Log(SubDiag(_.L_G_sp,0)));
     Real _.det_cov_z = _.det_cov_u + _.det_cov_G;
-    VMatrix _.pi_z = DifEq(_.ar/_.ma,_.z);
-    VMatrix _.G_pi_z = Tra(Tra(_.pi_z)*_.G);
-  //Real _trc.8 = { WriteLn("TRACE Eval.Almagro Creating various "+Time); 0 };
-    VMatrix _.u = solve.LLt(_.L_G, _.G_pi_z);
+    Real _0.5_m_log2_PI_s2 = -0.5*_.m*Log(2*PI*_.s2);
 
     ////////////////////////////////////////////////////////////////////////////
@@ -372,17 +369,37 @@
     };
 
-    VMatrix _.z0 = Get.Z0(_.u);
-    VMatrix _.a0 = Get.A0(_.u);
-    VMatrix _.v = solve.L(_.L_u, _.u); 
-    VMatrix _.a = DifEq(_.ar/_.ma, _.z, _.z0, _.a0);
-    Real _0.5_m_log2_PI_s2 = -0.5*_.m*Log(2*PI*_.s2);
-
-    Real aa = MatDat(VMat2Mat( Tra(_.a)*_.a), 1,1);     
-    Real uu = MatDat(VMat2Mat( Tra(_.u)*_.covi_u*_.u),1,1);
-    Real _.logLH = _0.5_m_log2_PI_s2 - 0.5*
-    (
-      _.det_cov_z+(aa+uu)/_.s2
-    );
+
+    VMatrix _.pi_z = Rand(0,0,0,0);
+    VMatrix _.G_pi_z = Rand(0,0,0,0);
+    VMatrix _.u = Rand(0,0,0,0);
+    VMatrix _.z0 = Rand(0,0,0,0);
+    VMatrix _.a0 = Rand(0,0,0,0);
+    VMatrix _.v = Rand(0,0,0,0);
+    VMatrix _.a = Rand(0,0,0,0);
+
+    Real _.logLH = ?;
+
+    ////////////////////////////////////////////////////////////////////////////
+    Real LogLH.Z(VMatrix z)
+    ////////////////////////////////////////////////////////////////////////////
+    {
+      VMatrix _.z := z;
+      VMatrix _.pi_z := DifEq(_.ar/_.ma,_.z);
+      VMatrix _.G_pi_z := Tra(Tra(_.pi_z)*_.G);
+    //Real _trc.8 = { WriteLn("TRACE Eval.Almagro Creating various "+Time); 0 };
+      VMatrix _.u := solve.LLt(_.L_G, _.G_pi_z);
+      VMatrix _.z0 := Get.Z0(_.u);
+      VMatrix _.a0 := Get.A0(_.u);
+      VMatrix _.v := solve.L(_.L_u, _.u); 
+      VMatrix _.a := DifEq(_.ar/_.ma, _.z, _.z0, _.a0);
+
+      Real aa = MatDat(VMat2Mat( Tra(_.a)*_.a), 1,1);     
+      Real uu = MatDat(VMat2Mat( Tra(_.u)*_.covi_u*_.u),1,1);
+      Real _.logLH := _0.5_m_log2_PI_s2 - 0.5*(_.det_cov_z+(aa+uu)/_.s2);
+      _.logLH
+    };
   //Real _trc.9 = { WriteLn("TRACE Eval.Almagro End "+Time); 0 };
+
+    Real _logLH = LogLH.Z(_.z);
 
     ////////////////////////////////////////////////////////////////////////////
