diff --git a/src/calng/calcat_utils.py b/src/calng/calcat_utils.py
index 1f6fec910d205ca7d3722cea21250637819f6811..9d394f047a435040f8669ca89d3eb14f8b5bb0f2 100644
--- a/src/calng/calcat_utils.py
+++ b/src/calng/calcat_utils.py
@@ -272,6 +272,7 @@ class BaseCalcatFriend:
         self.status_prefix = status_prefix
         self.cached_constants = {}
         self.cached_constants_lock = threading.Lock()
+        self.api_lock = threading.Lock()
 
         if not secrets_fn.is_file():
             self.device.log_status_warn(
@@ -483,7 +484,8 @@ class BaseCalcatFriend:
         # TODO: do we want to use asyncio / "modern" async?
         # TODO: consider moving out of this class, closer to correction device
         def aux():
-            data = self.get_constant_version(constant)
+            with self.api_lock:
+                data = self.get_constant_version(constant)
             callback(constant, data)
 
         thread = threading.Thread(target=aux)
@@ -496,7 +498,8 @@ class BaseCalcatFriend:
 
         # TODO: warn user about all the things that go wrong
         def aux():
-            data = self.get_specific_constant_version(constant)
+            with self.api_lock:
+                data = self.get_specific_constant_version(constant)
             callback(constant, data)
 
         thread = threading.Thread(target=aux)