diff --git a/api/user.go b/api/user.go
index da54da2aaafefa528ae01cdb0ae80579897a906d..45536132fdde09c191aa4d0953fa52c62f6cf2cf 100644
--- a/api/user.go
+++ b/api/user.go
@@ -62,7 +62,7 @@ func createNewUser(rng csprng.Source, cmix, e2e *cyclic.Group) user.User {
 		RSA:              rsaKey,
 		Precanned:        false,
 		CmixDhPrivateKey: cmix.NewIntFromBytes(cMixKeyBytes),
-		E2eDhPrivateKey:  cmix.NewIntFromBytes(e2eKeyBytes),
+		E2eDhPrivateKey:  e2e.NewIntFromBytes(e2eKeyBytes),
 	}
 }
 
@@ -89,6 +89,6 @@ func createPrecannedUser(precannedID uint, rng csprng.Source, cmix, e2e *cyclic.
 		ID:              userID.DeepCopy(),
 		Salt:            salt,
 		Precanned:       false,
-		E2eDhPrivateKey: cmix.NewIntFromBytes(e2eKeyBytes),
+		E2eDhPrivateKey: e2e.NewIntFromBytes(e2eKeyBytes),
 	}
 }
diff --git a/interfaces/message/id.go b/interfaces/message/id.go
new file mode 100644
index 0000000000000000000000000000000000000000..f848e8bcc592075e84c6df8163697294a5fd691d
--- /dev/null
+++ b/interfaces/message/id.go
@@ -0,0 +1,35 @@
+package message
+
+import (
+	"encoding/binary"
+	"gitlab.com/elixxir/crypto/hash"
+	"gitlab.com/xx_network/primitives/id"
+	jww "github.com/spf13/jwalterweatherman"
+)
+
+const messageIDLen = 32
+
+type ID [messageIDLen]byte
+
+func NewID(sender, receiver *id.ID, connectionSalt []byte,
+	internalMessageID uint64) ID {
+	h, err := hash.NewCMixHash()
+	if err != nil {
+		jww.FATAL.Panicf("Failed to get hash for message ID creation")
+	}
+
+	h.Write(sender.Bytes())
+	h.Write(receiver.Bytes())
+
+	intMidBytes := make([]byte, 8)
+	binary.BigEndian.PutUint64(intMidBytes, internalMessageID)
+
+	h.Write(intMidBytes)
+	h.Write(connectionSalt)
+
+	midBytes := h.Sum(nil)
+
+	mid := ID{}
+	copy(mid[:], midBytes)
+	return mid
+}
diff --git a/interfaces/message/receiveMessage.go b/interfaces/message/receiveMessage.go
index d562e0528b738cc219ccf270932fdf9a993716f6..8e6a5a70fbc5c9514c7eaba706d3a6595471197a 100644
--- a/interfaces/message/receiveMessage.go
+++ b/interfaces/message/receiveMessage.go
@@ -11,4 +11,7 @@ type Receive struct {
 	Sender      *id.ID
 	Timestamp   time.Time
 	Encryption  EncryptionType
+	Id          ID
 }
+
+