diff --git a/include/evalhyd/evald.hpp b/include/evalhyd/evald.hpp
index ae72beab38001e33ed971acedb4e233812214192..e2f5ddd73e596c5928d8ca0b811b1460181fe506 100644
--- a/include/evalhyd/evald.hpp
+++ b/include/evalhyd/evald.hpp
@@ -3,6 +3,7 @@
 
 #include <unordered_map>
 #include <vector>
+#include <type_traits>
 
 #include <xtensor/xexpression.hpp>
 #include <xtensor/xtensor.hpp>
@@ -144,7 +145,9 @@ namespace evalhyd
     ///       evalhyd::evald(obs, prd, {"NSE"}, "none", 1, -9, msk);
     ///
     /// \endrst
-    template <class D2, class B2>
+    template <class D2, class B2,
+              std::enable_if_t<xt::has_rank_t<D2, 2>::value, int> = 0,
+              std::enable_if_t<xt::has_rank_t<B2, 2>::value, int> = 0>
     std::vector<xt::xarray<double>> evald(
             const xt::xexpression<D2>& q_obs,
             const xt::xexpression<D2>& q_prd,
diff --git a/include/evalhyd/evalp.hpp b/include/evalhyd/evalp.hpp
index d5e4831b71e65bd1e313a2e50d96dd376d1ae9b5..908ac997ab4294f7e41f1eae6590bc56a7008fbc 100644
--- a/include/evalhyd/evalp.hpp
+++ b/include/evalhyd/evalp.hpp
@@ -122,7 +122,10 @@ namespace evalhyd
     ///       evalhyd::evalp(obs, prd, {"CRPS"});
     ///
     /// \endrst
-    template <class D2, class D4, class B4>
+    template <class D2, class D4, class B4,
+              std::enable_if_t<xt::has_rank_t<D2, 2>::value, int> = 0,
+              std::enable_if_t<xt::has_rank_t<D4, 4>::value, int> = 0,
+              std::enable_if_t<xt::has_rank_t<B4, 4>::value, int> = 0>
     std::vector<xt::xarray<double>> evalp(
             const xt::xexpression<D2>& q_obs,
             const xt::xexpression<D4>& q_prd,