diff --git a/auth/callbacks.go b/auth/callbacks.go
index 781164bb89e374f166b0ace4d4fb639e7c250d10..273ff6b0b7af5b36ff53d44e265ebaeaab0183cd 100644
--- a/auth/callbacks.go
+++ b/auth/callbacks.go
@@ -7,10 +7,6 @@
 package auth
 
 import (
-	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/cmix/identity/receptionID"
-	"gitlab.com/elixxir/client/cmix/rounds"
-	"gitlab.com/elixxir/crypto/contact"
 	"gitlab.com/xx_network/primitives/id"
 	"sync"
 )
@@ -42,27 +38,8 @@ func (p *partnerCallbacks) DeletePartnerCallback(partnerId *id.ID) {
 
 // getPartnerCallback returns the Callbacks for the given partnerId
 func (p *partnerCallbacks) getPartnerCallback(partnerId *id.ID) Callbacks {
-	return p.callbacks[*partnerId]
-}
-
-// DefaultAuthCallbacks is a simple structure for providing a default Callbacks implementation
-// It should generally not be used.
-type DefaultAuthCallbacks struct{}
-
-// Confirm will be called when an auth Confirm message is processed.
-func (a DefaultAuthCallbacks) Confirm(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round) {
-	jww.ERROR.Printf("No valid auth callback assigned!")
-}
-
-// Request will be called when an auth Request message is processed.
-func (a DefaultAuthCallbacks) Request(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round) {
-	jww.ERROR.Printf("No valid auth callback assigned!")
-}
+	p.RLock()
+	defer p.RUnlock()
 
-// Reset will be called when an auth Reset operation occurs.
-func (a DefaultAuthCallbacks) Reset(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round) {
-	jww.ERROR.Printf("No valid auth callback assigned!")
+	return p.callbacks[*partnerId]
 }
diff --git a/auth/receivedConfirm.go b/auth/receivedConfirm.go
index 118b79f354d9b8fc3b1b46c62ce217074e9f48ca..ad30186d15c911dbc739495ccf58df4bdcf05818 100644
--- a/auth/receivedConfirm.go
+++ b/auth/receivedConfirm.go
@@ -112,13 +112,11 @@ func (rcs *receivedConfirmService) Process(msg format.Message,
 		Facts:          make([]fact.Fact, 0),
 	}
 
-	authState.partnerCallbacks.RLock()
 	if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil {
 		cb.Confirm(c, receptionID, round)
 	} else {
 		authState.callbacks.Confirm(c, receptionID, round)
 	}
-	authState.partnerCallbacks.RUnlock()
 }
 
 func (rcs *receivedConfirmService) String() string {
diff --git a/auth/receivedRequest.go b/auth/receivedRequest.go
index b410b04a3e29cca95dedd8bc14d310507e8bce57..4e3325996a6ca5c558d3531a019c68c92f026bf3 100644
--- a/auth/receivedRequest.go
+++ b/auth/receivedRequest.go
@@ -130,21 +130,17 @@ func (rrs *receivedRequestService) Process(message format.Message,
 			} else if authState.params.ReplayRequests {
 				//if we did not already accept, auto replay the request
 				if rrs.reset {
-					authState.partnerCallbacks.RLock()
 					if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil {
 						cb.Reset(c, receptionID, round)
 					} else {
 						authState.callbacks.Reset(c, receptionID, round)
 					}
-					authState.partnerCallbacks.RUnlock()
 				} else {
-					authState.partnerCallbacks.RLock()
 					if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil {
 						cb.Request(c, receptionID, round)
 					} else {
 						authState.callbacks.Request(c, receptionID, round)
 					}
-					authState.partnerCallbacks.RUnlock()
 				}
 			}
 			//if not confirm, and params.replay requests is true, we need to replay
@@ -254,8 +250,6 @@ func (rrs *receivedRequestService) Process(message format.Message,
 	}
 
 	// auto-confirm if we should
-	authState.partnerCallbacks.RLock()
-	defer authState.partnerCallbacks.RUnlock()
 	if autoConfirm || reset {
 		_, _ = authState.confirm(c, authState.params.getConfirmTag(reset))
 		//handle callbacks
diff --git a/auth/state.go b/auth/state.go
index a9c90931393d8af5acf790002bb18311614f0719..f8511ac70ed5ff25048fa44129f4c20d13737f33 100644
--- a/auth/state.go
+++ b/auth/state.go
@@ -124,13 +124,11 @@ func (s *state) CallAllReceivedRequests() {
 		rr := rrList[i]
 		eph := receptionID.BuildIdentityFromRound(rr.GetContact().ID,
 			rr.GetRound())
-		s.partnerCallbacks.RLock()
 		if cb := s.partnerCallbacks.getPartnerCallback(rr.GetContact().ID); cb != nil {
 			cb.Request(rr.GetContact(), eph, rr.GetRound())
 		} else {
 			s.callbacks.Request(rr.GetContact(), eph, rr.GetRound())
 		}
-		s.partnerCallbacks.RUnlock()
 	}
 }
 
diff --git a/bindings/connect.go b/bindings/connect.go
index 754a5366c13361a2fea805c4cab402a5981e57aa..ec848b30b8eecfd9c649dd26fa2e68891d6df169 100644
--- a/bindings/connect.go
+++ b/bindings/connect.go
@@ -3,6 +3,8 @@ package bindings
 import (
 	"encoding/json"
 
+	"time"
+
 	"gitlab.com/elixxir/client/catalog"
 	"gitlab.com/elixxir/client/connect"
 	e2e2 "gitlab.com/elixxir/client/e2e"
@@ -46,8 +48,9 @@ func (c *Cmix) Connect(e2eId int, recipientContact []byte) (
 		return nil, err
 	}
 
-	connection, err := connect.Connect(cont, e2eClient.api,
-		xxdk.GetDefaultE2EParams())
+	p := xxdk.GetDefaultE2EParams()
+	p.Base.Timeout = 45 * time.Second
+	connection, err := connect.Connect(cont, e2eClient.api, p)
 	if err != nil {
 		return nil, err
 	}
diff --git a/bindings/e2e.go b/bindings/e2e.go
index a0d5bb252c6e7ed642c502d9d1bd5b0e5b87c44d..0f9b86f02daf6f0d42986cda2cf37b217cb1cd46 100644
--- a/bindings/e2e.go
+++ b/bindings/e2e.go
@@ -9,7 +9,7 @@ package bindings
 import (
 	"encoding/json"
 
-	"gitlab.com/elixxir/client/auth"
+	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/cmix/identity/receptionID"
 	"gitlab.com/elixxir/client/cmix/rounds"
 	"gitlab.com/elixxir/client/xxdk"
@@ -52,13 +52,20 @@ func LoginE2e(cmixId int, callbacks AuthCallbacks, identity []byte) (*E2e, error
 		return nil, err
 	}
 
-	authCallbacks := &authCallback{bindingsCbs: callbacks}
+	var authCallbacks xxdk.AuthCallbacks
+	if callbacks == nil {
+		authCallbacks = defaultAuthCallbacks{}
+	} else {
+		authCallbacks = &authCallback{bindingsCbs: callbacks}
+	}
+
 	params := xxdk.GetDefaultE2EParams()
 
 	newE2e, err := xxdk.Login(cmix.api, authCallbacks, newIdentity, params)
 	if err != nil {
 		return nil, err
 	}
+
 	return e2eTrackerSingleton.make(newE2e), nil
 }
 
@@ -76,7 +83,13 @@ func LoginE2eEphemeral(cmixId int, callbacks AuthCallbacks, identity []byte) (*E
 		return nil, err
 	}
 
-	authCallbacks := &authCallback{bindingsCbs: callbacks}
+	var authCallbacks xxdk.AuthCallbacks
+	if callbacks == nil {
+		authCallbacks = defaultAuthCallbacks{}
+	} else {
+		authCallbacks = &authCallback{bindingsCbs: callbacks}
+	}
+
 	params := xxdk.GetDefaultE2EParams()
 
 	newE2e, err := xxdk.LoginEphemeral(cmix.api, authCallbacks, newIdentity, params)
@@ -97,7 +110,13 @@ func LoginE2eLegacy(cmixId int, callbacks AuthCallbacks) (*E2e, error) {
 		return nil, err
 	}
 
-	authCallbacks := &authCallback{bindingsCbs: callbacks}
+	var authCallbacks xxdk.AuthCallbacks
+	if callbacks == nil {
+		authCallbacks = defaultAuthCallbacks{}
+	} else {
+		authCallbacks = &authCallback{bindingsCbs: callbacks}
+	}
+
 	params := xxdk.GetDefaultE2EParams()
 
 	newE2e, err := xxdk.LoginLegacy(cmix.api, params, authCallbacks)
@@ -169,39 +188,41 @@ func convertAuthCallbacks(requestor contact.Contact,
 }
 
 // Confirm will be called when an auth Confirm message is processed.
-func (a *authCallback) Confirm(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round,
-	e2e *xxdk.E2e) {
-	if a.bindingsCbs == nil {
-		auth.DefaultAuthCallbacks{}.Confirm(requestor, receptionID,
-			round)
-		return
-	}
-	a.bindingsCbs.Confirm(convertAuthCallbacks(requestor, receptionID,
-		round))
+func (a *authCallback) Confirm(partner contact.Contact,
+	receptionID receptionID.EphemeralIdentity, round rounds.Round, _ *xxdk.E2e) {
+	a.bindingsCbs.Confirm(convertAuthCallbacks(partner, receptionID, round))
 }
 
 // Request will be called when an auth Request message is processed.
-func (a *authCallback) Request(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round,
-	e2e *xxdk.E2e) {
-	if a.bindingsCbs == nil {
-		auth.DefaultAuthCallbacks{}.Request(requestor, receptionID,
-			round)
-		return
-	}
-	a.bindingsCbs.Request(convertAuthCallbacks(requestor, receptionID,
-		round))
+func (a *authCallback) Request(partner contact.Contact,
+	receptionID receptionID.EphemeralIdentity, round rounds.Round, _ *xxdk.E2e) {
+	a.bindingsCbs.Request(convertAuthCallbacks(partner, receptionID, round))
 }
 
 // Reset will be called when an auth Reset operation occurs.
-func (a *authCallback) Reset(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round,
-	e2e *xxdk.E2e) {
-	if a.bindingsCbs == nil {
-		auth.DefaultAuthCallbacks{}.Reset(requestor, receptionID,
-			round)
-		return
-	}
-	a.bindingsCbs.Reset(convertAuthCallbacks(requestor, receptionID, round))
+func (a *authCallback) Reset(partner contact.Contact,
+	receptionID receptionID.EphemeralIdentity, round rounds.Round, _ *xxdk.E2e) {
+	a.bindingsCbs.Reset(convertAuthCallbacks(partner, receptionID, round))
+}
+
+// defaultAuthCallbacks is a simple structure for providing a default Callbacks implementation
+// It should generally not be used.
+type defaultAuthCallbacks struct{}
+
+// Confirm will be called when an auth Confirm message is processed.
+func (a defaultAuthCallbacks) Confirm(contact.Contact,
+	receptionID.EphemeralIdentity, rounds.Round, *xxdk.E2e) {
+	jww.ERROR.Printf("No valid auth callback assigned!")
+}
+
+// Request will be called when an auth Request message is processed.
+func (a defaultAuthCallbacks) Request(contact.Contact,
+	receptionID.EphemeralIdentity, rounds.Round, *xxdk.E2e) {
+	jww.ERROR.Printf("No valid auth callback assigned!")
+}
+
+// Reset will be called when an auth Reset operation occurs.
+func (a defaultAuthCallbacks) Reset(contact.Contact,
+	receptionID.EphemeralIdentity, rounds.Round, *xxdk.E2e) {
+	jww.ERROR.Printf("No valid auth callback assigned!")
 }
diff --git a/bindings/e2eAuth.go b/bindings/e2eAuth.go
index fb21ad2d0f7de4345479b0681e6c56ee2d641598..77083daa290bfcd1dbd27ffe714e2d456624475d 100644
--- a/bindings/e2eAuth.go
+++ b/bindings/e2eAuth.go
@@ -216,9 +216,8 @@ func (e *E2e) AddPartnerCallback(partnerID []byte, cb AuthCallbacks) error {
 		return err
 	}
 
-	acw := xxdk.MakeAuthCB(e.api, &authCallback{bindingsCbs: cb})
-
-	e.api.GetAuth().AddPartnerCallback(partnerId, acw)
+	e.api.GetAuth().AddPartnerCallback(partnerId,
+		xxdk.MakeAuthCallbacksAdapter(&authCallback{bindingsCbs: cb}, e.api))
 	return nil
 }
 
diff --git a/connect/authCallbacks.go b/connect/authCallbacks.go
new file mode 100644
index 0000000000000000000000000000000000000000..0a2cded398b9c29a9a6a199277bfe919189eaa31
--- /dev/null
+++ b/connect/authCallbacks.go
@@ -0,0 +1,147 @@
+////////////////////////////////////////////////////////////////////////////////
+// Copyright © 2022 Privategrity Corporation                                   /
+//                                                                             /
+// All rights reserved.                                                        /
+////////////////////////////////////////////////////////////////////////////////
+
+package connect
+
+import (
+	jww "github.com/spf13/jwalterweatherman"
+	"gitlab.com/elixxir/client/auth"
+	"gitlab.com/elixxir/client/cmix/identity/receptionID"
+	"gitlab.com/elixxir/client/cmix/rounds"
+	clientE2e "gitlab.com/elixxir/client/e2e"
+	"gitlab.com/elixxir/client/xxdk"
+	"gitlab.com/elixxir/crypto/contact"
+)
+
+// clientAuthCallback provides callback functionality for interfacing between
+// auth.State and Connection. This is used both for blocking creation of a
+// Connection object until the auth Request is confirmed and for dynamically
+// building new Connection objects when an auth Request is received.
+type clientAuthCallback struct {
+	// Used for signaling confirmation of E2E partnership
+	confirmCallback Callback
+	requestCallback Callback
+
+	// Used for building new Connection objects
+	connectionE2e    clientE2e.Handler
+	connectionParams xxdk.E2EParams
+	authState        auth.State
+}
+
+// getClientAuthCallback returns a callback interface to be passed into the creation
+// of an auth.State object.
+// it will accept requests only if a request callback is passed in
+func getClientAuthCallback(confirm, request Callback, e2e clientE2e.Handler,
+	auth auth.State, params xxdk.E2EParams) *clientAuthCallback {
+	return &clientAuthCallback{
+		confirmCallback:  confirm,
+		requestCallback:  request,
+		connectionE2e:    e2e,
+		connectionParams: params,
+		authState:        auth,
+	}
+}
+
+// Confirm will be called when an auth Confirm message is processed.
+func (a clientAuthCallback) Confirm(requestor contact.Contact,
+	_ receptionID.EphemeralIdentity, _ rounds.Round) {
+	jww.DEBUG.Printf("Connection auth request for %s confirmed",
+		requestor.ID.String())
+	defer a.authState.DeletePartnerCallback(requestor.ID)
+
+	// After confirmation, get the new partner
+	newPartner, err := a.connectionE2e.GetPartner(requestor.ID)
+	if err != nil {
+		jww.ERROR.Printf("Unable to build connection with "+
+			"partner %s: %+v", requestor.ID, err)
+		// Send a nil connection to avoid hold-ups down the line
+		if a.confirmCallback != nil {
+			a.confirmCallback(nil)
+		}
+		return
+	}
+
+	// Return the new Connection object
+	if a.confirmCallback != nil {
+		a.confirmCallback(BuildConnection(newPartner, a.connectionE2e,
+			a.authState, a.connectionParams))
+	}
+}
+
+// Request will be called when an auth Request message is processed.
+func (a clientAuthCallback) Request(contact.Contact,
+	receptionID.EphemeralIdentity, rounds.Round) {
+}
+
+// Reset will be called when an auth Reset operation occurs.
+func (a clientAuthCallback) Reset(contact.Contact,
+	receptionID.EphemeralIdentity, rounds.Round) {
+}
+
+// serverAuthCallback provides callback functionality for interfacing between
+// auth.State and Connection. This is used both for blocking creation of a
+// Connection object until the auth Request is confirmed and for dynamically
+// building new Connection objects when an auth Request is received.
+type serverAuthCallback struct {
+	// Used for signaling confirmation of E2E partnership
+	confirmCallback Callback
+	requestCallback Callback
+
+	// Used for building new Connection objects
+	connectionParams xxdk.E2EParams
+}
+
+// getServerAuthCallback returns a callback interface to be passed into the creation
+// of a xxdk.E2e object.
+// it will accept requests only if a request callback is passed in
+func getServerAuthCallback(confirm, request Callback,
+	params xxdk.E2EParams) *serverAuthCallback {
+	return &serverAuthCallback{
+		confirmCallback:  confirm,
+		requestCallback:  request,
+		connectionParams: params,
+	}
+}
+
+// Confirm will be called when an auth Confirm message is processed.
+func (a serverAuthCallback) Confirm(contact.Contact,
+	receptionID.EphemeralIdentity, rounds.Round, *xxdk.E2e) {
+}
+
+// Request will be called when an auth Request message is processed.
+func (a serverAuthCallback) Request(requestor contact.Contact,
+	_ receptionID.EphemeralIdentity, _ rounds.Round, e2e *xxdk.E2e) {
+	if a.requestCallback == nil {
+		jww.ERROR.Printf("Received a request when requests are" +
+			"not enable, will not accept")
+	}
+	_, err := e2e.GetAuth().Confirm(requestor)
+	if err != nil {
+		jww.ERROR.Printf("Unable to build connection with "+
+			"partner %s: %+v", requestor.ID, err)
+		// Send a nil connection to avoid hold-ups down the line
+		a.requestCallback(nil)
+	}
+	// After confirmation, get the new partner
+	newPartner, err := e2e.GetE2E().GetPartner(requestor.ID)
+	if err != nil {
+		jww.ERROR.Printf("Unable to build connection with "+
+			"partner %s: %+v", requestor.ID, err)
+		// Send a nil connection to avoid hold-ups down the line
+		a.requestCallback(nil)
+
+		return
+	}
+
+	// Return the new Connection object
+	a.requestCallback(BuildConnection(newPartner, e2e.GetE2E(),
+		e2e.GetAuth(), a.connectionParams))
+}
+
+// Reset will be called when an auth Reset operation occurs.
+func (a serverAuthCallback) Reset(contact.Contact,
+	receptionID.EphemeralIdentity, rounds.Round, *xxdk.E2e) {
+}
diff --git a/connect/connect.go b/connect/connect.go
index 26fd0792d11fa69f4c53b3935ebe58a30d3ec46a..458d2ade32e8c9514396f3df5e61d05d62eb2bfc 100644
--- a/connect/connect.go
+++ b/connect/connect.go
@@ -16,8 +16,6 @@ import (
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/auth"
 	"gitlab.com/elixxir/client/catalog"
-	"gitlab.com/elixxir/client/cmix/identity/receptionID"
-	"gitlab.com/elixxir/client/cmix/rounds"
 	clientE2e "gitlab.com/elixxir/client/e2e"
 	"gitlab.com/elixxir/client/e2e/ratchet/partner"
 	"gitlab.com/elixxir/client/e2e/receive"
@@ -83,15 +81,14 @@ type Callback func(connection Connection)
 // partner.Manager is confirmed.
 func Connect(recipient contact.Contact, e2eClient *xxdk.E2e,
 	p xxdk.E2EParams) (Connection, error) {
-
 	// Build callback for E2E negotiation
 	signalChannel := make(chan Connection, 1)
 	cb := func(connection Connection) {
 		signalChannel <- connection
 	}
-	callback := getAuthCallback(cb, nil, e2eClient.GetE2E(), e2eClient.GetAuth(), p)
-	cbs := xxdk.MakeAuthCB(e2eClient, callback)
-	e2eClient.GetAuth().AddPartnerCallback(recipient.ID, cbs)
+	callback := getClientAuthCallback(cb, nil, e2eClient.GetE2E(),
+		e2eClient.GetAuth(), p)
+	e2eClient.GetAuth().AddPartnerCallback(recipient.ID, callback)
 
 	// Perform the auth request
 	_, err := e2eClient.GetAuth().Request(recipient, nil)
@@ -132,16 +129,10 @@ func StartServer(identity xxdk.ReceptionIdentity, cb Callback, net *xxdk.Cmix,
 	p xxdk.E2EParams) (*xxdk.E2e, error) {
 
 	// Build callback for E2E negotiation
-	callback := getAuthCallback(nil, cb, nil, nil, p)
-
-	client, err := xxdk.LoginEphemeral(net, callback, identity, p)
-	if err != nil {
-		return nil, err
-	}
+	callback := getServerAuthCallback(nil, cb, p)
 
-	callback.connectionE2e = client.GetE2E()
-	callback.authState = client.GetAuth()
-	return client, nil
+	// Return an ephemeral E2e object
+	return xxdk.LoginEphemeral(net, callback, identity, p)
 }
 
 // handler provides an implementation for the Connection interface.
@@ -199,97 +190,6 @@ func (h *handler) Unregister(listenerID receive.ListenerID) {
 	h.e2e.Unregister(listenerID)
 }
 
-// authCallback provides callback functionality for interfacing between
-// auth.State and Connection. This is used both for blocking creation of a
-// Connection object until the auth Request is confirmed and for dynamically
-// building new Connection objects when an auth Request is received.
-type authCallback struct {
-	// Used for signaling confirmation of E2E partnership
-	confirmCallback Callback
-	requestCallback Callback
-
-	// Used for building new Connection objects
-	connectionE2e    clientE2e.Handler
-	connectionParams xxdk.E2EParams
-	authState        auth.State
-}
-
-// getAuthCallback returns a callback interface to be passed into the creation
-// of an auth.State object.
-// it will accept requests only if a request callback is passed in
-func getAuthCallback(confirm, request Callback, e2e clientE2e.Handler,
-	auth auth.State, params xxdk.E2EParams) *authCallback {
-	return &authCallback{
-		confirmCallback:  confirm,
-		requestCallback:  request,
-		connectionParams: params,
-		authState:        auth,
-	}
-}
-
-// Confirm will be called when an auth Confirm message is processed.
-func (a authCallback) Confirm(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round, e2e *xxdk.E2e) {
-	jww.DEBUG.Printf("Connection auth request for %s confirmed",
-		requestor.ID.String())
-	defer a.authState.DeletePartnerCallback(requestor.ID)
-
-	// After confirmation, get the new partner
-	newPartner, err := a.connectionE2e.GetPartner(requestor.ID)
-	if err != nil {
-		jww.ERROR.Printf("Unable to build connection with "+
-			"partner %s: %+v", requestor.ID, err)
-		// Send a nil connection to avoid hold-ups down the line
-		if a.confirmCallback != nil {
-			a.confirmCallback(nil)
-		}
-		return
-	}
-
-	// Return the new Connection object
-	if a.confirmCallback != nil {
-		a.confirmCallback(BuildConnection(newPartner, a.connectionE2e,
-			a.authState, a.connectionParams))
-	}
-}
-
-// Request will be called when an auth Request message is processed.
-func (a authCallback) Request(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round,
-	e2e *xxdk.E2e) {
-	if a.requestCallback == nil {
-		jww.ERROR.Printf("Received a request when requests are" +
-			"not enable, will not accept")
-	}
-	_, err := a.authState.Confirm(requestor)
-	if err != nil {
-		jww.ERROR.Printf("Unable to build connection with "+
-			"partner %s: %+v", requestor.ID, err)
-		// Send a nil connection to avoid hold-ups down the line
-		a.requestCallback(nil)
-	}
-	// After confirmation, get the new partner
-	newPartner, err := e2e.GetE2E().GetPartner(requestor.ID)
-	if err != nil {
-		jww.ERROR.Printf("Unable to build connection with "+
-			"partner %s: %+v", requestor.ID, err)
-		// Send a nil connection to avoid hold-ups down the line
-		a.requestCallback(nil)
-
-		return
-	}
-
-	// Return the new Connection object
-	a.requestCallback(BuildConnection(newPartner, e2e.GetE2E(),
-		a.authState, a.connectionParams))
-}
-
-// Reset will be called when an auth Reset operation occurs.
-func (a authCallback) Reset(requestor contact.Contact,
-	receptionID receptionID.EphemeralIdentity, round rounds.Round,
-	e2e *xxdk.E2e) {
-}
-
 // FirstPartitionSize returns the max partition payload size for the
 // first payload
 func (h *handler) FirstPartitionSize() uint {
diff --git a/xxdk/e2e.go b/xxdk/e2e.go
index cb21a4fdded8f573f73649b792ddbdc68252304f..8e387c078047de544f126bbdadafe4dff43ec15b 100644
--- a/xxdk/e2e.go
+++ b/xxdk/e2e.go
@@ -38,6 +38,8 @@ type E2e struct {
 	e2eIdentity ReceptionIdentity
 }
 
+// AuthCallbacks is an adapter for the auth.Callbacks interface
+// that allows for initializing an E2e object without an E2e-dependant auth.Callbacks
 type AuthCallbacks interface {
 	Request(partner contact.Contact, receptionID receptionID.EphemeralIdentity,
 		round rounds.Round, e2e *E2e)
@@ -86,12 +88,10 @@ func LoginLegacy(client *Cmix, params E2EParams, callbacks AuthCallbacks) (
 			"the e2e processies")
 	}
 
-	acw := MakeAuthCB(m, callbacks)
-
-	m.auth, err = auth.NewStateLegacy(client.GetStorage().GetKV(),
-		client.GetCmix(), m.e2e, client.GetRng(),
-		client.GetEventReporter(), params.Auth, params.Session,
-		acw, m.backup.TriggerBackup)
+	m.auth, err = auth.NewState(client.GetStorage().GetKV(), client.GetCmix(),
+		m.e2e, client.GetRng(), client.GetEventReporter(), params.Auth,
+		params.Session, MakeAuthCallbacksAdapter(callbacks, m),
+		m.backup.TriggerBackup)
 	if err != nil {
 		return nil, err
 	}
@@ -184,8 +184,6 @@ func LoginWithProtoClient(storageDir string, password []byte,
 		return nil, err
 	}
 
-	c.network.AddIdentity(c.GetUser().ReceptionID, time.Time{}, true)
-
 	err = c.registerFollower()
 	if err != nil {
 		return nil, err
@@ -220,6 +218,8 @@ func login(client *Cmix, callbacks AuthCallbacks, identity ReceptionIdentity,
 		e2eIdentity: identity,
 	}
 
+	client.network.AddIdentity(identity.ID, time.Time{}, true)
+
 	//initialize the e2e storage
 	err = e2e.Init(kv, identity.ID, identity.DHKeyPrivate, e2eGrp,
 		rekey.GetDefaultEphemeralParams())
@@ -255,11 +255,10 @@ func login(client *Cmix, callbacks AuthCallbacks, identity ReceptionIdentity,
 			"the e2e processies")
 	}
 
-	acw := MakeAuthCB(m, callbacks)
-
 	m.auth, err = auth.NewState(kv, client.GetCmix(),
 		m.e2e, client.GetRng(), client.GetEventReporter(),
-		params.Auth, params.Session, acw, m.backup.TriggerBackup)
+		params.Auth, params.Session,
+		MakeAuthCallbacksAdapter(callbacks, m), m.backup.TriggerBackup)
 	if err != nil {
 		return nil, err
 	}
@@ -426,8 +425,16 @@ func (m *E2e) DeleteContact(partnerId *id.ID) error {
 	return nil
 }
 
-// Adapter type to make the xxdk auth callbacks type compatible with the
-// auth.callbacks
+// MakeAuthCallbacksAdapter creates an authCallbacksAdapter
+func MakeAuthCallbacksAdapter(ac AuthCallbacks, e2e *E2e) *authCallbacksAdapter {
+	return &authCallbacksAdapter{
+		ac:  ac,
+		e2e: e2e,
+	}
+}
+
+// authCallbacksAdapter is an adapter type to make the AuthCallbacks type
+// compatible with the auth.Callbacks type
 type authCallbacksAdapter struct {
 	ac  AuthCallbacks
 	e2e *E2e