diff --git a/plugins/analysis/packet/heartbeat.go b/plugins/analysis/packet/heartbeat.go
index 2cd03c3e5280556f81aff8833925319a38dda50b..65b44f2f30ba4fdc350a0a12ef71a22360b942c1 100644
--- a/plugins/analysis/packet/heartbeat.go
+++ b/plugins/analysis/packet/heartbeat.go
@@ -62,12 +62,6 @@ type Heartbeat struct {
 	InboundIDs [][]byte
 }
 
-func init() {
-	if err := message.RegisterType(MessageTypeHeartbeat, HeartbeatMessageDefinition); err != nil {
-		panic(err)
-	}
-}
-
 // ParseHeartbeat parses a slice of bytes (serialized packet) into a heartbeat.
 func ParseHeartbeat(data []byte) (*Heartbeat, error) {
 	// check minimum size
diff --git a/plugins/analysis/packet/packet.go b/plugins/analysis/packet/packet.go
index c95ed394b53b3fef198274b4c37a4eb5034cd115..0475b6205b2a0a736c1a8ea6eefb348c73d76275 100644
--- a/plugins/analysis/packet/packet.go
+++ b/plugins/analysis/packet/packet.go
@@ -1,8 +1,29 @@
 package packet
 
-import "errors"
+import (
+	"errors"
+
+	"github.com/iotaledger/hive.go/protocol/message"
+	"github.com/iotaledger/hive.go/protocol/tlv"
+)
 
 var (
 	// ErrMalformedPacket is returned when malformed packets are tried to be parsed.
 	ErrMalformedPacket = errors.New("malformed packet")
 )
+
+// AnalysisMsgRegistry holds all message definitions for analysis server related messages
+var AnalysisMsgRegistry *message.Registry
+
+func init() {
+	AnalysisMsgRegistry = message.NewRegistry()
+	// register tlv header type
+	if err := AnalysisMsgRegistry.RegisterType(tlv.MessageTypeHeader, tlv.HeaderMessageDefinition); err != nil {
+		panic(err)
+	}
+
+	// analysis plugin specific types (msgType > 0)
+	if err := AnalysisMsgRegistry.RegisterType(MessageTypeHeartbeat, HeartbeatMessageDefinition); err != nil {
+		panic(err)
+	}
+}
\ No newline at end of file
diff --git a/plugins/analysis/server/plugin.go b/plugins/analysis/server/plugin.go
index 56db8ffce5ab9fa42fd909b04500c99336152547..ce93828929eb2b72932a037e68a281b2145d246c 100644
--- a/plugins/analysis/server/plugin.go
+++ b/plugins/analysis/server/plugin.go
@@ -81,7 +81,7 @@ func HandleConnection(conn *network.ManagedConnection) {
 	}
 
 	// create new protocol instance
-	p := protocol.New(conn)
+	p := protocol.New(conn, packet.AnalysisMsgRegistry)
 
 	onReceiveData := events.NewClosure(func(data []byte) {
 		// process incoming data in protocol.Receive()