diff --git a/api/send.go b/api/send.go
index dc100912f93804e0d553fca906e1428da89818ed..84256b206d71db926818cc5c93b8e0269ce14eef 100644
--- a/api/send.go
+++ b/api/send.go
@@ -62,6 +62,6 @@ func (c *Client) NewCMIXMessage(recipient *id.ID,
 		return format.Message{}, errors.New("Contents to long for cmix")
 	}
 	msg.SetContents(contents)
-	msg.SetEphemeralRID(recipient.Bytes())
+	msg.SetRecipientID(recipient)
 	return msg, nil
 }
diff --git a/auth/confirm.go b/auth/confirm.go
index 1f328d04e7204e354aea6fea0130026b5f9de5c0..a58306c2da8dce6017c96af1d10888652f67ea73 100644
--- a/auth/confirm.go
+++ b/auth/confirm.go
@@ -99,7 +99,7 @@ func ConfirmRequestAuth(partner contact.Contact, rng io.Reader,
 	cmixMsg.SetKeyFP(fp)
 	cmixMsg.SetMac(mac)
 	cmixMsg.SetContents(baseFmt.Marshal())
-	cmixMsg.SetEphemeralRID(partner.ID.Bytes())
+	cmixMsg.SetRecipientID(partner.ID)
 
 	// fixme: channel can get into a bricked state if the first save occurs and
 	// the second does not or the two occur and the storage into critical
diff --git a/auth/request.go b/auth/request.go
index fecf318eb1e4f30cc4be52229279e19f9fa15350..906aa953995afd3af8b24cc028fe7aaac7dec5e0 100644
--- a/auth/request.go
+++ b/auth/request.go
@@ -132,7 +132,7 @@ func RequestAuth(partner, me contact.Contact, message string, rng io.Reader,
 	cmixMsg.SetKeyFP(requestfp)
 	cmixMsg.SetMac(mac)
 	cmixMsg.SetContents(baseFmt.Marshal())
-	cmixMsg.SetEphemeralRID(partner.ID.Bytes())
+	cmixMsg.SetRecipientID(partner.ID)
 	jww.INFO.Printf("PARTNER ID: %s", partner.ID)
 
 	/*store state*/
@@ -149,7 +149,7 @@ func RequestAuth(partner, me contact.Contact, message string, rng io.Reader,
 
 	//jww.INFO.Printf("CMIX MESSAGE 1: %s, %v, %v, %v", cmixMsg.GetRecipientID(),
 	//	cmixMsg.GetKeyFP(), cmixMsg.GetMac(), cmixMsg.GetContents())
-	jww.INFO.Printf("CMIX MESSAGE FP: %s, %v", cmixMsg.GetEphemeralRID(),
+	jww.INFO.Printf("CMIX MESSAGE FP: %s, %v", cmixMsg.GetRecipientID(),
 		cmixMsg.GetKeyFP())
 
 	/*send message*/
diff --git a/network/follow.go b/network/follow.go
index 623afc54c8ef35ec2c2ae3cbdd9e30b614c34880..fdde482420c16384e9e061636522f46c6a28ebc0 100644
--- a/network/follow.go
+++ b/network/follow.go
@@ -85,6 +85,7 @@ func (m *manager) follow(rng csprng.Source, comms followNetworkComms) {
 			Hash: m.Instance.GetPartialNdf().GetHash(),
 		},
 		LastUpdate: uint64(m.Instance.GetLastUpdateID()),
+		ClientID:   m.Uid.Bytes(),
 	}
 	jww.TRACE.Printf("Polling %s for NDF...", gwHost)
 	pollResp, err := comms.SendPoll(gwHost, &pollReq)
@@ -102,7 +103,7 @@ func (m *manager) follow(rng csprng.Source, comms followNetworkComms) {
 		return
 	}
 	var filterList []*bloom.Ring
-	for _, f := range pollResp.Filters.Filters {
+	for _, f := range pollResp.BloomFilters {
 		jww.DEBUG.Printf("Bloom Filter size: %d, hashes: %d",
 			bloomFilterSize, bloomFilterHashes)
 		filter, err := bloom.InitByParameters(bloomFilterSize,
@@ -112,7 +113,7 @@ func (m *manager) follow(rng csprng.Source, comms followNetworkComms) {
 			jww.FATAL.Panicf("Unable to create a bloom filter: %+v",
 				err)
 		}
-		if err := filter.UnmarshalBinary(f.Filter); err != nil {
+		if err := filter.UnmarshalBinary(f); err != nil {
 			jww.WARN.Printf("Failed to unmarshal filter: %+v", err)
 			jww.INFO.Printf("Bloom Filter Unmarshal Data: %v", f)
 			continue
diff --git a/network/message/handler.go b/network/message/handler.go
index 4dbfc014a31dc614829a4625214e4ccfc68c43ee..6a3d5bb2ae73e3806316e14f21b2db28a1fad2d2 100644
--- a/network/message/handler.go
+++ b/network/message/handler.go
@@ -72,14 +72,10 @@ func (m *Manager) handleMessage(ecrMsg format.Message) {
 		// if it doesnt match any form of encrypted, hear it as a raw message
 		// and add it to garbled messages to be handled later
 		msg = ecrMsg
-		sendID, err := id.Unmarshal(msg.GetEphemeralRID())
-		if err != nil {
-			jww.FATAL.Panicf("%+v", err)
-		}
 		raw := message.Receive{
 			Payload:     msg.Marshal(),
 			MessageType: message.Raw,
-			Sender:      sendID,
+			Sender:      msg.GetRecipientID(),
 			Timestamp:   time.Time{},
 			Encryption:  message.None,
 		}
diff --git a/network/message/sendCmix.go b/network/message/sendCmix.go
index b3879db1702203faac02ac5241b3bbbff4ef42fe..4addcb7e8998f00301d0c8d9800e6e92b6c37fd8 100644
--- a/network/message/sendCmix.go
+++ b/network/message/sendCmix.go
@@ -97,7 +97,7 @@ func (m *Manager) SendCMIX(msg format.Message, param params.CMIX) (id.Round, err
 			return 0, errors.WithMessage(err, "Failed to generate "+
 				"salt, this should never happen")
 		}
-		jww.INFO.Printf("RECIPIENTIDPRE_ENCRYPT: %s", msg.GetEphemeralRID())
+		jww.INFO.Printf("RECIPIENTIDPRE_ENCRYPT: %s", msg.GetRecipientID())
 		encMsg, kmacs := roundKeys.Encrypt(msg, salt)
 
 		//build the message payload
diff --git a/network/message/sendE2E.go b/network/message/sendE2E.go
index 915d16f2c474d70a5792a461de28bb7e83b6daa2..04e24e8e435d7871c6512b0a90abb329c2efa101 100644
--- a/network/message/sendE2E.go
+++ b/network/message/sendE2E.go
@@ -51,7 +51,7 @@ func (m *Manager) SendE2E(msg message.Send, param params.E2E) ([]id.Round, e2e.M
 		//create the cmix message
 		msgCmix := format.NewMessage(m.Session.Cmix().GetGroup().GetP().ByteLen())
 		msgCmix.SetContents(p)
-		msgCmix.SetEphemeralRID(msg.Recipient.Bytes())
+		msgCmix.SetRecipientID(msg.Recipient)
 
 		//get a key to end to end encrypt
 		key, err := partner.GetKeyForSending(param.Type)
diff --git a/network/message/sendUnsafe.go b/network/message/sendUnsafe.go
index 89476f4bab67b149c3d3931dc2be47cf9582a7ab..c313ef8c57f27c74bd5575c3e080da907d3a011d 100644
--- a/network/message/sendUnsafe.go
+++ b/network/message/sendUnsafe.go
@@ -51,7 +51,7 @@ func (m *Manager) SendUnsafe(msg message.Send, param params.Unsafe) ([]id.Round,
 	for i, p := range partitions {
 		msgCmix := format.NewMessage(m.Session.Cmix().GetGroup().GetP().ByteLen())
 		msgCmix.SetContents(p)
-		msgCmix.SetEphemeralRID(msg.Recipient.Bytes())
+		msgCmix.SetRecipientID(msg.Recipient)
 		e2e.SetUnencrypted(msgCmix, m.Session.User().GetCryptographicIdentity().GetUserID())
 		wg.Add(1)
 		go func(i int) {