diff --git a/packages/binary/messagelayer/messagefactory/messagefactory.go b/packages/binary/messagelayer/messagefactory/messagefactory.go
index 8401a9afb821d6e11d28c1c941ca68e5922a474a..4a206e2d18e66e5cd4e252a783d6fa1d89e5ba10 100644
--- a/packages/binary/messagelayer/messagefactory/messagefactory.go
+++ b/packages/binary/messagelayer/messagefactory/messagefactory.go
@@ -34,8 +34,9 @@ type MessageFactory struct {
 	localIdentity *identity.LocalIdentity
 	selector      TipSelector
 
-	worker      Worker
-	workerMutex sync.RWMutex
+	worker        Worker
+	workerMutex   sync.RWMutex
+	issuanceMutex sync.Mutex
 }
 
 // New creates a new message factory.
@@ -65,6 +66,8 @@ func (m *MessageFactory) SetWorker(worker Worker) {
 // It also triggers the MessageConstructed event once it's done, which is for example used by the plugins to listen for
 // messages that shall be attached to the tangle.
 func (m *MessageFactory) IssuePayload(payload payload.Payload) *message.Message {
+	m.issuanceMutex.Lock()
+	defer m.issuanceMutex.Unlock()
 	sequenceNumber, err := m.sequence.Next()
 	if err != nil {
 		m.Events.Error.Trigger(fmt.Errorf("could not create sequence number: %w", err))