diff --git a/src/python_spectrometer/core.py b/src/python_spectrometer/core.py
index 97beff051070cf4476f0add39ff5f648f7cc054f..3ae8ef417b8f7fd26ca528e15a01461772a53441 100644
--- a/src/python_spectrometer/core.py
+++ b/src/python_spectrometer/core.py
@@ -1084,6 +1084,8 @@ class Spectrometer:
             keys = self.keys()
         return '\n'.join((str(key) for key in sorted(self.keys()) if key in keys))
 
+    @mock.patch.multiple('numpy.compat.py3k.pickle',
+                         Unpickler=dill.Unpickler, Pickler=dill.Pickler)
     def _savefn(self, file: _pathT, **kwargs):
         file = io.check_path_length(file)
         if self.compress:
diff --git a/src/python_spectrometer/daq/settings.py b/src/python_spectrometer/daq/settings.py
index 600053a9511ba1aec321f3ae70c2b1f11ba8826e..235817c6fe94ea6358e2778c630a20c38c66a15d 100644
--- a/src/python_spectrometer/daq/settings.py
+++ b/src/python_spectrometer/daq/settings.py
@@ -57,7 +57,7 @@ from typing import Any, Callable, Dict, Tuple, TypeVar
 from numpy import finfo
 from packaging import version
 from qutil.domains import BoundedSet, ContinuousInterval, DiscreteInterval, Domain, Interval
-from qutil.functools import cached_property, wraps
+from qutil.functools import wraps
 
 _T = TypeVar("_T")
 _KT = TypeVar("_KT")
@@ -351,53 +351,53 @@ class DAQSettings(dict):
 
     # The _domain_* properties cannot be cached because in principle both ALLOWED_* and Interval
     # can be dynamic.
-    @cached_property
+    @property
     def _domain_fs(self) -> Domain[float]:
         return self.ALLOWED_FS & ContinuousInterval(self._lower_bound_fs, self._upper_bound_fs,
                                                     self.PRECISION)
 
-    @cached_property
+    @property
     def _domain_df(self) -> Domain[float]:
         return self.ALLOWED_DF & ContinuousInterval(self._lower_bound_df, self._upper_bound_df,
                                                     self.PRECISION)
 
-    @cached_property
+    @property
     def _domain_f_max(self) -> Domain[float]:
         return self.ALLOWED_F_MAX & ContinuousInterval(self._lower_bound_f_max,
                                                        self._upper_bound_f_max,
                                                        self.PRECISION)
 
-    @cached_property
+    @property
     def _domain_f_min(self) -> Domain[float]:
         return self.ALLOWED_F_MIN & ContinuousInterval(self._lower_bound_f_min,
                                                        self._upper_bound_f_min,
                                                        self.PRECISION)
 
-    @cached_property
+    @property
     def _domain_nperseg(self) -> Domain[int]:
         return self.ALLOWED_NPERSEG & DiscreteInterval(self._lower_bound_nperseg,
                                                        self._upper_bound_nperseg,
                                                        self.PRECISION)
 
-    @cached_property
+    @property
     def _domain_noverlap(self) -> Domain[int]:
         return self.ALLOWED_NOVERLAP & DiscreteInterval(self._lower_bound_noverlap,
                                                         self._upper_bound_noverlap,
                                                         self.PRECISION)
 
-    @cached_property
+    @property
     def _domain_n_pts(self) -> Domain[int]:
         return self.ALLOWED_N_PTS & DiscreteInterval(self._lower_bound_n_pts,
                                                      self._upper_bound_n_pts,
                                                      self.PRECISION)
 
-    @cached_property
+    @property
     def _domain_n_seg(self) -> Domain[int]:
         return self.ALLOWED_N_SEG & DiscreteInterval(self._lower_bound_n_seg,
                                                      self._upper_bound_n_seg,
                                                      self.PRECISION)
 
-    @cached_property
+    @property
     def _domain_n_avg(self) -> Domain[int]:
         return self.ALLOWED_N_AVG & DiscreteInterval(self._lower_bound_n_avg,
                                                      self._upper_bound_n_avg,