diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolResult/ToolRunService.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolResult/ToolRunService.kt
index 36f8edc1610758a4df08c316c6d1b2e62d60e5d9..b537b1c09ce4f0f37171816be76e3d74b5268d85 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolResult/ToolRunService.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolResult/ToolRunService.kt
@@ -2,6 +2,7 @@ package de.fraunhofer.iem.dataprovider.toolResult
 
 import de.fraunhofer.iem.dataprovider.gitlab.RepositoryRepository
 import de.fraunhofer.iem.dataprovider.sarif.Sarif
+import de.fraunhofer.iem.dataprovider.sarif.Tool
 import de.fraunhofer.iem.dataprovider.sarif.asDbObject
 import org.springframework.stereotype.Service
 import java.util.*
@@ -21,30 +22,16 @@ class ToolRunService(
         val repo = repositoryRepository.findById(repoId)
 
         sarif.runs.forEach { run ->
-            val fullName = run.tool.driver.fullName
-            val name = run.tool.driver.name
-            val version = run.tool.driver.version
-
-            val tool =
-                toolRepository.findByFullNameIgnoreCaseAndNameIgnoreCaseAndVersionIgnoreCase(fullName, name, version)
-                    ?: toolRepository.save(run.tool.asDbObject())
-
-            val rules = if (tool.id != null) {
-                ruleRepository.findByTool_Id(tool.id!!).toMutableList()
-            } else {
-                mutableListOf()
-            }
 
-            run.tool.driver.rules.forEach { sarifRule ->
-                if (rules.find { it.sarifRuleId == sarifRule.id } == null) {
-                    val rule = ruleRepository.save(sarifRule.asDbObject())
-                    rules.add(rule)
-                    tool.addRule(rule)
-                }
-            }
+            val tool = findOrCreateTool(run.tool)
+            val rules = findRulesForTool(tool.id)
+
+            createNewRulesAndSaveToTool(run.tool.driver.rules, rules, tool)
+
 
             val toolResults = run.results.map { sarifResult ->
                 val tr = sarifResult.asDbObject()
+                // link rules to results
                 rules.filter { it.sarifRuleId == sarifResult.ruleId }
                     .forEach { it.addResultLocation(tr) }
                 tr
@@ -58,10 +45,42 @@ class ToolRunService(
 
             val result = toolRunRepository.save(toolRun)
             toolRepository.save(tool)
+
             repo.ifPresent {
                 it.addToolResult(result)
                 repositoryRepository.save(it)
             }
         }
     }
+
+    private fun createNewRulesAndSaveToTool(
+        sarifRules: List<de.fraunhofer.iem.dataprovider.sarif.Rule>,
+        rules: MutableList<Rule>,
+        tool: de.fraunhofer.iem.dataprovider.toolResult.Tool
+    ) {
+        sarifRules.forEach { sarifRule ->
+            if (rules.find { it.sarifRuleId == sarifRule.id } == null) {
+                val rule = ruleRepository.save(sarifRule.asDbObject())
+                rules.add(rule)
+                tool.addRule(rule)
+            }
+        }
+    }
+
+    private fun findOrCreateTool(tool: Tool): de.fraunhofer.iem.dataprovider.toolResult.Tool {
+        val fullName = tool.driver.fullName
+        val name = tool.driver.name
+        val version = tool.driver.version
+
+        return toolRepository.findByFullNameIgnoreCaseAndNameIgnoreCaseAndVersionIgnoreCase(fullName, name, version)
+            ?: toolRepository.save(tool.asDbObject())
+    }
+
+    private fun findRulesForTool(id: UUID?): MutableList<Rule> {
+        return if (id != null) {
+            ruleRepository.findByTool_Id(id).toMutableList()
+        } else {
+            mutableListOf()
+        }
+    }
 }
\ No newline at end of file