diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_end_to_end_tests/package.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_end_to_end_tests/package.scala
index 8fe48171dc34d8571eacbffe82d53d311e014793..666ba050dc99e667e61d46458ee2ef9c9f2fe0c0 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_end_to_end_tests/package.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_end_to_end_tests/package.scala
@@ -75,7 +75,7 @@ package object integrated_pipeline_end_to_end_tests extends TestDataBuilders {
   def assertValidityOfGeneratedJsonFiles(sample: TestTreeData, treeTask: FileTree,
     tmpResultsFolder: Path, metaInfo: MetaInfoEnv): Assertion = {
     sample.candidateCalculationsWithParsers.foreach { entry =>
-      val task = aFileParsingTask().withFileTree(treeTask).withRelativePath(entry._1).build()
+      val task = aCandidateFound().withFileTree(treeTask).withRelativePath(entry._1).build()
       val fileName = s"${task.calculationGid}.json"
       val targetFolder = tmpResultsFolder.resolve(treeTask.prefixFolder).resolve(treeTask.archiveId)
       val location = targetFolder.resolve(fileName)
@@ -96,7 +96,7 @@ package object integrated_pipeline_end_to_end_tests extends TestDataBuilders {
   def assertValidityOfGeneratedHDF5Files(sample: TestTreeData, treeTask: FileTree,
     tmpResultsFolder: Path, metaInfo: MetaInfoEnv): Assertion = {
     sample.candidateCalculationsWithParsers.foreach { entry =>
-      val task = aFileParsingTask().withFileTree(treeTask).withRelativePath(entry._1).build()
+      val task = aCandidateFound().withFileTree(treeTask).withRelativePath(entry._1).build()
       val id = task.calculationGid
       val archiveId = treeTask.archiveId
       val fileName = s"$id.h5"
diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ArchiveCleanUpFlowSpec.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ArchiveCleanUpFlowSpec.scala
index 20f636f79eb8b0a2145bca0cf7293bfc7265029a..43f29d3fb9e017245b3d84ed765d9d4e1786f7b8 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ArchiveCleanUpFlowSpec.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ArchiveCleanUpFlowSpec.scala
@@ -48,7 +48,7 @@ class ArchiveCleanUpFlowSpec extends WordSpec with MockitoSugar with TestDataBui
 
       "forward file parsing results unchanged" in {
         val f = new DirectoryTreeFixture()
-        val task = anInMemoryResult().withParseResult(ParseResult.ParseWithWarnings).build()
+        val task = aParsingResultInMemory().withParseResult(ParseResult.ParseWithWarnings).build()
         f.source.sendNext(task)
         f.findFirstMatchingStreamElement(be(task))
         verifyZeroInteractions(f.archiveHandler)
@@ -56,7 +56,7 @@ class ArchiveCleanUpFlowSpec extends WordSpec with MockitoSugar with TestDataBui
 
       "forward end file tree signals unchanged" in {
         val f = new DirectoryTreeFixture()
-        val task = aFileParsingSignalEndTree().withFileTree(f.treeTask).build()
+        val task = aTreeScanCompleted().withFileTree(f.treeTask).build()
         f.source.sendNext(task)
         f.findFirstMatchingStreamElement(be(task))
         verifyZeroInteractions(f.archiveHandler)
@@ -70,7 +70,7 @@ class ArchiveCleanUpFlowSpec extends WordSpec with MockitoSugar with TestDataBui
 
     "forward file parsing results unchanged" in {
       val f = new ZipArchiveTreeFixture()
-      val task = anInMemoryResult().withParseResult(ParseResult.ParseWithWarnings).build()
+      val task = aParsingResultInMemory().withParseResult(ParseResult.ParseWithWarnings).build()
       f.source.sendNext(task)
       f.findFirstMatchingStreamElement(be(task))
       verifyZeroInteractions(f.archiveHandler)
@@ -78,7 +78,7 @@ class ArchiveCleanUpFlowSpec extends WordSpec with MockitoSugar with TestDataBui
 
     "forward end file tree signals unchanged" in {
       val f = new ZipArchiveTreeFixture()
-      val task = aFileParsingSignalEndTree().withFileTree(f.treeTask).withTaskCount(1).build()
+      val task = aTreeScanCompleted().withFileTree(f.treeTask).withTaskCount(1).build()
       f.source.sendNext(task)
       f.findFirstMatchingStreamElement(be(task))
       verifyZeroInteractions(f.archiveHandler)
@@ -87,8 +87,8 @@ class ArchiveCleanUpFlowSpec extends WordSpec with MockitoSugar with TestDataBui
     "clean up temporary extracted files once all parsing results for a tree have arrived (end signal arrives last)" in {
       val f = new ZipArchiveTreeFixture()
       val treeTask = f.treeTask.withBasePath("/tmp/mighty/magic")
-      (1 to 4).foreach(_ => f.source.sendNext(anInMemoryResult().withFileTree(treeTask)))
-      f.source.sendNext(aFileParsingSignalEndTree().withFileTree(treeTask).withTaskCount(4))
+      (1 to 4).foreach(_ => f.source.sendNext(aParsingResultInMemory().withFileTree(treeTask)))
+      f.source.sendNext(aTreeScanCompleted().withFileTree(treeTask).withTaskCount(4))
       f.drainStream()
       verify(f.archiveHandler).cleanUpExtractedArchive(Paths.get("/tmp/mighty/magic").toAbsolutePath)
       verifyNoMoreInteractions(f.archiveHandler)
@@ -97,9 +97,9 @@ class ArchiveCleanUpFlowSpec extends WordSpec with MockitoSugar with TestDataBui
     "clean up temporary extracted files once all parsing results for a tree have arrived (parsing result arrives last)" in {
       val f = new ZipArchiveTreeFixture()
       val treeTask = f.treeTask.withBasePath("/tmp/mighty/magic")
-      (1 to 3).foreach(_ => f.source.sendNext(anInMemoryResult().withFileTree(treeTask)))
-      f.source.sendNext(aFileParsingSignalEndTree().withFileTree(treeTask).withTaskCount(4))
-      f.source.sendNext(anInMemoryResult().withFileTree(treeTask))
+      (1 to 3).foreach(_ => f.source.sendNext(aParsingResultInMemory().withFileTree(treeTask)))
+      f.source.sendNext(aTreeScanCompleted().withFileTree(treeTask).withTaskCount(4))
+      f.source.sendNext(aParsingResultInMemory().withFileTree(treeTask))
       f.drainStream()
       verify(f.archiveHandler).cleanUpExtractedArchive(Paths.get("/tmp/mighty/magic").toAbsolutePath)
       verifyNoMoreInteractions(f.archiveHandler)
@@ -108,10 +108,10 @@ class ArchiveCleanUpFlowSpec extends WordSpec with MockitoSugar with TestDataBui
     "handle the same extracted path again after cleaning it up the first time" in {
       val f = new ZipArchiveTreeFixture()
       val treeTask = f.treeTask.withBasePath("/tmp/mighty/magic")
-      (1 to 4).foreach(_ => f.source.sendNext(anInMemoryResult().withFileTree(treeTask)))
-      f.source.sendNext(aFileParsingSignalEndTree().withFileTree(treeTask).withTaskCount(4))
-      (1 to 4).foreach(_ => f.source.sendNext(anInMemoryResult().withFileTree(treeTask)))
-      f.source.sendNext(aFileParsingSignalEndTree().withFileTree(treeTask).withTaskCount(4))
+      (1 to 4).foreach(_ => f.source.sendNext(aParsingResultInMemory().withFileTree(treeTask)))
+      f.source.sendNext(aTreeScanCompleted().withFileTree(treeTask).withTaskCount(4))
+      (1 to 4).foreach(_ => f.source.sendNext(aParsingResultInMemory().withFileTree(treeTask)))
+      f.source.sendNext(aTreeScanCompleted().withFileTree(treeTask).withTaskCount(4))
       f.drainStream()
       verify(f.archiveHandler, times(2)).cleanUpExtractedArchive(Paths.get("/tmp/mighty/magic").toAbsolutePath)
       verifyNoMoreInteractions(f.archiveHandler)
diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ArchiveUnpackingFlowSpec.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ArchiveUnpackingFlowSpec.scala
index d5215e40f722553359fb655d274641ad38f56b14..1b957960d169cf7c1647e83eeb463aad3960cd3f 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ArchiveUnpackingFlowSpec.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ArchiveUnpackingFlowSpec.scala
@@ -9,7 +9,7 @@ import eu.nomad_lab.TreeType
 import eu.nomad_lab.integrated_pipeline.io_integrations.ArchiveHandler
 import eu.nomad_lab.integrated_pipeline.messages.{ CandidateFound, TreeScanSignal }
 import eu.nomad_lab.integrated_pipeline.stream_components.ArchiveUnpackingFlow
-import eu.nomad_lab.integrated_pipeline_tests.matchers.{ StreamAssertions, FileParsingTaskMatchers }
+import eu.nomad_lab.integrated_pipeline_tests.matchers.{ StreamAssertions, TreeScanSignalMatchers }
 import org.mockito.ArgumentMatchers._
 import org.mockito.Mockito._
 import org.scalatest.mockito.MockitoSugar
@@ -50,7 +50,7 @@ class ArchiveUnpackingFlowSpec extends WordSpec with MockitoSugar with TestDataB
 
       "forward file parsing tasks unchanged" in {
         val f = new DirectoryTreeFixture
-        val task = aFileParsingTask().withFileTree(f.fileTree).build()
+        val task = aCandidateFound().withFileTree(f.fileTree).build()
         f.source.sendNext(task)
         f.findFirstMatchingStreamElement(be(task))
         verifyZeroInteractions(f.archiveHandler)
@@ -58,8 +58,8 @@ class ArchiveUnpackingFlowSpec extends WordSpec with MockitoSugar with TestDataB
 
       "forward end file tree signals unchanged" in {
         val f = new DirectoryTreeFixture()
-        f.source.sendNext(aFileParsingTask().withFileTree(f.fileTree))
-        val task = aFileParsingSignalEndTree().withFileTree(f.fileTree).build()
+        f.source.sendNext(aCandidateFound().withFileTree(f.fileTree))
+        val task = aTreeScanCompleted().withFileTree(f.fileTree).build()
         f.source.sendNext(task)
         f.findFirstMatchingStreamElement(be(task))
         verifyZeroInteractions(f.archiveHandler)
@@ -70,16 +70,16 @@ class ArchiveUnpackingFlowSpec extends WordSpec with MockitoSugar with TestDataB
       "temporarily unpack archive when receiving the first task from a file tree" in {
         val f = new ZipArchiveTreeFixture()
         val treeTask = aFileTree().withTreeType(TreeType.Zip).withBasePath("/foo")
-        val task = aFileParsingTask().withFileTree(treeTask)
+        val task = aCandidateFound().withFileTree(treeTask)
         f.source.sendNext(task)
         f.drainStream()
         verify(f.archiveHandler).extractZipArchive(Paths.get("/foo"))
       }
 
       "add the temporary extracted file path to file parsing tasks" in {
-        import FileParsingTaskMatchers._
+        import TreeScanSignalMatchers._
         val f = new ZipArchiveTreeFixture()
-        val task = aFileParsingTask().withFileTree(f.fileTree).withRelativePath("foo")
+        val task = aCandidateFound().withFileTree(f.fileTree).withRelativePath("foo")
         f.source.sendNext(task)
         f.findFirstMatchingStreamElement(be(a[CandidateFound]) and
           have(relativePath("foo"), extractedPathString(Some("/magic/foo"))))
@@ -87,8 +87,8 @@ class ArchiveUnpackingFlowSpec extends WordSpec with MockitoSugar with TestDataB
 
       "forward end file tree signals unchanged" in {
         val f = new ZipArchiveTreeFixture()
-        f.source.sendNext(aFileParsingTask().withFileTree(f.fileTree))
-        val task = aFileParsingSignalEndTree().withFileTree(f.fileTree).build()
+        f.source.sendNext(aCandidateFound().withFileTree(f.fileTree))
+        val task = aTreeScanCompleted().withFileTree(f.fileTree).build()
         f.source.sendNext(task)
         f.findFirstMatchingStreamElement(be(task))
       }
@@ -98,21 +98,21 @@ class ArchiveUnpackingFlowSpec extends WordSpec with MockitoSugar with TestDataB
 
       "fail if file tree end signal arrive before the start tree signal" in {
         val f = new DirectoryTreeFixture
-        f.source.sendNext(aFileParsingSignalEndTree().withFileTree(f.fileTree).build())
+        f.source.sendNext(aTreeScanCompleted().withFileTree(f.fileTree).build())
         f.expectStreamFailure(be(an[IllegalArgumentException]))
       }
 
       "fail if file parsing task arrives after the end tree signal" in {
         val f = new DirectoryTreeFixture
-        f.source.sendNext(aFileParsingSignalEndTree().withFileTree(f.fileTree).build())
-        f.source.sendNext(aFileParsingTask().withFileTree(f.fileTree).build())
+        f.source.sendNext(aTreeScanCompleted().withFileTree(f.fileTree).build())
+        f.source.sendNext(aCandidateFound().withFileTree(f.fileTree).build())
         f.expectStreamFailure(be(an[IllegalArgumentException]))
       }
 
       "fail if a file tree end signal arrives more than once" in {
         val f = new DirectoryTreeFixture
-        f.source.sendNext(aFileParsingSignalEndTree().withFileTree(f.fileTree).build())
-        f.source.sendNext(aFileParsingSignalEndTree().withFileTree(f.fileTree).build())
+        f.source.sendNext(aTreeScanCompleted().withFileTree(f.fileTree).build())
+        f.source.sendNext(aTreeScanCompleted().withFileTree(f.fileTree).build())
         f.expectStreamFailure(be(an[IllegalArgumentException]))
       }
     }
diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/Builders.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/Builders.scala
index e1ea7f96d6ff6eca72ae8be4b108d2fdf92b2177..aeea283d566473f936ee496f470953cf68918314 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/Builders.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/Builders.scala
@@ -16,14 +16,15 @@ trait TestDataBuilders {
 
   def aFileTree() = BuilderFileTree()
 
-  def aFileParsingTask() = BuilderFileParsingTask()
-  def aFileParsingSignalEndTree() = BuilderFileParsingSignalEndTree()
-  def anInMemoryResult() = BuilderInMemoryResult()
+  def aCandidateFound() = BuilderCandidateFound()
+  def aTreeScanCompleted() = BuilderTreeScanCompleted()
+  def aParsingResultInMemory() = BuilderParsingResultInMemory()
 
   def aTreeParserEventStart() = BuilderTreeParserEventStart()
   def aTreeParserEventCandidate() = BuilderTreeParserEventCandidate()
   def aTreeParserEventEnd() = BuilderTreeParserEventEnd()
   def aTreeParserEventTreeFailure() = BuilderTreeParserEventTreeFailure()
+  def aTreeParserEventScanError() = BuilderTreeParserEventScanError()
 
   def aCalculationParserEventStart() = BuilderCalculationParserEventStart()
   def aCalculationParserEventEnd() = BuilderCalculationParserEventEnd()
@@ -32,13 +33,11 @@ trait TestDataBuilders {
   def aResultWriterEventResult() = BuilderResultWriterEventResult()
   def aResultWriterEventEnd() = BuilderResultWriterEventEnd()
 
-  def aTreeParserEventScanError() = BuilderTreeParserEventScanError()
-
   implicit def build(x: BuilderFileTree): FileTree = x.build()
 
-  implicit def build(x: BuilderFileParsingTask): CandidateFound = x.build()
-  implicit def build(x: BuilderFileParsingSignalEndTree): TreeScanCompleted = x.build()
-  implicit def build(x: BuilderInMemoryResult): ParsingResultInMemory = x.build()
+  implicit def build(x: BuilderCandidateFound): CandidateFound = x.build()
+  implicit def build(x: BuilderTreeScanCompleted): TreeScanCompleted = x.build()
+  implicit def build(x: BuilderParsingResultInMemory): ParsingResultInMemory = x.build()
 
   implicit def build(x: BuilderTreeParserEventStart): TreeParserEventStart = x.build()
   implicit def build(x: BuilderTreeParserEventCandidate): TreeParserEventCandidate = x.build()
@@ -81,7 +80,7 @@ object MessageBuilders {
     )
   }
 
-  case class BuilderFileParsingTask(
+  case class BuilderCandidateFound(
       private val fileTree: FileTree = BuilderFileTree().build(),
       private val relativePath: Path = defaultPath,
       private val parserName: String = defaultParser,
@@ -102,14 +101,14 @@ object MessageBuilders {
     )
   }
 
-  case class BuilderFileParsingSignalEndTree(
+  case class BuilderTreeScanCompleted(
       private val fileTree: FileTree = BuilderFileTree().build(),
       private val numTasks: Long = -1
   ) {
 
     def withFileTree(tree: FileTree) = copy(fileTree = tree)
     def withBasePath(path: Path) = copy(fileTree = fileTree.copy(treeBasePath = path))
-    def withBasePath(path: String): BuilderFileParsingSignalEndTree = withBasePath(Paths.get(path))
+    def withBasePath(path: String): BuilderTreeScanCompleted = withBasePath(Paths.get(path))
     def withTreeType(newType: TreeType) = copy(fileTree = fileTree.copy(treeType = newType))
     def withTaskCount(count: Long) = copy(numTasks = count)
 
@@ -119,8 +118,8 @@ object MessageBuilders {
     )
   }
 
-  case class BuilderInMemoryResult(
-      private val task: CandidateFound = BuilderFileParsingTask().build(),
+  case class BuilderParsingResultInMemory(
+      private val task: CandidateFound = BuilderCandidateFound().build(),
       private val result: ParseResult = defaultParseResult,
       private val start: Option[StartedParsingSession] = None,
       private val events: Seq[ParseEvent] = Seq(),
diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/CalculationParsingEngineSpec.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/CalculationParsingEngineSpec.scala
index 543a2d3efb2642e1b0fb789a62bb5bd2430880a2..a3193eaa07a1f859eb52d6033b80e128e8c5fff0 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/CalculationParsingEngineSpec.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/CalculationParsingEngineSpec.scala
@@ -5,7 +5,7 @@ import java.nio.file.Paths
 import eu.nomad_lab.TreeType
 import eu.nomad_lab.integrated_pipeline.messages._
 import eu.nomad_lab.integrated_pipeline.{ CalculationParsingEngine, EventListener }
-import eu.nomad_lab.integrated_pipeline_tests.matchers.{ FileParsingResultMatchers, MatcherCalculationParserEventEnd, MatcherCalculationParserEventStart }
+import eu.nomad_lab.integrated_pipeline_tests.matchers.{ FileParsingSignalMatchers, MatcherCalculationParserEventEnd, MatcherCalculationParserEventStart }
 import eu.nomad_lab.meta.KnownMetaInfoEnvs
 import eu.nomad_lab.parsers.ParseResult.ParseResult
 import eu.nomad_lab.parsers._
@@ -37,7 +37,7 @@ class CalculationParsingEngineSpec extends WordSpec with MockitoSugar with TestD
   )
 
   val metaInfo = KnownMetaInfoEnvs.all
-  val sampleParseRequest = aFileParsingTask().withParserName("dummyParser")
+  val sampleParseRequest = aCandidateFound().withParserName("dummyParser")
 
   class Fixture {
     val dummyParserCollection = mock[ParserCollection]
@@ -135,7 +135,7 @@ class CalculationParsingEngineSpec extends WordSpec with MockitoSugar with TestD
       }
 
       "record all events emitted by the parser in the correct order" in {
-        import FileParsingResultMatchers._
+        import FileParsingSignalMatchers._
         val f = new Fixture
         f.prepareParserStandardInvocation()
         val result = f.worker.processSignal(sampleParseRequest).asInstanceOf[FileParsingResult]
@@ -143,7 +143,7 @@ class CalculationParsingEngineSpec extends WordSpec with MockitoSugar with TestD
       }
 
       "handle parsing failures and return an appropriate result" in {
-        import FileParsingResultMatchers._
+        import FileParsingSignalMatchers._
         val f = new Fixture
         f.prepareParserFailureInvocation()
         val result = f.worker.processSignal(sampleParseRequest).asInstanceOf[FileParsingResult]
@@ -151,7 +151,7 @@ class CalculationParsingEngineSpec extends WordSpec with MockitoSugar with TestD
       }
 
       "gracefully fail parsing requests with unknown parsers" in {
-        import FileParsingResultMatchers._
+        import FileParsingSignalMatchers._
         val f = new Fixture
         val anotherRequest = sampleParseRequest.withParserName("nonSenseParser")
         val result = f.worker.processSignal(anotherRequest).asInstanceOf[FileParsingResult]
@@ -177,7 +177,7 @@ class CalculationParsingEngineSpec extends WordSpec with MockitoSugar with TestD
       }
 
       "gracefully fail parsing tasks from zip archives without extracted file path" in {
-        import FileParsingResultMatchers._
+        import FileParsingSignalMatchers._
         val f = new Fixture
         val treeTask = aFileTree().withTreeType(TreeType.Zip)
         val task = sampleParseRequest.withFileTree(treeTask)
@@ -186,7 +186,7 @@ class CalculationParsingEngineSpec extends WordSpec with MockitoSugar with TestD
       }
 
       "gracefully fail parsing requests with unknown or not supported file tree types" in {
-        import FileParsingResultMatchers._
+        import FileParsingSignalMatchers._
         val f = new Fixture
         Seq(TreeType.Unknown, TreeType.File, TreeType.Tar).foreach { treeType =>
           val treeTask = aFileTree().withTreeType(treeType)
@@ -205,7 +205,7 @@ class CalculationParsingEngineSpec extends WordSpec with MockitoSugar with TestD
 
       "forward file tree finished signals unchanged" in {
         val f = new Fixture
-        val signal = aFileParsingSignalEndTree().build()
+        val signal = aTreeScanCompleted().build()
         val result = f.worker.processSignal(signal)
         result should be(signal)
       }
diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/CalculationParsingFlowSpec.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/CalculationParsingFlowSpec.scala
index 25faf0914a02b9c6b6fe1ef34373408b7a11657d..109b1889b2a5ed1c196cca25f74f6bc9d5673221 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/CalculationParsingFlowSpec.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/CalculationParsingFlowSpec.scala
@@ -9,7 +9,7 @@ import eu.nomad_lab.TreeType
 import eu.nomad_lab.integrated_pipeline.{ CalculationParsingEngine, FileTree }
 import eu.nomad_lab.integrated_pipeline.messages._
 import eu.nomad_lab.integrated_pipeline.stream_components._
-import eu.nomad_lab.integrated_pipeline_tests.matchers.{ FileParsingResultMatchers, StreamAssertions }
+import eu.nomad_lab.integrated_pipeline_tests.matchers.{ FileParsingSignalMatchers, StreamAssertions }
 import eu.nomad_lab.parsers.ParseResult
 import org.mockito.ArgumentMatchers._
 import org.mockito.Mockito
@@ -39,7 +39,7 @@ class CalculationParsingFlowSpec extends WordSpec with MockitoSugar with TestDat
       when(myMock.processSignal(any())).thenAnswer(new Answer[FileParsingResult] {
         override def answer(invocation: InvocationOnMock): FileParsingResult = {
           Thread.sleep(3) //pretend that each dummy task consumes a little time
-          anInMemoryResult().
+          aParsingResultInMemory().
             withTask(invocation.getArgument[CandidateFound](0)).
             withParseResult(ParseResult.ParseSuccess).
             build()
@@ -68,7 +68,7 @@ class CalculationParsingFlowSpec extends WordSpec with MockitoSugar with TestDat
     "managing a single worker" should {
 
       "emit parsing results for every incoming parsing request in order of input" in {
-        import FileParsingResultMatchers._
+        import FileParsingSignalMatchers._
         val f = new Fixture(1)
         f.source.sendNext(f.input1).sendNext(f.input2).sendNext(f.input3)
         f.findMatchingStreamElementsOrdered(Seq(
@@ -81,14 +81,14 @@ class CalculationParsingFlowSpec extends WordSpec with MockitoSugar with TestDat
 
       "complete the stage if upstream signals completion before all elements are processed" in {
         val f = new Fixture(1)
-        (1 to 3).foreach(_ => f.source.sendNext(aFileParsingTask()))
+        (1 to 3).foreach(_ => f.source.sendNext(aCandidateFound()))
         f.source.sendComplete()
         f.expectStreamCompletion()
       }
 
       "complete the stage if upstream signals completion after all elements are processed" in {
         val f = new Fixture(1)
-        (1 to 3).foreach(_ => f.source.sendNext(aFileParsingTask()))
+        (1 to 3).foreach(_ => f.source.sendNext(aCandidateFound()))
         f.drainStream()
         f.source.sendComplete()
         f.expectStreamCompletion()
@@ -99,7 +99,7 @@ class CalculationParsingFlowSpec extends WordSpec with MockitoSugar with TestDat
     "managing multiple workers" should {
       "distribute workload among all workers in a balanced way" in {
         val f = new Fixture(4)
-        val dummy = aFileParsingTask().build()
+        val dummy = aCandidateFound().build()
         f.sink.request(Int.MaxValue)
         (1 to 1000).foreach(_ => f.source.sendNext(dummy))
         f.drainStream()
diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ParsingResultsProcessingManagerSpec.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ParsingResultsProcessingManagerSpec.scala
index bb70c64ea8aa87ecf29678227cf707393e129f49..1460c8e19132312dcb4c65fef78c0c6761d7e663 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ParsingResultsProcessingManagerSpec.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/ParsingResultsProcessingManagerSpec.scala
@@ -36,31 +36,31 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
   def twoResultsNoEndReceived(): Fixture = {
     val f = new Fixture
-    f.manager.processSignal(anInMemoryResult().withParseResult(ParseResult.ParseFailure))
-    f.manager.processSignal(anInMemoryResult())
+    f.manager.processSignal(aParsingResultInMemory().withParseResult(ParseResult.ParseFailure))
+    f.manager.processSignal(aParsingResultInMemory())
     f
   }
 
   def oneResultEndWithTwoEntriesReceived(): Fixture = {
     val f = new Fixture
-    f.manager.processSignal(anInMemoryResult().withParseResult(ParseResult.ParseFailure))
-    f.manager.processSignal(aFileParsingSignalEndTree().withTaskCount(2))
+    f.manager.processSignal(aParsingResultInMemory().withParseResult(ParseResult.ParseFailure))
+    f.manager.processSignal(aTreeScanCompleted().withTaskCount(2))
     f
   }
 
   def twoResultsEndWithTwoEntriesReceived(): Fixture = {
     val f = new Fixture
-    f.manager.processSignal(anInMemoryResult().withParseResult(ParseResult.ParseFailure))
-    f.manager.processSignal(anInMemoryResult())
-    f.manager.processSignal(aFileParsingSignalEndTree().withTaskCount(2))
+    f.manager.processSignal(aParsingResultInMemory().withParseResult(ParseResult.ParseFailure))
+    f.manager.processSignal(aParsingResultInMemory())
+    f.manager.processSignal(aTreeScanCompleted().withTaskCount(2))
     f
   }
 
   def fullyProcessedATree(): Fixture = {
     val f = new Fixture
-    f.manager.processSignal(anInMemoryResult().withParseResult(ParseResult.ParseFailure))
-    f.manager.processSignal(anInMemoryResult())
-    f.manager.processSignal(aFileParsingSignalEndTree().withTaskCount(2))
+    f.manager.processSignal(aParsingResultInMemory().withParseResult(ParseResult.ParseFailure))
+    f.manager.processSignal(aParsingResultInMemory())
+    f.manager.processSignal(aTreeScanCompleted().withTaskCount(2))
     f.manager.getNextSignalToEmit()
     f
   }
@@ -72,7 +72,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
       behave like processorWithNoSignalReady(
         () => createFixture().manager,
-        Seq(anInMemoryResult(), aFileParsingSignalEndTree())
+        Seq(aParsingResultInMemory(), aTreeScanCompleted())
       )
 
       behave like readyToAcceptParsingResults(createFixture)
@@ -82,13 +82,13 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
       "register itself with the EventListener upon processing the first message (parsing result)" in {
         val f = createFixture()
-        f.manager.processSignal(anInMemoryResult())
+        f.manager.processSignal(aParsingResultInMemory())
         verify(f.eventMock).registerReporter(f.manager, None)
       }
 
       "register itself with the EventListener upon processing the first message (tree end signal)" in {
         val f = createFixture()
-        f.manager.processSignal(anInMemoryResult())
+        f.manager.processSignal(aParsingResultInMemory())
         verify(f.eventMock).registerReporter(f.manager, None)
       }
     }
@@ -98,7 +98,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
       behave like processorWithNoSignalReady(
         () => createFixture().manager,
-        Seq(anInMemoryResult(), aFileParsingSignalEndTree())
+        Seq(aParsingResultInMemory(), aTreeScanCompleted())
       )
 
       behave like readyToAcceptParsingResultsFromAnotherTree(createFixture)
@@ -109,7 +109,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
       "finish processing a file tree when the associated end signal arrives" in {
         val f = createFixture()
         f.manager.hasSignalToEmit() should be(false)
-        f.manager.processSignal(aFileParsingSignalEndTree().withTaskCount(2))
+        f.manager.processSignal(aTreeScanCompleted().withTaskCount(2))
         verify(f.processingMock).finishProcessingTreeResults(any())
         f.manager.hasSignalToEmit() should be(true)
       }
@@ -121,7 +121,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
       behave like processorWithNoSignalReady(
         () => createFixture().manager,
-        Seq(anInMemoryResult(), aFileParsingSignalEndTree())
+        Seq(aParsingResultInMemory(), aTreeScanCompleted())
       )
 
       behave like readyToAcceptParsingResults(createFixture)
@@ -133,7 +133,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
       "finish processing a file tree when the last associated parsing result arrives" in {
         val f = createFixture()
         f.manager.hasSignalToEmit() should be(false)
-        f.manager.processSignal(anInMemoryResult())
+        f.manager.processSignal(aParsingResultInMemory())
         verify(f.processingMock).finishProcessingTreeResults(any())
         f.manager.hasSignalToEmit() should be(true)
       }
@@ -145,7 +145,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
       behave like processorWithOutboundSignalReady(
         () => createFixture().manager,
-        Seq(anInMemoryResult(), aFileParsingSignalEndTree()),
+        Seq(aParsingResultInMemory(), aTreeScanCompleted()),
         have(
           FileTreeParsingResultMatchers.numParsingTasks(2),
           FileTreeParsingResultMatchers.fileTree(aFileTree())
@@ -200,7 +200,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
       behave like processorWithNoSignalReady(
         () => createFixture().manager,
-        Seq(anInMemoryResult(), aFileParsingSignalEndTree())
+        Seq(aParsingResultInMemory(), aTreeScanCompleted())
       )
 
       behave like readyToAcceptParsingResults(createFixture)
@@ -235,9 +235,9 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
       "be able to process the same file tree again after finishing it once" in {
         val f = createFixture()
-        f.manager.processSignal(anInMemoryResult())
-        f.manager.processSignal(anInMemoryResult())
-        f.manager.processSignal(aFileParsingSignalEndTree().withTaskCount(2))
+        f.manager.processSignal(aParsingResultInMemory())
+        f.manager.processSignal(aParsingResultInMemory())
+        f.manager.processSignal(aTreeScanCompleted().withTaskCount(2))
         verify(f.processingMock, times(2)).finishProcessingTreeResults(aFileTree())
       }
     }
@@ -245,9 +245,9 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
   def readyToAcceptParsingResults(createFixture: () => Fixture): Unit = {
     "process a file parsing result" in {
-      import FileParsingResultMatchers._
+      import FileParsingSignalMatchers._
       val f = createFixture()
-      f.manager.processSignal(anInMemoryResult().withRelativePath("foo"))
+      f.manager.processSignal(aParsingResultInMemory().withRelativePath("foo"))
       val argument: ArgumentCaptor[FileParsingResult] = ArgumentCaptor.forClass(classOf[FileParsingResult])
       verify(f.processingMock, atLeastOnce()).processFileParsingResult(argument.capture())
       val results = argument.getAllValues.asScala
@@ -257,7 +257,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
     "notify the EventListener when a parsing result arrives" in {
       import MatcherResultWriterEventResult._
       val f = createFixture()
-      f.manager.processSignal(anInMemoryResult().withRelativePath("foo"))
+      f.manager.processSignal(aParsingResultInMemory().withRelativePath("foo"))
       val argument: ArgumentCaptor[ResultWriterEvent] = ArgumentCaptor.forClass(classOf[ResultWriterEvent])
       verify(f.eventMock, atLeastOnce()).processEvent(any(), argument.capture())
       val results = argument.getAllValues.asScala.collect { case x: ResultWriterEventResult => x }
@@ -267,10 +267,10 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
 
   def readyToAcceptParsingResultsFromAnotherTree(createFixture: () => Fixture): Unit = {
     "process a file parsing result from another file tree" in {
-      import FileParsingResultMatchers._
+      import FileParsingSignalMatchers._
       val f = createFixture()
       val myFileTree = aFileTree().withBasePath("/universe/magic")
-      f.manager.processSignal(anInMemoryResult().withFileTree(myFileTree).withRelativePath("bar"))
+      f.manager.processSignal(aParsingResultInMemory().withFileTree(myFileTree).withRelativePath("bar"))
       val argument: ArgumentCaptor[FileParsingResult] = ArgumentCaptor.forClass(classOf[FileParsingResult])
       verify(f.processingMock, atLeastOnce()).processFileParsingResult(argument.capture())
       val results = argument.getAllValues.asScala
@@ -283,8 +283,8 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
       import FileTreeParsingResultMatchers._
       val f = createFixture()
       val myFileTree = aFileTree().withBasePath("/universe/magic")
-      f.manager.processSignal(anInMemoryResult().withFileTree(myFileTree))
-      f.manager.processSignal(aFileParsingSignalEndTree().withFileTree(myFileTree).withTaskCount(1))
+      f.manager.processSignal(aParsingResultInMemory().withFileTree(myFileTree))
+      f.manager.processSignal(aTreeScanCompleted().withFileTree(myFileTree).withTaskCount(1))
       f.manager.hasSignalToEmit() should be(true)
       f.manager.getNextSignalToEmit() should have(fileTree(myFileTree), numParsingTasks(1))
     }
@@ -294,14 +294,14 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
     "start processing a file tree when the first signal associated with it arrives (result arrives first)" in {
       val f = createFixture()
       val fileTree = aFileTree().withBasePath("/tmp/foo/random")
-      f.manager.processSignal(anInMemoryResult().withFileTree(fileTree))
+      f.manager.processSignal(aParsingResultInMemory().withFileTree(fileTree))
       verify(f.processingMock, times(1)).startProcessingTreeResults(fileTree)
     }
 
     "start processing a file tree when the first signal associated with it arrives (end signal arrives first)" in {
       val f = createFixture()
       val fileTree = aFileTree().withBasePath("/tmp/foo/random")
-      f.manager.processSignal(aFileParsingSignalEndTree().withFileTree(fileTree))
+      f.manager.processSignal(aTreeScanCompleted().withFileTree(fileTree))
       verify(f.processingMock, times(1)).startProcessingTreeResults(fileTree)
     }
 
@@ -309,7 +309,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
       import MatcherResultWriterEventStart._
       val f = createFixture()
       val fileTree = aFileTree().withBasePath("/tmp/foo/random")
-      f.manager.processSignal(anInMemoryResult().withFileTree(fileTree))
+      f.manager.processSignal(aParsingResultInMemory().withFileTree(fileTree))
       val args: ArgumentCaptor[ResultWriterEvent] = ArgumentCaptor.forClass(classOf[ResultWriterEvent])
       verify(f.eventMock, atLeastOnce()).processEvent(any(), args.capture())
       val events = args.getAllValues.asScala.collect { case x: ResultWriterEventStart => x }
@@ -320,7 +320,7 @@ class ParsingResultsProcessingManagerSpec extends WordSpec with MockitoSugar wit
       import MatcherResultWriterEventStart._
       val f = createFixture()
       val fileTree = aFileTree().withBasePath("/tmp/foo/random")
-      f.manager.processSignal(aFileParsingSignalEndTree().withFileTree(fileTree))
+      f.manager.processSignal(aTreeScanCompleted().withFileTree(fileTree))
       val args: ArgumentCaptor[ResultWriterEvent] = ArgumentCaptor.forClass(classOf[ResultWriterEvent])
       verify(f.eventMock, atLeastOnce()).processEvent(any(), args.capture())
       val events = args.getAllValues.asScala.collect { case x: ResultWriterEventStart => x }
diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/TreeScannerSpec.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/TreeScannerSpec.scala
index 5914769a707bb7d426e473f65e5fbc9a8c779082..a99ba7e37ad8013791e385fd6593575bde111144 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/TreeScannerSpec.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/TreeScannerSpec.scala
@@ -46,7 +46,7 @@ class TreeScannerSpec extends WordSpec with TestDataBuilders with MockitoSugar
 
   def noTaskReceived(): Fixture = {
     val data: Iterator[Either[TreeParserEventScanError, CandidateFound]] = (1 to 3).map { i =>
-      Right(aFileParsingTask().withFileTree(sampleFileTree).withRelativePath(s"file$i").build())
+      Right(aCandidateFound().withFileTree(sampleFileTree).withRelativePath(s"file$i").build())
     }.iterator
     new Fixture(data)
   }
@@ -132,11 +132,11 @@ class TreeScannerSpec extends WordSpec with TestDataBuilders with MockitoSugar
       behave like processorWithOutboundSignalReady(
         () => createFixture().treeParser,
         Seq(aFileTree()),
-        be(a[CandidateFound]) and have(FileParsingTaskMatchers.relativePath("file1"))
+        be(a[CandidateFound]) and have(TreeScanSignalMatchers.relativePath("file1"))
       )
 
       "emit parse requests for all potential calculations in the file tree" in {
-        import FileParsingTaskMatchers._
+        import TreeScanSignalMatchers._
         val f = createFixture()
         val signals = (1 to 3).map { _ => f.treeParser.getNextSignalToEmit() }.collect { case x: CandidateFound => x }
         signals should have length 3
@@ -165,7 +165,7 @@ class TreeScannerSpec extends WordSpec with TestDataBuilders with MockitoSugar
       behave like processorWithOutboundSignalReady(
         () => createFixture().treeParser,
         Seq(aFileTree()),
-        be(a[CandidateFound]) and have(FileParsingTaskMatchers.relativePath("file3"))
+        be(a[CandidateFound]) and have(TreeScanSignalMatchers.relativePath("file3"))
       )
     }
 
@@ -175,11 +175,11 @@ class TreeScannerSpec extends WordSpec with TestDataBuilders with MockitoSugar
       behave like processorWithOutboundSignalReady(
         () => createFixture().treeParser,
         Seq(aFileTree()),
-        be(a[TreeScanCompleted]) and have(FileParsingTaskMatchers.numParsingTasks(3))
+        be(a[TreeScanCompleted]) and have(TreeScanSignalMatchers.numParsingTasks(3))
       )
 
       "emit an end tree signal with the correct number of entries" in {
-        import FileParsingTaskMatchers._
+        import TreeScanSignalMatchers._
         val f = createFixture()
         val result = f.treeParser.getNextSignalToEmit()
         result should be(a[TreeScanCompleted])
diff --git a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/matchers/MessageMatchers.scala b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/matchers/MessageMatchers.scala
index f46ddfb2a76217bcf43f4ae0191a692e7ce0c193..d749ceff2612a9d62d5fe8a47560a8a9b3b2ec07 100644
--- a/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/matchers/MessageMatchers.scala
+++ b/integrated-pipeline/src/test/scala/eu/nomad_lab/integrated_pipeline_tests/matchers/MessageMatchers.scala
@@ -10,16 +10,7 @@ import eu.nomad_lab.parsers.ParseResult.ParseResult
 import eu.nomad_lab.parsers.{ FinishedParsingSession, ParseEvent, StartedParsingSession }
 import org.scalatest.matchers.HavePropertyMatcher
 
-object FileTreeTaskMatchers {
-  def basePath(expectedValue: Path): HavePropertyMatcher[FileTree, Path] =
-    MatcherHelpers.propertyMatcher(
-      propertyName = "tree base path",
-      expected = expectedValue,
-      test = (x: FileTree) => x.treeBasePath
-    )
-}
-
-object FileParsingTaskMatchers {
+object TreeScanSignalMatchers {
   def fileTree(expectedValue: FileTree): HavePropertyMatcher[TreeScanSignal, FileTree] =
     MatcherHelpers.propertyMatcher(
       propertyName = "parent tree task",
@@ -58,7 +49,7 @@ object FileParsingTaskMatchers {
 
 }
 
-object FileParsingResultMatchers {
+object FileParsingSignalMatchers {
 
   def fileTree(expectedValue: FileTree): HavePropertyMatcher[FileParsingSignal, FileTree] =
     MatcherHelpers.propertyMatcher(