diff --git a/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/codecs/HeartbeatCodecs.scala b/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/codecs/HeartbeatCodecs.scala
deleted file mode 100644
index ced5e8887b6800affe912cb11273dc9df0434c03..0000000000000000000000000000000000000000
--- a/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/codecs/HeartbeatCodecs.scala
+++ /dev/null
@@ -1,50 +0,0 @@
-package acab.devcon0.trile.domain.codecs
-
-import acab.devcon0.trile.domain.dtos.FederationControllerHeartbeatMessage
-import acab.devcon0.trile.domain.dtos.FederationMemberHeartbeatMessage
-import acab.devcon0.trile.domain.dtos.IpfsClusterPeer
-import acab.devcon0.trile.domain.dtos.IpfsClusterPeerIpfsInfo
-import acab.devcon0.trile.domain.dtos.IpfsClusterPeers
-import cats.effect.IO
-import io.circe._
-import io.circe.generic.semiauto.deriveDecoder
-import io.circe.generic.semiauto.deriveEncoder
-import io.circe.jawn.decode
-import io.circe.syntax.EncoderOps
-
-object HeartbeatCodecs {
-
-  object Encoders {
-    implicit val ipfsClusterPeerIpfsInfo: Encoder[IpfsClusterPeerIpfsInfo]                    = deriveEncoder
-    implicit val ipfsClusterPeers: Encoder[IpfsClusterPeers]                                  = deriveEncoder
-    implicit val ipfsClusterPeer: Encoder[IpfsClusterPeer]                                    = deriveEncoder
-    implicit val federationControllerHeartbeat: Encoder[FederationControllerHeartbeatMessage] = deriveEncoder
-    implicit val federationMemberHeartbeat: Encoder[FederationMemberHeartbeatMessage]         = deriveEncoder
-    object FederationMemberHeartbeat {
-      def apply(dto: FederationMemberHeartbeatMessage): IO[String] = IO(
-        EncoderOps[FederationMemberHeartbeatMessage](dto).asJson.noSpaces
-      )
-    }
-    object FederationControllerHeartbeat {
-      def apply(dto: FederationControllerHeartbeatMessage): IO[String] = IO(
-        EncoderOps[FederationControllerHeartbeatMessage](dto).asJson.noSpaces
-      )
-    }
-  }
-
-  object Decoders {
-    implicit val ipfsClusterPeerIpfsInfo: Decoder[IpfsClusterPeerIpfsInfo]                    = deriveDecoder
-    implicit val ipfsClusterPeers: Decoder[IpfsClusterPeers]                                  = deriveDecoder
-    implicit val ipfsClusterPeer: Decoder[IpfsClusterPeer]                                    = deriveDecoder
-    implicit val federationControllerHeartbeat: Decoder[FederationControllerHeartbeatMessage] = deriveDecoder
-    implicit val federationMemberHeartbeat: Decoder[FederationMemberHeartbeatMessage]         = deriveDecoder
-    object FederationControllerHeartbeat {
-      def apply(rawJson: String): IO[FederationControllerHeartbeatMessage] =
-        IO.fromEither(decode[FederationControllerHeartbeatMessage](rawJson))
-    }
-    object FederationMemberHeartbeat {
-      def apply(rawJson: String): IO[FederationMemberHeartbeatMessage] =
-        IO.fromEither(decode[FederationMemberHeartbeatMessage](rawJson))
-    }
-  }
-}
diff --git a/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/codecs/P2pCodecs.scala b/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/codecs/P2pCodecs.scala
index 138bda83dd7066949375c4ec4026e5612d18ea00..845aaf9ce50e5c8441c2cf805d9ee47abbb69c6d 100644
--- a/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/codecs/P2pCodecs.scala
+++ b/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/codecs/P2pCodecs.scala
@@ -1,7 +1,5 @@
 package acab.devcon0.trile.domain.codecs
 
-import acab.devcon0.trile.domain.dtos.FederationControllerHeartbeatMessage
-import acab.devcon0.trile.domain.dtos.FederationMemberHeartbeatMessage
 import acab.devcon0.trile.domain.dtos.IpfsClusterPeer
 import acab.devcon0.trile.domain.dtos.IpfsClusterPeerIpfsInfo
 import acab.devcon0.trile.domain.dtos.IpfsClusterPeers
diff --git a/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/dtos/Heartbeat.scala b/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/dtos/Heartbeat.scala
deleted file mode 100644
index 42777fea862c692df81d535d0f588b33f7265640..0000000000000000000000000000000000000000
--- a/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/dtos/Heartbeat.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package acab.devcon0.trile.domain.dtos
-
-import java.time.Instant
-
-import acab.devcon0.trile.domain.dtos.aliases.IpfsCid
-
-final case class FederationControllerHeartbeatMessage(peers: List[IpfsClusterPeer])
-final case class FederationMemberHeartbeatMessage(ipfsPeerRootCid: IpfsCid, timestamp: Instant)
diff --git a/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/dtos/pubsub/P2p.scala b/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/dtos/pubsub/P2p.scala
index 80d8317060f3c0485ebc0d1d5d5bf92162316924..6d17bbb7c4f82a9e9625d35f35d2d86347b3badf 100644
--- a/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/dtos/pubsub/P2p.scala
+++ b/trile-backend-commons/src/main/scala/acab/devcon0/trile/domain/dtos/pubsub/P2p.scala
@@ -2,6 +2,7 @@ package acab.devcon0.trile.domain.dtos.pubsub
 
 import java.time.Instant
 
+import acab.devcon0.trile.domain.dtos.IpfsClusterPeer
 import acab.devcon0.trile.domain.dtos.aliases._
 
 object P2p {
@@ -22,6 +23,9 @@ object P2p {
   final case class FederationMemberCheckInAck(to: P2pPeerId)
   final case class FederationMemberCheckInNack(to: P2pPeerId)
 
+  final case class FederationControllerHeartbeatMessage(peers: List[IpfsClusterPeer])
+  final case class FederationMemberHeartbeatMessage(ipfsPeerRootCid: IpfsCid, timestamp: Instant)
+
   object Keys {
     val request: P2pMessageKey = "REQUEST"
     val ack: P2pMessageKey     = "ACK"