diff --git a/include/evalhyd/evald.hpp b/include/evalhyd/evald.hpp
index e2f5ddd73e596c5928d8ca0b811b1460181fe506..8ef12b0e561a65ec77231945a1f7eab41e27e22d 100644
--- a/include/evalhyd/evald.hpp
+++ b/include/evalhyd/evald.hpp
@@ -216,7 +216,7 @@ namespace evalhyd
                 // else if m_cdt provided, use them to generate t_msk
             else if (m_cdt.size() > 0)
             {
-                xt::xtensor<bool, 2> c_msk = xt::zeros<bool>({n_msk, n_tim});
+                B2 c_msk = xt::zeros<bool>({n_msk, n_tim});
 
                 for (int m = 0; m < n_msk; m++)
                     xt::view(c_msk, m) =
@@ -228,7 +228,7 @@ namespace evalhyd
             }
                 // if neither t_msk nor m_cdt provided, generate dummy mask
             else
-                return xt::xtensor<bool, 2>{xt::ones<bool>({std::size_t{1}, n_tim})};
+                return B2({xt::ones<bool>({std::size_t{1}, n_tim})});
         };
 
         auto msk = gen_msk();
@@ -242,7 +242,7 @@ namespace evalhyd
             }
             else if ( transform == "sqrt" )
             {
-                return xt::eval(xt::sqrt(q));
+                return D2(xt::sqrt(q));
             }
             else if ( transform == "inv" )
             {
@@ -250,7 +250,7 @@ namespace evalhyd
                     // determine an epsilon value to avoid zero divide
                     epsilon = xt::mean(q_obs_)() * 0.01;
 
-                return xt::eval(1. / (q + epsilon));
+                return D2(1. / (q + epsilon));
             }
             else if ( transform == "log" )
             {
@@ -258,7 +258,7 @@ namespace evalhyd
                     // determine an epsilon value to avoid log zero
                     epsilon = xt::mean(q_obs_)() * 0.01;
 
-                return xt::eval(xt::log(q + epsilon));
+                return D2(xt::log(q + epsilon));
             }
             else if ( transform == "pow" )
             {
@@ -268,11 +268,11 @@ namespace evalhyd
                         // determine an epsilon value to avoid zero divide
                         epsilon = xt::mean(q_obs_)() * 0.01;
 
-                    return xt::eval(xt::pow(q + epsilon, exponent));
+                    return D2(xt::pow(q + epsilon, exponent));
                 }
                 else
                 {
-                    return xt::eval(xt::pow(q, exponent));
+                    return D2(xt::pow(q, exponent));
                 }
             }
             else
@@ -283,8 +283,8 @@ namespace evalhyd
             }
         };
 
-        auto obs = q_transform(q_obs_);
-        auto prd = q_transform(q_prd_);
+        const D2 obs = q_transform(q_obs_);
+        const D2 prd = q_transform(q_prd_);
 
         // generate bootstrap experiment if requested
         std::vector<xt::xkeep_slice<int>> exp;
diff --git a/include/evalhyd/evalp.hpp b/include/evalhyd/evalp.hpp
index 908ac997ab4294f7e41f1eae6590bc56a7008fbc..fdf58215c9f0de240ef1d6242b89e5425dd38ce7 100644
--- a/include/evalhyd/evalp.hpp
+++ b/include/evalhyd/evalp.hpp
@@ -246,7 +246,7 @@ namespace evalhyd
 
         // generate masks from conditions if provided
         auto gen_msk = [&]() {
-            xt::xtensor<bool, 4> c_msk = xt::zeros<bool>({n_sit, n_ltm, n_msk, n_tim});
+            B4 c_msk = xt::zeros<bool>({n_sit, n_ltm, n_msk, n_tim});
             if (m_cdt.size() > 0)
                 for (int s = 0; s < n_sit; s++)
                     for (int l = 0; l < n_ltm; l++)
@@ -259,7 +259,7 @@ namespace evalhyd
                                     );
             return c_msk;
         };
-        const xt::xtensor<bool, 4> c_msk = gen_msk();
+        const B4 c_msk = gen_msk();
 
         // generate bootstrap experiment if requested
         std::vector<xt::xkeep_slice<int>> b_exp;