diff --git a/bindings/channels.go b/bindings/channels.go
index 98e746041e1c88ec29cbf84a2148eb5f46d58614..e3be5d13351ea0eedbf654366f36f020646a392d 100644
--- a/bindings/channels.go
+++ b/bindings/channels.go
@@ -8,9 +8,9 @@
 package bindings
 
 import (
+	"crypto/ed25519"
 	"encoding/json"
 	"github.com/pkg/errors"
-	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/channels"
 	"gitlab.com/elixxir/client/cmix/rounds"
 	"gitlab.com/elixxir/client/storage/versioned"
@@ -913,7 +913,8 @@ type ReceivedChannelMessageReport struct {
 	MessageId   []byte
 	MessageType int
 	Nickname    string
-	Identity    []byte
+	PubKey      []byte
+	Codeset     int
 	Content     []byte
 	Timestamp   int64
 	Lease       int64
@@ -947,22 +948,17 @@ func (cm *ChannelsManager) RegisterReceiveHandler(messageType int,
 	cb := channels.MessageTypeReceiveMessage(
 		func(channelID *id.ID,
 			messageID cryptoChannel.MessageID, messageType channels.MessageType,
-			nickname string, content []byte, identity cryptoChannel.Identity,
-			timestamp time.Time, lease time.Duration, round rounds.Round,
-			status channels.SentStatus) uint64 {
-
-			idBytes, err := json.Marshal(&identity)
-			if err != nil {
-				jww.WARN.Printf("failed to marshal identity object: %+v", err)
-				return 0
-			}
+			nickname string, content []byte, pubKey ed25519.PublicKey,
+			codeset uint8, timestamp time.Time, lease time.Duration,
+			round rounds.Round, status channels.SentStatus) uint64 {
 
 			rcm := ReceivedChannelMessageReport{
 				ChannelId:   channelID.Marshal(),
 				MessageId:   messageID.Bytes(),
 				MessageType: int(messageType),
 				Nickname:    nickname,
-				Identity:    idBytes,
+				PubKey:      pubKey,
+				Codeset:     int(codeset),
 				Content:     content,
 				Timestamp:   timestamp.UnixNano(),
 				Lease:       int64(lease),
@@ -1013,7 +1009,8 @@ type EventModel interface {
 	//  - text - The content of the message.
 	//  - timestamp - Time the message was received; represented as nanoseconds
 	//    since unix epoch.
-	//  - identity - the json of the identity of the sender
+	//  - pubKey - The sender's Ed25519 public key.
+	//  - codeset - The codeset version.
 	//  - lease - The number of nanoseconds that the message is valid for.
 	//  - roundId - The ID of the round that the message was received on.
 	//  - mType - the type of the message, always 1 for this call
@@ -1027,7 +1024,7 @@ type EventModel interface {
 	// Returns a non-negative unique UUID for the message that it can be
 	// referenced by later with [EventModel.UpdateSentStatus].
 	ReceiveMessage(channelID, messageID []byte, nickname, text string,
-		identity []byte, timestamp, lease, roundId, mType,
+		pubKey []byte, codeset int, timestamp, lease, roundId, mType,
 		status int64) int64
 
 	// ReceiveReply is called whenever a message is received that is a reply on
@@ -1045,7 +1042,8 @@ type EventModel interface {
 	//    reply.
 	//  - nickname - The nickname of the sender of the message.
 	//  - text - The content of the message.
-	//  - identity - the json marshaled identity of the sender
+	//  - pubKey - The sender's Ed25519 public key.
+	//  - codeset - The codeset version.
 	//  - timestamp - Time the message was received; represented as nanoseconds
 	//    since unix epoch.
 	//  - lease - The number of nanoseconds that the message is valid for.
@@ -1060,9 +1058,9 @@ type EventModel interface {
 	//
 	// Returns a non-negative unique UUID for the message that it can be
 	// referenced by later with [EventModel.UpdateSentStatus].
-	ReceiveReply(channelID, messageID, reactionTo []byte,
-		nickname, text string, identity []byte,
-		timestamp, lease, roundId, mType, status int64) int64
+	ReceiveReply(channelID, messageID, reactionTo []byte, nickname, text string,
+		pubKey []byte, codeset int, timestamp, lease, roundId, mType,
+		status int64) int64
 
 	// ReceiveReaction is called whenever a reaction to a message is received
 	// on a given channel. It may be called multiple times on the same reaction.
@@ -1081,7 +1079,8 @@ type EventModel interface {
 	//    reply.
 	//  - nickname - The nickname of the sender of the message.
 	//  - reaction - The contents of the reaction message.
-	//  - identity - The json marshal of the identity of the sender
+	//  - pubKey - The sender's Ed25519 public key.
+	//  - codeset - The codeset version.
 	//  - timestamp - Time the message was received; represented as nanoseconds
 	//    since unix epoch.
 	//  - lease - The number of nanoseconds that the message is valid for.
@@ -1096,9 +1095,9 @@ type EventModel interface {
 	//
 	// Returns a non-negative unique uuid for the message by which it can be
 	// referenced later with UpdateSentStatus
-	ReceiveReaction(channelID, messageID, reactionTo []byte,
-		nickname, reaction string, identity []byte,
-		timestamp, lease, roundId, mtype, status int64) int64
+	ReceiveReaction(channelID, messageID, reactionTo []byte, nickname,
+		reaction string, pubKey []byte, codeset int, timestamp, lease, roundId,
+		mType, status int64) int64
 
 	// UpdateSentStatus is called whenever the sent status of a message has
 	// changed.
@@ -1146,21 +1145,15 @@ func (tem *toEventModel) LeaveChannel(channelID *id.ID) {
 // ReceiveMessage is called whenever a message is received on a given channel.
 // It may be called multiple times on the same message. It is incumbent on the
 // user of the API to filter such called by message ID.
-func (tem *toEventModel) ReceiveMessage(channelID *id.ID, messageID cryptoChannel.MessageID,
-	nickname, text string, identity cryptoChannel.Identity,
-	timestamp time.Time, lease time.Duration, round rounds.Round,
-	mType channels.MessageType,
+func (tem *toEventModel) ReceiveMessage(channelID *id.ID,
+	messageID cryptoChannel.MessageID, nickname, text string,
+	pubKey ed25519.PublicKey, codeset uint8, timestamp time.Time,
+	lease time.Duration, round rounds.Round, mType channels.MessageType,
 	status channels.SentStatus) uint64 {
 
-	idBytes, err := json.Marshal(&identity)
-	if err != nil {
-		jww.WARN.Printf("failed to marshal identity object: %+v", err)
-		return 0
-	}
-
 	return uint64(tem.em.ReceiveMessage(channelID[:], messageID[:], nickname,
-		text, idBytes, timestamp.UnixNano(), int64(lease), int64(round.ID), int64(mType),
-		int64(status)))
+		text, pubKey, int(codeset), timestamp.UnixNano(), int64(lease),
+		int64(round.ID), int64(mType), int64(status)))
 }
 
 // ReceiveReply is called whenever a message is received that is a reply on a
@@ -1169,21 +1162,15 @@ func (tem *toEventModel) ReceiveMessage(channelID *id.ID, messageID cryptoChanne
 //
 // Messages may arrive our of order, so a reply in theory can arrive before the
 // initial message. As a result, it may be important to buffer replies.
-func (tem *toEventModel) ReceiveReply(channelID *id.ID, messageID cryptoChannel.MessageID,
-	reactionTo cryptoChannel.MessageID, nickname, text string,
-	identity cryptoChannel.Identity, timestamp time.Time,
-	lease time.Duration, round rounds.Round, mType channels.MessageType,
-	status channels.SentStatus) uint64 {
-
-	idBytes, err := json.Marshal(&identity)
-	if err != nil {
-		jww.WARN.Printf("failed to marshal identity object: %+v", err)
-		return 0
-	}
+func (tem *toEventModel) ReceiveReply(channelID *id.ID,
+	messageID cryptoChannel.MessageID, reactionTo cryptoChannel.MessageID,
+	nickname, text string, pubKey ed25519.PublicKey, codeset uint8,
+	timestamp time.Time, lease time.Duration, round rounds.Round,
+	mType channels.MessageType, status channels.SentStatus) uint64 {
 
 	return uint64(tem.em.ReceiveReply(channelID[:], messageID[:], reactionTo[:],
-		nickname, text, idBytes, timestamp.UnixNano(), int64(lease),
-		int64(round.ID), int64(mType), int64(status)))
+		nickname, text, pubKey, int(codeset), timestamp.UnixNano(),
+		int64(lease), int64(round.ID), int64(mType), int64(status)))
 
 }
 
@@ -1195,19 +1182,14 @@ func (tem *toEventModel) ReceiveReply(channelID *id.ID, messageID cryptoChannel.
 // initial message. As a result, it may be important to buffer reactions.
 func (tem *toEventModel) ReceiveReaction(channelID *id.ID, messageID cryptoChannel.MessageID,
 	reactionTo cryptoChannel.MessageID, nickname, reaction string,
-	identity cryptoChannel.Identity, timestamp time.Time,
+	pubKey ed25519.PublicKey, codeset uint8, timestamp time.Time,
 	lease time.Duration, round rounds.Round, mType channels.MessageType,
 	status channels.SentStatus) uint64 {
 
-	idBytes, err := json.Marshal(&identity)
-	if err != nil {
-		jww.WARN.Printf("failed to marshal identity object: %+v", err)
-		return 0
-	}
-
 	return uint64(tem.em.ReceiveReaction(channelID[:], messageID[:],
-		reactionTo[:], nickname, reaction, idBytes, timestamp.UnixNano(),
-		int64(lease), int64(round.ID), int64(mType), int64(status)))
+		reactionTo[:], nickname, reaction, pubKey, int(codeset),
+		timestamp.UnixNano(), int64(lease), int64(round.ID), int64(mType),
+		int64(status)))
 }
 
 // UpdateSentStatus is called whenever the sent status of a message has changed.