diff --git a/src/main/kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt
index d109539eb14b293f610436b75173db39ed0cb6a5..afe103281736dcb63cf17f504b70b06af15499a3 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt
@@ -25,6 +25,8 @@ class KPIEntity(
     @CurrentTimestamp(event = [EventType.INSERT])
     @Column(name = "timestamp")
     var createdAt: Timestamp? = null,
+    // Add a version field for optimistic locking
+    @Version @Column(name = "version", nullable = false) var version: Long? = null,
 ) {
     fun toRawValueKpi(): RawValueKpi? {
         return try {
diff --git a/src/main/kotlin/de/fraunhofer/iem/app/repository/entity/RepositoryEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/repository/entity/RepositoryEntity.kt
index bedaefde122e73befdadbc0f6cf733b062cf7062..de6f3b4a58ec99c0b5167017341492c90c2e83e7 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/repository/entity/RepositoryEntity.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/repository/entity/RepositoryEntity.kt
@@ -26,6 +26,8 @@ class RepositoryEntity(
     var visualizationConsent: Boolean = false,
     @CurrentTimestamp(event = [EventType.INSERT]) var createdAt: Instant? = null,
     @UpdateTimestamp var lastUpdatedAt: Instant? = null,
+    // Add a version field for optimistic locking
+    @Version @Column(name = "version", nullable = false) var version: Long? = null,
 ) {
     fun getLastToolRun(): ToolRunEntity {
         return toolRuns.first()
diff --git a/src/main/kotlin/de/fraunhofer/iem/app/repository/repository/RepositoryRepository.kt b/src/main/kotlin/de/fraunhofer/iem/app/repository/repository/RepositoryRepository.kt
index c151eaf150cd869b30729f52b7d72d57b9c66876..e4a61beda758267b1395847717250ce9ab7bab69 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/repository/repository/RepositoryRepository.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/repository/repository/RepositoryRepository.kt
@@ -13,11 +13,10 @@ import org.springframework.transaction.annotation.Transactional
 @Transactional(propagation = MANDATORY)
 interface RepositoryRepository : JpaRepository<RepositoryEntity, UUID> {
 
-    @Lock(LockModeType.PESSIMISTIC_READ) fun findByProjectId(projectId: Long): RepositoryEntity?
+    @Lock(LockModeType.OPTIMISTIC) fun findByProjectId(projectId: Long): RepositoryEntity?
 
-    @Lock(LockModeType.PESSIMISTIC_READ)
-    fun findByVisualizationConsentTrue(): List<RepositoryEntity>
+    @Lock(LockModeType.OPTIMISTIC) fun findByVisualizationConsentTrue(): List<RepositoryEntity>
 
-    @Lock(LockModeType.PESSIMISTIC_READ)
+    @Lock(LockModeType.OPTIMISTIC)
     fun findByProjectIdAndVisualizationConsentTrue(projectId: Long): RepositoryEntity?
 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt
index 426224a699102c0de3d6db21a147f6af977d485e..113c623050793d24cc74895dc4e828a93394e179 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt
@@ -15,6 +15,8 @@ class ToolEntity(
     var id: UUID? = null,
     @Column(name = "name", length = 500, nullable = false) val name: String,
     @Enumerated(EnumType.STRING) val toolType: ToolType,
+    // Add a version field for optimistic locking
+    @Version @Column(name = "version", nullable = false) var version: Long? = null,
 ) {
 
     fun toDto(): ToolDto {
diff --git a/src/main/kotlin/de/fraunhofer/iem/app/tool/repository/ToolRepository.kt b/src/main/kotlin/de/fraunhofer/iem/app/tool/repository/ToolRepository.kt
index 57310a20316c74d52e30a124ee7763bb6e910320..bace0fd37cd3bc2f6eb91ac0687f620107521b17 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/tool/repository/ToolRepository.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/tool/repository/ToolRepository.kt
@@ -13,5 +13,5 @@ import org.springframework.transaction.annotation.Transactional
 @Transactional(propagation = MANDATORY)
 interface ToolRepository : JpaRepository<ToolEntity, UUID> {
 
-    @Lock(LockModeType.PESSIMISTIC_READ) fun findByNameIgnoreCase(name: String?): ToolEntity?
+    @Lock(LockModeType.OPTIMISTIC) fun findByNameIgnoreCase(name: String?): ToolEntity?
 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt
index cdd3c02818e68a3ac5dc069980a3cc854a61e992..7c77aa173acb020f1f87b0122ad179e2c60ceb0d 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt
@@ -13,4 +13,6 @@ class LanguageEntity(
     @Column(name = "name") val name: String,
     @Column(name = "percentage") val percentage: Float,
     @ManyToOne @JoinColumn(name = "tool_run_entity_id") val toolRunEntity: ToolRunEntity,
+    // Add a version field for optimistic locking
+    @Version @Column(name = "version", nullable = false) var version: Long? = null,
 )
diff --git a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt
index 37578620970b0631fe4f59bf54659694d38d0c75..ad0db8af13116af620b1f5b7c272ed13fa719bb3 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt
@@ -31,4 +31,6 @@ class ToolRunEntity(
     val languageEntities: MutableSet<LanguageEntity> = mutableSetOf(),
     @CurrentTimestamp(event = [EventType.INSERT]) var createdAt: Instant? = null,
     @UpdateTimestamp var lastUpdatedAt: Instant? = null,
+    // Add a version field for optimistic locking
+    @Version @Column(name = "version", nullable = false) var version: Long? = null,
 )
diff --git a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/repository/ToolRunRepository.kt b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/repository/ToolRunRepository.kt
index 46e793864c0a4240596a3b57a6c0ec7bed616e8f..276a60965f0ecf2891588f4b53a3fbdd83e051be 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/repository/ToolRunRepository.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/repository/ToolRunRepository.kt
@@ -12,6 +12,6 @@ import org.springframework.transaction.annotation.Transactional
 @Repository
 @Transactional(propagation = MANDATORY)
 interface ToolRunRepository : JpaRepository<ToolRunEntity, UUID> {
-    @Lock(LockModeType.PESSIMISTIC_READ)
+    @Lock(LockModeType.OPTIMISTIC)
     fun findFirstByRepository_ProjectIdOrderByCreatedAtDesc(projectId: Long): ToolRunEntity?
 }