diff --git a/channels/sendTracker.go b/channels/sendTracker.go
index 0c6aecb4c5c2f6b21b013700b56b5d6f22f7ec91..1742d52ba4e8dae2d46d09b6aa91e6ab57df4654 100644
--- a/channels/sendTracker.go
+++ b/channels/sendTracker.go
@@ -16,6 +16,7 @@ import (
 	"gitlab.com/elixxir/client/cmix/rounds"
 	"gitlab.com/elixxir/client/storage/versioned"
 	cryptoChannel "gitlab.com/elixxir/crypto/channel"
+	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/elixxir/primitives/states"
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/netTime"
@@ -66,6 +67,8 @@ type sendTracker struct {
 	net Client
 
 	kv *versioned.KV
+
+	rngSrc *fastRNG.StreamGenerator
 }
 
 // messageReceiveFunc is a function type for sendTracker.MessageReceive so it
@@ -76,8 +79,8 @@ type messageReceiveFunc func(messageID cryptoChannel.MessageID, r rounds.Round)
 // function with the cmix client, delayed on when the network goes healthy,
 // which will attempt to discover the status of all rounds that are outstanding.
 func loadSendTracker(net Client, kv *versioned.KV, trigger triggerEventFunc,
-	adminTrigger triggerAdminEventFunc,
-	updateStatus updateStatusFunc) *sendTracker {
+	adminTrigger triggerAdminEventFunc, updateStatus updateStatusFunc,
+	rngSource *fastRNG.StreamGenerator) *sendTracker {
 	st := &sendTracker{
 		byRound:      make(map[id.Round][]*tracked),
 		byMessageID:  make(map[cryptoChannel.MessageID]*tracked),
@@ -87,6 +90,7 @@ func loadSendTracker(net Client, kv *versioned.KV, trigger triggerEventFunc,
 		updateStatus: updateStatus,
 		net:          net,
 		kv:           kv,
+		rngSrc:       rngSource,
 	}
 
 	/*if err := st.load(); !kv.Exists(err){
@@ -208,8 +212,19 @@ func (st *sendTracker) denotePendingSend(channelID *id.ID,
 		return 0, err
 	}
 
+	// create a random message id so there will not be collisions in a database
+	// that requires a unique message ID
+	stream := st.rngSrc.GetStream()
+	randMid := cryptoChannel.MessageID{}
+	num, err := stream.Read(randMid[:])
+	if num != len(randMid[:]) || err != nil {
+		jww.FATAL.Panicf("failed to get a random message ID, read "+
+			"len: %d, err: %+v", num, err)
+	}
+	stream.Close()
+
 	// track the message on disk
-	st.handleDenoteSend(uuid, channelID, cryptoChannel.MessageID{},
+	st.handleDenoteSend(uuid, channelID, randMid,
 		rounds.Round{})
 	return uuid, nil
 }
@@ -227,11 +242,23 @@ func (st *sendTracker) denotePendingAdminSend(channelID *id.ID,
 		receptionID.EphemeralIdentity{},
 		rounds.Round{}, Unsent)
 
-	// track the message on disk
 	if err != nil {
 		return 0, err
 	}
-	st.handleDenoteSend(uuid, channelID, cryptoChannel.MessageID{},
+
+	// create a random message id so there will not be collisions in a database
+	// that requires a unique message ID
+	stream := st.rngSrc.GetStream()
+	randMid := cryptoChannel.MessageID{}
+	num, err := stream.Read(randMid[:])
+	if num != len(randMid[:]) || err != nil {
+		jww.FATAL.Panicf("failed to get a random message ID, read "+
+			"len: %d, err: %+v", num, err)
+	}
+	stream.Close()
+
+	// track the message on disk
+	st.handleDenoteSend(uuid, channelID, randMid,
 		rounds.Round{})
 	return uuid, nil
 }