diff --git a/e2e/ratchet/partner/manager.go b/e2e/ratchet/partner/manager.go
index 7b04009ee06c005af6b77184c8d326c8d88fc675..9bded0aa5856f4f9b7482c66e0096f1074f4ccca 100644
--- a/e2e/ratchet/partner/manager.go
+++ b/e2e/ratchet/partner/manager.go
@@ -47,6 +47,8 @@ type Manager struct {
 	grp       *cyclic.Group
 	cyHandler session.CypherHandler
 	rng       *fastRNG.StreamGenerator
+
+	managerID ManagerIdentity
 }
 
 // NewManager creates the relationship and its first Send and Receive sessions.
@@ -56,7 +58,9 @@ func NewManager(kv *versioned.KV, myID, partnerID *id.ID, myPrivKey,
 	receiveParams session.Params, cyHandler session.CypherHandler,
 	grp *cyclic.Group, rng *fastRNG.StreamGenerator) *Manager {
 
-	kv = kv.Prefix(makeManagerPrefix(partnerID))
+	mi := MakeManagerIdentity(partnerID, myID)
+
+	kv = kv.Prefix(makeManagerPrefix(mi))
 
 	m := &Manager{
 		kv:                      kv,
@@ -69,6 +73,7 @@ func NewManager(kv *versioned.KV, myID, partnerID *id.ID, myPrivKey,
 		cyHandler:               cyHandler,
 		grp:                     grp,
 		rng:                     rng,
+		managerID:               mi,
 	}
 	if err := utility.StoreCyclicKey(kv, myPrivKey, originMyPrivKeyKey); err != nil {
 		jww.FATAL.Panicf("Failed to store %s: %+v", originMyPrivKeyKey,
@@ -95,26 +100,34 @@ func LoadManager(kv *versioned.KV, myID, partnerID *id.ID,
 	cyHandler session.CypherHandler, grp *cyclic.Group,
 	rng *fastRNG.StreamGenerator) (*Manager, error) {
 
-	kv = kv.Prefix(fmt.Sprintf(managerPrefix, partnerID))
+	mi := MakeManagerIdentity(partnerID, myID)
 
 	m := &Manager{
-		kv:        kv,
+		kv:        kv.Prefix(makeManagerPrefix(mi)),
 		myID:      myID,
 		partner:   partnerID,
 		cyHandler: cyHandler,
 		grp:       grp,
 		rng:       rng,
+		managerID: mi,
 	}
 
 	var err error
 
-	m.originMyPrivKey, err = utility.LoadCyclicKey(kv, originMyPrivKeyKey)
+	m.originMyPrivKey, err = utility.LoadCyclicKey(m.kv, originMyPrivKeyKey)
 	if err != nil {
-		jww.FATAL.Panicf("Failed to load %s: %+v", originMyPrivKeyKey,
-			err)
+		// if the key cannot be found, this might be an old session, in which case
+		// we attempt to revert to the old file structure
+		m.kv = kv.Prefix(makeOldManagerPrefix(partnerID))
+		m.originMyPrivKey, err = utility.LoadCyclicKey(m.kv, originMyPrivKeyKey)
+		if err != nil {
+			jww.FATAL.Panicf("Failed to load %s: %+v", originMyPrivKeyKey,
+				err)
+		}
+
 	}
 
-	m.originPartnerPubKey, err = utility.LoadCyclicKey(kv, originPartnerPubKey)
+	m.originPartnerPubKey, err = utility.LoadCyclicKey(m.kv, originPartnerPubKey)
 	if err != nil {
 		jww.FATAL.Panicf("Failed to load %s: %+v", originPartnerPubKey,
 			err)
@@ -296,6 +309,10 @@ func (m *Manager) GetRelationshipFingerprintBytes() []byte {
 	return h.Sum(nil)
 }
 
+func (m *Manager) GetIdentity() ManagerIdentity {
+	return m.managerID
+}
+
 // MakeService Returns a service interface with the
 // appropriate identifier for who is being sent to. Will populate
 // the metadata with the partner
@@ -317,6 +334,10 @@ func (m *Manager) GetContact() contact.Contact {
 	}
 }
 
-func makeManagerPrefix(pid *id.ID) string {
+func makeOldManagerPrefix(pid *id.ID) string {
 	return fmt.Sprintf(managerPrefix, pid)
 }
+
+func makeManagerPrefix(identity ManagerIdentity) string {
+	return fmt.Sprintf(managerPrefix, identity)
+}
diff --git a/e2e/ratchet/partner/managerID.go b/e2e/ratchet/partner/managerID.go
new file mode 100644
index 0000000000000000000000000000000000000000..177036b5e9abda973b5f4357bc16a8ab67369996
--- /dev/null
+++ b/e2e/ratchet/partner/managerID.go
@@ -0,0 +1,31 @@
+package partner
+
+import (
+	"encoding/base64"
+	"gitlab.com/xx_network/primitives/id"
+)
+
+type ManagerIdentity [2 * id.ArrIDLen]byte
+
+func MakeManagerIdentity(partner, me *id.ID) ManagerIdentity {
+	ph := ManagerIdentity{}
+	copy(ph[:id.ArrIDLen], me[:])
+	copy(ph[id.ArrIDLen:], partner[:])
+	return ph
+}
+
+func (mi ManagerIdentity) GetMe() *id.ID {
+	me := &id.ID{}
+	copy(me[:], mi[:id.ArrIDLen])
+	return me
+}
+
+func (mi ManagerIdentity) GetPartner() *id.ID {
+	partner := &id.ID{}
+	copy(partner[:], mi[id.ArrIDLen:])
+	return partner
+}
+
+func (mi ManagerIdentity) String() string {
+	return base64.StdEncoding.EncodeToString(mi[:])
+}
diff --git a/e2e/ratchet/ratchet.go b/e2e/ratchet/ratchet.go
index a84b1e5d5f993db01f987560acb51c0d2c386de1..5bdf827264e7ab86fa55a399f3203d144b9bc0fe 100644
--- a/e2e/ratchet/ratchet.go
+++ b/e2e/ratchet/ratchet.go
@@ -32,7 +32,7 @@ const (
 var NoPartnerErrorStr = "No relationship with partner found"
 
 type Ratchet struct {
-	managers map[relationshipIdentity]*partner.Manager
+	managers map[partner.ManagerIdentity]*partner.Manager
 	mux      sync.RWMutex
 
 	defaultID           *id.ID
@@ -66,7 +66,7 @@ func New(kv *versioned.KV, myID *id.ID, privKey *cyclic.Int,
 	kv = kv.Prefix(packagePrefix)
 
 	r := &Ratchet{
-		managers: make(map[relationshipIdentity]*partner.Manager),
+		managers: make(map[partner.ManagerIdentity]*partner.Manager),
 		services: make(map[string]message.Processor),
 
 		defaultID:           myID,
@@ -95,7 +95,7 @@ func New(kv *versioned.KV, myID *id.ID, privKey *cyclic.Int,
 
 // AddPartner adds a partner. Automatically creates both send and receive
 // sessions using the passed cryptographic data and per the parameters sent
-func (r *Ratchet) AddPartner(myID *id.ID, myPrivateKey *cyclic.Int, partnerID *id.ID,
+func (r *Ratchet) AddPartner(myID *id.ID, partnerID *id.ID,
 	partnerPubKey, myPrivKey *cyclic.Int, partnerSIDHPubKey *sidh.PublicKey,
 	mySIDHPrivKey *sidh.PrivateKey, sendParams,
 	receiveParams session.Params, temporary bool) (*partner.Manager, error) {
@@ -106,19 +106,15 @@ func (r *Ratchet) AddPartner(myID *id.ID, myPrivateKey *cyclic.Int, partnerID *i
 		myID = r.defaultID
 	}
 
-	if myPrivateKey == nil {
-		myPrivateKey = r.defaultDHPrivateKey
-	}
-
 	jww.INFO.Printf("Adding Partner %r:\n\tMy Private Key: %r"+
 		"\n\tPartner Public Key: %r to %s",
 		partnerID,
 		myPrivKey.TextVerbose(16, 0),
 		partnerPubKey.TextVerbose(16, 0), myID)
 
-	rship := makeRelationshipIdentity(partnerID, myID)
+	mid := partner.MakeManagerIdentity(partnerID, myID)
 
-	if _, ok := r.managers[rship]; ok {
+	if _, ok := r.managers[mid]; ok {
 		return nil, errors.New("Cannot overwrite existing partner")
 	}
 
@@ -132,7 +128,7 @@ func (r *Ratchet) AddPartner(myID *id.ID, myPrivateKey *cyclic.Int, partnerID *i
 		mySIDHPrivKey, partnerSIDHPubKey,
 		sendParams, receiveParams, r.cyHandler, r.grp, r.rng)
 
-	r.managers[rship] = m
+	r.managers[mid] = m
 	if err := r.save(); err != nil {
 		jww.FATAL.Printf("Failed to add Partner %r: Save of store failed: %r",
 			partnerID, err)
@@ -153,7 +149,7 @@ func (r *Ratchet) GetPartner(partnerID *id.ID, myID *id.ID) (*partner.Manager, e
 		myID = r.defaultID
 	}
 
-	m, ok := r.managers[makeRelationshipIdentity(partnerID, myID)]
+	m, ok := r.managers[partner.MakeManagerIdentity(partnerID, myID)]
 
 	if !ok {
 		return nil, errors.New(NoPartnerErrorStr)
@@ -168,7 +164,7 @@ func (r *Ratchet) DeletePartner(partnerId *id.ID, myID *id.ID) error {
 		myID = r.defaultID
 	}
 
-	rShip := makeRelationshipIdentity(partnerId, myID)
+	rShip := partner.MakeManagerIdentity(partnerId, myID)
 	m, ok := r.managers[rShip]
 	if !ok {
 		return errors.New(NoPartnerErrorStr)
diff --git a/e2e/ratchet/relationshipID.go b/e2e/ratchet/relationshipID.go
deleted file mode 100644
index 58cdfcbcedcf3acb5163ca592207b5e27c859f99..0000000000000000000000000000000000000000
--- a/e2e/ratchet/relationshipID.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package ratchet
-
-import (
-	"gitlab.com/xx_network/primitives/id"
-)
-
-type relationshipIdentity [2 * id.ArrIDLen]byte
-
-func makeRelationshipIdentity(partner, me *id.ID) relationshipIdentity {
-	ph := relationshipIdentity{}
-	copy(ph[:id.ArrIDLen], me[:])
-	copy(ph[id.ArrIDLen:], partner[:])
-	return ph
-}
-
-func (ri relationshipIdentity) GetMe() *id.ID {
-	me := &id.ID{}
-	copy(me[:], ri[:id.ArrIDLen])
-	return me
-}
-
-func (ri relationshipIdentity) GetPartner() *id.ID {
-	partner := &id.ID{}
-	copy(partner[:], ri[id.ArrIDLen:])
-	return partner
-}
diff --git a/e2e/ratchet/storage.go b/e2e/ratchet/storage.go
index f170df1786f4e01544e035a091f5f51c06fef73e..5ed2969fd9d3d67926950a5e684e3fb4a0b8e62f 100644
--- a/e2e/ratchet/storage.go
+++ b/e2e/ratchet/storage.go
@@ -28,7 +28,7 @@ func Load(kv *versioned.KV, myID *id.ID, grp *cyclic.Group,
 	kv = kv.Prefix(packagePrefix)
 
 	r := &Ratchet{
-		managers: make(map[relationshipIdentity]*partner.Manager),
+		managers: make(map[partner.ManagerIdentity]*partner.Manager),
 		services: make(map[string]message.Processor),
 
 		defaultID: myID,
@@ -94,7 +94,7 @@ func (r *Ratchet) save() error {
 
 // ekv functions
 func (r *Ratchet) marshal() ([]byte, error) {
-	contacts := make([]relationshipIdentity, len(r.managers))
+	contacts := make([]partner.ManagerIdentity, len(r.managers))
 
 	index := 0
 	for rid, m := range r.managers {
@@ -140,7 +140,7 @@ func (r *Ratchet) unmarshalOld(b []byte) error {
 		r.add(manager)
 
 		//assume
-		r.managers[makeRelationshipIdentity(partnerID, r.defaultID)] = manager
+		r.managers[partner.makeRelationshipIdentity(partnerID, r.defaultID)] = manager
 	}
 
 	r.defaultDHPrivateKey, err = util.LoadCyclicKey(r.kv, privKeyKey)
@@ -160,7 +160,7 @@ func (r *Ratchet) unmarshalOld(b []byte) error {
 
 func (r *Ratchet) unmarshal(b []byte) error {
 
-	var contacts []relationshipIdentity
+	var contacts []partner.ManagerIdentity
 
 	err := json.Unmarshal(b, &contacts)
 
diff --git a/network/interface.go b/network/interface.go
index 665ba791d9f4210aa8f458d42aa76b00ce05d902..56cce25d99e72576c45a5320bc48a138f6757835 100644
--- a/network/interface.go
+++ b/network/interface.go
@@ -226,6 +226,8 @@ type Manager interface {
 		roundCallback RoundEventCallback) error
 
 	// LookupHistoricalRound looks up the passed historical round on the network.
+	// GetRoundResults does this lookup when needed, generally that is
+	// preferable
 	LookupHistoricalRound(
 		rid id.Round, callback historical.RoundResultCallback) error
 
diff --git a/storage/auth/authID.go b/storage/auth/authID.go
new file mode 100644
index 0000000000000000000000000000000000000000..41a4e6c5cc34329c71622924f33114e2adee9560
--- /dev/null
+++ b/storage/auth/authID.go
@@ -0,0 +1,35 @@
+package auth
+
+import (
+	"encoding/base64"
+	"gitlab.com/xx_network/primitives/id"
+)
+
+type authIdentity [2 * id.ArrIDLen]byte
+
+func makeAuthIdentity(partner, me *id.ID) authIdentity {
+	ph := authIdentity{}
+	copy(ph[:id.ArrIDLen], me[:])
+	copy(ph[id.ArrIDLen:], partner[:])
+	return ph
+}
+
+func (ai authIdentity) GetMe() *id.ID {
+	me := &id.ID{}
+	copy(me[:], ai[:id.ArrIDLen])
+	return me
+}
+
+func (ai authIdentity) GetPartner() *id.ID {
+	partner := &id.ID{}
+	copy(partner[:], ai[id.ArrIDLen:])
+	return partner
+}
+
+func (ai authIdentity) String() string {
+	return base64.StdEncoding.EncodeToString(ai[:])
+}
+
+func makeRequestPrefix(aid authIdentity) string {
+	return base64.StdEncoding.EncodeToString(aid[:])
+}
diff --git a/storage/auth/confirmation_test.go b/storage/auth/confirmation_test.go
index 94f4dad1b27d227e6742da07917f75b1dc79253e..2de100e510a38051aec12d28701a44badcf246ce 100644
--- a/storage/auth/confirmation_test.go
+++ b/storage/auth/confirmation_test.go
@@ -22,7 +22,7 @@ import (
 	"testing"
 )
 
-// Tests that a confirmation for different partners and fingerprints can be
+// Tests that a confirmation for different partners and sentByFingerprints can be
 // saved and loaded from storage via Store.StoreConfirmation and
 // Store.LoadConfirmation.
 func TestStore_StoreConfirmation_LoadConfirmation(t *testing.T) {
diff --git a/storage/auth/fingerprint.go b/storage/auth/fingerprint.go
index 04d0571c852f0ca359e303d69f41e1085f57bd14..b4aa9941490d79ad7cf37319f16b82f77a43cca1 100644
--- a/storage/auth/fingerprint.go
+++ b/storage/auth/fingerprint.go
@@ -23,5 +23,5 @@ type fingerprint struct {
 	PrivKey *cyclic.Int
 
 	// Only populated if it is specific
-	Request *request
+	Request *ReceivedRequest
 }
diff --git a/storage/auth/previousNegotiations.go b/storage/auth/previousNegotiations.go
index 6b880859800d1f2cc8e4d2ac8b2a1500b14d44ad..f00a5cdf9df348c4cb088fd4ac0223555e23e507 100644
--- a/storage/auth/previousNegotiations.go
+++ b/storage/auth/previousNegotiations.go
@@ -54,7 +54,7 @@ func (s *Store) AddIfNew(partner *id.ID, negotiationFingerprint []byte) (
 		// Save fingerprint to storage
 		err := s.saveNegotiationFingerprints(partner, negotiationFingerprint)
 		if err != nil {
-			jww.FATAL.Panicf("Failed to save negotiation fingerprints for "+
+			jww.FATAL.Panicf("Failed to save negotiation sentByFingerprints for "+
 				"partner %s: %+v", partner, err)
 		}
 
@@ -74,7 +74,7 @@ func (s *Store) AddIfNew(partner *id.ID, negotiationFingerprint []byte) (
 	// get the fingerprint list from storage
 	fingerprints, err := s.loadNegotiationFingerprints(partner)
 	if err != nil {
-		jww.FATAL.Panicf("Failed to load negotiation fingerprints for "+
+		jww.FATAL.Panicf("Failed to load negotiation sentByFingerprints for "+
 			"partner %s: %+v", partner, err)
 	}
 
@@ -96,7 +96,7 @@ func (s *Store) AddIfNew(partner *id.ID, negotiationFingerprint []byte) (
 	fingerprints = append(fingerprints, negotiationFingerprint)
 	err = s.saveNegotiationFingerprints(partner, fingerprints...)
 	if err != nil {
-		jww.FATAL.Panicf("Failed to save negotiation fingerprints for "+
+		jww.FATAL.Panicf("Failed to save negotiation sentByFingerprints for "+
 			"partner %s: %+v", partner, err)
 	}
 
@@ -106,7 +106,7 @@ func (s *Store) AddIfNew(partner *id.ID, negotiationFingerprint []byte) (
 	return
 }
 
-// deletePreviousNegotiationPartner removes the partner, its fingerprints, and
+// deletePreviousNegotiationPartner removes the partner, its sentByFingerprints, and
 // its confirmations from memory and storage.
 func (s *Store) deletePreviousNegotiationPartner(partner *id.ID) error {
 
@@ -124,10 +124,10 @@ func (s *Store) deletePreviousNegotiationPartner(partner *id.ID) error {
 		return err
 	}
 
-	// Check if fingerprints exist
+	// Check if sentByFingerprints exist
 	fingerprints, err := s.loadNegotiationFingerprints(partner)
 
-	// If fingerprints exist for this partner, delete them from storage and any
+	// If sentByFingerprints exist for this partner, delete them from storage and any
 	// accompanying confirmations
 	if err == nil {
 		// Delete the fingerprint list from storage but do not return the error
@@ -142,7 +142,7 @@ func (s *Store) deletePreviousNegotiationPartner(partner *id.ID) error {
 		}
 	}
 
-	// Return any error from loading or deleting fingerprints
+	// Return any error from loading or deleting sentByFingerprints
 	return err
 }
 
@@ -212,7 +212,7 @@ func unmarshalPreviousNegotiations(buf []byte) map[id.ID]struct{} {
 	return partners
 }
 
-// saveNegotiationFingerprints saves the list of fingerprints for the given
+// saveNegotiationFingerprints saves the list of sentByFingerprints for the given
 // partner to storage.
 func (s *Store) saveNegotiationFingerprints(
 	partner *id.ID, fingerprints ...[]byte) error {
@@ -227,7 +227,7 @@ func (s *Store) saveNegotiationFingerprints(
 		currentNegotiationFingerprintsVersion, obj)
 }
 
-// loadNegotiationFingerprints loads the list of fingerprints for the given
+// loadNegotiationFingerprints loads the list of sentByFingerprints for the given
 // partner from storage.
 func (s *Store) loadNegotiationFingerprints(partner *id.ID) ([][]byte, error) {
 	obj, err := s.kv.Get(makeNegotiationFingerprintsKey(partner),
@@ -239,13 +239,13 @@ func (s *Store) loadNegotiationFingerprints(partner *id.ID) ([][]byte, error) {
 	return unmarshalNegotiationFingerprints(obj.Data), nil
 }
 
-// marshalNegotiationFingerprints marshals the list of fingerprints into a byte
+// marshalNegotiationFingerprints marshals the list of sentByFingerprints into a byte
 // slice for storage.
 func marshalNegotiationFingerprints(fingerprints ...[]byte) []byte {
 	buff := bytes.NewBuffer(nil)
 	buff.Grow(8 + (len(fingerprints) * auth.NegotiationFingerprintLen))
 
-	// Write number of fingerprints to buffer
+	// Write number of sentByFingerprints to buffer
 	b := make([]byte, 8)
 	binary.LittleEndian.PutUint64(b, uint64(len(fingerprints)))
 	buff.Write(b)
@@ -259,7 +259,7 @@ func marshalNegotiationFingerprints(fingerprints ...[]byte) []byte {
 }
 
 // unmarshalNegotiationFingerprints unmarshalls the marshalled byte slice into a
-// list of fingerprints.
+// list of sentByFingerprints.
 func unmarshalNegotiationFingerprints(buf []byte) [][]byte {
 	buff := bytes.NewBuffer(buf)
 
@@ -275,7 +275,7 @@ func unmarshalNegotiationFingerprints(buf []byte) [][]byte {
 }
 
 // makeNegotiationFingerprintsKey generates the key used to load and store
-// negotiation fingerprints for the partner.
+// negotiation sentByFingerprints for the partner.
 func makeNegotiationFingerprintsKey(partner *id.ID) string {
 	return negotiationFingerprintsKeyPrefix + partner.String()
 }
diff --git a/storage/auth/previousNegotiations_test.go b/storage/auth/previousNegotiations_test.go
index 8d096fc21d054110d0fd048151a8873d90291b4d..7f840e633342848e88cd34a6db11b35989e540fb 100644
--- a/storage/auth/previousNegotiations_test.go
+++ b/storage/auth/previousNegotiations_test.go
@@ -56,7 +56,7 @@ func TestStore_AddIfNew(t *testing.T) {
 		addPartner bool     // If true, partner is added to list first
 		addFp      bool     // If true, fingerprint is added to list first
 		latestFp   bool     // If true, fingerprint is added as latest
-		otherFps   [][]byte // Other fingerprints to add first
+		otherFps   [][]byte // Other sentByFingerprints to add first
 
 		// Inputs
 		partner *id.ID
@@ -157,7 +157,7 @@ func TestStore_AddIfNew(t *testing.T) {
 }
 
 // Tests that Store.deletePreviousNegotiationPartner deletes the partner from
-// previousNegotiations in memory, previousNegotiations in storage, fingerprints
+// previousNegotiations in memory, previousNegotiations in storage, sentByFingerprints
 // in storage, and any confirmations in storage.
 func TestStore_deletePreviousNegotiationPartner(t *testing.T) {
 	s := &Store{
@@ -184,7 +184,7 @@ func TestStore_deletePreviousNegotiationPartner(t *testing.T) {
 				i, err)
 		}
 
-		// Generate fingerprints
+		// Generate sentByFingerprints
 		fingerprints := make([][]byte, i+1)
 		for j := range fingerprints {
 			dhPubKey := diffieHellman.GeneratePublicKey(grp.NewInt(42), grp)
@@ -240,10 +240,10 @@ func TestStore_deletePreviousNegotiationPartner(t *testing.T) {
 				v.partner, i)
 		}
 
-		// Check negotiation fingerprints in storage
+		// Check negotiation sentByFingerprints in storage
 		fps, err := s.loadNegotiationFingerprints(v.partner)
 		if err == nil || fps != nil {
-			t.Errorf("Loaded fingerprints for partner %s (%d): %v",
+			t.Errorf("Loaded sentByFingerprints for partner %s (%d): %v",
 				v.partner, i, fps)
 		}
 
@@ -338,7 +338,7 @@ func Test_marshalPreviousNegotiations_unmarshalPreviousNegotiations(t *testing.T
 	}
 }
 
-// Tests that a list of fingerprints for different partners can be saved and
+// Tests that a list of sentByFingerprints for different partners can be saved and
 // loaded from storage via Store.saveNegotiationFingerprints and
 // Store.loadNegotiationFingerprints.
 func TestStore_saveNegotiationFingerprints_loadNegotiationFingerprints(t *testing.T) {
@@ -354,7 +354,7 @@ func TestStore_saveNegotiationFingerprints_loadNegotiationFingerprints(t *testin
 	for i := range testValues {
 		partner, _ := id.NewRandomID(rng, id.User)
 
-		// Generate original fingerprints to marshal
+		// Generate original sentByFingerprints to marshal
 		originalFps := make([][]byte, 50)
 		for j := range originalFps {
 			dhPubKey := diffieHellman.GeneratePublicKey(grp.NewInt(42), grp)
@@ -382,20 +382,20 @@ func TestStore_saveNegotiationFingerprints_loadNegotiationFingerprints(t *testin
 		}
 
 		if !reflect.DeepEqual(val.fps, loadedFps) {
-			t.Errorf("Loaded fingerprints do not match original (%d)."+
+			t.Errorf("Loaded sentByFingerprints do not match original (%d)."+
 				"\nexpected: %v\nreceived: %v", i, val.fps, loadedFps)
 		}
 	}
 }
 
-// Tests that a list of fingerprints that is marshalled and unmarshalled via
+// Tests that a list of sentByFingerprints that is marshalled and unmarshalled via
 // marshalNegotiationFingerprints and unmarshalNegotiationFingerprints matches
 // the original list
 func Test_marshalNegotiationFingerprints_unmarshalNegotiationFingerprints(t *testing.T) {
 	rng := csprng.NewSystemRNG()
 	grp := cyclic.NewGroup(large.NewInt(173), large.NewInt(2))
 
-	// Generate original fingerprints to marshal
+	// Generate original sentByFingerprints to marshal
 	originalFps := make([][]byte, 50)
 	for i := range originalFps {
 		dhPubKey := diffieHellman.GeneratePublicKey(grp.NewInt(42), grp)
@@ -409,7 +409,7 @@ func Test_marshalNegotiationFingerprints_unmarshalNegotiationFingerprints(t *tes
 
 	// Check that the original matches the unmarshalled
 	if !reflect.DeepEqual(originalFps, unmarshalledFps) {
-		t.Errorf("Unmarshalled fingerprints do not match original."+
+		t.Errorf("Unmarshalled sentByFingerprints do not match original."+
 			"\nexpected: %v\nreceived: %v", originalFps, unmarshalledFps)
 	}
 }
@@ -441,7 +441,7 @@ func Test_makeNegotiationFingerprintsKey_Consistency(t *testing.T) {
 
 		key := makeNegotiationFingerprintsKey(partner)
 		if expected != key {
-			t.Errorf("Negotiation fingerprints key does not match expected "+
+			t.Errorf("Negotiation sentByFingerprints key does not match expected "+
 				"for partner %s (%d).\nexpected: %q\nreceived: %q", partner, i,
 				expected, key)
 		}
diff --git a/storage/auth/receivedRequest.go b/storage/auth/receivedRequest.go
new file mode 100644
index 0000000000000000000000000000000000000000..4f56526005cd71c9a4d7060776aeaf873aaeb245
--- /dev/null
+++ b/storage/auth/receivedRequest.go
@@ -0,0 +1,76 @@
+package auth
+
+import (
+	"github.com/cloudflare/circl/dh/sidh"
+	"github.com/pkg/errors"
+	util "gitlab.com/elixxir/client/storage/utility"
+	"gitlab.com/elixxir/client/storage/versioned"
+	"gitlab.com/elixxir/crypto/contact"
+	"gitlab.com/xx_network/primitives/id"
+)
+
+type ReceivedRequest struct {
+	kv *versioned.KV
+
+	aid authIdentity
+
+	// ID received on
+	myID *id.ID
+
+	// contact of partner
+	partner contact.Contact
+
+	//sidHPublic key of partner
+	theirSidHPubKeyA *sidh.PublicKey
+}
+
+func loadReceivedRequest(kv *versioned.KV, partner *id.ID, myID *id.ID) (
+	*ReceivedRequest, error) {
+
+	// try the load with both the new prefix and the old, which one is
+	// successful will determine which file structure the sent request will use
+	// a change was made when auth was upgraded to handle auths for multiple
+	// outgoing IDs and it became possible to have multiple auths for the same
+	// partner at a time, so it now needed to be keyed on the touple of
+	// partnerID,MyID. Old receivedByID always have the same myID so they can be left
+	// at their own paths
+	aid := makeAuthIdentity(partner, myID)
+	newKV := kv
+	oldKV := kv.Prefix(makeRequestPrefix(aid))
+
+	c, err := util.LoadContact(newKV, partner)
+
+	//loading with the new prefix path failed, try with the new
+	if err != nil {
+		c, err = util.LoadContact(newKV, partner)
+		if err != nil {
+			return nil, errors.WithMessagef(err, "Failed to Load "+
+				"Received Auth Request Contact with %s and to %s",
+				partner, myID)
+		} else {
+			kv = oldKV
+		}
+	} else {
+		kv = newKV
+	}
+
+	key, err := util.LoadSIDHPublicKey(kv,
+		util.MakeSIDHPublicKeyKey(c.ID))
+	if err != nil {
+		return nil, errors.WithMessagef(err, "Failed to Load "+
+			"Received Auth Request Partner SIDHkey with %s and to %s",
+			partner, myID)
+	}
+
+	return &ReceivedRequest{
+		aid:              aid,
+		kv:               kv,
+		myID:             myID,
+		partner:          c,
+		theirSidHPubKeyA: key,
+	}, nil
+}
+
+func (rr *ReceivedRequest) getType() RequestType {
+	return Receive
+}
diff --git a/storage/auth/request.go b/storage/auth/request.go
index 0520da29ffe627c93f6eafd10b446286c2511aab..e3da8be3c0332cb9ee28d2251f587e9589433cc5 100644
--- a/storage/auth/request.go
+++ b/storage/auth/request.go
@@ -7,12 +7,6 @@
 
 package auth
 
-import (
-	"github.com/cloudflare/circl/dh/sidh"
-	"gitlab.com/elixxir/crypto/contact"
-	"sync"
-)
-
 type RequestType uint
 
 const (
@@ -20,23 +14,8 @@ const (
 	Receive RequestType = 2
 )
 
-type request struct {
-	rt RequestType
-
-	// Data if sent
-	sent *SentRequest
-
-	// Data if receive
-	receive *contact.Contact
-
-	//sidHPublic key of partner
-	theirSidHPubKeyA *sidh.PublicKey
-
-	// mux to ensure there is not concurrent access
-	mux sync.Mutex
-}
-
 type requestDisk struct {
-	T  uint
-	ID []byte
+	T    uint
+	ID   []byte
+	MyID []byte
 }
diff --git a/storage/auth/sentRequest.go b/storage/auth/sentRequest.go
index 1ab1cb8e80c4bc4f3246b989279aeddd36c2d8d7..70b13b1522bbc735fab27dd5e04fc39bf2eafb4c 100644
--- a/storage/auth/sentRequest.go
+++ b/storage/auth/sentRequest.go
@@ -26,6 +26,9 @@ const currentSentRequestVersion = 0
 type SentRequest struct {
 	kv *versioned.KV
 
+	aid authIdentity
+
+	myID                    *id.ID
 	partner                 *id.ID
 	partnerHistoricalPubKey *cyclic.Int
 	myPrivKey               *cyclic.Int
@@ -44,12 +47,34 @@ type sentRequestDisk struct {
 	Fingerprint             []byte
 }
 
-func loadSentRequest(kv *versioned.KV, partner *id.ID, grp *cyclic.Group) (*SentRequest, error) {
-	obj, err := kv.Get(versioned.MakePartnerPrefix(partner),
+func loadSentRequest(kv *versioned.KV, partner *id.ID, myID *id.ID, grp *cyclic.Group) (*SentRequest, error) {
+
+	// try the load with both the new prefix and the old, which one is
+	// successful will determine which file structure the sent request will use
+	// a change was made when auth was upgraded to handle auths for multiple
+	// outgoing IDs and it became possible to have multiple auths for the same
+	// partner at a time, so it now needed to be keyed on the touple of
+	// partnerID,MyID. Old receivedByID always have the same myID so they can be left
+	// at their own paths
+	aid := makeAuthIdentity(partner, myID)
+	oldKV := kv
+	newKV := kv.Prefix(makeRequestPrefix(aid))
+
+	obj, err := newKV.Get(versioned.MakePartnerPrefix(partner),
 		currentSentRequestVersion)
+
+	//loading with the new prefix path failed, try with the new
 	if err != nil {
-		return nil, errors.WithMessagef(err, "Failed to Load "+
-			"SentRequest Auth with %s", partner)
+		obj, err = oldKV.Get(versioned.MakePartnerPrefix(partner),
+			currentSentRequestVersion)
+		if err != nil {
+			return nil, errors.WithMessagef(err, "Failed to Load "+
+				"SentRequest Auth with %s", partner)
+		} else {
+			kv = oldKV
+		}
+	} else {
+		kv = newKV
 	}
 
 	srd := &sentRequestDisk{}
@@ -109,6 +134,8 @@ func loadSentRequest(kv *versioned.KV, partner *id.ID, grp *cyclic.Group) (*Sent
 
 	return &SentRequest{
 		kv:                      kv,
+		aid:                     aid,
+		myID:                    myID,
 		partner:                 partner,
 		partnerHistoricalPubKey: historicalPubKey,
 		myPrivKey:               myPrivKey,
@@ -205,7 +232,7 @@ func (sr *SentRequest) GetMySIDHPubKey() *sidh.PublicKey {
 }
 
 // OverwriteSIDHKeys is used to temporarily overwrite sidh keys
-// to handle e.g., confirmation requests.
+// to handle e.g., confirmation receivedByID.
 // FIXME: this is a code smell but was the cleanest solution at
 // the time. Business logic should probably handle this better?
 func (sr *SentRequest) OverwriteSIDHKeys(priv *sidh.PrivateKey,
@@ -217,3 +244,11 @@ func (sr *SentRequest) OverwriteSIDHKeys(priv *sidh.PrivateKey,
 func (sr *SentRequest) GetFingerprint() format.Fingerprint {
 	return sr.fingerprint
 }
+
+func (sr *SentRequest) getAuthID() authIdentity {
+	return sr.aid
+}
+
+func (sr *SentRequest) getType() RequestType {
+	return Sent
+}
diff --git a/storage/auth/store.go b/storage/auth/store.go
index 9a4580333a1b191a87958a73d391e6a5d98f93ce..40e1c9dd5dd7e7cddb20a1cc4a48237f8025c0ef 100644
--- a/storage/auth/store.go
+++ b/storage/auth/store.go
@@ -16,7 +16,6 @@ import (
 	"gitlab.com/elixxir/client/storage/versioned"
 	"gitlab.com/elixxir/crypto/contact"
 	"gitlab.com/elixxir/crypto/cyclic"
-	"gitlab.com/elixxir/crypto/e2e/auth"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/netTime"
@@ -31,127 +30,109 @@ const requestMapKey = "map"
 const requestMapVersion = 0
 
 type Store struct {
-	kv                   *versioned.KV
-	grp                  *cyclic.Group
-	requests             map[id.ID]*request
-	fingerprints         map[format.Fingerprint]fingerprint
+	kv           *versioned.KV
+	grp          *cyclic.Group
+	receivedByID map[authIdentity]*ReceivedRequest
+	sentByID     map[authIdentity]*SentRequest
+
 	previousNegotiations map[id.ID]struct{}
-	mux                  sync.RWMutex
+
+	defaultID *id.ID
+
+	mux sync.RWMutex
 }
 
 // NewStore creates a new store. All passed in private keys are added as
-// fingerprints so they can be used to trigger requests.
-func NewStore(kv *versioned.KV, grp *cyclic.Group, privKeys []*cyclic.Int) (*Store, error) {
+// sentByFingerprints so they can be used to trigger receivedByID.
+func NewStore(kv *versioned.KV, grp *cyclic.Group) error {
 	kv = kv.Prefix(storePrefix)
 	s := &Store{
 		kv:                   kv,
 		grp:                  grp,
-		requests:             make(map[id.ID]*request),
-		fingerprints:         make(map[format.Fingerprint]fingerprint),
+		receivedByID:         make(map[authIdentity]*ReceivedRequest),
+		sentByID:             make(map[authIdentity]*SentRequest),
 		previousNegotiations: make(map[id.ID]struct{}),
 	}
 
-	for _, key := range privKeys {
-		pubkey := grp.ExpG(key, grp.NewInt(1))
-		fp := auth.MakeRequestFingerprint(pubkey)
-		s.fingerprints[fp] = fingerprint{
-			Type:    General,
-			PrivKey: key,
-			Request: nil,
-		}
-	}
-
 	err := s.savePreviousNegotiations()
 	if err != nil {
-		return nil, errors.Errorf(
+		return errors.Errorf(
 			"failed to load previousNegotiations partners: %+v", err)
 	}
 
-	return s, s.save()
+	return s.save()
 }
 
 // LoadStore loads an extant new store. All passed in private keys are added as
-// fingerprints so they can be used to trigger requests.
-func LoadStore(kv *versioned.KV, grp *cyclic.Group, privKeys []*cyclic.Int) (*Store, error) {
+// sentByFingerprints so they can be used to trigger receivedByID.
+func LoadStore(kv *versioned.KV, defaultID *id.ID, grp *cyclic.Group) (*Store, error) {
 	kv = kv.Prefix(storePrefix)
-	sentObj, err := kv.Get(requestMapKey, requestMapVersion)
-	if err != nil {
-		return nil, errors.WithMessagef(err, "Failed to load requestMap")
-	}
 
 	s := &Store{
 		kv:                   kv,
 		grp:                  grp,
-		requests:             make(map[id.ID]*request),
-		fingerprints:         make(map[format.Fingerprint]fingerprint),
+		receivedByID:         make(map[authIdentity]*ReceivedRequest),
+		sentByID:             make(map[authIdentity]*SentRequest),
 		previousNegotiations: make(map[id.ID]struct{}),
+		defaultID:            defaultID,
 	}
 
-	for _, key := range privKeys {
-		pubkey := grp.ExpG(key, grp.NewInt(1))
-		fp := auth.MakeRequestFingerprint(pubkey)
-		s.fingerprints[fp] = fingerprint{
-			Type:    General,
-			PrivKey: key,
-			Request: nil,
-		}
+	var requestList []requestDisk
+
+	//load all receivedByID
+	sentObj, err := kv.Get(requestMapKey, requestMapVersion)
+	if err != nil {
+		return nil, errors.WithMessagef(err, "Failed to load requestMap")
 	}
 
-	var requestList []requestDisk
 	if err := json.Unmarshal(sentObj.Data, &requestList); err != nil {
 		return nil, errors.WithMessagef(err, "Failed to "+
 			"unmarshal SentRequestMap")
 	}
+
 	jww.TRACE.Printf("%d found when loading AuthStore", len(requestList))
+
+	//process receivedByID
 	for _, rDisk := range requestList {
-		r := &request{
-			rt: RequestType(rDisk.T),
-		}
 
-		var rid *id.ID
+		requestType := RequestType(rDisk.T)
 
 		partner, err := id.Unmarshal(rDisk.ID)
 		if err != nil {
 			jww.FATAL.Panicf("Failed to load stored id: %+v", err)
 		}
 
-		switch r.rt {
-		case Sent:
-			sr, err := loadSentRequest(kv, partner, grp)
+		var myID *id.ID
+		// load the self id used. If it is blank, that means this is an older
+		// version request, and replace it with the default ID
+		if len(rDisk.MyID) == 0 {
+			myID = defaultID
+		} else {
+			myID, err = id.Unmarshal(rDisk.ID)
 			if err != nil {
-				jww.FATAL.Panicf("Failed to load stored sentRequest: %+v", err)
+				jww.FATAL.Panicf("Failed to load stored self id: %+v", err)
 			}
-			r.sent = sr
-			s.fingerprints[sr.fingerprint] = fingerprint{
-				Type:    Specific,
-				PrivKey: nil,
-				Request: r,
-			}
-			rid = sr.partner
-			r.sent = sr
+		}
 
-		case Receive:
-			c, err := util.LoadContact(kv, partner)
+		switch requestType {
+		case Sent:
+			sr, err := loadSentRequest(kv, partner, myID, grp)
 			if err != nil {
-				jww.FATAL.Panicf("Failed to load stored contact for: %+v", err)
+				jww.FATAL.Panicf("Failed to load stored sentRequest: %+v", err)
 			}
 
-			key, err := util.LoadSIDHPublicKey(kv,
-				util.MakeSIDHPublicKeyKey(c.ID))
+			s.sentByID[sr.getAuthID()] = sr
+		case Receive:
+			rr, err := loadReceivedRequest(kv, partner, myID)
 			if err != nil {
-				jww.FATAL.Panicf("Failed to load stored contact for: %+v", err)
+				jww.FATAL.Panicf("Failed to load stored receivedRequest: %+v", err)
 			}
 
-			rid = c.ID
-			r.receive = &c
-			r.theirSidHPubKeyA = key
+			s.receivedByID[rr.aid] = rr
 
 		default:
-			jww.FATAL.Panicf("Unknown request type: %d", r.rt)
+			jww.FATAL.Panicf("Unknown request type: %d", requestType)
 		}
-
-		// store in the request map
-		s.requests[*rid] = r
 	}
 
 	// Load previous negotiations from storage
@@ -165,15 +146,23 @@ func LoadStore(kv *versioned.KV, grp *cyclic.Group, privKeys []*cyclic.Int) (*St
 }
 
 func (s *Store) save() error {
-	requestIDList := make([]requestDisk, len(s.requests))
-	index := 0
-	for pid, r := range s.requests {
+	requestIDList := make([]requestDisk, 0, len(s.receivedByID)+len(s.sentByID))
+	for _, r := range s.receivedByID {
+		rDisk := requestDisk{
+			T:    uint(r.getType()),
+			ID:   r.partner.ID.Marshal(),
+			MyID: r.myID.Marshal(),
+		}
+		requestIDList = append(requestIDList, rDisk)
+	}
+
+	for _, r := range s.sentByID {
 		rDisk := requestDisk{
-			T:  uint(r.rt),
-			ID: pid.Marshal(),
+			T:    uint(r.getType()),
+			ID:   r.partner.Marshal(),
+			MyID: r.myID.Marshal(),
 		}
-		requestIDList[index] = rDisk
-		index++
+		requestIDList = append(requestIDList, rDisk)
 	}
 
 	data, err := json.Marshal(&requestIDList)
@@ -189,13 +178,15 @@ func (s *Store) save() error {
 	return s.kv.Set(requestMapKey, requestMapVersion, &obj)
 }
 
-func (s *Store) AddSent(partner *id.ID, partnerHistoricalPubKey, myPrivKey,
+func (s *Store) AddSent(partner, myID *id.ID, partnerHistoricalPubKey, myPrivKey,
 	myPubKey *cyclic.Int, sidHPrivA *sidh.PrivateKey, sidHPubA *sidh.PublicKey,
 	fp format.Fingerprint) error {
 	s.mux.Lock()
 	defer s.mux.Unlock()
 
-	if _, ok := s.requests[*partner]; ok {
+	aid := makeAuthIdentity(partner, myID)
+
+	if _, ok := s.sentByID[aid]; ok {
 		return errors.Errorf("Cannot make new sentRequest for partner "+
 			"%s, one already exists", partner)
 	}
@@ -215,29 +206,6 @@ func (s *Store) AddSent(partner *id.ID, partnerHistoricalPubKey, myPrivKey,
 		jww.FATAL.Panicf("Failed to save Sent Request for partner %s", partner)
 	}
 
-	r := &request{
-		rt:      Sent,
-		sent:    sr,
-		receive: nil,
-		mux:     sync.Mutex{},
-	}
-
-	s.requests[*partner] = r
-	if err := s.save(); err != nil {
-		jww.FATAL.Panicf("Failed to save Sent Request Map after adding "+
-			"partern %s", partner)
-	}
-
-	jww.INFO.Printf("AddSent PUBKEY FINGERPRINT: %v", sr.fingerprint)
-	jww.INFO.Printf("AddSent PUBKEY: %v", sr.myPubKey.Bytes())
-	jww.INFO.Printf("AddSent Partner: %s", partner)
-
-	s.fingerprints[sr.fingerprint] = fingerprint{
-		Type:    Specific,
-		PrivKey: nil,
-		Request: r,
-	}
-
 	return nil
 }
 
@@ -245,7 +213,7 @@ func (s *Store) AddReceived(c contact.Contact, key *sidh.PublicKey) error {
 	s.mux.Lock()
 	defer s.mux.Unlock()
 	jww.DEBUG.Printf("AddReceived new contact: %s", c.ID)
-	if _, ok := s.requests[*c.ID]; ok {
+	if _, ok := s.receivedByID[*c.ID]; ok {
 		return errors.Errorf("Cannot add contact for partner "+
 			"%s, one already exists", c.ID)
 	}
@@ -260,15 +228,15 @@ func (s *Store) AddReceived(c contact.Contact, key *sidh.PublicKey) error {
 			c.ID.String())
 	}
 
-	r := &request{
+	r := &ReceivedRequest{
 		rt:               Receive,
 		sent:             nil,
-		receive:          &c,
+		partner:          &c,
 		theirSidHPubKeyA: key,
 		mux:              sync.Mutex{},
 	}
 
-	s.requests[*c.ID] = r
+	s.receivedByID[*c.ID] = r
 	if err := s.save(); err != nil {
 		jww.FATAL.Panicf("Failed to save Sent Request Map after adding "+
 			"partner %s", c.ID)
@@ -277,15 +245,15 @@ func (s *Store) AddReceived(c contact.Contact, key *sidh.PublicKey) error {
 	return nil
 }
 
-// GetAllReceived returns all pending received contact requests from storage.
+// GetAllReceived returns all pending received contact receivedByID from storage.
 func (s *Store) GetAllReceived() []contact.Contact {
 	s.mux.RLock()
 	defer s.mux.RUnlock()
-	cList := make([]contact.Contact, 0, len(s.requests))
-	for key := range s.requests {
-		r := s.requests[key]
+	cList := make([]contact.Contact, 0, len(s.receivedByID))
+	for key := range s.receivedByID {
+		r := s.receivedByID[key]
 		if r.rt == Receive {
-			cList = append(cList, *r.receive)
+			cList = append(cList, *r.partner)
 		}
 	}
 	return cList
@@ -299,7 +267,7 @@ func (s *Store) GetFingerprint(fp format.Fingerprint) (FingerprintType,
 	*SentRequest, *cyclic.Int, error) {
 
 	s.mux.RLock()
-	r, ok := s.fingerprints[fp]
+	r, ok := s.sentByFingerprints[fp]
 	s.mux.RUnlock()
 	if !ok {
 		return 0, nil, nil, errors.Errorf("Fingerprint cannot be found: %v", fp)
@@ -316,9 +284,10 @@ func (s *Store) GetFingerprint(fp format.Fingerprint) (FingerprintType,
 		// Check that the request still exists; it could have been deleted
 		// while the lock was taken
 		s.mux.RLock()
-		_, ok := s.requests[*r.Request.sent.partner]
+		_, ok := s.receivedByID[*r.Request.sent.partner]
 		s.mux.RUnlock()
 		if !ok {
+			r.Request.mux.Unlock()
 			return 0, nil, nil, errors.Errorf("request associated with "+
 				"fingerprint cannot be found: %s", fp)
 		}
@@ -332,13 +301,13 @@ func (s *Store) GetFingerprint(fp format.Fingerprint) (FingerprintType,
 	}
 }
 
-// GetReceivedRequest returns the contact representing the receive request, if
+// GetReceivedRequest returns the contact representing the partner request, if
 // it exists. If it returns, then it takes the lock to ensure that there is only
 // one operator at a time. The user of the API must release the lock by calling
 // store.delete() or store.Failed() with the partner ID.
 func (s *Store) GetReceivedRequest(partner *id.ID) (contact.Contact, *sidh.PublicKey, error) {
 	s.mux.RLock()
-	r, ok := s.requests[*partner]
+	r, ok := s.receivedByID[*partner]
 	s.mux.RUnlock()
 
 	if !ok {
@@ -352,7 +321,7 @@ func (s *Store) GetReceivedRequest(partner *id.ID) (contact.Contact, *sidh.Publi
 	// Check that the request still exists; it could have been deleted while the
 	// lock was taken
 	s.mux.RLock()
-	_, ok = s.requests[*partner]
+	_, ok = s.receivedByID[*partner]
 	s.mux.RUnlock()
 
 	if !ok {
@@ -361,29 +330,29 @@ func (s *Store) GetReceivedRequest(partner *id.ID) (contact.Contact, *sidh.Publi
 			"found: %s", partner)
 	}
 
-	return *r.receive, r.theirSidHPubKeyA, nil
+	return *r.partner, r.theirSidHPubKeyA, nil
 }
 
-// GetReceivedRequestData returns the contact representing the receive request
+// GetReceivedRequestData returns the contact representing the partner request
 // if it exists. It does not take the lock. It is only meant to return the
 // contact to an external API user.
 func (s *Store) GetReceivedRequestData(partner *id.ID) (contact.Contact, error) {
 	s.mux.RLock()
-	r, ok := s.requests[*partner]
+	r, ok := s.receivedByID[*partner]
 	s.mux.RUnlock()
 
-	if !ok || r.receive == nil {
+	if !ok || r.partner == nil {
 		return contact.Contact{}, errors.Errorf("Received request not "+
 			"found: %s", partner)
 	}
 
-	return *r.receive, nil
+	return *r.partner, nil
 }
 
 // GetRequest returns request with its type and data. The lock is not taken.
 func (s *Store) GetRequest(partner *id.ID) (RequestType, *SentRequest, contact.Contact, error) {
 	s.mux.RLock()
-	r, ok := s.requests[*partner]
+	r, ok := s.receivedByID[*partner]
 	s.mux.RUnlock()
 
 	if !ok {
@@ -394,7 +363,7 @@ func (s *Store) GetRequest(partner *id.ID) (RequestType, *SentRequest, contact.C
 	case Sent:
 		return Sent, r.sent, contact.Contact{}, nil
 	case Receive:
-		return Receive, nil, *r.receive, nil
+		return Receive, nil, *r.partner, nil
 	default:
 		return 0, nil, contact.Contact{},
 			errors.Errorf("invalid Tag: %d", r.rt)
@@ -407,7 +376,7 @@ func (s *Store) GetRequest(partner *id.ID) (RequestType, *SentRequest, contact.C
 // It does not return an error because an error is not handleable.
 func (s *Store) Done(partner *id.ID) {
 	s.mux.RLock()
-	r, ok := s.requests[*partner]
+	r, ok := s.receivedByID[*partner]
 	s.mux.RUnlock()
 
 	if !ok {
@@ -426,7 +395,7 @@ func (s *Store) Done(partner *id.ID) {
 func (s *Store) Delete(partner *id.ID) error {
 	s.mux.Lock()
 	defer s.mux.Unlock()
-	r, ok := s.requests[*partner]
+	r, ok := s.receivedByID[*partner]
 
 	if !ok {
 		return errors.Errorf("Request not found: %s", partner)
@@ -439,7 +408,7 @@ func (s *Store) Delete(partner *id.ID) error {
 		s.deleteReceiveRequest(r)
 	}
 
-	delete(s.requests, *partner)
+	delete(s.receivedByID, *partner)
 	if err := s.save(); err != nil {
 		jww.FATAL.Panicf("Failed to store updated request map after "+
 			"deletion: %+v", err)
@@ -459,21 +428,21 @@ func (s *Store) DeleteAllRequests() error {
 	s.mux.Lock()
 	defer s.mux.Unlock()
 
-	for partnerId, req := range s.requests {
+	for partnerId, req := range s.receivedByID {
 		switch req.rt {
 		case Sent:
 			s.deleteSentRequest(req)
-			delete(s.requests, partnerId)
+			delete(s.receivedByID, partnerId)
 		case Receive:
 			s.deleteReceiveRequest(req)
-			delete(s.requests, partnerId)
+			delete(s.receivedByID, partnerId)
 		}
 
 	}
 
 	if err := s.save(); err != nil {
 		jww.FATAL.Panicf("Failed to store updated request map after "+
-			"deleting all requests: %+v", err)
+			"deleting all receivedByID: %+v", err)
 	}
 
 	return nil
@@ -487,7 +456,7 @@ func (s *Store) DeleteRequest(partnerId *id.ID) error {
 	s.mux.Lock()
 	defer s.mux.Unlock()
 
-	req, ok := s.requests[*partnerId]
+	req, ok := s.receivedByID[*partnerId]
 	if !ok {
 		return errors.Errorf("Request for %s does not exist", partnerId)
 	}
@@ -499,26 +468,26 @@ func (s *Store) DeleteRequest(partnerId *id.ID) error {
 		s.deleteReceiveRequest(req)
 	}
 
-	delete(s.requests, *partnerId)
+	delete(s.receivedByID, *partnerId)
 
 	if err := s.save(); err != nil {
 		jww.FATAL.Panicf("Failed to store updated request map after "+
-			"deleting receive request for partner %s: %+v", partnerId, err)
+			"deleting partner request for partner %s: %+v", partnerId, err)
 	}
 
 	return nil
 }
 
-// DeleteSentRequests deletes all Sent requests from Store.
+// DeleteSentRequests deletes all Sent receivedByID from Store.
 func (s *Store) DeleteSentRequests() error {
 	s.mux.Lock()
 	defer s.mux.Unlock()
 
-	for partnerId, req := range s.requests {
+	for partnerId, req := range s.receivedByID {
 		switch req.rt {
 		case Sent:
 			s.deleteSentRequest(req)
-			delete(s.requests, partnerId)
+			delete(s.receivedByID, partnerId)
 		case Receive:
 			continue
 		}
@@ -526,46 +495,46 @@ func (s *Store) DeleteSentRequests() error {
 
 	if err := s.save(); err != nil {
 		jww.FATAL.Panicf("Failed to store updated request map after "+
-			"deleting all sent requests: %+v", err)
+			"deleting all sent receivedByID: %+v", err)
 	}
 
 	return nil
 }
 
-// DeleteReceiveRequests deletes all Receive requests from Store.
+// DeleteReceiveRequests deletes all Receive receivedByID from Store.
 func (s *Store) DeleteReceiveRequests() error {
 	s.mux.Lock()
 	defer s.mux.Unlock()
 
-	for partnerId, req := range s.requests {
+	for partnerId, req := range s.receivedByID {
 		switch req.rt {
 		case Sent:
 			continue
 		case Receive:
 			s.deleteReceiveRequest(req)
-			delete(s.requests, partnerId)
+			delete(s.receivedByID, partnerId)
 		}
 	}
 
 	if err := s.save(); err != nil {
 		jww.FATAL.Panicf("Failed to store updated request map after "+
-			"deleting all receive requests: %+v", err)
+			"deleting all partner receivedByID: %+v", err)
 	}
 
 	return nil
 }
 
 // deleteSentRequest is a helper function which deletes a Sent request from storage.
-func (s *Store) deleteSentRequest(r *request) {
-	delete(s.fingerprints, r.sent.fingerprint)
+func (s *Store) deleteSentRequest(r *ReceivedRequest) {
+	delete(s.sentByFingerprints, r.sent.fingerprint)
 	if err := r.sent.delete(); err != nil {
 		jww.FATAL.Panicf("Failed to delete sent request: %+v", err)
 	}
 }
 
 // deleteReceiveRequest is a helper function which deletes a Receive request from storage.
-func (s *Store) deleteReceiveRequest(r *request) {
-	if err := util.DeleteContact(s.kv, r.receive.ID); err != nil {
+func (s *Store) deleteReceiveRequest(r *ReceivedRequest) {
+	if err := util.DeleteContact(s.kv, r.partner.ID); err != nil {
 		jww.FATAL.Panicf("Failed to delete recieved request "+
 			"contact: %+v", err)
 	}
diff --git a/storage/auth/store_test.go b/storage/auth/store_test.go
index 2963efc611c16360a0aaa0d8411f6ed448ac9acc..964b3b88e807bde5e4606ffbbcf25aa47ab9fa32 100644
--- a/storage/auth/store_test.go
+++ b/storage/auth/store_test.go
@@ -46,7 +46,7 @@ func TestNewStore(t *testing.T) {
 	}
 
 	for i, key := range privKeys {
-		rq, ok := store.fingerprints[auth.MakeRequestFingerprint(pubKeys[i])]
+		rq, ok := store.sentByFingerprints[auth.MakeRequestFingerprint(pubKeys[i])]
 		if !ok {
 			t.Errorf("Key not found in map (%d): %s", i, pubKeys[i].Text(16))
 		} else if rq.PrivKey.Cmp(key) != 0 {
@@ -125,27 +125,27 @@ func TestLoadStore(t *testing.T) {
 	}
 
 	partner := sr.partner
-	if s.requests[*partner] == nil {
+	if s.receivedByID[*partner] == nil {
 		t.Errorf("AddSent() failed to add request to map for "+
 			"partner ID %s.", partner)
-	} else if !reflect.DeepEqual(sr, s.requests[*partner].sent) {
+	} else if !reflect.DeepEqual(sr, s.receivedByID[*partner].sent) {
 		t.Errorf("AddSent() failed store the correct SentRequest."+
 			"\n\texpected: %+v\n\treceived: %+v",
-			sr, s.requests[*partner].sent)
+			sr, s.receivedByID[*partner].sent)
 	}
 	expectedFP := fingerprint{
 		Type:    Specific,
 		PrivKey: nil,
-		Request: &request{Sent, sr, nil, nil, sync.Mutex{}},
+		Request: &ReceivedRequest{Sent, sr, nil, nil, sync.Mutex{}},
 	}
-	if _, exists := s.fingerprints[sr.fingerprint]; !exists {
+	if _, exists := s.sentByFingerprints[sr.fingerprint]; !exists {
 		t.Errorf("AddSent() failed to add fingerprint to map for "+
 			"fingerprint %s.", sr.fingerprint)
 	} else if !reflect.DeepEqual(expectedFP,
-		s.fingerprints[sr.fingerprint]) {
+		s.sentByFingerprints[sr.fingerprint]) {
 		t.Errorf("AddSent() failed store the correct fingerprint."+
 			"\n\texpected: %+v\n\treceived: %+v",
-			expectedFP, s.fingerprints[sr.fingerprint])
+			expectedFP, s.sentByFingerprints[sr.fingerprint])
 	}
 }
 
@@ -177,7 +177,7 @@ func TestStore_AddSent(t *testing.T) {
 	expectedFP := fingerprint{
 		Type:    Specific,
 		PrivKey: nil,
-		Request: &request{Sent, sr, nil, nil, sync.Mutex{}},
+		Request: &ReceivedRequest{Sent, sr, nil, nil, sync.Mutex{}},
 	}
 
 	err := s.AddSent(partner, sr.partnerHistoricalPubKey, sr.myPrivKey,
@@ -187,23 +187,23 @@ func TestStore_AddSent(t *testing.T) {
 		t.Errorf("AddSent() produced an error: %+v", err)
 	}
 
-	if s.requests[*partner] == nil {
+	if s.receivedByID[*partner] == nil {
 		t.Errorf("AddSent() failed to add request to map for "+
 			"partner ID %s.", partner)
-	} else if !reflect.DeepEqual(sr, s.requests[*partner].sent) {
+	} else if !reflect.DeepEqual(sr, s.receivedByID[*partner].sent) {
 		t.Errorf("AddSent() failed store the correct SentRequest."+
 			"\n\texpected: %+v\n\treceived: %+v",
-			sr, s.requests[*partner].sent)
+			sr, s.receivedByID[*partner].sent)
 	}
 
-	if _, exists := s.fingerprints[sr.fingerprint]; !exists {
+	if _, exists := s.sentByFingerprints[sr.fingerprint]; !exists {
 		t.Errorf("AddSent() failed to add fingerprint to map for "+
 			"fingerprint %s.", sr.fingerprint)
 	} else if !reflect.DeepEqual(expectedFP,
-		s.fingerprints[sr.fingerprint]) {
+		s.sentByFingerprints[sr.fingerprint]) {
 		t.Errorf("AddSent() failed store the correct fingerprint."+
 			"\n\texpected: %+v\n\treceived: %+v",
-			expectedFP, s.fingerprints[sr.fingerprint])
+			expectedFP, s.sentByFingerprints[sr.fingerprint])
 	}
 }
 
@@ -246,13 +246,13 @@ func TestStore_AddReceived(t *testing.T) {
 		t.Errorf("AddReceived() returned an error: %+v", err)
 	}
 
-	if s.requests[*c.ID] == nil {
+	if s.receivedByID[*c.ID] == nil {
 		t.Errorf("AddReceived() failed to add request to map for "+
 			"partner ID %s.", c.ID)
-	} else if !reflect.DeepEqual(c, *s.requests[*c.ID].receive) {
+	} else if !reflect.DeepEqual(c, *s.receivedByID[*c.ID].partner) {
 		t.Errorf("AddReceived() failed store the correct Contact."+
 			"\n\texpected: %+v\n\treceived: %+v", c,
-			*s.requests[*c.ID].receive)
+			*s.receivedByID[*c.ID].partner)
 	}
 }
 
@@ -276,7 +276,7 @@ func TestStore_AddReceived_PartnerAlreadyExistsError(t *testing.T) {
 	}
 }
 
-// Happy path: fingerprints type is General.
+// Happy path: sentByFingerprints type is General.
 func TestStore_GetFingerprint_GeneralFingerprintType(t *testing.T) {
 	s, _, privKeys := makeTestStore(t)
 
@@ -302,7 +302,7 @@ func TestStore_GetFingerprint_GeneralFingerprintType(t *testing.T) {
 	}
 }
 
-// Happy path: fingerprints type is Specific.
+// Happy path: sentByFingerprints type is Specific.
 func TestStore_GetFingerprint_SpecificFingerprintType(t *testing.T) {
 	s, _, _ := makeTestStore(t)
 	partnerID := id.NewIdFromUInt(rand.Uint64(), id.User, t)
@@ -371,10 +371,10 @@ func TestStore_GetFingerprint_InvalidFingerprintType(t *testing.T) {
 	s, _, privKeys := makeTestStore(t)
 
 	fp := auth.MakeRequestFingerprint(privKeys[0])
-	s.fingerprints[fp] = fingerprint{
+	s.sentByFingerprints[fp] = fingerprint{
 		Type:    0,
-		PrivKey: s.fingerprints[fp].PrivKey,
-		Request: s.fingerprints[fp].Request,
+		PrivKey: s.sentByFingerprints[fp].PrivKey,
+		Request: s.sentByFingerprints[fp].Request,
 	}
 	fpType, request, key, err := s.GetFingerprint(fp)
 	if err == nil {
@@ -418,7 +418,7 @@ func TestStore_GetReceivedRequest(t *testing.T) {
 	}
 
 	// Check if the request's mutex is locked
-	if reflect.ValueOf(&s.requests[*c.ID].mux).Elem().FieldByName(
+	if reflect.ValueOf(&s.receivedByID[*c.ID].mux).Elem().FieldByName(
 		"state").Int() != 1 {
 		t.Errorf("GetReceivedRequest() did not lock mutex.")
 	}
@@ -442,11 +442,11 @@ func TestStore_GetReceivedRequest_RequestDeleted(t *testing.T) {
 		t.Fatalf("AddReceived() returned an error: %+v", err)
 	}
 
-	r := s.requests[*c.ID]
+	r := s.receivedByID[*c.ID]
 	r.mux.Lock()
 
 	go func() {
-		delete(s.requests, *c.ID)
+		delete(s.receivedByID, *c.ID)
 		r.mux.Unlock()
 	}()
 
@@ -605,7 +605,7 @@ func TestStore_GetRequest_SentRequest(t *testing.T) {
 func TestStore_GetRequest_InvalidType(t *testing.T) {
 	s, _, _ := makeTestStore(t)
 	uid := id.NewIdFromUInt(rand.Uint64(), id.User, t)
-	s.requests[*uid] = &request{rt: 42}
+	s.receivedByID[*uid] = &ReceivedRequest{rt: 42}
 
 	rType, request, con, err := s.GetRequest(uid)
 	if err == nil {
@@ -674,7 +674,7 @@ func TestStore_Fail(t *testing.T) {
 	s.Done(c.ID)
 
 	// Check if the request's mutex is locked
-	if reflect.ValueOf(&s.requests[*c.ID].mux).Elem().FieldByName(
+	if reflect.ValueOf(&s.receivedByID[*c.ID].mux).Elem().FieldByName(
 		"state").Int() != 0 {
 		t.Errorf("Done() did not unlock mutex.")
 	}
@@ -694,7 +694,7 @@ func TestStore_Fail_RequestNotInMap(t *testing.T) {
 	s.Done(id.NewIdFromUInt(rand.Uint64(), id.User, t))
 }
 
-// Happy path: receive request.
+// Happy path: partner request.
 func TestStore_Delete_ReceiveRequest(t *testing.T) {
 	s, _, _ := makeTestStore(t)
 	c := contact.Contact{ID: id.NewIdFromUInt(rand.Uint64(), id.User, t)}
@@ -712,7 +712,7 @@ func TestStore_Delete_ReceiveRequest(t *testing.T) {
 		t.Errorf("delete() returned an error: %+v", err)
 	}
 
-	if s.requests[*c.ID] != nil {
+	if s.receivedByID[*c.ID] != nil {
 		t.Errorf("delete() failed to delete request for user %s.", c.ID)
 	}
 }
@@ -747,12 +747,12 @@ func TestStore_Delete_SentRequest(t *testing.T) {
 		t.Errorf("delete() returned an error: %+v", err)
 	}
 
-	if s.requests[*sr.partner] != nil {
+	if s.receivedByID[*sr.partner] != nil {
 		t.Errorf("delete() failed to delete request for user %s.",
 			sr.partner)
 	}
 
-	if _, exists := s.fingerprints[sr.fingerprint]; exists {
+	if _, exists := s.sentByFingerprints[sr.fingerprint]; exists {
 		t.Errorf("delete() failed to delete fingerprint for fp %v.",
 			sr.fingerprint)
 	}
@@ -775,7 +775,7 @@ func TestStore_GetAllReceived(t *testing.T) {
 	numReceived := 10
 
 	expectContactList := make([]contact.Contact, 0, numReceived)
-	// Add multiple received contact requests
+	// Add multiple received contact receivedByID
 	for i := 0; i < numReceived; i++ {
 		c := contact.Contact{ID: id.NewIdFromUInt(rand.Uint64(), id.User, t)}
 		rng := csprng.NewSystemRNG()
@@ -815,7 +815,7 @@ func TestStore_GetAllReceived(t *testing.T) {
 }
 
 // Tests that Store.GetAllReceived returns an empty list when there are no
-// received requests.
+// received receivedByID.
 func TestStore_GetAllReceived_EmptyList(t *testing.T) {
 	s, _, _ := makeTestStore(t)
 
@@ -827,7 +827,7 @@ func TestStore_GetAllReceived_EmptyList(t *testing.T) {
 			"\nReceived: %d", 0, len(receivedContactList))
 	}
 
-	// Add Sent and Receive requests
+	// Add Sent and Receive receivedByID
 	for i := 0; i < 10; i++ {
 		partnerID := id.NewIdFromUInt(rand.Uint64(), id.User, t)
 		rng := csprng.NewSystemRNG()
@@ -860,13 +860,13 @@ func TestStore_GetAllReceived_EmptyList(t *testing.T) {
 
 }
 
-// Tests that Store.GetAllReceived returns only Sent requests when there
-// are both Sent and Receive requests in Store.
+// Tests that Store.GetAllReceived returns only Sent receivedByID when there
+// are both Sent and Receive receivedByID in Store.
 func TestStore_GetAllReceived_MixSentReceived(t *testing.T) {
 	s, _, _ := makeTestStore(t)
 	numReceived := 10
 
-	// Add multiple received contact requests
+	// Add multiple received contact receivedByID
 	for i := 0; i < numReceived; i++ {
 		// Add received request
 		c := contact.Contact{ID: id.NewIdFromUInt(rand.Uint64(), id.User, t)}
@@ -925,7 +925,7 @@ func TestStore_DeleteRequest_NonexistantRequest(t *testing.T) {
 	err := s.DeleteRequest(c.ID)
 	if err != nil {
 		t.Errorf("DeleteRequest should return an error " +
-			"when trying to delete a receive request")
+			"when trying to delete a partner request")
 	}
 
 }
@@ -948,7 +948,7 @@ func TestStore_DeleteReceiveRequests(t *testing.T) {
 		t.Fatalf("DeleteReceiveRequests returned an error: %+v", err)
 	}
 
-	if s.requests[*c.ID] != nil {
+	if s.receivedByID[*c.ID] != nil {
 		t.Errorf("delete() failed to delete request for user %s.", c.ID)
 	}
 }
@@ -980,18 +980,18 @@ func TestStore_DeleteSentRequests(t *testing.T) {
 		t.Fatalf("DeleteSentRequests returned an error: %+v", err)
 	}
 
-	if s.requests[*sr.partner] != nil {
+	if s.receivedByID[*sr.partner] != nil {
 		t.Errorf("delete() failed to delete request for user %s.",
 			sr.partner)
 	}
 
-	if _, exists := s.fingerprints[sr.fingerprint]; exists {
+	if _, exists := s.sentByFingerprints[sr.fingerprint]; exists {
 		t.Errorf("delete() failed to delete fingerprint for fp %v.",
 			sr.fingerprint)
 	}
 }
 
-// Tests that DeleteSentRequests does not affect receive requests in map
+// Tests that DeleteSentRequests does not affect partner receivedByID in map
 func TestStore_DeleteSentRequests_ReceiveInMap(t *testing.T) {
 	s, _, _ := makeTestStore(t)
 	c := contact.Contact{ID: id.NewIdFromUInt(rand.Uint64(), id.User, t)}
@@ -1006,13 +1006,13 @@ func TestStore_DeleteSentRequests_ReceiveInMap(t *testing.T) {
 		t.Fatalf("DeleteSentRequests returned an error: %+v", err)
 	}
 
-	if s.requests[*c.ID] == nil {
-		t.Fatalf("DeleteSentRequests removes receive requests!")
+	if s.receivedByID[*c.ID] == nil {
+		t.Fatalf("DeleteSentRequests removes partner receivedByID!")
 	}
 
 }
 
-// Tests that DeleteReceiveRequests does not affect sent requests in map
+// Tests that DeleteReceiveRequests does not affect sent receivedByID in map
 func TestStore_DeleteReceiveRequests_SentInMap(t *testing.T) {
 	s, _, _ := makeTestStore(t)
 	partnerID := id.NewIdFromUInt(rand.Uint64(), id.User, t)
@@ -1039,8 +1039,8 @@ func TestStore_DeleteReceiveRequests_SentInMap(t *testing.T) {
 		t.Fatalf("DeleteSentRequests returned an error: %+v", err)
 	}
 
-	if s.requests[*partnerID] == nil {
-		t.Fatalf("DeleteReceiveRequests removes sent requests!")
+	if s.receivedByID[*partnerID] == nil {
+		t.Fatalf("DeleteReceiveRequests removes sent receivedByID!")
 	}
 
 }
@@ -1078,17 +1078,17 @@ func TestStore_DeleteAllRequests(t *testing.T) {
 		t.Fatalf("DeleteAllRequests returned an error: %+v", err)
 	}
 
-	if s.requests[*sr.partner] != nil {
+	if s.receivedByID[*sr.partner] != nil {
 		t.Errorf("delete() failed to delete request for user %s.",
 			sr.partner)
 	}
 
-	if _, exists := s.fingerprints[sr.fingerprint]; exists {
+	if _, exists := s.sentByFingerprints[sr.fingerprint]; exists {
 		t.Errorf("delete() failed to delete fingerprint for fp %v.",
 			sr.fingerprint)
 	}
 
-	if s.requests[*c.ID] != nil {
+	if s.receivedByID[*c.ID] != nil {
 		t.Errorf("delete() failed to delete request for user %s.", c.ID)
 	}