diff --git a/Manifest.toml b/Manifest.toml
index 2b23b029f8d7c7584b90832b8b26e8cb1441dda2..846393d1bad59809863a236de83a9c78ec1155d4 100644
--- a/Manifest.toml
+++ b/Manifest.toml
@@ -312,7 +312,7 @@ version = "1.9.0"
 
 [[deps.PlanarLarvae]]
 deps = ["DelimitedFiles", "HDF5", "JSON3", "LinearAlgebra", "MAT", "Meshes", "OrderedCollections", "Random", "SHA", "StaticArrays", "Statistics", "StatsBase", "StructTypes"]
-git-tree-sha1 = "bff9bdff96050dffcb681e950ac2547e33c53417"
+git-tree-sha1 = "fe89d5f592c8ba763a13330cde6696f721f828c7"
 repo-rev = "dev"
 repo-url = "https://gitlab.pasteur.fr/nyx/planarlarvae.jl"
 uuid = "c2615984-ef14-4d40-b148-916c85b43307"
diff --git a/src/LarvaDatasets.jl b/src/LarvaDatasets.jl
index e80675b0ba8396b9947717e374a58c3b5686e4fb..fa8a0f1efc5b288759edd8d063978e59d4afbda4 100644
--- a/src/LarvaDatasets.jl
+++ b/src/LarvaDatasets.jl
@@ -628,12 +628,7 @@ function new_write_larva_dataset_hdf5(output_dir, input_data;
     output_file = joinpath(output_dir, output_file)
     c = Threads.Condition()
     h5open(output_file, "w") do h5
-        lock(c)
-        g = try
-            create_group(h5, "samples")
-        finally
-            unlock(c)
-        end
+        create_group(h5, "samples")
         sample(loader, :spine) do _, file, counts, segments
             sampleid, nsegments = counts
             @assert length(segments) == nsegments
@@ -662,45 +657,34 @@ function new_write_larva_dataset_hdf5(output_dir, input_data;
                 name = "sample_$sampleid"
                 # transpose for compatibility with h5py
                 # see issue https://github.com/JuliaIO/HDF5.jl/issues/785
-                lock(c)
-                try
-                    g[name] = permutedims(sample, reverse(1:ndims(sample)))
-                    sampleid += 1
-                    #
-                    d = g[name]
-                    attributes(d)["larva_number"] = convert(Int, trackid)
-                    # we should set `start_point` instead of `reference_time`, to comply with
-                    # the original format, but this would not make sense here due to
-                    # interpolation:
-                    attributes(d)["reference_time"] = anchortime
-                    attributes(d)["behavior"] = string(label)
-                    attributes(d)["path"] = file.source
-                finally
-                    unlock(c)
-                end
+                g[name] = permutedims(sample, reverse(1:ndims(sample)))
+                sampleid += 1
+                #
+                d = g[name]
+                attributes(d)["larva_number"] = convert(Int, trackid)
+                # we should set `start_point` instead of `reference_time`, to comply with the
+                # original format, but this would not make sense here due to interpolation:
+                attributes(d)["reference_time"] = anchortime
+                attributes(d)["behavior"] = string(label)
+                attributes(d)["path"] = file.source
             end
         end
-        lock(c)
-        try
-            attributes(g)["len_traj"] = window_length
-            attributes(g)["len_pred"] = window_length
-            attributes(g)["n_samples"] = total_sample_size
-            # extensions
-            counts = Dataloaders.total(index.targetcounts)
-            if isnothing(labels)
-                h5["labels"] = string.(keys(classcounts))
-                h5["label_counts"] = collect(values(classcounts))
-            else
-                # ensure labels are ordered as provided in input;
-                # see https://gitlab.pasteur.fr/nyx/TaggingBackends/-/issues/24
-                h5["labels"] = labels
-                h5["label_counts"] = [classcounts[Symbol(label)] for label in labels]
-            end
-            if !isnothing(frameinterval)
-                attributes(g)["frame_interval"] = frameinterval
-            end
-        finally
-            unlock(c)
+        attributes(g)["len_traj"] = window_length
+        attributes(g)["len_pred"] = window_length
+        attributes(g)["n_samples"] = total_sample_size
+        # extensions
+        counts = Dataloaders.total(index.targetcounts)
+        if isnothing(labels)
+            h5["labels"] = string.(keys(classcounts))
+            h5["label_counts"] = collect(values(classcounts))
+        else
+            # ensure labels are ordered as provided in input;
+            # see https://gitlab.pasteur.fr/nyx/TaggingBackends/-/issues/24
+            h5["labels"] = labels
+            h5["label_counts"] = [classcounts[Symbol(label)] for label in labels]
+        end
+        if !isnothing(frameinterval)
+            attributes(g)["frame_interval"] = frameinterval
         end
     end
     return output_file