diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/boot/ioc/IpfsIoC.scala b/federation-controller-backend/src/main/scala/acab/devcon0/boot/ioc/IpfsIoC.scala
index 0919f1fd300ccac74b2eb34d9508a67dfeca1de8..6cb37e874ff9df34426a031fd9457b7c2fd701f1 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/boot/ioc/IpfsIoC.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/boot/ioc/IpfsIoC.scala
@@ -58,7 +58,8 @@ object IpfsIoC {
     object Service {
 
       val ipfsService: IpfsService = new IpfsServiceImpl(
-        ipfsClient = Output.ipfsClient
+        ipfsClient = Output.ipfsClient,
+        flatRepository = Output.flatRepository
       )
 
       val ipfsClusterService: IpfsClusterService = new IpfsClusterServiceImpl(
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federation/IpfsCidDeltaQueryHandlerImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federation/IpfsCidDeltaQueryHandlerImpl.scala
index 6ffb8a09c067ffabcbf7873bf3ccf86d212cbcc8..0c5d89610b1dde283fc94955e7313d49e59a8623 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federation/IpfsCidDeltaQueryHandlerImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federation/IpfsCidDeltaQueryHandlerImpl.scala
@@ -22,29 +22,29 @@ class IpfsCidDeltaQueryHandlerImpl(
   implicit val logger: Logger[IO] = Slf4jLogger.getLogger[IO]
 
   override def handle(query: IpfsCidDeltaQuery): IO[FederationIpfsCidDelta] = {
-    val removals: List[IpfsCid] = query.delta.removals
+    val removals: Set[IpfsCid] = query.delta.removals
     for
       existingInOtherMembers <- getExistsInOtherMembers(removals, query.delta.federationMemberId)
       orphanCids = getOrphanCids(removals, existingInOtherMembers)
     yield FederationIpfsCidDelta(additions = query.delta.additions, removals = orphanCids)
   }
 
-  private def getOrphanCids(deletingIpfsCids: List[IpfsCid], existingInOtherMembers: List[IpfsCid]): List[IpfsCid] = {
-    deletingIpfsCids.filterNot(existingInOtherMembers.contains(_))
+  private def getOrphanCids(deletingIpfsCids: Set[IpfsCid], existingInOtherMembers: Set[IpfsCid]): Set[IpfsCid] = {
+    deletingIpfsCids.diff(existingInOtherMembers)
   }
 
-  private def getExistsInOtherMembers(ipfsCids: List[IpfsCid], id: FederationMemberId): IO[List[IpfsCid]] = {
+  private def getExistsInOtherMembers(ipfsCids: Set[IpfsCid], id: FederationMemberId): IO[Set[IpfsCid]] = {
     getOtherMembersSharedFolderCid(id)
       .flatMap(getExistingInOtherMembers(ipfsCids, _))
   }
 
   private def getExistingInOtherMembers(
-      ipfsCids: List[IpfsCid],
+      ipfsCids: Set[IpfsCid],
       membersRootIpfsCid: List[(FederationMemberId, IpfsCid)]
-  ): IO[List[IpfsCid]] = {
+  ): IO[Set[IpfsCid]] = {
     for existsResult: List[(IpfsCid, Boolean)] <- membersRootIpfsCid
         .flatTraverse(tuple => federationMemberCidsService.exists(tuple._1, tuple._2, ipfsCids))
-    yield existsResult.filter(_._2).map(_._1)
+    yield existsResult.filter(_._2).map(_._1).toSet
 
   }
 
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federation/IpfsCidDeltaUpdateCommandHandlerImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federation/IpfsCidDeltaUpdateCommandHandlerImpl.scala
index 31ab197a4f6a5c74518589f414ca4500893494d0..f55d9a2ebcd3791baf1b9f124c3d6fc245d03519 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federation/IpfsCidDeltaUpdateCommandHandlerImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federation/IpfsCidDeltaUpdateCommandHandlerImpl.scala
@@ -8,8 +8,6 @@ import acab.devcon0.domain.service._
 import acab.devcon0.domain.service.ipfscid.CopiesService
 import acab.devcon0.domain.service.ipfscid.FacadeService
 import cats.effect.IO
-import org.typelevel.log4cats.Logger
-import org.typelevel.log4cats.slf4j.Slf4jLogger
 
 class IpfsCidDeltaUpdateCommandHandlerImpl(
     ipfsCidFacadeService: FacadeService[IO],
@@ -17,8 +15,6 @@ class IpfsCidDeltaUpdateCommandHandlerImpl(
     ipfsClusterService: IpfsClusterService
 ) extends IpfsCidDeltaUpdateCommandHandler {
 
-  implicit val logger: Logger[IO] = Slf4jLogger.getLogger[IO]
-
   override def handle(cmd: IpfsCidDeltaUpdateCommand): IO[IpfsCidDeltaUpdateEvent[?]] = {
     for
       _ <- handleAdditions(cmd)
@@ -28,7 +24,7 @@ class IpfsCidDeltaUpdateCommandHandlerImpl(
 
   private def handleAdditions(cmd: IpfsCidDeltaUpdateCommand): IO[Unit] = {
     for
-      _ <- ipfsCidCopiesService.increment(cmd.delta.additions.toSet)
+      _ <- ipfsCidCopiesService.increment(cmd.delta.additions)
       _ <- ipfsClusterService.addPins(cmd.delta.additions)
     yield ()
   }
@@ -36,7 +32,7 @@ class IpfsCidDeltaUpdateCommandHandlerImpl(
   private def handleRemovals(cmd: IpfsCidDeltaUpdateCommand): IO[Unit] = {
     for
       _ <- ipfsCidFacadeService.deleteFlats(cmd.delta.removals)
-      _ <- ipfsCidCopiesService.decrement(cmd.delta.removals.toSet)
+      _ <- ipfsCidCopiesService.decrement(cmd.delta.removals)
       _ <- ipfsClusterService.removePins(cmd.delta.removals)
     yield ()
   }
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federationmember/IpfsCidDeltaUpdateCommandHandlerImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federationmember/IpfsCidDeltaUpdateCommandHandlerImpl.scala
index 7c5268c3d825341c77da293b188c5a31e7bbca80..f57046e868eeb2b006ee9b1ad9850d0b438b1176 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federationmember/IpfsCidDeltaUpdateCommandHandlerImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/federationmember/IpfsCidDeltaUpdateCommandHandlerImpl.scala
@@ -40,18 +40,16 @@ class IpfsCidDeltaUpdateCommandHandlerImpl(
     yield FederationMemberIpfsCidDelta(federationMemberId = cmd.id, additions = additions, removals = removals)
   }
 
-  private def getIpfsCidsMemberDeletes(cmd: IpfsCidDeltaUpdateCommand): IO[List[IpfsCid]] = {
+  private def getIpfsCidsMemberDeletes(cmd: IpfsCidDeltaUpdateCommand): IO[Set[IpfsCid]] = {
     val ipfsCid: IpfsCid                                             = cmd.federationMemberChangelogItem.ipfsCid
     val federationMemberId: FederationMemberId                       = cmd.id
     val federationMemberChangelogItem: FederationMemberChangelogItem = cmd.federationMemberChangelogItem
     for
       maybePreviousRootIpfsCid <- getPreviousRootIpfsCid(federationMemberId, federationMemberChangelogItem)
       deletedCids <- maybePreviousRootIpfsCid match
-        case None             => IO(List())
+        case None             => IO(Set())
         case Some(oldIpfsCid) => cidsService.getDeleted(federationMemberId, oldIpfsCid, ipfsCid)
-    yield {
-      deletedCids
-    }
+    yield deletedCids
   }
 
   private def getPreviousRootIpfsCid(
@@ -63,7 +61,7 @@ class IpfsCidDeltaUpdateCommandHandlerImpl(
       .map(_.map(_.ipfsCid))
   }
 
-  private def getIpfsCidsMemberAdds(cmd: IpfsCidDeltaUpdateCommand): IO[List[IpfsCid]] = {
+  private def getIpfsCidsMemberAdds(cmd: IpfsCidDeltaUpdateCommand): IO[Set[IpfsCid]] = {
     val ipfsCid: IpfsCid                                             = cmd.federationMemberChangelogItem.ipfsCid
     val federationMemberId: FederationMemberId                       = cmd.id
     val federationMemberChangelogItem: FederationMemberChangelogItem = cmd.federationMemberChangelogItem
@@ -125,7 +123,7 @@ class IpfsCidDeltaUpdateCommandHandlerImpl(
       allIpfsCidDtos <- IO(IpfsCidMapper.FlatAll.to(ipfsCidFileTree))
       ipfsCid            = cmd.federationMemberChangelogItem.ipfsCid
       federationMemberId = cmd.id
-      allIpfsCids <- IO(allIpfsCidDtos.toList.map(_.cid))
+      allIpfsCids <- IO(allIpfsCidDtos.map(_.cid))
       _           <- cidsService.add(federationMemberId, ipfsCid, allIpfsCids)
       _           <- saveIpfsCidFlatsInner(allIpfsCidDtos)
     yield allIpfsCidDtos
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/ipfscid/SearchQueryHandlerImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/ipfscid/SearchQueryHandlerImpl.scala
index 7526be2da1cf3788ef25bfac861e78323b83a0c8..630d7237836196bd4e627d60dc6a70eebee24857 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/ipfscid/SearchQueryHandlerImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/ipfscid/SearchQueryHandlerImpl.scala
@@ -20,7 +20,7 @@ class SearchQueryHandlerImpl(
   override def handle(query: SearchQuery): IO[IpfsCidSearchResponse] = {
     for
       searchResultIpfsCids <- searchNameService.search(query.searchParameters)
-      ipfsCidDtos          <- facadeService.getFlats(searchResultIpfsCids.result.toSet)
+      ipfsCidDtos          <- facadeService.getFlats(searchResultIpfsCids.result)
       result               <- ipfsCidDtos.toList.traverse(buildIpfsCidMetadataDto)
     yield IpfsCidSearchResponse(result, searchResultIpfsCids.totalCount, searchResultIpfsCids.pageSize)
   }
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/ipfscid/TreeQueryHandlerImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/ipfscid/TreeQueryHandlerImpl.scala
index 24542757477f6ef2d1827cabbdc17c63ef2bca31..dde34a69f59205e4dda2e35d914c85c7bb61b823 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/ipfscid/TreeQueryHandlerImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/adapters/ipfscid/TreeQueryHandlerImpl.scala
@@ -6,16 +6,12 @@ import acab.devcon0.domain.service.IpfsService
 import acab.devcon0.domain.service.ipfscid.FacadeService
 import acab.devcon0.trile.domain.dtos.aliases.IpfsCid
 import cats.effect.IO
-import org.typelevel.log4cats.Logger
-import org.typelevel.log4cats.slf4j.Slf4jLogger
 
 class TreeQueryHandlerImpl(
     facadeService: FacadeService[IO],
     ipfsService: IpfsService
 ) extends TreeQueryHandler {
 
-  implicit val logger: Logger[IO] = Slf4jLogger.getLogger[IO]
-
   override def handle(query: TreeQuery): IO[IpfsCidDto] = {
     query match
       case NodesTreeQuery(maybeIpfsCid) => getNodeTree(maybeIpfsCid)
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/Federation.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/Federation.scala
index 6aabe561e39b9c8cdbf2d40d3b2c670f173123eb..f1a21408b30256cfb3b751afedc5a0dbb77d28b4 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/Federation.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/Federation.scala
@@ -2,4 +2,4 @@ package acab.devcon0.domain.dtos
 
 import acab.devcon0.trile.domain.dtos.aliases.IpfsCid
 
-final case class FederationIpfsCidDelta(additions: List[IpfsCid], removals: List[IpfsCid])
+final case class FederationIpfsCidDelta(additions: Set[IpfsCid], removals: Set[IpfsCid])
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/FederationMember.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/FederationMember.scala
index 87741646d629b06d127af4ee44111fdaa9af80de..1970e486962e8e751b0c4cb80bb89dcdaf67e1a3 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/FederationMember.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/FederationMember.scala
@@ -21,6 +21,6 @@ final case class FederationMemberChangelogItem(ipfsCid: IpfsCid, timestamp: Inst
 
 final case class FederationMemberIpfsCidDelta(
     federationMemberId: FederationMemberId,
-    additions: List[IpfsCid],
-    removals: List[IpfsCid]
+    additions: Set[IpfsCid],
+    removals: Set[IpfsCid]
 )
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/SearchParameters.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/SearchParameters.scala
index d57db7918ff6bda582b21cd07fdb39b281482113..f1f7ae0cd3927c13624ba88a48e077d3739e794f 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/SearchParameters.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/dtos/SearchParameters.scala
@@ -1,4 +1,4 @@
 package acab.devcon0.domain.dtos
 
 case class SearchParameters(term: String, page: Int)
-case class SearchResult[T](parameters: SearchParameters, result: List[T], totalCount: Long, pageSize: Long)
+case class SearchResult[T](parameters: SearchParameters, result: Set[T], totalCount: Long, pageSize: Long)
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/ports/output/repository/federationmember/CidsRepository.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/ports/output/repository/federationmember/CidsRepository.scala
index 7ae4a0c298826a405a8665d9058421ab121fd997..2c4f134181c3063c16eb44291d0c1d8c0b66ccb8 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/ports/output/repository/federationmember/CidsRepository.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/ports/output/repository/federationmember/CidsRepository.scala
@@ -3,9 +3,9 @@ import acab.devcon0.trile.domain.dtos.aliases.FederationMemberId
 import acab.devcon0.trile.domain.dtos.aliases.IpfsCid
 
 trait CidsRepository[F[_]] {
-  def getAll(id: FederationMemberId, rootIpfsCid: IpfsCid): F[List[IpfsCid]]
-  def getDeleted(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): F[List[IpfsCid]]
-  def getAdded(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): F[List[IpfsCid]]
-  def add(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: List[IpfsCid]): F[List[IpfsCid]]
-  def exists(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: List[IpfsCid]): F[List[(IpfsCid, Boolean)]]
+  def getAll(id: FederationMemberId, rootIpfsCid: IpfsCid): F[Set[IpfsCid]]
+  def getDeleted(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): F[Set[IpfsCid]]
+  def getAdded(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): F[Set[IpfsCid]]
+  def add(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: Set[IpfsCid]): F[Set[IpfsCid]]
+  def exists(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: Set[IpfsCid]): F[List[(IpfsCid, Boolean)]]
 }
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/IpfsClusterService.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/IpfsClusterService.scala
index 3968a75bb45e9b2f3180fba3555b26de3853d692..b0729ea82fba0ae39e1a230d646fcde5002fb2a8 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/IpfsClusterService.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/IpfsClusterService.scala
@@ -10,6 +10,6 @@ trait IpfsClusterService {
   def getPeers: IO[IpfsClusterPeers]
   def getPeer(p2pPeerId: P2pPeerId): IO[IpfsClusterPeer]
   def getPeer: IO[IpfsClusterPeer]
-  def addPins(ipfsCids: List[IpfsCid]): IO[Unit]
-  def removePins(ipfsCids: List[IpfsCid]): IO[Unit]
+  def addPins(ipfsCids: Set[IpfsCid]): IO[Unit]
+  def removePins(ipfsCids: Set[IpfsCid]): IO[Unit]
 }
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/IpfsClusterServiceImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/IpfsClusterServiceImpl.scala
index 410157599eef00b099677411cabf9ed681834255..a251f66faf642199d9e74018fec8f3212f7cdf01 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/IpfsClusterServiceImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/IpfsClusterServiceImpl.scala
@@ -32,12 +32,12 @@ class IpfsClusterServiceImpl(client: IpfsClusterClient) extends IpfsClusterServi
     IORetry.fibonacci(getPeerIO)
   }
 
-  override def addPins(ipfsCids: List[IpfsCid]): IO[Unit] = {
-    ipfsCids.traverse(addPin).void
+  override def addPins(ipfsCids: Set[IpfsCid]): IO[Unit] = {
+    ipfsCids.toSeq.traverse(addPin).void
   }
 
-  override def removePins(ipfsCids: List[IpfsCid]): IO[Unit] = {
-    ipfsCids.traverse(client.removePin).void
+  override def removePins(ipfsCids: Set[IpfsCid]): IO[Unit] = {
+    ipfsCids.toSeq.traverse(client.removePin).void
   }
   private def addPin(ipfsCid: IpfsCid): IO[Unit] = {
     IORetry.fibonacci(client.addPin(ipfsCid))
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/federationmember/CidsService.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/federationmember/CidsService.scala
index 1bddeda916a3192bb801d09f2e1e9a995f6829eb..eacdcb1c3150235b0a664b63545c00c608a322c7 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/federationmember/CidsService.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/federationmember/CidsService.scala
@@ -3,9 +3,9 @@ import acab.devcon0.trile.domain.dtos.aliases.FederationMemberId
 import acab.devcon0.trile.domain.dtos.aliases.IpfsCid
 
 trait CidsService[F[_]] {
-  def getAll(id: FederationMemberId, rootIpfsCid: IpfsCid): F[List[IpfsCid]]
-  def getDeleted(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): F[List[IpfsCid]]
-  def getAdded(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): F[List[IpfsCid]]
-  def add(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: List[IpfsCid]): F[List[IpfsCid]]
-  def exists(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: List[IpfsCid]): F[List[(IpfsCid, Boolean)]]
+  def getAll(id: FederationMemberId, rootIpfsCid: IpfsCid): F[Set[IpfsCid]]
+  def getDeleted(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): F[Set[IpfsCid]]
+  def getAdded(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): F[Set[IpfsCid]]
+  def add(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: Set[IpfsCid]): F[Set[IpfsCid]]
+  def exists(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: Set[IpfsCid]): F[List[(IpfsCid, Boolean)]]
 }
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/federationmember/CidsServiceImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/federationmember/CidsServiceImpl.scala
index b06d80b1b0101f43ce8c8d7812d226a7de2ec768..a3082bc4a26360d490a781dd7395f5fc4f3c1704 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/federationmember/CidsServiceImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/federationmember/CidsServiceImpl.scala
@@ -7,26 +7,26 @@ import cats.effect.IO
 
 class CidsServiceImpl(repository: CidsRepository[IO]) extends CidsService[IO] {
 
-  override def getAll(id: FederationMemberId, rootIpfsCid: IpfsCid): IO[List[IpfsCid]] = {
+  override def getAll(id: FederationMemberId, rootIpfsCid: IpfsCid): IO[Set[IpfsCid]] = {
     repository.getAll(id, rootIpfsCid)
   }
 
-  override def getDeleted(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): IO[List[IpfsCid]] = {
+  override def getDeleted(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): IO[Set[IpfsCid]] = {
     repository.getDeleted(id, oldIpfsCid, newIpfsCid)
   }
 
-  override def getAdded(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): IO[List[IpfsCid]] = {
+  override def getAdded(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): IO[Set[IpfsCid]] = {
     repository.getAdded(id, oldIpfsCid, newIpfsCid)
   }
 
-  override def add(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: List[IpfsCid]): IO[List[IpfsCid]] = {
+  override def add(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: Set[IpfsCid]): IO[Set[IpfsCid]] = {
     repository.add(id, rootIpfsCid, ipfsCids)
   }
 
   override def exists(
       id: FederationMemberId,
       rootIpfsCid: IpfsCid,
-      ipfsCids: List[IpfsCid]
+      ipfsCids: Set[IpfsCid]
   ): IO[List[(IpfsCid, Boolean)]] = {
     repository.exists(id, rootIpfsCid, ipfsCids)
   }
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/ipfscid/FacadeService.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/ipfscid/FacadeService.scala
index 2d4ada2f2b3826c818782ceb56cbe27c768bf2a4..50dded72513da988bf2c838e451105f1513c42c0 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/ipfscid/FacadeService.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/ipfscid/FacadeService.scala
@@ -10,7 +10,7 @@ trait FacadeService[F[_]] {
   def getFlats(ipfsCids: Set[IpfsCid]): F[Set[IpfsCidDto]]
   def saveFlat(ipfsCidDto: IpfsCidDto): F[IpfsCidDto]
   def saveFlats(ipfsCidDtos: Set[IpfsCidDto]): F[Set[IpfsCidDto]]
-  def deleteFlats(ipfsCid: List[IpfsCid]): F[Unit]
+  def deleteFlats(ipfsCid: Set[IpfsCid]): F[Unit]
   def getNodeTree(ipfsCid: IpfsCid): F[Option[IpfsCidDto]]
   def saveNodeTree(ipfsCidDto: IpfsCidDto): F[IpfsCidDto]
 }
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/ipfscid/FacadeServiceImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/ipfscid/FacadeServiceImpl.scala
index ee11b8c44c3dbd8e9ffe4d1ddc3e6aca547040ab..0729a3f34855fbe128df8ed800e8c6dd5111edba 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/ipfscid/FacadeServiceImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/domain/service/ipfscid/FacadeServiceImpl.scala
@@ -11,9 +11,9 @@ import org.typelevel.log4cats.Logger
 import org.typelevel.log4cats.slf4j.Slf4jLogger
 
 class FacadeServiceImpl(
-    val flatRepository: FlatRepository,
-    val fileTreeRepository: FileTreeRepository,
-    val nodeTreeRepository: NodeTreeRepository
+    flatRepository: FlatRepository,
+    fileTreeRepository: FileTreeRepository,
+    nodeTreeRepository: NodeTreeRepository
 ) extends FacadeService[IO] {
 
   private val logger: Logger[IO] = Slf4jLogger.getLogger[IO]
@@ -52,7 +52,7 @@ class FacadeServiceImpl(
         .onError(logError)
   }
 
-  override def deleteFlats(ipfsCids: List[IpfsCid]): IO[Unit] = {
+  override def deleteFlats(ipfsCids: Set[IpfsCid]): IO[Unit] = {
     if ipfsCids.isEmpty then IO(List())
     else
       flatRepository
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/input/redispubsub/FederationMemberChangelogUpdateEventListener.scala b/federation-controller-backend/src/main/scala/acab/devcon0/input/redispubsub/FederationMemberChangelogUpdateEventListener.scala
index d6328fad59dc80aa7952a6c58464430fdefde9ab..c3c9d3964c7c7a692413cb591ccb497573ea01e6 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/input/redispubsub/FederationMemberChangelogUpdateEventListener.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/input/redispubsub/FederationMemberChangelogUpdateEventListener.scala
@@ -77,7 +77,7 @@ class FederationMemberChangelogUpdateEventListener(
     Supervisor[IO](await = true).use { supervisor =>
       val messages: List[FederationMemberIpfsCidsDeltaUpdateMessage] = delta.additions
         .grouped(chunkSize)
-        .map(cids => FederationMemberIpfsCidDelta(delta.federationMemberId, cids, List()))
+        .map(cids => FederationMemberIpfsCidDelta(delta.federationMemberId, cids, Set()))
         .map(newDelta => FederationMemberIpfsCidsDeltaUpdateMessage(newDelta))
         .toList
       supervisor.supervise(messages.traverse(redisPublisher.publish))
@@ -88,7 +88,7 @@ class FederationMemberChangelogUpdateEventListener(
     Supervisor[IO](await = true).use { supervisor =>
       val messages = delta.removals
         .grouped(chunkSize)
-        .map(cids => FederationMemberIpfsCidDelta(delta.federationMemberId, List(), cids))
+        .map(cids => FederationMemberIpfsCidDelta(delta.federationMemberId, Set(), cids))
         .map(newDelta => FederationMemberIpfsCidsDeltaUpdateMessage(newDelta))
         .toList
       supervisor.supervise(messages.traverse(redisPublisher.publish))
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/input/redispubsub/FederationMemberIpfsCidDeltaUpdateListener.scala b/federation-controller-backend/src/main/scala/acab/devcon0/input/redispubsub/FederationMemberIpfsCidDeltaUpdateListener.scala
index 060e7f3f50db76ff6591c0a2d81beec9175273f2..5eff74039dfa23b944cb97e16e27481eb64e9dff 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/input/redispubsub/FederationMemberIpfsCidDeltaUpdateListener.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/input/redispubsub/FederationMemberIpfsCidDeltaUpdateListener.scala
@@ -51,7 +51,7 @@ class FederationMemberIpfsCidDeltaUpdateListener(
     Supervisor[IO](await = true).use { supervisor =>
       val messages = delta.additions
         .grouped(chunkSize)
-        .map(cids => FederationIpfsCidsDeltaUpdateMessage(FederationIpfsCidDelta(additions = cids, removals = List())))
+        .map(cids => FederationIpfsCidsDeltaUpdateMessage(FederationIpfsCidDelta(additions = cids, removals = Set())))
         .toList
       supervisor.supervise(messages.traverse(redisPublisher.publish))
     }.void
@@ -61,7 +61,7 @@ class FederationMemberIpfsCidDeltaUpdateListener(
     Supervisor[IO](await = true).use { supervisor =>
       val messages = delta.removals
         .grouped(chunkSize)
-        .map(cids => FederationIpfsCidsDeltaUpdateMessage(FederationIpfsCidDelta(additions = List(), removals = cids)))
+        .map(cids => FederationIpfsCidsDeltaUpdateMessage(FederationIpfsCidDelta(additions = Set(), removals = cids)))
         .toList
       supervisor.supervise(messages.traverse(redisPublisher.publish))
     }.void
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/output/client/IpfsClientImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/output/client/IpfsClientImpl.scala
index f570e7d91906a23bb2819562bb9c3bace3f0e6d2..f7ef0d3238c07958dd0418c1d3e82d86115bce03 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/output/client/IpfsClientImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/output/client/IpfsClientImpl.scala
@@ -2,15 +2,16 @@ package acab.devcon0.output.client
 
 import acab.devcon0.configuration.IpfsConfiguration
 import acab.devcon0.domain.codecs.IpfsCodecs
-import acab.devcon0.domain.dtos.*
+import acab.devcon0.domain.dtos._
 import acab.devcon0.domain.ports.output.client.IpfsClient
 import acab.devcon0.trile.domain.dtos.aliases.IpfsCid
 import acab.devcon0.trile.utils.EffectsUtils
-import cats.effect.{IO, Resource}
+import cats.effect.IO
+import cats.effect.Resource
 import cats.implicits.catsSyntaxMonadError
 import org.typelevel.log4cats.Logger
 import org.typelevel.log4cats.slf4j.Slf4jLogger
-import sttp.client4.*
+import sttp.client4._
 import sttp.model.Uri
 
 class IpfsClientImpl(backendResource: Resource[IO, SyncBackend], ipfsConfiguration: IpfsConfiguration)
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/federationmember/CidsRepositoryImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/federationmember/CidsRepositoryImpl.scala
index 3fe0455bf6735cab08daca576568bd0946cacefc..17ae6a0cc653fec96da24c9f3055901fa302d50e 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/federationmember/CidsRepositoryImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/federationmember/CidsRepositoryImpl.scala
@@ -56,9 +56,9 @@ object CidsRepository {
       def add(
           id: FederationMemberId,
           rootIpfsCid: IpfsCid,
-          ipfsCids: List[IpfsCid]
+          ipfsCids: Set[IpfsCid]
       ): RedisCommands[IO, String, String] => IO[Unit] = { redis =>
-        redis.sAdd(key(id, rootIpfsCid), ipfsCids*).void
+        redis.sAdd(key(id, rootIpfsCid), ipfsCids.toSeq*).void
       }
 
       def remove(id: FederationMemberId): RedisCommands[IO, String, String] => IO[Unit] = { redis =>
@@ -73,21 +73,22 @@ object CidsRepository {
       def exists(
           id: FederationMemberId,
           rootIpfsCid: IpfsCid,
-          ipfsCids: List[IpfsCid]
+          ipfsCids: Set[IpfsCid]
       ): RedisCommands[IO, String, String] => IO[List[(IpfsCid, Boolean)]] = { redis =>
         val redisKey = key(id, rootIpfsCid)
         existsByKey(ipfsCids, redis, redisKey)
       }
 
       private def existsByKey(
-          ipfsCids: List[IpfsCid],
+          ipfsCids: Set[IpfsCid],
           redis: RedisCommands[IO, String, String],
           redisKey: String
       ): IO[List[(IpfsCid, Boolean)]] = {
         for
-          existsKey  <- redis.exists(redisKey)
-          sMisMember <- if existsKey && ipfsCids.nonEmpty then redis.sMisMember(redisKey, ipfsCids*) else IO(List())
-          zipIt      <- if sMisMember.isEmpty then IO(List()) else IO(ipfsCids.zip(sMisMember))
+          existsKey <- redis.exists(redisKey)
+          sMisMember <-
+            if existsKey && ipfsCids.nonEmpty then redis.sMisMember(redisKey, ipfsCids.toSeq*) else IO(List())
+          zipIt <- if sMisMember.isEmpty then IO(List()) else IO(ipfsCids.toList.zip(sMisMember))
         yield zipIt
       }
     }
@@ -98,25 +99,22 @@ class CidsRepositoryImpl(val commandsApi: Resource[IO, RedisCommands[IO, String,
 
   implicit val logger: Logger[IO] = Slf4jLogger.getLogger[IO]
 
-  override def getAll(id: FederationMemberId, rootIpfsCid: IpfsCid): IO[List[IpfsCid]] = {
+  override def getAll(id: FederationMemberId, rootIpfsCid: IpfsCid): IO[Set[IpfsCid]] = {
     commandsApi
       .use(CidsRepository.Index.Operations.getAll(id, rootIpfsCid)(_))
-      .map(_.toList)
   }
 
-  override def getDeleted(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): IO[List[IpfsCid]] = {
+  override def getDeleted(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): IO[Set[IpfsCid]] = {
     commandsApi
       .use(CidsRepository.Index.Operations.getDeleted(id, oldIpfsCid, newIpfsCid)(_))
-      .map(_.toList)
   }
 
-  override def getAdded(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): IO[List[IpfsCid]] = {
+  override def getAdded(id: FederationMemberId, oldIpfsCid: IpfsCid, newIpfsCid: IpfsCid): IO[Set[IpfsCid]] = {
     commandsApi
       .use(CidsRepository.Index.Operations.getAdded(id, oldIpfsCid, newIpfsCid)(_))
-      .map(_.toList)
   }
 
-  override def add(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: List[IpfsCid]): IO[List[IpfsCid]] = {
+  override def add(id: FederationMemberId, rootIpfsCid: IpfsCid, ipfsCids: Set[IpfsCid]): IO[Set[IpfsCid]] = {
     commandsApi
       .use(redis => {
         val operations: TxStore[IO, String, String] => List[IO[Unit]] = { _ =>
@@ -130,7 +128,7 @@ class CidsRepositoryImpl(val commandsApi: Resource[IO, RedisCommands[IO, String,
   override def exists(
       id: FederationMemberId,
       rootIpfsCid: IpfsCid,
-      ipfsCids: List[IpfsCid]
+      ipfsCids: Set[IpfsCid]
   ): IO[List[(IpfsCid, Boolean)]] = {
     commandsApi
       .use(CidsRepository.Index.Operations.exists(id, rootIpfsCid, ipfsCids)(_))
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/ipfscid/FlatRepository.scala b/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/ipfscid/FlatRepository.scala
index b1284a9f4ab0148118766242c75c52a39e32c6d5..159f396221576e10181b02d7e67b6e58d7ef9137 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/ipfscid/FlatRepository.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/ipfscid/FlatRepository.scala
@@ -47,8 +47,8 @@ private object FlatRepository {
         .void
     }
 
-    def deleteAll(ipfsCids: List[IpfsCid]): RedisCommands[IO, String, String] => IO[Unit] = { redis =>
-      val keys = ipfsCids.map(key)
+    def deleteAll(ipfsCids: Set[IpfsCid]): RedisCommands[IO, String, String] => IO[Unit] = { redis =>
+      val keys = ipfsCids.map(key).toSeq
       redis.del(keys*).void
     }
   }
@@ -86,7 +86,7 @@ class FlatRepository(val commandsApi: Resource[IO, RedisCommands[IO, String, Str
       .map(_ => ipfsCidDtos)
   }
 
-  def deleteAll(ipfsCids: List[IpfsCid]): IO[Unit] = {
+  def deleteAll(ipfsCids: Set[IpfsCid]): IO[Unit] = {
     if ipfsCids.nonEmpty then commandsApi.use(deleteAllInner(ipfsCids, _))
     else IO.unit
   }
@@ -117,7 +117,7 @@ class FlatRepository(val commandsApi: Resource[IO, RedisCommands[IO, String, Str
   }
 
   private def deleteAllInner(
-      ipfsCids: List[IpfsCid],
+      ipfsCids: Set[IpfsCid],
       redis: RedisCommands[IO, String, String]
   ): IO[Unit] = {
     val operations: TxStore[IO, String, String] => List[IO[Unit]] = { _ =>
diff --git a/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/ipfscid/SearchNameRepositoryImpl.scala b/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/ipfscid/SearchNameRepositoryImpl.scala
index d5bd89a81a8f820d1fa19f1bae28948c96211ed8..d1e6711c71b7c450ca9cf19177462997f356d501 100644
--- a/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/ipfscid/SearchNameRepositoryImpl.scala
+++ b/federation-controller-backend/src/main/scala/acab/devcon0/output/repository/ipfscid/SearchNameRepositoryImpl.scala
@@ -54,8 +54,8 @@ private object SearchNameRepository {
             )
           )
           .map(searchResults => {
-            val totalCount: Long        = Long.unbox(searchResults.get(3))
-            val ipfsCids: List[IpfsCid] = redisResultsToIpfsCids(searchResults)
+            val totalCount: Long       = Long.unbox(searchResults.get(3))
+            val ipfsCids: Set[IpfsCid] = redisResultsToIpfsCids(searchResults)
             SearchResult(searchParameters, ipfsCids, totalCount, pageSize)
           })
     }
@@ -68,7 +68,7 @@ private object SearchNameRepository {
 
     }
 
-    private def redisResultsToIpfsCids(searchResults: util.List[AnyRef]): List[String] = {
+    private def redisResultsToIpfsCids(searchResults: util.List[AnyRef]): Set[String] = {
       Try {
         searchResults
           .get(7)
@@ -76,8 +76,8 @@ private object SearchNameRepository {
           .asScala
           .map(_.get(1))
           .map(_.replace(redisutils.Redis.SetPrefixes.ipfsCidFlat, "").substring(1))
-          .toList
-      }.getOrElse(List())
+          .toSet
+      }.getOrElse(Set())
     }
 
     private def createIndexInner(redis: RedisCommands[IO, String, String]): IO[Unit] = {
diff --git a/federation-controller-frontend/src/views/FederationMembersView.js b/federation-controller-frontend/src/views/FederationMembersView.js
index a234330020087f8b6057c0f5c35f2eb2bec05221..f38dd4bc39fd84b65f208681fb9866f3ce68c535 100644
--- a/federation-controller-frontend/src/views/FederationMembersView.js
+++ b/federation-controller-frontend/src/views/FederationMembersView.js
@@ -68,8 +68,8 @@ function FederationMembersView() {
             try {
                 const response = await axios.get(BackendApiUrls.Federation.Members());
                 for (const member of response.data) {
-                    if (member.ipfsPeerRootCid) {
-                        member.fileCount = await countFederationMemberFiles(member.ipfsPeerRootCid);
+                    if (member.sharedFolderCid) {
+                        member.fileCount = await countFederationMemberFiles(member.sharedFolderCid);
                     } else {
                         member.fileCount = '-';
                     }
@@ -119,7 +119,7 @@ function FederationMembersView() {
                                             </ListItemAvatar>
                                             <ListItemText
                                                 primary="Shared folder CID"
-                                                secondary={member.ipfsPeerRootCid || '-'}
+                                                secondary={member.sharedFolderCid || '-'}
                                             />
                                         </ListItem>
                                         <ListItem alignItems="flex-start">
@@ -155,16 +155,16 @@ function FederationMembersView() {
                                     </Typography>
                                 </CardContent>
                                 <CardActions style={{justifyContent: 'flex-end'}}>
-                                    {member && member.ipfsPeerRootCid && (
+                                    {member && member.sharedFolderCid && (
                                         <Button
                                             variant="outlined"
                                             color="primary"
                                             startIcon={<ExploreOutlinedIcon/>}
                                             onClick={(event) => {
                                                 event.preventDefault();
-                                                navigate(`/ipfs/cid/meta/${member.ipfsPeerRootCid}`)
+                                                navigate(`/ipfs/cid/meta/${member.sharedFolderCid}`)
                                             }}
-                                            href={`/ipfs/cid/meta/${member.ipfsPeerRootCid}`}
+                                            href={`/ipfs/cid/meta/${member.sharedFolderCid}`}
                                         >
                                             Browse files
                                         </Button>