diff --git a/packages/binary/drng/dispatcher.go b/packages/binary/drng/dispatcher.go
index d1b1b66b3d03ca48e827bc000029c29971b8a127..8cc1beb9a753b04cd82cd075573e7e7da8abf57e 100644
--- a/packages/binary/drng/dispatcher.go
+++ b/packages/binary/drng/dispatcher.go
@@ -1,16 +1,40 @@
 package drng
 
 import (
+	"time"
+
+	"github.com/iotaledger/goshimmer/packages/binary/drng/payload"
 	"github.com/iotaledger/goshimmer/packages/binary/drng/payload/header"
 	"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon"
-	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction"
+	"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events"
+	cb "github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/payload"
+	"github.com/iotaledger/goshimmer/packages/binary/marshalutil"
+	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 )
 
-func (drng *Instance) Dispatch(subtype header.Type, tx *transaction.Transaction) {
-	switch subtype {
+func (drng *Instance) Dispatch(issuer ed25119.PublicKey, timestamp time.Time, payload *payload.Payload) {
+	switch payload.SubType() {
 	case header.CollectiveBeaconType():
+		// parse as CollectiveBeaconType
+		marshalUtil := marshalutil.New(payload.Bytes())
+		parsedPayload, err := cb.Parse(marshalUtil)
+		if err != nil {
+			return
+		}
+		// trigger CollectiveBeaconEvent
+		cbEvent := &events.CollectiveBeaconEvent{
+			IssuerPublicKey: issuer,
+			Timestamp:       timestamp,
+			InstanceID:      parsedPayload.Instance(),
+			Round:           parsedPayload.Round(),
+			PrevSignature:   parsedPayload.PrevSignature(),
+			Signature:       parsedPayload.Signature(),
+			Dpk:             parsedPayload.DistributedPK(),
+		}
+		drng.Events.CollectiveBeacon.Trigger(cbEvent)
+
 		// process collectiveBeacon
-		if err := collectiveBeacon.ProcessTransaction(drng.State, drng.Events.CollectiveBeacon, tx); err != nil {
+		if err := collectiveBeacon.ProcessBeacon(drng.State, cbEvent); err != nil {
 			return
 		}
 		// trigger RandomnessEvent
diff --git a/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon.go b/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon.go
index 852cda3c1f75e01d73277e33834667f4a62e6739..6346aa334e5479772ddad4df4c1fc579f7e7615a 100644
--- a/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon.go
+++ b/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon.go
@@ -8,53 +8,30 @@ import (
 	"github.com/drand/drand/key"
 	"github.com/iotaledger/goshimmer/packages/binary/drng/state"
 	"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events"
-	"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/payload"
-	"github.com/iotaledger/goshimmer/packages/binary/marshalutil"
 	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
-	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction"
 )
 
 // ProcessTransaction performs the following tasks:
-// 1 - parse as CollectiveBeaconType
-// 2 - trigger CollectiveBeaconEvent
-// 3 - verify that we have a valid random
-// 4 - update drng state
-func ProcessTransaction(drng *state.State, event events.CollectiveBeacon, tx *transaction.Transaction) error {
-	// 1 - parse as CollectiveBeaconType
-	marshalUtil := marshalutil.New(tx.GetPayload().Bytes())
-	parsedPayload, err := payload.Parse(marshalUtil)
-	if err != nil {
-		return err
-	}
-
-	// 2 - trigger CollectiveBeaconEvent
-	cbEvent := &events.CollectiveBeaconEvent{
-		IssuerPublicKey: tx.IssuerPublicKey(),
-		Timestamp:       tx.IssuingTime(),
-		InstanceID:      parsedPayload.Instance(),
-		Round:           parsedPayload.Round(),
-		PrevSignature:   parsedPayload.PrevSignature(),
-		Signature:       parsedPayload.Signature(),
-		Dpk:             parsedPayload.DistributedPK(),
-	}
-	event.Trigger(cbEvent)
+// - verify that we have a valid random
+// - update drng state
+func ProcessBeacon(drng *state.State, cb *events.CollectiveBeaconEvent) error {
 
-	// 3 - verify that we have a valid random
-	if err := VerifyCollectiveBeacon(drng, cbEvent); err != nil {
+	// verify that we have a valid random
+	if err := VerifyCollectiveBeacon(drng, cb); err != nil {
 		//TODO: handle error
 		return err
 	}
 
-	// 4 - update drng state
-	randomness, err := GetRandomness(cbEvent.Signature)
+	// update drng state
+	randomness, err := GetRandomness(cb.Signature)
 	if err != nil {
 		//TODO: handle error
 		return err
 	}
 	newRandomness := &state.Randomness{
-		Round:      cbEvent.Round,
+		Round:      cb.Round,
 		Randomness: randomness,
-		Timestamp:  cbEvent.Timestamp,
+		Timestamp:  cb.Timestamp,
 	}
 	drng.SetRandomness(newRandomness)
 	return nil
diff --git a/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon_test.go b/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon_test.go
index 7dd2332d5408c211c2ad89c79a1f405a3afe1e6e..a3413dfa051b6ba3e7e3b38822c04277002a39ee 100644
--- a/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon_test.go
+++ b/packages/binary/drng/subtypes/collectiveBeacon/collective_beacon_test.go
@@ -4,7 +4,9 @@ import (
 	"encoding/hex"
 	"testing"
 
+	"github.com/iotaledger/goshimmer/packages/binary/drng/state"
 	"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events"
+	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 	"github.com/stretchr/testify/require"
 )
 
@@ -13,19 +15,33 @@ var (
 	prevSignatureTest []byte
 	signatureTest     []byte
 	dpkTest           []byte
+	issuerPK          ed25119.PublicKey
+	stateTest         *state.State
 )
 
 func init() {
 	prevSignatureTest, _ = hex.DecodeString("ae9ba6d1445bffea8e66cb7d28fe5924e0a8d31b11b62a8710204e56e1ba84bc3694a3033e5793fcee6e75e956e5da3016cd0e22aa46fa419cd06343a7ff9d1e9c5c08f660f0bdec099e97ef99f470bb8c607ce9667a165e9caa474710f62ffd")
 	signatureTest, _ = hex.DecodeString("8dee56fae60dcad960f7176d0813d5415b930cf6e20c299ec2c2dfc5f2ad4903916fd462ba1abf5c32a5bfd94dcc8eba062d011a548d99df7fa1e3bbbc9a0455663d60f6ccc736c1d5b6de727dbe4427e21fb660925518be386265913f447c94")
 	dpkTest, _ = hex.DecodeString("a02fcd15edd52c8e134027491a43b597505b466d1679e88f70f927e57c45a93ae0765ff02fc2d015e3a02fd8748e2103")
+	kp := ed25119.GenerateKeyPair()
+	issuerPK = kp.PublicKey
+
 	eventTest = &events.CollectiveBeaconEvent{
-		InstanceID:    1,
-		Round:         1,
-		PrevSignature: prevSignatureTest,
-		Signature:     signatureTest,
-		Dpk:           dpkTest,
+		IssuerPublicKey: issuerPK,
+		InstanceID:      1,
+		Round:           1,
+		PrevSignature:   prevSignatureTest,
+		Signature:       signatureTest,
+		Dpk:             dpkTest,
 	}
+
+	stateTest = state.New(state.SetCommittee(
+		&state.Committee{
+			InstanceID:    1,
+			Threshold:     3,
+			Identities:    []ed25119.PublicKey{issuerPK},
+			DistributedPK: dpkTest,
+		}))
 }
 
 func TestVerifySignature(t *testing.T) {
@@ -40,6 +56,11 @@ func TestGetRandomness(t *testing.T) {
 	require.NoError(t, err)
 }
 
+func TestProcessTransaction(t *testing.T) {
+	err := ProcessBeacon(stateTest, eventTest)
+	require.NoError(t, err)
+}
+
 // func dkgShares(t *testing.T, n, threshold int) *collectiveBeacon.Payload {
 // 	var priPoly *share.PriPoly
 // 	var pubPoly *share.PubPoly