diff --git a/deps/evalhyd-cpp b/deps/evalhyd-cpp
index 6f17c3e0f32f935c0a4f34dc1d3c6a9ee780497b..8e78a67e961001b479f65879119f7abe752b87d1 160000
--- a/deps/evalhyd-cpp
+++ b/deps/evalhyd-cpp
@@ -1 +1 @@
-Subproject commit 6f17c3e0f32f935c0a4f34dc1d3c6a9ee780497b
+Subproject commit 8e78a67e961001b479f65879119f7abe752b87d1
diff --git a/evalhyd/evalp.py b/evalhyd/evalp.py
index 4639bea84656b00b49dd3766a53443a058a5443c..8c4dd1c5af27ccc83857cfa9549fb9d12448ba29 100644
--- a/evalhyd/evalp.py
+++ b/evalhyd/evalp.py
@@ -14,6 +14,7 @@ def evalp(q_obs: NDArray[dtype('float64')],
           q_thr: NDArray[dtype('float64')] = None,
           events: str = None,
           c_lvl: NDArray[dtype('float64')] = None,
+          q_lvl: NDArray[dtype('float64')] = None,
           t_msk: NDArray[dtype('bool')] = None,
           m_cdt: NDArray[dtype('|S32')] = None,
           bootstrap: Dict[str, int] = None,
@@ -36,6 +37,8 @@ def evalp(q_obs: NDArray[dtype('float64')],
         kwargs['events'] = events
     if c_lvl is not None:
         kwargs['c_lvl'] = c_lvl
+    if q_lvl is not None:
+        kwargs['q_lvl'] = q_lvl
     if t_msk is not None:
         kwargs['t_msk'] = t_msk
     if m_cdt is not None:
@@ -55,6 +58,7 @@ def evalp(q_obs: NDArray[dtype('float64')],
         'q_prd': 4,
         'q_thr': 2,
         'c_lvl': 1,
+        'q_lvl': 1,
         't_msk': 4,
         'm_cdt': 2,
         'dts': 1
diff --git a/evalhyd/src/evalhyd.cpp b/evalhyd/src/evalhyd.cpp
index 47c424d932c41b4dced0ad4bf248039701b64bad..2c2b16ae4e11c8875d2d522aeba7c63f37543df2 100644
--- a/evalhyd/src/evalhyd.cpp
+++ b/evalhyd/src/evalhyd.cpp
@@ -63,6 +63,7 @@ auto evalp(
     const xt::pytensor<double, 2>& q_thr,
     std::optional<std::string> events,
     const std::vector<double>& c_lvl,
+    const std::vector<double>& q_lvl,
     const xt::pytensor<bool, 4>& t_msk,
     const xt::pytensor<std::array<char, 32>, 2>& m_cdt,
     std::optional<std::unordered_map<std::string, int>> bootstrap,
@@ -78,6 +79,7 @@ auto evalp(
         q_thr,
         (events.has_value()) ? events.value() : xtl::missing<std::string>(),
         c_lvl,
+        q_lvl,
         t_msk,
         m_cdt,
         (bootstrap.has_value())
@@ -130,6 +132,7 @@ PYBIND11_MODULE(_evalhyd, m)
         py::arg("q_thr") = xt::pytensor<double, 2>({0}),
         py::arg("events") = py::none(),
         py::arg("c_lvl") = py::list(),
+        py::arg("q_lvl") = py::list(),
         py::arg("t_msk") = xt::pytensor<bool, 4>({0}),
         py::arg("m_cdt") = xt::pytensor<std::array<char, 32>, 2>({0}),
         py::arg("bootstrap") = py::none(),
diff --git a/tests/expected/evalp/CR_QLVL.csv b/tests/expected/evalp/CR_QLVL.csv
new file mode 100644
index 0000000000000000000000000000000000000000..dfefd7e9ae92a09448178e081d471ade3fe9cc3f
--- /dev/null
+++ b/tests/expected/evalp/CR_QLVL.csv
@@ -0,0 +1 @@
+0.00643087,0.0514469
diff --git a/tests/test_probabilist.py b/tests/test_probabilist.py
index 0c14b7aa3f14f08df60e8825a7cafcb34948f187..a846984c8e419e2717055d2bc79290e9a22e5134 100644
--- a/tests/test_probabilist.py
+++ b/tests/test_probabilist.py
@@ -90,6 +90,13 @@ class TestMetrics(unittest.TestCase):
         ) for metric in ('CR', 'AW', 'AWN', 'WS')
     }
 
+    expected_itv_qlvl = {
+        metric: (
+            numpy.genfromtxt(f"./expected/evalp/{metric}_QLVL.csv", delimiter=',')
+            [numpy.newaxis, numpy.newaxis, numpy.newaxis, numpy.newaxis, ...]
+        ) for metric in ('CR',)
+    }
+
     expected_mvr = {
         metric: (
             numpy.genfromtxt(f"./expected/evalp/{metric}.csv", delimiter=',')
@@ -153,6 +160,21 @@ class TestMetrics(unittest.TestCase):
                     self.expected_itv[metric]
                 )
 
+    def test_intervals_qlvl_metrics(self):
+        lvl = numpy.array([50., 80.])
+        qlvl = numpy.array([10., 25., 75., 90])
+        for metric in self.expected_itv_qlvl.keys():
+
+            numpy.set_printoptions(precision=13)
+            m = evalhyd.evalp(_obs, _prd[:, :, [0, 15, 30, 50], :], [metric], c_lvl=lvl, q_lvl=qlvl)[0][0, 0, 0]
+            numpy.savetxt(f"./expected/evalp/{metric}_QLVL.csv", m, delimiter=',', fmt="%.13f")
+
+            with self.subTest(metric=metric):
+                numpy.testing.assert_almost_equal(
+                    evalhyd.evalp(_obs, _prd[:, :, [0, 15, 30, 50], :], [metric], c_lvl=lvl, q_lvl=qlvl)[0],
+                    self.expected_itv_qlvl[metric]
+                )
+
     def test_multivariate_metrics(self):
         n_sit = 5