diff --git a/api/authenticatedChannel.go b/api/authenticatedChannel.go
index 9d26304009a4be8bc55471edca3c66da1f9ef5ec..c37c49d0f0f1e5a938eb2c1557b6e80315042d53 100644
--- a/api/authenticatedChannel.go
+++ b/api/authenticatedChannel.go
@@ -114,7 +114,7 @@ func (c *Client) MakePrecannedContact(precannedID uint) contact.Contact {
 	partnerPubKey := e2eGrp.ExpG(precanned.E2eDhPrivateKey, e2eGrp.NewInt(1))
 
 	return contact.Contact{
-		ID:             precanned.ID,
+		ID:             precanned.ReceptionID,
 		DhPubKey:       partnerPubKey,
 		OwnershipProof: nil,
 		Facts:          make([]fact.Fact, 0),
diff --git a/api/client.go b/api/client.go
index cabfb3240f642939e93c1f2609805038718a46b8..d68601829729a929b917923eeb1dec5841ce293e 100644
--- a/api/client.go
+++ b/api/client.go
@@ -191,10 +191,10 @@ func Login(storageDir string, password []byte) (*Client, error) {
 	cryptoUser := user.GetCryptographicIdentity()
 
 	//start comms
-	c.comms, err = client.NewClientComms(cryptoUser.GetUserID(),
-		rsa.CreatePublicKeyPem(cryptoUser.GetRSA().GetPublic()),
-		rsa.CreatePrivateKeyPem(cryptoUser.GetRSA()),
-		cryptoUser.GetSalt())
+	c.comms, err = client.NewClientComms(cryptoUser.GetTransmissionID(),
+		rsa.CreatePublicKeyPem(cryptoUser.GetTransmissionRSA().GetPublic()),
+		rsa.CreatePrivateKeyPem(cryptoUser.GetTransmissionRSA()),
+		cryptoUser.GetTransmissionSalt())
 	if err != nil {
 		return nil, errors.WithMessage(err, "failed to load client")
 	}
diff --git a/api/permissioning.go b/api/permissioning.go
index c9d018d89f1b94df03aefd20f9b6c4dfd6daebab..b4691291befcb12e7b28b06948980ecc76143c78 100644
--- a/api/permissioning.go
+++ b/api/permissioning.go
@@ -16,7 +16,8 @@ import (
 func (c *Client) registerWithPermissioning() error {
 	userData := c.storage.User()
 	//get the users public key
-	pubKey := userData.GetCryptographicIdentity().GetRSA().GetPublic()
+	transmissionPubKey := userData.GetCryptographicIdentity().GetTransmissionRSA().GetPublic()
+	receptionPubKey := userData.GetCryptographicIdentity().GetReceptionRSA().GetPublic()
 
 	//load the registration code
 	regCode, err := c.storage.GetRegCode()
@@ -26,14 +27,15 @@ func (c *Client) registerWithPermissioning() error {
 	}
 
 	//register with permissioning
-	regValidationSignature, err := c.permissioning.Register(pubKey, regCode)
+	transmissionRegValidationSignature, receptionRegValidationSignature, err := c.permissioning.Register(transmissionPubKey, receptionPubKey, regCode)
 	if err != nil {
 		return errors.WithMessage(err, "failed to register with "+
 			"permissioning")
 	}
 
 	//store the signature
-	userData.SetRegistrationValidationSignature(regValidationSignature)
+	userData.SetTransmissionRegistrationValidationSignature(transmissionRegValidationSignature)
+	userData.SetReceptionRegistrationValidationSignature(receptionRegValidationSignature)
 
 	//update the registration status
 	err = c.storage.ForwardRegistrationStatus(storage.PermissioningComplete)
diff --git a/api/user.go b/api/user.go
index 604aa796cf3f4cc4d4402b0fdbd5d75a03ab3a25..892d84c63c8fb0e29001774c6c645f351b3d00b8 100644
--- a/api/user.go
+++ b/api/user.go
@@ -26,12 +26,6 @@ const (
 
 // createNewUser generates an identity for cMix
 func createNewUser(rng csprng.Source, cmix, e2e *cyclic.Group) user.User {
-	// RSA Keygen (4096 bit defaults)
-	rsaKey, err := rsa.GenerateKey(rng, rsa.DefaultRSABitLen)
-	if err != nil {
-		jww.FATAL.Panicf(err.Error())
-	}
-
 	// CMIX Keygen
 	// FIXME: Why 256 bits? -- this is spec but not explained, it has
 	// to do with optimizing operations on one side and still preserves
@@ -50,24 +44,51 @@ func createNewUser(rng csprng.Source, cmix, e2e *cyclic.Group) user.User {
 		jww.FATAL.Panicf(err.Error())
 	}
 
+	// RSA Keygen (4096 bit defaults)
+	transmissionRsaKey, err := rsa.GenerateKey(rng, rsa.DefaultRSABitLen)
+	if err != nil {
+		jww.FATAL.Panicf(err.Error())
+	}
+	receptionRsaKey, err := rsa.GenerateKey(rng, rsa.DefaultRSABitLen)
+	if err != nil {
+		jww.FATAL.Panicf(err.Error())
+	}
+
 	// Salt, UID, etc gen
-	salt := make([]byte, SaltSize)
-	n, err := csprng.NewSystemRNG().Read(salt)
+	transmissionSalt := make([]byte, SaltSize)
+	n, err := csprng.NewSystemRNG().Read(transmissionSalt)
 	if err != nil {
 		jww.FATAL.Panicf(err.Error())
 	}
 	if n != SaltSize {
-		jww.FATAL.Panicf("salt size too small: %d", n)
+		jww.FATAL.Panicf("transmissionSalt size too small: %d", n)
 	}
-	userID, err := xx.NewID(rsaKey.GetPublic(), salt, id.User)
+	transmissionID, err := xx.NewID(transmissionRsaKey.GetPublic(), transmissionSalt, id.User)
+	if err != nil {
+		jww.FATAL.Panicf(err.Error())
+	}
+
+	// Salt, UID, etc gen
+	receptionSalt := make([]byte, SaltSize)
+	n, err = csprng.NewSystemRNG().Read(receptionSalt)
+	if err != nil {
+		jww.FATAL.Panicf(err.Error())
+	}
+	if n != SaltSize {
+		jww.FATAL.Panicf("receptionSalt size too small: %d", n)
+	}
+	receptionID, err := xx.NewID(receptionRsaKey.GetPublic(), receptionSalt, id.User)
 	if err != nil {
 		jww.FATAL.Panicf(err.Error())
 	}
 
 	return user.User{
-		ID:               userID.DeepCopy(),
-		Salt:             salt,
-		RSA:              rsaKey,
+		TransmissionID:   transmissionID.DeepCopy(),
+		TransmissionSalt: transmissionSalt,
+		TransmissionRSA:  transmissionRsaKey,
+		ReceptionID:      receptionID.DeepCopy(),
+		ReceptionSalt:    receptionSalt,
+		ReceptionRSA:     receptionRsaKey,
 		Precanned:        false,
 		CmixDhPrivateKey: cmix.NewIntFromBytes(cMixKeyBytes),
 		E2eDhPrivateKey:  e2e.NewIntFromBytes(e2eKeyBytes),
@@ -101,12 +122,15 @@ func createPrecannedUser(precannedID uint, rng csprng.Source, cmix, e2e *cyclic.
 	}
 
 	return user.User{
-		ID:              userID.DeepCopy(),
-		Salt:            salt,
-		Precanned:       true,
-		E2eDhPrivateKey: e2e.NewIntFromBytes(e2eKeyBytes),
+		TransmissionID:   &userID,
+		TransmissionSalt: salt,
+		ReceptionID:      &userID,
+		ReceptionSalt:    salt,
+		Precanned:        true,
+		E2eDhPrivateKey:  e2e.NewIntFromBytes(e2eKeyBytes),
 		// NOTE: These are dummy/not used
 		CmixDhPrivateKey: cmix.NewInt(1),
-		RSA:              rsaKey,
+		TransmissionRSA:  rsaKey,
+		ReceptionRSA:     rsaKey,
 	}
 }
diff --git a/auth/request.go b/auth/request.go
index 906aa953995afd3af8b24cc028fe7aaac7dec5e0..5ba9d412b60f9b4a7129fc967f963b9d297ffcc9 100644
--- a/auth/request.go
+++ b/auth/request.go
@@ -47,7 +47,7 @@ func RequestAuth(partner, me contact.Contact, message string, rng io.Reader,
 	}
 
 	// check that the request is being sent from the proper ID
-	if !me.ID.Cmp(storage.GetUser().ID) {
+	if !me.ID.Cmp(storage.GetUser().TransmissionID) {
 		return errors.Errorf("Authenticated channel request " +
 			"can only be sent from user's identity")
 	}
@@ -116,7 +116,7 @@ func RequestAuth(partner, me contact.Contact, message string, rng io.Reader,
 	jww.INFO.Printf("RequestAuth THEIRPUBKEY: %v", partner.DhPubKey.Bytes())
 
 	/*encrypt payload*/
-	requestFmt.SetID(storage.GetUser().ID)
+	requestFmt.SetID(storage.GetUser().TransmissionID)
 	requestFmt.SetMsgPayload(msgPayloadBytes)
 	ecrFmt.SetOwnership(ownership)
 	ecrPayload, mac := cAuth.Encrypt(newPrivKey, partner.DhPubKey,
diff --git a/bindings/user.go b/bindings/user.go
index 56942464027782001a5d242f90818ef50e7a1f40..722fe6af8dd48a3c80ef102750a3110ec48ff54d 100644
--- a/bindings/user.go
+++ b/bindings/user.go
@@ -16,20 +16,36 @@ type User struct {
 	u *user.User
 }
 
-func (u *User) GetID() []byte {
-	return u.u.ID.Marshal()
+func (u *User) GetTransmissionID() []byte {
+	return u.u.TransmissionID.Marshal()
 }
 
-func (u *User) GetSalt() []byte {
-	return u.u.Salt
+func (u *User) GetReceptionID() []byte {
+	return u.u.ReceptionID.Marshal()
 }
 
-func (u *User) GetRSAPrivateKeyPem() []byte {
-	return rsa.CreatePrivateKeyPem(u.u.RSA)
+func (u *User) GetTransmissionSalt() []byte {
+	return u.u.TransmissionSalt
 }
 
-func (u *User) GetRSAPublicKeyPem() []byte {
-	return rsa.CreatePublicKeyPem(u.u.RSA.GetPublic())
+func (u *User) GetReceptionSalt() []byte {
+	return u.u.ReceptionSalt
+}
+
+func (u *User) GetTransmissionRSAPrivateKeyPem() []byte {
+	return rsa.CreatePrivateKeyPem(u.u.TransmissionRSA)
+}
+
+func (u *User) GetTransmissionRSAPublicKeyPem() []byte {
+	return rsa.CreatePublicKeyPem(u.u.TransmissionRSA.GetPublic())
+}
+
+func (u *User) GetReceptionRSAPrivateKeyPem() []byte {
+	return rsa.CreatePrivateKeyPem(u.u.ReceptionRSA)
+}
+
+func (u *User) GetReceptionRSAPublicKeyPem() []byte {
+	return rsa.CreatePublicKeyPem(u.u.ReceptionRSA.GetPublic())
 }
 
 func (u *User) IsPrecanned() bool {
diff --git a/cmd/init.go b/cmd/init.go
index 19bde0e0e71f990674eb69d49414d3dd4f605b1a..d5d3b91ae04cdc134ea76879eace806e3f765ff4 100644
--- a/cmd/init.go
+++ b/cmd/init.go
@@ -22,9 +22,9 @@ var initCmd = &cobra.Command{
 	Run: func(cmd *cobra.Command, args []string) {
 		client := createClient()
 		user := client.GetUser()
-		jww.INFO.Printf("User: %s", user.ID)
+		jww.INFO.Printf("User: %s", user.TransmissionID)
 		writeContact(user.GetContact())
-		fmt.Printf("%s\n", user.ID)
+		fmt.Printf("%s\n", user.TransmissionID)
 	},
 }
 
diff --git a/cmd/root.go b/cmd/root.go
index 886756c4709f8e771b08272e6e11e0c82414557b..36539fba6738c70f00b862802d0642ffbf594017 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -49,7 +49,7 @@ var rootCmd = &cobra.Command{
 		client := initClient()
 
 		user := client.GetUser()
-		jww.INFO.Printf("User: %s", user.ID)
+		jww.INFO.Printf("User: %s", user.TransmissionID)
 		writeContact(user.GetContact())
 
 		// Set up reception handler
@@ -103,7 +103,7 @@ var rootCmd = &cobra.Command{
 		// Set it to myself
 		if recipientID == nil {
 			jww.INFO.Printf("sending message to self")
-			recipientID = user.ID
+			recipientID = user.ReceptionID
 			recipientContact = user.GetContact()
 		}
 
diff --git a/cmd/ud.go b/cmd/ud.go
index be41ca41e050e25ec85b781de0562b2341b45fd2..c5c59666f7f44a5cc2ec622c2dafa42af96cafbe 100644
--- a/cmd/ud.go
+++ b/cmd/ud.go
@@ -34,7 +34,7 @@ var udCmd = &cobra.Command{
 	Run: func(cmd *cobra.Command, args []string) {
 		client := initClient()
 		user := client.GetUser()
-		jww.INFO.Printf("User: %s", user.ID)
+		jww.INFO.Printf("User: %s", user.TransmissionID)
 		writeContact(user.GetContact())
 
 		// Set up reception handler
diff --git a/go.mod b/go.mod
index 394f8f7c68e05ece8fb1f78bbfac411ae996a6b8..6176f5edda53c1f4f99c6289e28f15280496e803 100644
--- a/go.mod
+++ b/go.mod
@@ -20,13 +20,13 @@ require (
 	github.com/ugorji/go v1.1.4 // indirect
 	github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 // indirect
 	gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228
-	gitlab.com/elixxir/comms v0.0.4-0.20210112234945-18c36b2d908f
+	gitlab.com/elixxir/comms v0.0.4-0.20210114174157-1306832d440b
 	gitlab.com/elixxir/crypto v0.0.7-0.20210107184400-5c3e52a35758
 	gitlab.com/elixxir/ekv v0.1.4
 	gitlab.com/elixxir/primitives v0.0.3-0.20210107183456-9cf6fe2de1e5
 	gitlab.com/xx_network/comms v0.0.4-0.20210112233928-eac8db03c397
 	gitlab.com/xx_network/crypto v0.0.5-0.20210107183440-804e0f8b7d22
-	gitlab.com/xx_network/primitives v0.0.4-0.20210106014326-691ebfca3b07
+	gitlab.com/xx_network/primitives v0.0.4-0.20210114170718-1549f24d462c
 	golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
 	golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
 	golang.org/x/sys v0.0.0-20210105210732-16f7687f5001 // indirect
diff --git a/go.sum b/go.sum
index ebafe48cf4dc88c6b4636e4ca7e0e7911bbb164c..f5f678113615e8cdda98594645a7827210c2d71a 100644
--- a/go.sum
+++ b/go.sum
@@ -277,6 +277,8 @@ gitlab.com/elixxir/comms v0.0.4-0.20210108215809-3fd92afa101f h1:8TMZaCE2IH3S4B1
 gitlab.com/elixxir/comms v0.0.4-0.20210108215809-3fd92afa101f/go.mod h1:Z90vRwrddd9PYd7qJfKCo74lIZhbPQ/DsENaAZSmgUM=
 gitlab.com/elixxir/comms v0.0.4-0.20210112234945-18c36b2d908f h1:EsCG5+sB1ZapIBYP4x55YPKCoSAZF30SMPFuqRnIvWI=
 gitlab.com/elixxir/comms v0.0.4-0.20210112234945-18c36b2d908f/go.mod h1:R2Ank04m99uGRhKOssWzITqN47AT+EOyG2OiCHLGroE=
+gitlab.com/elixxir/comms v0.0.4-0.20210114174157-1306832d440b h1:LdlL28odDDoQbhpgF7jUR3x2TXG1P4TzGfVBg2Md6Ek=
+gitlab.com/elixxir/comms v0.0.4-0.20210114174157-1306832d440b/go.mod h1:R2Ank04m99uGRhKOssWzITqN47AT+EOyG2OiCHLGroE=
 gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A=
 gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c=
 gitlab.com/elixxir/crypto v0.0.3 h1:znCt/x2bL4y8czTPaaFkwzdgSgW3BJc/1+dxyf1jqVw=
@@ -345,6 +347,8 @@ gitlab.com/xx_network/primitives v0.0.4-0.20201229212313-fe33d9809f27 h1:JGpYRKk
 gitlab.com/xx_network/primitives v0.0.4-0.20201229212313-fe33d9809f27/go.mod h1:cs0QlFpdMDI6lAo61lDRH2JZz+3aVkHy+QogOB6F/qc=
 gitlab.com/xx_network/primitives v0.0.4-0.20210106014326-691ebfca3b07 h1:ZxGp7Q0Vyx2mWM84GIPPT3PZK2TLfwycSIk7EgNMIws=
 gitlab.com/xx_network/primitives v0.0.4-0.20210106014326-691ebfca3b07/go.mod h1:cs0QlFpdMDI6lAo61lDRH2JZz+3aVkHy+QogOB6F/qc=
+gitlab.com/xx_network/primitives v0.0.4-0.20210114170718-1549f24d462c h1:RjDklUt70MgcVqBoJvWdBoygkizoByv6Q6DsZSqcFSI=
+gitlab.com/xx_network/primitives v0.0.4-0.20210114170718-1549f24d462c/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE=
 gitlab.com/xx_network/ring v0.0.2 h1:TlPjlbFdhtJrwvRgIg4ScdngMTaynx/ByHBRZiXCoL0=
 gitlab.com/xx_network/ring v0.0.2/go.mod h1:aLzpP2TiZTQut/PVHR40EJAomzugDdHXetbieRClXIM=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
diff --git a/interfaces/user/user.go b/interfaces/user/user.go
index 0f59bf81bbf4ec509d62ff99e933403736eab784..1aaea8a31d67d0dd1facb50cbb7170a0055abf92 100644
--- a/interfaces/user/user.go
+++ b/interfaces/user/user.go
@@ -17,10 +17,13 @@ import (
 
 type User struct {
 	//General Identity
-	ID        *id.ID
-	Salt      []byte
-	RSA       *rsa.PrivateKey
-	Precanned bool
+	TransmissionID   *id.ID
+	TransmissionSalt []byte
+	TransmissionRSA  *rsa.PrivateKey
+	ReceptionID      *id.ID
+	ReceptionSalt    []byte
+	ReceptionRSA     *rsa.PrivateKey
+	Precanned        bool
 
 	//cmix Identity
 	CmixDhPrivateKey *cyclic.Int
@@ -33,7 +36,7 @@ type User struct {
 
 func (u User) GetContact() contact.Contact {
 	return contact.Contact{
-		ID:       u.ID.DeepCopy(),
+		ID:       u.ReceptionID.DeepCopy(),
 		DhPubKey: u.E2eDhPublicKey,
 		Facts:    make([]fact.Fact, 0),
 	}
diff --git a/network/manager.go b/network/manager.go
index fff66d50055f45ad80cbe27c9dd6b0542d7141bf..d10622db534a2050750235d79421e1f05410855f 100644
--- a/network/manager.go
+++ b/network/manager.go
@@ -77,7 +77,7 @@ func NewManager(session *storage.Session, switchboard *switchboard.Switchboard,
 		Health:           health.Init(instance, params.NetworkHealthTimeout),
 		NodeRegistration: make(chan network.NodeGateway, params.RegNodesBufferLen),
 		Instance:         instance,
-		Uid:              session.User().GetCryptographicIdentity().GetUserID(),
+		Uid:              session.User().GetCryptographicIdentity().GetReceptionID(),
 	}
 
 	//create sub managers
diff --git a/network/message/sendUnsafe.go b/network/message/sendUnsafe.go
index c313ef8c57f27c74bd5575c3e080da907d3a011d..8975309dc25b884b35b599c56f88ce53e9fadcea 100644
--- a/network/message/sendUnsafe.go
+++ b/network/message/sendUnsafe.go
@@ -52,7 +52,7 @@ func (m *Manager) SendUnsafe(msg message.Send, param params.Unsafe) ([]id.Round,
 		msgCmix := format.NewMessage(m.Session.Cmix().GetGroup().GetP().ByteLen())
 		msgCmix.SetContents(p)
 		msgCmix.SetRecipientID(msg.Recipient)
-		e2e.SetUnencrypted(msgCmix, m.Session.User().GetCryptographicIdentity().GetUserID())
+		e2e.SetUnencrypted(msgCmix, m.Session.User().GetCryptographicIdentity().GetTransmissionID())
 		wg.Add(1)
 		go func(i int) {
 			var err error
diff --git a/network/node/register.go b/network/node/register.go
index b0a32b611a9948b2d5677080a036e2e925dc3e5b..00b6d4d469c9065e2737764738ccf412c960da30 100644
--- a/network/node/register.go
+++ b/network/node/register.go
@@ -55,7 +55,7 @@ func StartRegistration(instance *network.Instance, session *storage.Session, rng
 func registerNodes(session *storage.Session, rngGen *fastRNG.StreamGenerator, comms RegisterNodeCommsInterface,
 	stop *stoppable.Single, c chan network.NodeGateway) {
 	u := session.User()
-	regSignature := u.GetRegistrationValidationSignature()
+	regSignature := u.GetTransmissionRegistrationValidationSignature()
 	uci := u.GetCryptographicIdentity()
 	cmix := session.Cmix()
 
@@ -104,7 +104,7 @@ func registerWithNode(comms RegisterNodeCommsInterface, ngw network.NodeGateway,
 	var transmissionKey *cyclic.Int
 	// TODO: should move this to a precanned user initialization
 	if uci.IsPrecanned() {
-		userNum := int(uci.GetUserID().Bytes()[7])
+		userNum := int(uci.GetTransmissionID().Bytes()[7])
 		h := sha256.New()
 		h.Reset()
 		h.Write([]byte(strconv.Itoa(int(4000 + userNum))))
@@ -126,8 +126,8 @@ func registerWithNode(comms RegisterNodeCommsInterface, ngw network.NodeGateway,
 
 		// Confirm received nonce
 		jww.INFO.Println("Register: Confirming received nonce")
-		err = confirmNonce(comms, uci.GetUserID().Bytes(),
-			nonce, uci.GetRSA(), gatewayID)
+		err = confirmNonce(comms, uci.GetTransmissionID().Bytes(),
+			nonce, uci.GetTransmissionRSA(), gatewayID)
 		if err != nil {
 			errMsg := fmt.Sprintf("Register: Unable to confirm nonce: %v", err)
 			return errors.New(errMsg)
@@ -154,7 +154,7 @@ func requestNonce(comms RegisterNodeCommsInterface, gwId *id.ID, regHash []byte,
 	data := h.Sum(nil)
 
 	// Sign DH pubkey
-	clientSig, err := rsa.Sign(rng, uci.GetRSA(), sha, data, opts)
+	clientSig, err := rsa.Sign(rng, uci.GetTransmissionRSA(), sha, data, opts)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -169,8 +169,8 @@ func requestNonce(comms RegisterNodeCommsInterface, gwId *id.ID, regHash []byte,
 	}
 	nonceResponse, err := comms.SendRequestNonceMessage(host,
 		&pb.NonceRequest{
-			Salt:            uci.GetSalt(),
-			ClientRSAPubKey: string(rsa.CreatePublicKeyPem(uci.GetRSA().GetPublic())),
+			Salt:            uci.GetTransmissionSalt(),
+			ClientRSAPubKey: string(rsa.CreatePublicKeyPem(uci.GetTransmissionRSA().GetPublic())),
 			ClientSignedByServer: &messages.RSASignature{
 				Signature: regHash,
 			},
diff --git a/permissioning/register.go b/permissioning/register.go
index 5d50680539098fe8eb140ed93af26477e9b2aa9d..f013fbd94f4e4f5af599689b07a410c02453d3dc 100644
--- a/permissioning/register.go
+++ b/permissioning/register.go
@@ -14,8 +14,8 @@ import (
 	"gitlab.com/xx_network/crypto/signature/rsa"
 )
 
-func (perm *Permissioning) Register(publicKey *rsa.PublicKey, registrationCode string) ([]byte, error) {
-	return register(perm.comms, perm.host, publicKey, registrationCode)
+func (perm *Permissioning) Register(transmissionPublicKey, receptionPublicKey *rsa.PublicKey, registrationCode string) ([]byte, []byte, error) {
+	return register(perm.comms, perm.host, transmissionPublicKey, receptionPublicKey, registrationCode)
 }
 
 // client.Comms should implement this interface
@@ -26,20 +26,21 @@ type registrationMessageSender interface {
 //register registers the user with optional registration code
 // Returns an error if registration fails.
 func register(comms registrationMessageSender, host *connect.Host,
-	publicKey *rsa.PublicKey, registrationCode string) ([]byte, error) {
+	transmissionPublicKey, receptionPublicKey *rsa.PublicKey, registrationCode string) ([]byte, []byte, error) {
 
 	response, err := comms.
 		SendRegistrationMessage(host,
 			&pb.UserRegistration{
-				RegistrationCode: registrationCode,
-				ClientRSAPubKey:  string(rsa.CreatePublicKeyPem(publicKey)),
+				RegistrationCode:         registrationCode,
+				ClientRSAPubKey:          string(rsa.CreatePublicKeyPem(transmissionPublicKey)),
+				ClientReceptionRSAPubKey: string(rsa.CreatePublicKeyPem(receptionPublicKey)),
 			})
 	if err != nil {
 		err = errors.Wrap(err, "sendRegistrationMessage: Unable to contact Registration Server!")
-		return nil, err
+		return nil, nil, err
 	}
 	if response.Error != "" {
-		return nil, errors.Errorf("sendRegistrationMessage: error handling message: %s", response.Error)
+		return nil, nil, errors.Errorf("sendRegistrationMessage: error handling message: %s", response.Error)
 	}
-	return response.ClientSignedByServer.Signature, nil
+	return response.ClientSignedByServer.Signature, response.ClientReceptionSignedByServer.Signature, nil
 }
diff --git a/permissioning/register_test.go b/permissioning/register_test.go
index 3f63afff2a290a393a699c969223c9a99d104684..52dcb46e948b42fdd54a8f45ca6e2f751bf8a85e 100644
--- a/permissioning/register_test.go
+++ b/permissioning/register_test.go
@@ -38,6 +38,10 @@ func (s *MockRegistrationSender) SendRegistrationMessage(host *connect.Host, mes
 			Nonce:     []byte("nonce"),
 			Signature: []byte("sig"),
 		},
+		ClientReceptionSignedByServer: &messages.RSASignature{
+			Nonce:     []byte("receptionnonce"),
+			Signature: []byte("receptionsig"),
+		},
 		Error: s.errInReply,
 	}, s.errSendRegistration
 }
@@ -64,13 +68,16 @@ func TestRegisterWithPermissioning(t *testing.T) {
 	}
 
 	regCode := "flooble doodle"
-	sig, err := register(&sender, sender.getHost, key.GetPublic(), regCode)
+	sig1, sig2, err := register(&sender, sender.getHost, key.GetPublic(), key.GetPublic(), regCode)
 	if err != nil {
 		t.Error(err)
 	}
-	if string(sig) != "sig" {
+	if string(sig1) != "sig" {
 		t.Error("expected signature to be 'sig'")
 	}
+	if string(sig2) != "receptionsig" {
+		t.Error("expected signature to be 'receptionsig'")
+	}
 	if sender.host.String() != sender.getHost.String() {
 		t.Errorf("hosts differed. expected %v, got %v", sender.host, sender.getHost)
 	}
@@ -98,7 +105,7 @@ func TestRegisterWithPermissioning_ResponseErr(t *testing.T) {
 	var sender MockRegistrationSender
 	sender.succeedGetHost = true
 	sender.errInReply = "failure occurred on permissioning"
-	_, err = register(&sender, nil, key.GetPublic(), "")
+	_, _, err = register(&sender, nil, key.GetPublic(), key.GetPublic(), "")
 	if err == nil {
 		t.Error("no error if registration fails on permissioning")
 	}
@@ -115,7 +122,7 @@ func TestRegisterWithPermissioning_ConnectionErr(t *testing.T) {
 	var sender MockRegistrationSender
 	sender.succeedGetHost = true
 	sender.errSendRegistration = errors.New("connection problem")
-	_, err = register(&sender, nil, key.GetPublic(), "")
+	_, _, err = register(&sender, nil, key.GetPublic(), key.GetPublic(), "")
 	if err == nil {
 		t.Error("no error if e.g. context deadline exceeded")
 	}
diff --git a/storage/session.go b/storage/session.go
index 771def537344d8386d28c5b5e09efd24f049d2e0..258506d4bad0657a5e4d0686203b60f00b1511e0 100644
--- a/storage/session.go
+++ b/storage/session.go
@@ -90,11 +90,11 @@ func New(baseDir, password string, u userInterface.User, cmixGrp,
 			"Create new session")
 	}
 
-	s.user, err = user.NewUser(s.kv, u.ID, u.Salt, u.RSA, u.Precanned)
+	s.user, err = user.NewUser(s.kv, u.TransmissionID, u.ReceptionID, u.TransmissionSalt, u.ReceptionSalt, u.TransmissionRSA, u.ReceptionRSA, u.Precanned)
 	if err != nil {
 		return nil, errors.WithMessage(err, "Failed to create user")
 	}
-	uid := s.user.GetCryptographicIdentity().GetUserID()
+	uid := s.user.GetCryptographicIdentity().GetReceptionID()
 
 	s.cmix, err = cmix.NewStore(cmixGrp, s.kv, u.CmixDhPrivateKey)
 	if err != nil {
@@ -161,7 +161,7 @@ func Load(baseDir, password string, rng *fastRNG.StreamGenerator) (*Session, err
 		return nil, errors.WithMessage(err, "Failed to load Session")
 	}
 
-	uid := s.user.GetCryptographicIdentity().GetUserID()
+	uid := s.user.GetCryptographicIdentity().GetReceptionID()
 
 	s.e2e, err = e2e.LoadStore(s.kv, uid, rng)
 	if err != nil {
@@ -294,11 +294,12 @@ func InitTestingSession(i interface{}) *Session {
 	kv := versioned.NewKV(store)
 	s := &Session{kv: kv}
 	uid := id.NewIdFromString("zezima", id.User, i)
-	u, err := user.NewUser(kv, uid, []byte("salt"), privKey, false)
+	u, err := user.NewUser(kv, uid, uid, []byte("salt"), []byte("salt"), privKey, privKey, false)
 	if err != nil {
 		globals.Log.FATAL.Panicf("InitTestingSession failed to create dummy user: %+v", err)
 	}
-	u.SetRegistrationValidationSignature([]byte("sig"))
+	u.SetTransmissionRegistrationValidationSignature([]byte("sig"))
+	u.SetReceptionRegistrationValidationSignature([]byte("sig"))
 	s.user = u
 	cmixGrp := cyclic.NewGroup(
 		large.NewIntFromString("9DB6FB5951B66BB6FE1E140F1D2CE5502374161FD6538DF1648218642F0B5C48"+
diff --git a/storage/user.go b/storage/user.go
index b6003cdba1a5eb4fe1d9f9a69549e16632513eb4..df1d9055e3490a3290d9ad378b3857bc16ca7cc4 100644
--- a/storage/user.go
+++ b/storage/user.go
@@ -14,9 +14,12 @@ func (s *Session) GetUser() user.User {
 	defer s.mux.RUnlock()
 	ci := s.user.GetCryptographicIdentity()
 	return user.User{
-		ID:               ci.GetUserID().DeepCopy(),
-		Salt:             copySlice(ci.GetSalt()),
-		RSA:              ci.GetRSA(),
+		TransmissionID:   ci.GetTransmissionID().DeepCopy(),
+		TransmissionSalt: copySlice(ci.GetTransmissionSalt()),
+		TransmissionRSA:  ci.GetReceptionRSA(),
+		ReceptionID:      ci.GetReceptionID().DeepCopy(),
+		ReceptionSalt:    copySlice(ci.GetReceptionSalt()),
+		ReceptionRSA:     ci.GetReceptionRSA(),
 		Precanned:        ci.IsPrecanned(),
 		CmixDhPrivateKey: s.cmix.GetDHPrivateKey().DeepCopy(),
 		CmixDhPublicKey:  s.cmix.GetDHPublicKey().DeepCopy(),
diff --git a/storage/user/cryptographic.go b/storage/user/cryptographic.go
index 2790d4d72b2d15785023ba16083b0bbaf3167168..b444ea7190f10f1ee935ebe573a71fbe46648593 100644
--- a/storage/user/cryptographic.go
+++ b/storage/user/cryptographic.go
@@ -22,27 +22,36 @@ const currentCryptographicIdentityVersion = 0
 const cryptographicIdentityKey = "cryptographicIdentity"
 
 type CryptographicIdentity struct {
-	userID      *id.ID
-	salt        []byte
-	rsaKey      *rsa.PrivateKey
-	isPrecanned bool
+	transmissionID     *id.ID
+	transmissionSalt   []byte
+	transmissionRsaKey *rsa.PrivateKey
+	receptionID        *id.ID
+	receptionSalt      []byte
+	receptionRsaKey    *rsa.PrivateKey
+	isPrecanned        bool
 }
 
 type ciDisk struct {
-	UserID      *id.ID
-	Salt        []byte
-	RsaKey      *rsa.PrivateKey
-	IsPrecanned bool
+	TransmissionID     *id.ID
+	TransmissionSalt   []byte
+	TransmissionRsaKey *rsa.PrivateKey
+	ReceptionID        *id.ID
+	ReceptionSalt      []byte
+	ReceptionRsaKey    *rsa.PrivateKey
+	IsPrecanned        bool
 }
 
-func newCryptographicIdentity(uid *id.ID, salt []byte, rsaKey *rsa.PrivateKey,
+func newCryptographicIdentity(transmissionID, receptionID *id.ID, transmissionSalt, receptionSalt []byte, transmissionRsa, receptionRsa *rsa.PrivateKey,
 	isPrecanned bool, kv *versioned.KV) *CryptographicIdentity {
 
 	ci := &CryptographicIdentity{
-		userID:      uid,
-		salt:        salt,
-		rsaKey:      rsaKey,
-		isPrecanned: isPrecanned,
+		transmissionID:     transmissionID,
+		transmissionSalt:   transmissionSalt,
+		transmissionRsaKey: transmissionRsa,
+		receptionID:        receptionID,
+		receptionSalt:      receptionSalt,
+		receptionRsaKey:    receptionRsa,
+		isPrecanned:        isPrecanned,
 	}
 
 	if err := ci.save(kv); err != nil {
@@ -70,9 +79,12 @@ func loadCryptographicIdentity(kv *versioned.KV) (*CryptographicIdentity, error)
 
 	if decodable != nil {
 		result.isPrecanned = decodable.IsPrecanned
-		result.rsaKey = decodable.RsaKey
-		result.salt = decodable.Salt
-		result.userID = decodable.UserID
+		result.receptionRsaKey = decodable.ReceptionRsaKey
+		result.transmissionRsaKey = decodable.TransmissionRsaKey
+		result.transmissionSalt = decodable.TransmissionSalt
+		result.transmissionID = decodable.TransmissionID
+		result.receptionID = decodable.ReceptionID
+		result.receptionSalt = decodable.ReceptionSalt
 	}
 
 	return result, err
@@ -82,10 +94,13 @@ func (ci *CryptographicIdentity) save(kv *versioned.KV) error {
 	var userDataBuffer bytes.Buffer
 
 	encodable := &ciDisk{
-		UserID:      ci.userID,
-		Salt:        ci.salt,
-		RsaKey:      ci.rsaKey,
-		IsPrecanned: ci.isPrecanned,
+		TransmissionID:     ci.transmissionID,
+		TransmissionSalt:   ci.transmissionSalt,
+		TransmissionRsaKey: ci.transmissionRsaKey,
+		ReceptionID:        ci.receptionID,
+		ReceptionSalt:      ci.receptionSalt,
+		ReceptionRsaKey:    ci.receptionRsaKey,
+		IsPrecanned:        ci.isPrecanned,
 	}
 
 	enc := gob.NewEncoder(&userDataBuffer)
@@ -103,16 +118,28 @@ func (ci *CryptographicIdentity) save(kv *versioned.KV) error {
 	return kv.Set(cryptographicIdentityKey, obj)
 }
 
-func (ci *CryptographicIdentity) GetUserID() *id.ID {
-	return ci.userID.DeepCopy()
+func (ci *CryptographicIdentity) GetTransmissionID() *id.ID {
+	return ci.transmissionID.DeepCopy()
 }
 
-func (ci *CryptographicIdentity) GetSalt() []byte {
-	return ci.salt
+func (ci *CryptographicIdentity) GetTransmissionSalt() []byte {
+	return ci.transmissionSalt
 }
 
-func (ci *CryptographicIdentity) GetRSA() *rsa.PrivateKey {
-	return ci.rsaKey
+func (ci *CryptographicIdentity) GetReceptionID() *id.ID {
+	return ci.receptionID.DeepCopy()
+}
+
+func (ci *CryptographicIdentity) GetReceptionSalt() []byte {
+	return ci.receptionSalt
+}
+
+func (ci *CryptographicIdentity) GetReceptionRSA() *rsa.PrivateKey {
+	return ci.receptionRsaKey
+}
+
+func (ci *CryptographicIdentity) GetTransmissionRSA() *rsa.PrivateKey {
+	return ci.transmissionRsaKey
 }
 
 func (ci *CryptographicIdentity) IsPrecanned() bool {
diff --git a/storage/user/cryptographic_test.go b/storage/user/cryptographic_test.go
index 19c9034cd6c554d0b2274b4a57b4e6a6cc66575e..b1d80bb46187f5d63f240d2afaee0ce76b3311c4 100644
--- a/storage/user/cryptographic_test.go
+++ b/storage/user/cryptographic_test.go
@@ -21,7 +21,8 @@ import (
 func TestNewCryptographicIdentity(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("zezima", id.User, t)
-	_ = newCryptographicIdentity(uid, []byte("salt"), &rsa.PrivateKey{}, false, kv)
+	salt := []byte("salt")
+	_ = newCryptographicIdentity(uid, uid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false, kv)
 
 	_, err := kv.Get(cryptographicIdentityKey)
 	if err != nil {
@@ -33,7 +34,8 @@ func TestNewCryptographicIdentity(t *testing.T) {
 func TestLoadCryptographicIdentity(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("zezima", id.User, t)
-	ci := newCryptographicIdentity(uid, []byte("salt"), &rsa.PrivateKey{}, false, kv)
+	salt := []byte("salt")
+	ci := newCryptographicIdentity(uid, uid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false, kv)
 
 	err := ci.save(kv)
 	if err != nil {
@@ -44,43 +46,94 @@ func TestLoadCryptographicIdentity(t *testing.T) {
 	if err != nil {
 		t.Errorf("Failed to load cryptographic identity: %+v", err)
 	}
-	if !ci.userID.Cmp(newCi.userID) {
-		t.Errorf("Did not load expected ci.  Expected: %+v, Received: %+v", ci.userID, newCi.userID)
+	if !ci.transmissionID.Cmp(newCi.transmissionID) {
+		t.Errorf("Did not load expected ci.  Expected: %+v, Received: %+v", ci.transmissionID, newCi.transmissionID)
 	}
 }
 
-// Happy path for GetRSA function
-func TestCryptographicIdentity_GetRSA(t *testing.T) {
+// Happy path for GetReceptionRSA function
+func TestCryptographicIdentity_GetReceptionRSA(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("zezima", id.User, t)
-	pk, err := rsa.GenerateKey(rand.Reader, 64)
+	pk1, err := rsa.GenerateKey(rand.Reader, 64)
 	if err != nil {
-		t.Errorf("Failed to generate pk")
+		t.Errorf("Failed to generate pk1")
 	}
-	ci := newCryptographicIdentity(uid, []byte("salt"), pk, false, kv)
-	if ci.GetRSA().D != pk.D {
-		t.Errorf("Did not receive expected RSA key.  Expected: %+v, Received: %+v", pk, ci.GetRSA())
+	pk2, err := rsa.GenerateKey(rand.Reader, 64)
+	if err != nil {
+		t.Errorf("Failed to generate pk2")
+	}
+	salt := []byte("salt")
+	ci := newCryptographicIdentity(uid, uid, salt, salt, pk1, pk2, false, kv)
+	if ci.GetReceptionRSA().D != pk2.D {
+		t.Errorf("Did not receive expected RSA key.  Expected: %+v, Received: %+v", pk2, ci.GetReceptionRSA())
+	}
+}
+
+// Happy path for GetTransmissionRSA function
+func TestCryptographicIdentity_GetTransmissionRSA(t *testing.T) {
+	kv := versioned.NewKV(make(ekv.Memstore))
+	uid := id.NewIdFromString("zezima", id.User, t)
+	pk1, err := rsa.GenerateKey(rand.Reader, 64)
+	if err != nil {
+		t.Errorf("Failed to generate pk1")
+	}
+	pk2, err := rsa.GenerateKey(rand.Reader, 64)
+	if err != nil {
+		t.Errorf("Failed to generate pk2")
+	}
+	salt := []byte("salt")
+	ci := newCryptographicIdentity(uid, uid, salt, salt, pk1, pk2, false, kv)
+	if ci.GetTransmissionRSA().D != pk1.D {
+		t.Errorf("Did not receive expected RSA key.  Expected: %+v, Received: %+v", pk1, ci.GetTransmissionRSA())
 	}
 }
 
 // Happy path for GetSalt function
-func TestCryptographicIdentity_GetSalt(t *testing.T) {
+func TestCryptographicIdentity_GetTransmissionSalt(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("zezima", id.User, t)
-	salt := []byte("NaCl")
-	ci := newCryptographicIdentity(uid, salt, &rsa.PrivateKey{}, false, kv)
-	if bytes.Compare(ci.GetSalt(), salt) != 0 {
-		t.Errorf("Did not get expected salt.  Expected: %+v, Received: %+v", salt, ci.GetSalt())
+	ts := []byte("transmission salt")
+	rs := []byte("reception salt")
+	ci := newCryptographicIdentity(uid, uid, ts, rs, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false, kv)
+	if bytes.Compare(ci.GetTransmissionSalt(), ts) != 0 {
+		t.Errorf("Did not get expected salt.  Expected: %+v, Received: %+v", ts, ci.GetTransmissionSalt())
 	}
 }
 
-// Happy path for GetUserID function
-func TestCryptographicIdentity_GetUserID(t *testing.T) {
+// Happy path for GetSalt function
+func TestCryptographicIdentity_GetReceptionSalt(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("zezima", id.User, t)
-	ci := newCryptographicIdentity(uid, []byte("salt"), &rsa.PrivateKey{}, false, kv)
-	if !ci.GetUserID().Cmp(uid) {
-		t.Errorf("Did not receive expected user ID.  Expected: %+v, Received: %+v", uid, ci.GetUserID())
+	ts := []byte("transmission salt")
+	rs := []byte("reception salt")
+	ci := newCryptographicIdentity(uid, uid, ts, rs, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false, kv)
+	if bytes.Compare(ci.GetReceptionSalt(), rs) != 0 {
+		t.Errorf("Did not get expected salt.  Expected: %+v, Received: %+v", rs, ci.GetReceptionSalt())
+	}
+}
+
+// Happy path for GetUserID function
+func TestCryptographicIdentity_GetTransmissionID(t *testing.T) {
+	kv := versioned.NewKV(make(ekv.Memstore))
+	rid := id.NewIdFromString("zezima", id.User, t)
+	tid := id.NewIdFromString("jakexx360", id.User, t)
+	salt := []byte("salt")
+	ci := newCryptographicIdentity(tid, rid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false, kv)
+	if !ci.GetTransmissionID().Cmp(tid) {
+		t.Errorf("Did not receive expected user ID.  Expected: %+v, Received: %+v", tid, ci.GetTransmissionID())
+	}
+}
+
+// Happy path for GetUserID function
+func TestCryptographicIdentity_GetReceptionID(t *testing.T) {
+	kv := versioned.NewKV(make(ekv.Memstore))
+	rid := id.NewIdFromString("zezima", id.User, t)
+	tid := id.NewIdFromString("jakexx360", id.User, t)
+	salt := []byte("salt")
+	ci := newCryptographicIdentity(tid, rid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false, kv)
+	if !ci.GetReceptionID().Cmp(rid) {
+		t.Errorf("Did not receive expected user ID.  Expected: %+v, Received: %+v", rid, ci.GetReceptionID())
 	}
 }
 
@@ -88,7 +141,8 @@ func TestCryptographicIdentity_GetUserID(t *testing.T) {
 func TestCryptographicIdentity_IsPrecanned(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("zezima", id.User, t)
-	ci := newCryptographicIdentity(uid, []byte("salt"), &rsa.PrivateKey{}, true, kv)
+	salt := []byte("salt")
+	ci := newCryptographicIdentity(uid, uid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, true, kv)
 	if !ci.IsPrecanned() {
 		t.Error("I really don't know how this could happen")
 	}
diff --git a/storage/user/regValidationSig.go b/storage/user/regValidationSig.go
index e70b636d2ac4ba1be168c18b069ce07bfddc6bc1..215526936b02440a3ac6a8c84d2ee9b6d96a135b 100644
--- a/storage/user/regValidationSig.go
+++ b/storage/user/regValidationSig.go
@@ -14,35 +14,80 @@ import (
 )
 
 const currentRegValidationSigVersion = 0
-const regValidationSigKey = "registrationValidationSignature"
+const transmissionRegValidationSigKey = "transmissionRegistrationValidationSignature"
+const receptionRegValidationSigKey = "receptionRegistrationValidationSignature"
 
-// Returns the Registration Validation Signature stored in RAM. May return
+// Returns the transmission Registration Validation Signature stored in RAM. May return
 // nil of no signature is stored
-func (u *User) GetRegistrationValidationSignature() []byte {
+func (u *User) GetTransmissionRegistrationValidationSignature() []byte {
 	u.rvsMux.RLock()
 	defer u.rvsMux.RUnlock()
-	return u.regValidationSig
+	return u.transmissionRegValidationSig
 }
 
-// Loads the Registration Validation Signature if it exists in the ekv
-func (u *User) loadRegistrationValidationSignature() {
+// Returns the reception Registration Validation Signature stored in RAM. May return
+// nil of no signature is stored
+func (u *User) GetReceptionRegistrationValidationSignature() []byte {
+	u.rvsMux.RLock()
+	defer u.rvsMux.RUnlock()
+	return u.receptionRegValidationSig
+}
+
+// Loads the transmission Registration Validation Signature if it exists in the ekv
+func (u *User) loadTransmissionRegistrationValidationSignature() {
+	u.rvsMux.Lock()
+	obj, err := u.kv.Get(transmissionRegValidationSigKey)
+	if err == nil {
+		u.transmissionRegValidationSig = obj.Data
+	}
+	u.rvsMux.Unlock()
+}
+
+// Loads the reception Registration Validation Signature if it exists in the ekv
+func (u *User) loadReceptionRegistrationValidationSignature() {
 	u.rvsMux.Lock()
-	obj, err := u.kv.Get(regValidationSigKey)
+	obj, err := u.kv.Get(receptionRegValidationSigKey)
 	if err == nil {
-		u.regValidationSig = obj.Data
+		u.receptionRegValidationSig = obj.Data
 	}
 	u.rvsMux.Unlock()
 }
 
 // Sets the Registration Validation Signature if it is not set and stores it in
 // the ekv
-func (u *User) SetRegistrationValidationSignature(b []byte) {
+func (u *User) SetTransmissionRegistrationValidationSignature(b []byte) {
+	u.rvsMux.Lock()
+	defer u.rvsMux.Unlock()
+
+	//check if the signature already exists
+	if u.transmissionRegValidationSig != nil {
+		jww.FATAL.Panicf("cannot overwrite existing transmission Registration Validation Signature")
+	}
+
+	obj := &versioned.Object{
+		Version:   currentRegValidationSigVersion,
+		Timestamp: time.Now(),
+		Data:      b,
+	}
+
+	err := u.kv.Set(transmissionRegValidationSigKey, obj)
+	if err != nil {
+		jww.FATAL.Panicf("Failed to store the transmission Registration Validation "+
+			"Signature: %s", err)
+	}
+
+	u.transmissionRegValidationSig = b
+}
+
+// Sets the Registration Validation Signature if it is not set and stores it in
+// the ekv
+func (u *User) SetReceptionRegistrationValidationSignature(b []byte) {
 	u.rvsMux.Lock()
 	defer u.rvsMux.Unlock()
 
 	//check if the signature already exists
-	if u.regValidationSig != nil {
-		jww.FATAL.Panicf("cannot overwrite existing Registration Validation Signature")
+	if u.receptionRegValidationSig != nil {
+		jww.FATAL.Panicf("cannot overwrite existing reception Registration Validation Signature")
 	}
 
 	obj := &versioned.Object{
@@ -51,11 +96,11 @@ func (u *User) SetRegistrationValidationSignature(b []byte) {
 		Data:      b,
 	}
 
-	err := u.kv.Set(regValidationSigKey, obj)
+	err := u.kv.Set(receptionRegValidationSigKey, obj)
 	if err != nil {
-		jww.FATAL.Panicf("Failed to store the Registration Validation "+
+		jww.FATAL.Panicf("Failed to store the reception Registration Validation "+
 			"Signature: %s", err)
 	}
 
-	u.regValidationSig = b
+	u.receptionRegValidationSig = b
 }
diff --git a/storage/user/regValidationSig_test.go b/storage/user/regValidationSig_test.go
index 09c73fdd9ccd92cf02b9a8064dcb23968c5c2269..84cde96f59cc16f230231ac1bf9a5054476b0ecb 100644
--- a/storage/user/regValidationSig_test.go
+++ b/storage/user/regValidationSig_test.go
@@ -21,21 +21,34 @@ import (
 func TestUser_GetRegistrationValidationSignature(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("test", id.User, t)
-	u, err := NewUser(kv, uid, []byte("salt"), &rsa.PrivateKey{}, false)
+	salt := []byte("salt")
+	u, err := NewUser(kv, uid, uid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false)
 	if err != nil || u == nil {
 		t.Errorf("Failed to create new user: %+v", err)
 	}
 
-	sig := []byte("testsignature")
-	u.SetRegistrationValidationSignature(sig)
-	if bytes.Compare(sig, u.regValidationSig) != 0 {
+	sig := []byte("testreceptionsignature")
+	u.SetReceptionRegistrationValidationSignature(sig)
+	if bytes.Compare(sig, u.receptionRegValidationSig) != 0 {
 		t.Errorf("Failed to set user object signature field.  Expected: %+v, Received: %+v",
-			sig, u.regValidationSig)
+			sig, u.receptionRegValidationSig)
 	}
 
-	if bytes.Compare(u.GetRegistrationValidationSignature(), sig) != 0 {
+	if bytes.Compare(u.GetReceptionRegistrationValidationSignature(), sig) != 0 {
 		t.Errorf("Did not receive expected result from GetRegistrationValidationSignature.  "+
-			"Expected: %+v, Received: %+v", sig, u.GetRegistrationValidationSignature())
+			"Expected: %+v, Received: %+v", sig, u.GetReceptionRegistrationValidationSignature())
+	}
+
+	sig = []byte("testtransmissionsignature")
+	u.SetTransmissionRegistrationValidationSignature(sig)
+	if bytes.Compare(sig, u.transmissionRegValidationSig) != 0 {
+		t.Errorf("Failed to set user object signature field.  Expected: %+v, Received: %+v",
+			sig, u.transmissionRegValidationSig)
+	}
+
+	if bytes.Compare(u.GetTransmissionRegistrationValidationSignature(), sig) != 0 {
+		t.Errorf("Did not receive expected result from GetRegistrationValidationSignature.  "+
+			"Expected: %+v, Received: %+v", sig, u.GetTransmissionRegistrationValidationSignature())
 	}
 }
 
@@ -43,19 +56,36 @@ func TestUser_GetRegistrationValidationSignature(t *testing.T) {
 func TestUser_SetRegistrationValidationSignature(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("test", id.User, t)
-	u, err := NewUser(kv, uid, []byte("salt"), &rsa.PrivateKey{}, false)
+	salt := []byte("salt")
+	u, err := NewUser(kv, uid, uid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false)
 	if err != nil || u == nil {
 		t.Errorf("Failed to create new user: %+v", err)
 	}
 
-	sig := []byte("testsignature")
-	u.SetRegistrationValidationSignature(sig)
-	if bytes.Compare(sig, u.regValidationSig) != 0 {
+	sig := []byte("testtransmissionsignature")
+	u.SetTransmissionRegistrationValidationSignature(sig)
+	if bytes.Compare(sig, u.transmissionRegValidationSig) != 0 {
 		t.Errorf("Failed to set user object signature field.  Expected: %+v, Received: %+v",
-			sig, u.regValidationSig)
+			sig, u.transmissionRegValidationSig)
 	}
 
-	obj, err := u.kv.Get(regValidationSigKey)
+	obj, err := u.kv.Get(transmissionRegValidationSigKey)
+	if err != nil {
+		t.Errorf("Failed to get reg vaildation signature key: %+v", err)
+	}
+	if bytes.Compare(obj.Data, sig) != 0 {
+		t.Errorf("Did not properly set reg validation signature key in kv store.\nExpected: %+v, Received: %+v",
+			sig, obj.Data)
+	}
+
+	sig = []byte("testreceptionsignature")
+	u.SetReceptionRegistrationValidationSignature(sig)
+	if bytes.Compare(sig, u.receptionRegValidationSig) != 0 {
+		t.Errorf("Failed to set user object signature field.  Expected: %+v, Received: %+v",
+			sig, u.receptionRegValidationSig)
+	}
+
+	obj, err = u.kv.Get(receptionRegValidationSigKey)
 	if err != nil {
 		t.Errorf("Failed to get reg vaildation signature key: %+v", err)
 	}
@@ -69,13 +99,29 @@ func TestUser_SetRegistrationValidationSignature(t *testing.T) {
 func TestUser_loadRegistrationValidationSignature(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("test", id.User, t)
-	u, err := NewUser(kv, uid, []byte("salt"), &rsa.PrivateKey{}, false)
+	salt := []byte("salt")
+	u, err := NewUser(kv, uid, uid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false)
 	if err != nil || u == nil {
 		t.Errorf("Failed to create new user: %+v", err)
 	}
 
-	sig := []byte("signature")
-	err = kv.Set(regValidationSigKey, &versioned.Object{
+	sig := []byte("transmissionsignature")
+	err = kv.Set(transmissionRegValidationSigKey, &versioned.Object{
+		Version:   currentRegValidationSigVersion,
+		Timestamp: time.Now(),
+		Data:      sig,
+	})
+	if err != nil {
+		t.Errorf("Failed to set reg validation sig key in kv store: %+v", err)
+	}
+
+	u.loadTransmissionRegistrationValidationSignature()
+	if bytes.Compare(u.transmissionRegValidationSig, sig) != 0 {
+		t.Errorf("Expected sig did not match loaded.  Expected: %+v, Received: %+v", sig, u.transmissionRegValidationSig)
+	}
+
+	sig = []byte("receptionsignature")
+	err = kv.Set(receptionRegValidationSigKey, &versioned.Object{
 		Version:   currentRegValidationSigVersion,
 		Timestamp: time.Now(),
 		Data:      sig,
@@ -84,8 +130,8 @@ func TestUser_loadRegistrationValidationSignature(t *testing.T) {
 		t.Errorf("Failed to set reg validation sig key in kv store: %+v", err)
 	}
 
-	u.loadRegistrationValidationSignature()
-	if bytes.Compare(u.regValidationSig, sig) != 0 {
-		t.Errorf("Expected sig did not match loaded.  Expected: %+v, Received: %+v", sig, u.regValidationSig)
+	u.loadReceptionRegistrationValidationSignature()
+	if bytes.Compare(u.receptionRegValidationSig, sig) != 0 {
+		t.Errorf("Expected sig did not match loaded.  Expected: %+v, Received: %+v", sig, u.receptionRegValidationSig)
 	}
 }
diff --git a/storage/user/user.go b/storage/user/user.go
index e79928d93b55c2787604fbd9d44fb31b0b20e9ec..a55830ff131620f7f9f499b2a6932d616675ccda 100644
--- a/storage/user/user.go
+++ b/storage/user/user.go
@@ -18,8 +18,9 @@ import (
 type User struct {
 	ci *CryptographicIdentity
 
-	regValidationSig []byte
-	rvsMux           sync.RWMutex
+	transmissionRegValidationSig []byte
+	receptionRegValidationSig    []byte
+	rvsMux                       sync.RWMutex
 
 	username    string
 	usernameMux sync.RWMutex
@@ -28,10 +29,10 @@ type User struct {
 }
 
 // builds a new user.
-func NewUser(kv *versioned.KV, uid *id.ID, salt []byte, rsaKey *rsa.PrivateKey,
-	isPrecanned bool) (*User, error) {
+func NewUser(kv *versioned.KV, transmissionID, receptionID *id.ID, transmissionSalt,
+	receptionSalt []byte, transmissionRsa, receptionRsa *rsa.PrivateKey, isPrecanned bool) (*User, error) {
 
-	ci := newCryptographicIdentity(uid, salt, rsaKey, isPrecanned, kv)
+	ci := newCryptographicIdentity(transmissionID, receptionID, transmissionSalt, receptionSalt, transmissionRsa, receptionRsa, isPrecanned, kv)
 
 	return &User{ci: ci, kv: kv}, nil
 }
@@ -44,7 +45,8 @@ func LoadUser(kv *versioned.KV) (*User, error) {
 	}
 
 	u := &User{ci: ci, kv: kv}
-	u.loadRegistrationValidationSignature()
+	u.loadTransmissionRegistrationValidationSignature()
+	u.loadReceptionRegistrationValidationSignature()
 	u.loadUsername()
 
 	return u, nil
diff --git a/storage/user/user_test.go b/storage/user/user_test.go
index 0473138dc7eaea4ef806dfcbc7ecc76fd0a66f2b..0fd3d8d1819163dcadac0d7bed29f183f45acd32 100644
--- a/storage/user/user_test.go
+++ b/storage/user/user_test.go
@@ -26,7 +26,8 @@ func TestLoadUser(t *testing.T) {
 	}
 
 	uid := id.NewIdFromString("test", id.User, t)
-	ci := newCryptographicIdentity(uid, []byte("salt"), &rsa.PrivateKey{}, false, kv)
+	salt := []byte("salt")
+	ci := newCryptographicIdentity(uid, uid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false, kv)
 	err = ci.save(kv)
 	if err != nil {
 		t.Errorf("Failed to save ci to kv: %+v", err)
@@ -42,7 +43,8 @@ func TestLoadUser(t *testing.T) {
 func TestNewUser(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("test", id.User, t)
-	u, err := NewUser(kv, uid, []byte("salt"), &rsa.PrivateKey{}, false)
+	salt := []byte("salt")
+	u, err := NewUser(kv, uid, uid, salt, salt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false)
 	if err != nil || u == nil {
 		t.Errorf("Failed to create new user: %+v", err)
 	}
@@ -52,13 +54,15 @@ func TestNewUser(t *testing.T) {
 func TestUser_GetCryptographicIdentity(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
 	uid := id.NewIdFromString("test", id.User, t)
-	u, err := NewUser(kv, uid, []byte("salt"), &rsa.PrivateKey{}, false)
+	rsalt := []byte("reception salt")
+	tsalt := []byte("transmission salt")
+	u, err := NewUser(kv, uid, uid, tsalt, rsalt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false)
 	if err != nil || u == nil {
 		t.Errorf("Failed to create new user: %+v", err)
 	}
 
 	ci := u.GetCryptographicIdentity()
-	if bytes.Compare(ci.salt, []byte("salt")) != 0 {
+	if bytes.Compare(ci.transmissionSalt, tsalt) != 0 {
 		t.Errorf("Cryptographic Identity not retrieved properly")
 	}
 }
diff --git a/storage/user/username_test.go b/storage/user/username_test.go
index db2f399c313e8038dd9ce33709f7a256373b6481..486234153ccb16c08589435c4f5ad40039df2165 100644
--- a/storage/user/username_test.go
+++ b/storage/user/username_test.go
@@ -19,8 +19,11 @@ import (
 // Test normal function and errors for User's SetUsername function
 func TestUser_SetUsername(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
-	uid := id.NewIdFromString("test", id.User, t)
-	u, err := NewUser(kv, uid, []byte("salt"), &rsa.PrivateKey{}, false)
+	tid := id.NewIdFromString("trans", id.User, t)
+	rid := id.NewIdFromString("recv", id.User, t)
+	tsalt := []byte("tsalt")
+	rsalt := []byte("rsalt")
+	u, err := NewUser(kv, tid, rid, tsalt, rsalt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false)
 	if err != nil || u == nil {
 		t.Errorf("Failed to create new user: %+v", err)
 	}
@@ -50,8 +53,11 @@ func TestUser_SetUsername(t *testing.T) {
 // Test functionality of User's GetUsername function
 func TestUser_GetUsername(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
-	uid := id.NewIdFromString("test", id.User, t)
-	u, err := NewUser(kv, uid, []byte("salt"), &rsa.PrivateKey{}, false)
+	tid := id.NewIdFromString("trans", id.User, t)
+	rid := id.NewIdFromString("recv", id.User, t)
+	tsalt := []byte("tsalt")
+	rsalt := []byte("rsalt")
+	u, err := NewUser(kv, tid, rid, tsalt, rsalt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false)
 	if err != nil || u == nil {
 		t.Errorf("Failed to create new user: %+v", err)
 	}
@@ -75,8 +81,11 @@ func TestUser_GetUsername(t *testing.T) {
 // Test the loadUsername helper function
 func TestUser_loadUsername(t *testing.T) {
 	kv := versioned.NewKV(make(ekv.Memstore))
-	uid := id.NewIdFromString("test", id.User, t)
-	u, err := NewUser(kv, uid, []byte("salt"), &rsa.PrivateKey{}, false)
+	tid := id.NewIdFromString("trans", id.User, t)
+	rid := id.NewIdFromString("recv", id.User, t)
+	tsalt := []byte("tsalt")
+	rsalt := []byte("rsalt")
+	u, err := NewUser(kv, tid, rid, tsalt, rsalt, &rsa.PrivateKey{}, &rsa.PrivateKey{}, false)
 	if err != nil || u == nil {
 		t.Errorf("Failed to create new user: %+v", err)
 	}
diff --git a/ud/addFact.go b/ud/addFact.go
index 11bf3395658b8e07073a44e6dc0ec1c4edd1ea83..6b2cd3b43e481dbb8e2bad98b76c5dad7d80c099 100644
--- a/ud/addFact.go
+++ b/ud/addFact.go
@@ -3,6 +3,7 @@ package ud
 import (
 	"crypto/rand"
 	"github.com/pkg/errors"
+	jww "github.com/spf13/jwalterweatherman"
 	pb "gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/crypto/factID"
 	"gitlab.com/elixxir/crypto/hash"
@@ -10,7 +11,6 @@ import (
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/crypto/signature/rsa"
 	"gitlab.com/xx_network/primitives/id"
-	jww "github.com/spf13/jwalterweatherman"
 )
 
 type addFactComms interface {
@@ -26,7 +26,7 @@ type addFactComms interface {
 // called along with the code to finalize the fact.
 func (m *Manager) SendRegisterFact(fact fact.Fact) (string, error) {
 	jww.INFO.Printf("ud.SendRegisterFact(%s)", fact.Stringify())
-	uid := m.storage.User().GetCryptographicIdentity().GetUserID()
+	uid := m.storage.User().GetCryptographicIdentity().GetTransmissionID()
 	return m.addFact(fact, uid, m.comms)
 }
 
@@ -66,8 +66,8 @@ func (m *Manager) addFact(inFact fact.Fact, uid *id.ID, aFC addFactComms) (strin
 	response, err := aFC.SendRegisterFact(m.host, &remFactMsg)
 
 	confirmationID := ""
-	if response!=nil{
-		confirmationID=response.ConfirmationID
+	if response != nil {
+		confirmationID = response.ConfirmationID
 	}
 
 	// Return the error
diff --git a/ud/manager.go b/ud/manager.go
index 6350d0e7a511abd893ed92ac8d5f2482c992ddb4..eabb0750f7a9e1685076e0534bf3ed23c04be30a 100644
--- a/ud/manager.go
+++ b/ud/manager.go
@@ -2,6 +2,7 @@ package ud
 
 import (
 	"github.com/pkg/errors"
+	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/api"
 	"gitlab.com/elixxir/client/interfaces"
 	"gitlab.com/elixxir/client/interfaces/message"
@@ -14,7 +15,6 @@ import (
 	"gitlab.com/xx_network/crypto/signature/rsa"
 	"gitlab.com/xx_network/primitives/id"
 	"sync"
-	jww "github.com/spf13/jwalterweatherman"
 )
 
 type Manager struct {
@@ -48,9 +48,9 @@ type Manager struct {
 
 // New manager builds a new user discovery manager. It requires that an
 // updated NDF is available and will error if one is not.
-func NewManager(client *api.Client)(*Manager, error){
+func NewManager(client *api.Client) (*Manager, error) {
 	jww.INFO.Println("ud.NewManager()")
-	if !client.GetHealth().IsHealthy(){
+	if !client.GetHealth().IsHealthy() {
 		return nil, errors.New("cannot start UD Manager when network " +
 			"was never healthy")
 	}
@@ -92,7 +92,7 @@ func NewManager(client *api.Client)(*Manager, error){
 	}
 
 	//get the commonly used data from storage
-	m.privKey = m.storage.GetUser().RSA
+	m.privKey = m.storage.GetUser().TransmissionRSA
 
 	//load the last used commID
 	m.loadCommID()
diff --git a/ud/register.go b/ud/register.go
index 90832d6e5d9a036b260a920a284fe0c897c84e68..c54e768ec667104547a9258090945dfb5cb1aa4f 100644
--- a/ud/register.go
+++ b/ud/register.go
@@ -2,6 +2,7 @@ package ud
 
 import (
 	"github.com/pkg/errors"
+	jww "github.com/spf13/jwalterweatherman"
 	pb "gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/crypto/factID"
 	"gitlab.com/elixxir/crypto/hash"
@@ -9,7 +10,6 @@ import (
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/comms/messages"
 	"gitlab.com/xx_network/crypto/signature/rsa"
-	jww "github.com/spf13/jwalterweatherman"
 )
 
 type registerUserComms interface {
@@ -29,7 +29,7 @@ func (m *Manager) Register(username string) error {
 // register registers a user with user discovery with a specified comm for
 // easier testing.
 func (m *Manager) register(username string, comm registerUserComms) error {
-	if m.IsRegistered(){
+	if m.IsRegistered() {
 		return errors.New("cannot register client with User Discovery: " +
 			"client is already registered")
 	}
@@ -41,19 +41,19 @@ func (m *Manager) register(username string, comm registerUserComms) error {
 
 	// Construct the user registration message
 	msg := &pb.UDBUserRegistration{
-		PermissioningSignature: user.GetRegistrationValidationSignature(),
-		RSAPublicPem:           string(rsa.CreatePublicKeyPem(cryptoUser.GetRSA().GetPublic())),
+		PermissioningSignature: user.GetTransmissionRegistrationValidationSignature(),
+		RSAPublicPem:           string(rsa.CreatePublicKeyPem(cryptoUser.GetTransmissionRSA().GetPublic())),
 		IdentityRegistration: &pb.Identity{
 			Username: username,
 			DhPubKey: m.storage.E2e().GetDHPublicKey().Bytes(),
-			Salt:     cryptoUser.GetSalt(),
+			Salt:     cryptoUser.GetTransmissionSalt(),
 		},
-		UID: cryptoUser.GetUserID().Marshal(),
+		UID: cryptoUser.GetTransmissionID().Marshal(),
 	}
 
 	// Sign the identity data and add to user registration message
 	identityDigest := msg.IdentityRegistration.Digest()
-	msg.IdentitySignature, err = rsa.Sign(rng, cryptoUser.GetRSA(),
+	msg.IdentitySignature, err = rsa.Sign(rng, cryptoUser.GetTransmissionRSA(),
 		hash.CMixHash, identityDigest, nil)
 	if err != nil {
 		return errors.Errorf("Failed to sign user's IdentityRegistration: %+v", err)
@@ -67,11 +67,11 @@ func (m *Manager) register(username string, comm registerUserComms) error {
 
 	// Hash and sign fact
 	hashedFact := factID.Fingerprint(usernameFact)
-	signedFact, err := rsa.Sign(rng, cryptoUser.GetRSA(), hash.CMixHash, hashedFact, nil)
+	signedFact, err := rsa.Sign(rng, cryptoUser.GetTransmissionRSA(), hash.CMixHash, hashedFact, nil)
 
 	// Add username fact register request to the user registration message
 	msg.Frs = &pb.FactRegisterRequest{
-		UID: cryptoUser.GetUserID().Marshal(),
+		UID: cryptoUser.GetTransmissionID().Marshal(),
 		Fact: &pb.Fact{
 			Fact:     username,
 			FactType: 0,
@@ -82,7 +82,7 @@ func (m *Manager) register(username string, comm registerUserComms) error {
 	// Register user with user discovery
 	_, err = comm.SendRegisterUser(m.host, msg)
 
-	if err==nil{
+	if err == nil {
 		err = m.setRegistered()
 	}
 
diff --git a/ud/register_test.go b/ud/register_test.go
index 8591ff9de8391183a1f5eedf6b2214a99036cfc8..7cfd66f1da801bf54b3c853b2232eb3d2f0d6645 100644
--- a/ud/register_test.go
+++ b/ud/register_test.go
@@ -38,9 +38,9 @@ func TestManager_register(t *testing.T) {
 
 	// Set up manager
 	m := &Manager{
-		host:    host,
-		rng:     fastRNG.NewStreamGenerator(12, 3, csprng.NewSystemRNG),
-		storage: storage.InitTestingSession(t),
+		host:       host,
+		rng:        fastRNG.NewStreamGenerator(12, 3, csprng.NewSystemRNG),
+		storage:    storage.InitTestingSession(t),
 		registered: &isReg,
 	}
 
@@ -55,7 +55,7 @@ func TestManager_register(t *testing.T) {
 	m.isCorrect("testUser", c.msg, t)
 
 	// Verify the signed identity data
-	pubKey := m.storage.User().GetCryptographicIdentity().GetRSA().GetPublic()
+	pubKey := m.storage.User().GetCryptographicIdentity().GetTransmissionRSA().GetPublic()
 	err = rsa.Verify(pubKey, hash.CMixHash, c.msg.IdentityRegistration.Digest(),
 		c.msg.IdentitySignature, nil)
 	if err != nil {
@@ -77,14 +77,14 @@ func (m *Manager) isCorrect(username string, msg *pb.UDBUserRegistration, t *tes
 	user := m.storage.User()
 	cryptoUser := m.storage.User().GetCryptographicIdentity()
 
-	if !bytes.Equal(user.GetRegistrationValidationSignature(), msg.PermissioningSignature) {
+	if !bytes.Equal(user.GetTransmissionRegistrationValidationSignature(), msg.PermissioningSignature) {
 		t.Errorf("PermissioningSignature incorrect.\n\texpected: %v\n\treceived: %v",
-			user.GetRegistrationValidationSignature(), msg.PermissioningSignature)
+			user.GetTransmissionRegistrationValidationSignature(), msg.PermissioningSignature)
 	}
 
-	if string(rsa.CreatePublicKeyPem(cryptoUser.GetRSA().GetPublic())) != msg.RSAPublicPem {
+	if string(rsa.CreatePublicKeyPem(cryptoUser.GetTransmissionRSA().GetPublic())) != msg.RSAPublicPem {
 		t.Errorf("RSAPublicPem incorrect.\n\texpected: %v\n\treceived: %v",
-			string(rsa.CreatePublicKeyPem(cryptoUser.GetRSA().GetPublic())), msg.RSAPublicPem)
+			string(rsa.CreatePublicKeyPem(cryptoUser.GetTransmissionRSA().GetPublic())), msg.RSAPublicPem)
 	}
 
 	if username != msg.IdentityRegistration.Username {
@@ -97,14 +97,14 @@ func (m *Manager) isCorrect(username string, msg *pb.UDBUserRegistration, t *tes
 			m.storage.E2e().GetDHPublicKey().Bytes(), msg.IdentityRegistration.DhPubKey)
 	}
 
-	if !bytes.Equal(cryptoUser.GetSalt(), msg.IdentityRegistration.Salt) {
+	if !bytes.Equal(cryptoUser.GetTransmissionSalt(), msg.IdentityRegistration.Salt) {
 		t.Errorf("IdentityRegistration Salt incorrect.\n\texpected: %#v\n\treceived: %#v",
-			cryptoUser.GetSalt(), msg.IdentityRegistration.Salt)
+			cryptoUser.GetTransmissionSalt(), msg.IdentityRegistration.Salt)
 	}
 
-	if !bytes.Equal(cryptoUser.GetUserID().Marshal(), msg.Frs.UID) {
+	if !bytes.Equal(cryptoUser.GetTransmissionID().Marshal(), msg.Frs.UID) {
 		t.Errorf("Frs UID incorrect.\n\texpected: %v\n\treceived: %v",
-			cryptoUser.GetUserID().Marshal(), msg.Frs.UID)
+			cryptoUser.GetTransmissionID().Marshal(), msg.Frs.UID)
 	}
 
 	if !reflect.DeepEqual(&pb.Fact{Fact: username}, msg.Frs.Fact) {