diff --git a/archreview/plans/R2-09-driver-fleet-batch-plan.md.tasks.json b/archreview/plans/R2-09-driver-fleet-batch-plan.md.tasks.json
index 6790b898..854a47bf 100644
--- a/archreview/plans/R2-09-driver-fleet-batch-plan.md.tasks.json
+++ b/archreview/plans/R2-09-driver-fleet-batch-plan.md.tasks.json
@@ -56,7 +56,7 @@
{
"id": "B2.5",
"subject": "B2: convert the four FOCAS caches to ConcurrentDictionary; FOCAS suite green; merge PR 2",
- "status": "pending",
+ "status": "completed",
"blockedBy": [
"B2.3",
"B2.4"
diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDriver.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDriver.cs
index d2ba8789..e964ca94 100644
--- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDriver.cs
+++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDriver.cs
@@ -1195,17 +1195,17 @@ public sealed class FocasDriver : IDriver, IReadable, IWritable, ITagDiscovery,
/// scale applied at ; integer fields
/// (feed rate, spindle speed) widen to double on store.
///
- public Dictionary LastFixedSnapshots { get; } = new(StringComparer.OrdinalIgnoreCase);
+ public ConcurrentDictionary LastFixedSnapshots { get; } = new(StringComparer.OrdinalIgnoreCase);
/// Gets or sets the last program information snapshot.
public FocasProgramInfo? LastProgramInfo { get; set; }
/// Gets or sets the cached first-axis dynamic snapshot — feeds Program/Number, /MainNumber, /Sequence.
public FocasDynamicSnapshot? LastProgramAxisRef { get; set; }
/// Gets the last timer values by timer kind.
- public Dictionary LastTimers { get; } = [];
+ public ConcurrentDictionary LastTimers { get; } = new();
/// Gets the last servo load percentages by servo name.
- public Dictionary LastServoLoads { get; } = new(StringComparer.OrdinalIgnoreCase);
+ public ConcurrentDictionary LastServoLoads { get; } = new(StringComparer.OrdinalIgnoreCase);
/// Gets the last spindle load percentages by spindle index.
- public Dictionary LastSpindleLoads { get; } = [];
+ public ConcurrentDictionary LastSpindleLoads { get; } = new();
///
/// Gets or sets the per-axis position decimal-place figures fetched once at init via
/// cnc_getfigure (parallel to the axis-name list; index = axis). An auto figure