diff --git a/src/app/Traits/Versioning.php b/src/app/Traits/Versioning.php
index <HASH>..<HASH> 100644
--- a/src/app/Traits/Versioning.php
+++ b/src/app/Traits/Versioning.php
@@ -17,8 +17,17 @@ trait Versioning
         self::updating(function ($model) {
             $attribute = $model->versioningAttribute();
 
-            if ($model->{$attribute} !==
-                get_class($model)::find($model->getKey())->{$attribute}) {
+            \DB::beginTransaction();
+
+            get_class($model)::lockForUpdate()
+                ->where($model->getKeyName(), $model->getKey())
+                ->get();
+
+            $version = get_class($model)::sharedLock()
+                ->find($model->getKey())
+                ->{$attribute};
+
+            if ($model->{$attribute} !== $version) {
                 throw new ConflictHttpException(__(
                     'The state of the current entity has changed since you read it and cannot be saved.',
                     ['class' => get_class($model)]
@@ -27,6 +36,10 @@ trait Versioning
 
             $model->{$attribute}++;
         });
+
+        self::updated(function ($model) {
+            \DB::commit();
+        });
     }
 
     private function versioningAttribute()
adds sharedLock to avoid concurrency update