diff --git a/api/client.go b/api/client.go
index 1129c3a871997c6c61af4c8a9f8269ef9ab927b2..458d4ed47196febd1f846ca8eaed29611c07f17f 100644
--- a/api/client.go
+++ b/api/client.go
@@ -15,6 +15,7 @@ import (
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/auth"
+	"gitlab.com/elixxir/client/backup"
 	"gitlab.com/elixxir/client/cmix"
 	"gitlab.com/elixxir/client/e2e"
 	"gitlab.com/elixxir/client/event"
@@ -24,7 +25,7 @@ import (
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/storage/user"
 	"gitlab.com/elixxir/comms/client"
-	"gitlab.com/elixxir/crypto/backup"
+	cryptoBackup "gitlab.com/elixxir/crypto/backup"
 	"gitlab.com/elixxir/crypto/cyclic"
 	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/elixxir/primitives/version"
@@ -68,10 +69,10 @@ type Client struct {
 	clientErrorChannel chan interfaces.ClientError
 
 	// Event reporting in event.go
-	events event.Manager
+	events *event.Manager
 
 	// Handles the triggering and delivery of backups
-	backup *interfaces.BackupContainer
+	backup *backup.Backup
 }
 
 // NewClient creates client storage, generates keys, connects, and registers
@@ -178,7 +179,7 @@ func NewClientFromBackup(ndfJSON, storageDir string, sessionPassword,
 	backupPassphrase []byte, backupFileContents []byte) ([]*id.ID,
 	string, error) {
 
-	backUp := &backup.Backup{}
+	backUp := &cryptoBackup.Backup{}
 	err := backUp.Decrypt(string(backupPassphrase), backupFileContents)
 	if err != nil {
 		return nil, "", errors.WithMessage(err,
@@ -220,7 +221,7 @@ func NewClientFromBackup(ndfJSON, storageDir string, sessionPassword,
 
 // OpenClient session, but don't connect to the network or log in
 func OpenClient(storageDir string, password []byte,
-	parameters cmix.Params) (*Client, error) {
+	parameters e2e.Params) (*Client, error) {
 	jww.INFO.Printf("OpenClient()")
 
 	rngStreamGen := fastRNG.NewStreamGenerator(12, 1024,
@@ -248,7 +249,7 @@ func OpenClient(storageDir string, password []byte,
 		parameters:         parameters,
 		clientErrorChannel: make(chan interfaces.ClientError, 1000),
 		events:             event.NewEventManager(),
-		backup:             &interfaces.BackupContainer{},
+		backup:             &backup.Backup{},
 	}
 
 	return c, nil
@@ -304,7 +305,7 @@ func NewProtoClient_Unsafe(ndfJSON, storageDir string, password,
 
 // Login initializes a client object from existing storage.
 func Login(storageDir string, password []byte,
-	parameters cmix.Params) (*Client, error) {
+	authCallbacks auth.Callbacks, parameters e2e.Params) (*Client, error) {
 	jww.INFO.Printf("Login()")
 
 	c, err := OpenClient(storageDir, password, parameters)
@@ -350,7 +351,7 @@ func Login(storageDir string, password []byte,
 		}
 	}
 
-	c.network, err = cmix.NewClient(parameters, c.comms, c.storage,
+	c.network, err = cmix.NewClient(parameters.Network, c.comms, c.storage,
 		c.storage.GetNDF(), c.rng, c.events)
 	if err != nil {
 		return nil, err
@@ -368,7 +369,7 @@ func Login(storageDir string, password []byte,
 	//        to the login call?
 	authParams := auth.GetDefaultParams()
 	c.auth, err = auth.NewState(c.storage.GetKV(), c.network, c.e2e, c.rng,
-		c.events, authParams, nil)
+		c.events, authParams, authCallbacks, c.backup.TriggerBackup)
 	if err != nil {
 		return nil, err
 	}
@@ -385,7 +386,8 @@ func Login(storageDir string, password []byte,
 // while replacing the base NDF.  This is designed for some specific deployment
 // procedures and is generally unsafe.
 func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte,
-	newBaseNdf string, parameters cmix.Params) (*Client, error) {
+	newBaseNdf string, authCallbacks auth.Callbacks,
+	parameters e2e.Params) (*Client, error) {
 	jww.INFO.Printf("LoginWithNewBaseNDF_UNSAFE()")
 
 	def, err := parseNDF(newBaseNdf)
@@ -417,7 +419,7 @@ func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte,
 			"able to register or track network.")
 	}
 
-	c.network, err = cmix.NewClient(parameters, c.comms, c.storage,
+	c.network, err = cmix.NewClient(parameters.Network, c.comms, c.storage,
 		c.storage.GetNDF(), c.rng, c.events)
 	if err != nil {
 		return nil, err
@@ -435,7 +437,7 @@ func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte,
 	//        to the login call?
 	authParams := auth.GetDefaultParams()
 	c.auth, err = auth.NewState(c.storage.GetKV(), c.network, c.e2e, c.rng,
-		c.events, authParams, nil)
+		c.events, authParams, authCallbacks, c.backup.TriggerBackup)
 	if err != nil {
 		return nil, err
 	}
@@ -452,8 +454,8 @@ func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte,
 // JSON containing the cryptographic primitives. This is designed for
 // some specific deployment procedures and is generally unsafe.
 func LoginWithProtoClient(storageDir string, password []byte,
-	protoClientJSON []byte, newBaseNdf string,
-	parameters cmix.Params) (*Client, error) {
+	protoClientJSON []byte, newBaseNdf string, authCallbacks auth.Callbacks,
+	parameters e2e.Params) (*Client, error) {
 	jww.INFO.Printf("LoginWithProtoClient()")
 
 	def, err := parseNDF(newBaseNdf)
@@ -484,7 +486,7 @@ func LoginWithProtoClient(storageDir string, password []byte,
 		return nil, err
 	}
 
-	c.network, err = cmix.NewClient(parameters, c.comms, c.storage,
+	c.network, err = cmix.NewClient(parameters.Network, c.comms, c.storage,
 		c.storage.GetNDF(), c.rng, c.events)
 	if err != nil {
 		return nil, err
@@ -502,7 +504,7 @@ func LoginWithProtoClient(storageDir string, password []byte,
 	//        to the login call?
 	authParams := auth.GetDefaultParams()
 	c.auth, err = auth.NewState(c.storage.GetKV(), c.network, c.e2e, c.rng,
-		c.events, authParams, nil)
+		c.events, authParams, authCallbacks, c.backup.TriggerBackup)
 	if err != nil {
 		return nil, err
 	}
@@ -721,7 +723,7 @@ func (c *Client) GetNetworkInterface() cmix.Client {
 
 // GetBackup returns a pointer to the backup container so that the backup can be
 // set and triggered.
-func (c *Client) GetBackup() *interfaces.BackupContainer {
+func (c *Client) GetBackup() *backup.Backup {
 	return c.backup
 }
 
@@ -732,8 +734,8 @@ func (c *Client) GetBackup() *interfaces.BackupContainer {
 func (c *Client) GetNodeRegistrationStatus() (int, int, error) {
 	// Return an error if the network is not healthy
 	if !c.GetHealth().IsHealthy() {
-		return 0, 0, errors.New("Cannot get number of nodes registrations when " +
-			"network is not healthy")
+		return 0, 0, errors.New("Cannot get number of nodes " +
+			"registrations when network is not healthy")
 	}
 
 	nodes := c.network.GetInstance().GetFullNdf().Get().Nodes
@@ -743,8 +745,8 @@ func (c *Client) GetNodeRegistrationStatus() (int, int, error) {
 	for i, n := range nodes {
 		nid, err := id.Unmarshal(n.ID)
 		if err != nil {
-			return 0, 0, errors.Errorf("Failed to unmarshal nodes ID %v "+
-				"(#%d): %s", n.ID, i, err.Error())
+			return 0, 0, errors.Errorf("Failed to unmarshal nodes "+
+				"ID %v (#%d): %s", n.ID, i, err.Error())
 		}
 		if n.Status == ndf.Stale {
 			numStale += 1
diff --git a/api/notifications.go b/api/notifications.go
index 58e97190e469a7d21d9175b9b84ddaff89b75e2c..60355a48034572902905c876591004e039b2b0b0 100644
--- a/api/notifications.go
+++ b/api/notifications.go
@@ -34,20 +34,26 @@ func (c *Client) RegisterForNotifications(token string) error {
 	if err != nil {
 		return err
 	}
+
+	privKey := c.userState.CryptographicIdentity.GetTransmissionRSA()
+	pubPEM := rsa.CreatePublicKeyPem(privKey.GetPublic())
+	regSig := c.userState.GetTransmissionRegistrationValidationSignature()
+	regTS := c.GetUser().RegistrationTimestamp
+
 	// Send the register message
 	_, err = c.comms.RegisterForNotifications(notificationBotHost,
 		&mixmessages.NotificationRegisterRequest{
 			Token:                 token,
 			IntermediaryId:        intermediaryReceptionID,
-			TransmissionRsa:       rsa.CreatePublicKeyPem(c.GetStorage().User().GetCryptographicIdentity().GetTransmissionRSA().GetPublic()),
+			TransmissionRsa:       pubPEM,
 			TransmissionSalt:      c.GetUser().TransmissionSalt,
-			TransmissionRsaSig:    c.GetStorage().User().GetTransmissionRegistrationValidationSignature(),
+			TransmissionRsaSig:    regSig,
 			IIDTransmissionRsaSig: sig,
-			RegistrationTimestamp: c.GetUser().RegistrationTimestamp,
+			RegistrationTimestamp: regTS,
 		})
 	if err != nil {
-		err := errors.Errorf(
-			"RegisterForNotifications: Unable to register for notifications! %s", err)
+		err := errors.Errorf("RegisterForNotifications: Unable to "+
+			"register for notifications! %s", err)
 		return err
 	}
 
@@ -96,7 +102,9 @@ func (c *Client) getIidAndSig() ([]byte, []byte, error) {
 
 	stream := c.rng.GetStream()
 	c.GetUser()
-	sig, err := rsa.Sign(stream, c.storage.User().GetCryptographicIdentity().GetTransmissionRSA(), hash.CMixHash, h.Sum(nil), nil)
+	sig, err := rsa.Sign(stream,
+		c.userState.GetTransmissionRSA(),
+		hash.CMixHash, h.Sum(nil), nil)
 	if err != nil {
 		return nil, nil, errors.WithMessage(err, "RegisterForNotifications: Failed to sign intermediary ID")
 	}
diff --git a/api/utilsInterfaces_test.go b/api/utilsInterfaces_test.go
index 29b5f8eb9abbc2217c1713cc25764472087701fa..617bce08b96810b920fb6ceb9aaf9ef3990f8757 100644
--- a/api/utilsInterfaces_test.go
+++ b/api/utilsInterfaces_test.go
@@ -7,21 +7,21 @@
 package api
 
 import (
+	"time"
+
+	"gitlab.com/elixxir/client/cmix"
 	"gitlab.com/elixxir/client/cmix/gateway"
-	"gitlab.com/elixxir/client/event"
-	"gitlab.com/elixxir/client/interfaces"
-	"gitlab.com/elixxir/client/interfaces/message"
-	"gitlab.com/elixxir/client/interfaces/params"
+	"gitlab.com/elixxir/client/cmix/identity"
+	"gitlab.com/elixxir/client/cmix/message"
+	"gitlab.com/elixxir/client/cmix/rounds"
 	"gitlab.com/elixxir/client/stoppable"
 	pb "gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/comms/network"
-	cE2e "gitlab.com/elixxir/crypto/e2e"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/elixxir/primitives/states"
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/id/ephemeral"
-	"time"
 )
 
 // Mock comm struct which returns no historical round data
@@ -82,46 +82,45 @@ func (ht *historicalRounds) GetHost(hostId *id.ID) (*connect.Host, bool) {
 // Contains a test implementation of the networkManager interface.
 type testNetworkManagerGeneric struct {
 	instance *network.Instance
-	sender   *gateway.Sender
+	sender   gateway.Sender
 }
 type dummyEventMgr struct{}
 
 func (d *dummyEventMgr) Report(p int, a, b, c string) {}
-func (t *testNetworkManagerGeneric) GetEventManager() event.Manager {
-	return &dummyEventMgr{}
+func (d *dummyEventMgr) EventService() (stoppable.Stoppable, error) {
+	return nil, nil
 }
 
 /* Below methods built for interface adherence */
-func (t *testNetworkManagerGeneric) GetHealthTracker() interfaces.HealthTracker {
-	return nil
-}
-func (t *testNetworkManagerGeneric) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppable, error) {
+func (t *testNetworkManagerGeneric) Follow(report cmix.ClientErrorReport) (stoppable.Stoppable, error) {
 	return nil, nil
 }
-func (t *testNetworkManagerGeneric) CheckGarbledMessages() {
+func (t *testNetworkManagerGeneric) GetMaxMessageLength() int { return 0 }
+
+func (t *testNetworkManagerGeneric) CheckInProgressMessages() {
 	return
 }
 func (t *testNetworkManagerGeneric) GetVerboseRounds() string {
 	return ""
 }
-func (t *testNetworkManagerGeneric) SendE2E(message.Send, params.E2E, *stoppable.Single) (
-	[]id.Round, cE2e.MessageID, time.Time, error) {
-	rounds := []id.Round{id.Round(0), id.Round(1), id.Round(2)}
-	return rounds, cE2e.MessageID{}, time.Time{}, nil
-}
-func (t *testNetworkManagerGeneric) SendUnsafe(m message.Send, p params.Unsafe) ([]id.Round, error) {
-	return nil, nil
+func (t *testNetworkManagerGeneric) AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, mp message.Processor) error {
+	return nil
 }
-func (t *testNetworkManagerGeneric) SendCMIX(message format.Message, rid *id.ID, p params.CMIX) (id.Round, ephemeral.Id, error) {
+
+func (t *testNetworkManagerGeneric) Send(*id.ID, format.Fingerprint,
+	message.Service, []byte, []byte, cmix.CMIXParams) (id.Round,
+	ephemeral.Id, error) {
 	return id.Round(0), ephemeral.Id{}, nil
 }
-func (t *testNetworkManagerGeneric) SendManyCMIX(messages []message.TargetedCmixMessage, p params.CMIX) (id.Round, []ephemeral.Id, error) {
+func (t *testNetworkManagerGeneric) SendMany(messages []cmix.TargetedCmixMessage,
+	p cmix.CMIXParams) (id.Round, []ephemeral.Id, error) {
 	return 0, []ephemeral.Id{}, nil
 }
 func (t *testNetworkManagerGeneric) GetInstance() *network.Instance {
 	return t.instance
 }
-func (t *testNetworkManagerGeneric) RegisterWithPermissioning(string) ([]byte, error) {
+func (t *testNetworkManagerGeneric) RegisterWithPermissioning(string) (
+	[]byte, error) {
 	return nil, nil
 }
 func (t *testNetworkManagerGeneric) GetRemoteVersion() (string, error) {
@@ -135,7 +134,7 @@ func (t *testNetworkManagerGeneric) InProgressRegistrations() int {
 	return 0
 }
 
-func (t *testNetworkManagerGeneric) GetSender() *gateway.Sender {
+func (t *testNetworkManagerGeneric) GetSender() gateway.Sender {
 	return t.sender
 }
 
@@ -147,3 +146,66 @@ func (t *testNetworkManagerGeneric) RegisterAddressSizeNotification(string) (cha
 
 func (t *testNetworkManagerGeneric) UnregisterAddressSizeNotification(string) {}
 func (t *testNetworkManagerGeneric) SetPoolFilter(gateway.Filter)             {}
+func (t *testNetworkManagerGeneric) AddHealthCallback(f func(bool)) uint64 {
+	return 0
+}
+func (t *testNetworkManagerGeneric) AddIdentity(id *id.ID,
+	validUntil time.Time, persistent bool) {
+}
+func (t *testNetworkManagerGeneric) RemoveIdentity(id *id.ID) {}
+func (t *testNetworkManagerGeneric) AddService(clientID *id.ID,
+	newService message.Service, response message.Processor) {
+}
+func (t *testNetworkManagerGeneric) DeleteService(clientID *id.ID,
+	toDelete message.Service, processor message.Processor) {
+}
+func (t *testNetworkManagerGeneric) DeleteClientService(clientID *id.ID) {
+}
+func (t *testNetworkManagerGeneric) DeleteFingerprint(identity *id.ID,
+	fingerprint format.Fingerprint) {
+}
+func (t *testNetworkManagerGeneric) DeleteClientFingerprints(identity *id.ID) {
+}
+func (t *testNetworkManagerGeneric) GetAddressSpace() uint8 { return 0 }
+func (t *testNetworkManagerGeneric) GetHostParams() connect.HostParams {
+	return connect.GetDefaultHostParams()
+}
+func (t *testNetworkManagerGeneric) GetIdentity(get *id.ID) (
+	identity.TrackedID, error) {
+	return identity.TrackedID{}, nil
+}
+func (t *testNetworkManagerGeneric) GetRoundResults(timeout time.Duration,
+	roundCallback cmix.RoundEventCallback, roundList ...id.Round) error {
+	return nil
+}
+func (t *testNetworkManagerGeneric) HasNode(nid *id.ID) bool { return false }
+func (t *testNetworkManagerGeneric) IsHealthy() bool         { return true }
+func (t *testNetworkManagerGeneric) WasHealthy() bool        { return true }
+func (t *testNetworkManagerGeneric) LookupHistoricalRound(rid id.Round,
+	callback rounds.RoundResultCallback) error {
+	return nil
+}
+func (t *testNetworkManagerGeneric) NumRegisteredNodes() int { return 0 }
+func (t *testNetworkManagerGeneric) RegisterAddressSpaceNotification(
+	tag string) (chan uint8, error) {
+	return nil, nil
+}
+func (t *testNetworkManagerGeneric) RemoveHealthCallback(uint64) {}
+func (t *testNetworkManagerGeneric) SendToAny(
+	sendFunc func(host *connect.Host) (interface{}, error),
+	stop *stoppable.Single) (interface{}, error) {
+	return nil, nil
+}
+func (t *testNetworkManagerGeneric) SendToPreferred(targets []*id.ID,
+	sendFunc gateway.SendToPreferredFunc, stop *stoppable.Single,
+	timeout time.Duration) (interface{}, error) {
+	return nil, nil
+}
+func (t *testNetworkManagerGeneric) SetGatewayFilter(f gateway.Filter) {}
+func (t *testNetworkManagerGeneric) TrackServices(
+	tracker message.ServicesTracker) {
+}
+func (t *testNetworkManagerGeneric) TriggerNodeRegistration(nid *id.ID) {}
+func (t *testNetworkManagerGeneric) UnregisterAddressSpaceNotification(
+	tag string) {
+}
diff --git a/api/utils_test.go b/api/utils_test.go
index 2171ee98fb7645daef91c2fa2cb27c378c6e98a6..4496905d51eab7344b8d2fcde840a2cd3c862d11 100644
--- a/api/utils_test.go
+++ b/api/utils_test.go
@@ -9,12 +9,13 @@ package api
 
 import (
 	"bytes"
-	"gitlab.com/elixxir/client/cmix/gateway"
 	"testing"
 
+	"gitlab.com/elixxir/client/cmix/gateway"
+	"gitlab.com/elixxir/client/e2e"
+
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/interfaces/params"
 	pb "gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/comms/network"
 	"gitlab.com/elixxir/comms/testkeys"
@@ -32,7 +33,8 @@ func newTestingClient(face interface{}) (*Client, error) {
 	case *testing.T, *testing.M, *testing.B, *testing.PB:
 		break
 	default:
-		jww.FATAL.Panicf("InitTestingSession is restricted to testing only. Got %T", face)
+		jww.FATAL.Panicf("InitTestingSession is restricted to testing "+
+			"only. Got %T", face)
 	}
 
 	def := getNDF(face)
@@ -41,12 +43,14 @@ func newTestingClient(face interface{}) (*Client, error) {
 	password := []byte("hunter2")
 	err := NewClient(string(marshalledDef), storageDir, password, "AAAA")
 	if err != nil {
-		return nil, errors.Errorf("Could not construct a mock client: %v", err)
+		return nil, errors.Errorf(
+			"Could not construct a mock client: %v", err)
 	}
 
-	c, err := OpenClient(storageDir, password, params.GetDefaultNetwork())
+	c, err := OpenClient(storageDir, password, e2e.GetDefaultParams())
 	if err != nil {
-		return nil, errors.Errorf("Could not open a mock client: %v", err)
+		return nil, errors.Errorf("Could not open a mock client: %v",
+			err)
 	}
 
 	commsManager := connect.NewManagerTesting(face)
@@ -56,19 +60,22 @@ func newTestingClient(face interface{}) (*Client, error) {
 		jww.FATAL.Panicf("Failed to create new test instance: %v", err)
 	}
 
-	commsManager.AddHost(&id.Permissioning, "", cert, connect.GetDefaultHostParams())
+	commsManager.AddHost(&id.Permissioning, "", cert,
+		connect.GetDefaultHostParams())
 	instanceComms := &connect.ProtoComms{
 		Manager: commsManager,
 	}
 
-	thisInstance, err := network.NewInstanceTesting(instanceComms, def, def, nil, nil, face)
+	thisInstance, err := network.NewInstanceTesting(instanceComms, def,
+		def, nil, nil, face)
 	if err != nil {
 		return nil, err
 	}
 
 	p := gateway.DefaultPoolParams()
 	p.MaxPoolSize = 1
-	sender, err := gateway.NewSender(p, c.rng, def, commsManager, c.storage, nil)
+	sender, err := gateway.NewSender(p, c.rng, def, commsManager,
+		c.storage, nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/auth/confirm.go b/auth/confirm.go
index ee89b8f1827546c740f8aa23634940e30d26deea..fc6c5b69c90fa6c5533fd26e570ad31c10e8e4a6 100644
--- a/auth/confirm.go
+++ b/auth/confirm.go
@@ -9,6 +9,7 @@ package auth
 
 import (
 	"fmt"
+
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/auth/store"
@@ -152,7 +153,7 @@ func (s *state) confirm(partner contact.Contact, serviceTag string) (
 }
 
 func sendAuthConfirm(net cmixClient, partner *id.ID,
-	fp format.Fingerprint, payload, mac []byte, event event.Manager,
+	fp format.Fingerprint, payload, mac []byte, event event.Reporter,
 	serviceTag string) (
 	id.Round, error) {
 	svc := message.Service{
diff --git a/auth/request.go b/auth/request.go
index 756a70197e032d7cce32f11422a92a5418dcefd5..a37839fd8eb065258a61867bc45a671bc3b55dc7 100644
--- a/auth/request.go
+++ b/auth/request.go
@@ -17,6 +17,7 @@ import (
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/cmix"
 	"gitlab.com/elixxir/client/cmix/message"
+	"gitlab.com/elixxir/client/e2e"
 	"gitlab.com/elixxir/client/e2e/ratchet"
 	util "gitlab.com/elixxir/client/storage/utility"
 	"gitlab.com/elixxir/crypto/contact"
@@ -201,6 +202,15 @@ func createRequestAuth(sender *id.ID, payload, ownership []byte, myDHPriv,
 	return &baseFmt, mac, nil
 }
 
+func (s *state) GetReceivedRequest(partner *id.ID) (contact.Contact, error) {
+	return s.store.GetReceivedRequest(partner)
+}
+
+func (s *state) VerifyOwnership(received, verified contact.Contact,
+	e2e e2e.Handler) bool {
+	return VerifyOwnership(received, verified, e2e)
+}
+
 func (s *state) DeleteRequest(partnerID *id.ID) error {
 	return s.store.DeleteRequest(partnerID)
 }
diff --git a/auth/state.go b/auth/state.go
index dfb6cb03ce7a7c8060800e7c233e5a7bcdf6a094..a3e3d59df1ff43bf8eb6ace2582a009aaedab191 100644
--- a/auth/state.go
+++ b/auth/state.go
@@ -9,6 +9,7 @@ package auth
 
 import (
 	"encoding/base64"
+
 	"github.com/cloudflare/circl/dh/sidh"
 	"github.com/pkg/errors"
 	"gitlab.com/elixxir/client/auth/store"
@@ -38,7 +39,7 @@ type state struct {
 	rng *fastRNG.StreamGenerator
 
 	store *store.Store
-	event event.Manager
+	event event.Reporter
 
 	params Param
 
@@ -100,7 +101,7 @@ type Callbacks interface {
 //   with a memory only versioned.KV) as well as a memory only versioned.KV for
 //   NewState and use GetDefaultTemporaryParams() for the parameters
 func NewState(kv *versioned.KV, net cmix.Client, e2e e2e.Handler,
-	rng *fastRNG.StreamGenerator, event event.Manager, params Param,
+	rng *fastRNG.StreamGenerator, event event.Reporter, params Param,
 	callbacks Callbacks, backupTrigger func(reason string)) (State, error) {
 	kv = kv.Prefix(makeStorePrefix(e2e.GetReceptionID()))
 	return NewStateLegacy(
@@ -113,7 +114,7 @@ func NewState(kv *versioned.KV, net cmix.Client, e2e e2e.Handler,
 // Does not modify the kv prefix for backwards compatibility
 // Otherwise, acts the same as NewState
 func NewStateLegacy(kv *versioned.KV, net cmix.Client, e2e e2e.Handler,
-	rng *fastRNG.StreamGenerator, event event.Manager, params Param,
+	rng *fastRNG.StreamGenerator, event event.Reporter, params Param,
 	callbacks Callbacks, backupTrigger func(reason string)) (State, error) {
 
 	s := &state{
diff --git a/cmix/client.go b/cmix/client.go
index af5f7dc13df08b65f6b0433e77ed4df862ac8297..1dd7cff35662ce48e696bd66e06c4ce4b8db4185 100644
--- a/cmix/client.go
+++ b/cmix/client.go
@@ -82,7 +82,7 @@ type client struct {
 	verboseRounds *RoundTracker
 
 	// Event reporting API
-	events event.Manager
+	events event.Reporter
 
 	// Storage of the max message length
 	maxMsgLen int
@@ -91,7 +91,7 @@ type client struct {
 // NewClient builds a new reception client object using inputted key fields.
 func NewClient(params Params, comms *commClient.Comms, session storage.Session,
 	ndf *ndf.NetworkDefinition, rng *fastRNG.StreamGenerator,
-	events event.Manager) (Client, error) {
+	events event.Reporter) (Client, error) {
 
 	// Start network instance
 	instance, err := commNetwork.NewInstance(
diff --git a/cmix/message/pickup.go b/cmix/message/pickup.go
index acba1c0382c1190c8f7524dbdba40852dfa7e415..29fbb95951aea7f4cffbd1c96ba9919ab0d27ee0 100644
--- a/cmix/message/pickup.go
+++ b/cmix/message/pickup.go
@@ -8,11 +8,12 @@
 package message
 
 import (
+	"strconv"
+
 	"gitlab.com/elixxir/client/event"
 	"gitlab.com/elixxir/client/storage/versioned"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/primitives/id"
-	"strconv"
 
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/stoppable"
@@ -47,13 +48,13 @@ type handler struct {
 
 	inProcess *MeteredCmixMessageBuffer
 
-	events event.Manager
+	events event.Reporter
 
 	FingerprintsManager
 	ServicesManager
 }
 
-func NewHandler(param Params, kv *versioned.KV, events event.Manager,
+func NewHandler(param Params, kv *versioned.KV, events event.Reporter,
 	standardID *id.ID) Handler {
 
 	garbled, err := NewOrLoadMeteredCmixMessageBuffer(kv, inProcessKey)
diff --git a/cmix/params.go b/cmix/params.go
index bfd0cd1a5011fabd45c06d971da6ddd7112f7527..d823632e199e021606a3414bc2403babcc3d17b9 100644
--- a/cmix/params.go
+++ b/cmix/params.go
@@ -3,13 +3,14 @@ package cmix
 import (
 	"encoding/base64"
 	"encoding/json"
+	"time"
+
 	"gitlab.com/elixxir/client/cmix/message"
 	"gitlab.com/elixxir/client/cmix/pickup"
 	"gitlab.com/elixxir/client/cmix/rounds"
 	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/primitives/excludedRounds"
 	"gitlab.com/xx_network/primitives/id"
-	"time"
 )
 
 type Params struct {
diff --git a/cmix/rounds/historical.go b/cmix/rounds/historical.go
index 98522670faf6a2635e37d300f5df25db4c451b75..6b4ffbcd727c9b2e8c70b53769fb44c46761dca7 100644
--- a/cmix/rounds/historical.go
+++ b/cmix/rounds/historical.go
@@ -40,7 +40,7 @@ type manager struct {
 
 	comms  Comms
 	sender gateway.Sender
-	events event.Manager
+	events event.Reporter
 
 	c chan roundRequest
 }
@@ -63,7 +63,7 @@ type roundRequest struct {
 }
 
 func NewRetriever(param Params, comms Comms, sender gateway.Sender,
-	events event.Manager) Retriever {
+	events event.Reporter) Retriever {
 	return &manager{
 		params: param,
 		comms:  comms,
@@ -200,7 +200,7 @@ func (m *manager) processHistoricalRounds(comm Comms, stop *stoppable.Single) {
 }
 
 func processHistoricalRoundsResponse(response *pb.HistoricalRoundsResponse,
-	roundRequests []roundRequest, maxRetries uint, events event.Manager) (
+	roundRequests []roundRequest, maxRetries uint, events event.Reporter) (
 	[]uint64, []roundRequest) {
 	retries := make([]roundRequest, 0)
 	rids := make([]uint64, 0)
diff --git a/cmix/sendCmix.go b/cmix/sendCmix.go
index 409ac2dfb34d198c8c8077baf1a27e6b91ff0354..892570a6c0770077720d9dce077a216e66db77d6 100644
--- a/cmix/sendCmix.go
+++ b/cmix/sendCmix.go
@@ -9,6 +9,9 @@ package cmix
 
 import (
 	"fmt"
+	"strings"
+	"time"
+
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/cmix/gateway"
@@ -28,8 +31,6 @@ import (
 	"gitlab.com/xx_network/primitives/id/ephemeral"
 	"gitlab.com/xx_network/primitives/netTime"
 	"gitlab.com/xx_network/primitives/rateLimiting"
-	"strings"
-	"time"
 )
 
 // SendCMIX sends a "raw" cMix message payload to the provided recipient.
@@ -95,7 +96,7 @@ func (c *client) Send(recipient *id.ID, fingerprint format.Fingerprint,
 // status.
 func sendCmixHelper(sender gateway.Sender, msg format.Message, recipient *id.ID,
 	cmixParams CMIXParams, instance *network.Instance, grp *cyclic.Group,
-	nodes nodes.Registrar, rng *fastRNG.StreamGenerator, events event.Manager,
+	nodes nodes.Registrar, rng *fastRNG.StreamGenerator, events event.Reporter,
 	senderId *id.ID, comms SendCmixCommsInterface) (id.Round, ephemeral.Id, error) {
 
 	timeStart := netTime.Now()
diff --git a/cmix/sendManyCmix.go b/cmix/sendManyCmix.go
index 6e67eff24faa65b815b618d8c6cbef0d5a110b13..69713cd5ca187e1d52d77fe2b1b739598b5d324c 100644
--- a/cmix/sendManyCmix.go
+++ b/cmix/sendManyCmix.go
@@ -9,6 +9,9 @@ package cmix
 
 import (
 	"fmt"
+	"strings"
+	"time"
+
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/cmix/gateway"
@@ -27,8 +30,6 @@ import (
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/id/ephemeral"
 	"gitlab.com/xx_network/primitives/netTime"
-	"strings"
-	"time"
 )
 
 // TargetedCmixMessage defines a recipient target pair in a sendMany cMix
@@ -110,7 +111,7 @@ type assembledCmixMessage struct {
 func sendManyCmixHelper(sender gateway.Sender,
 	msgs []assembledCmixMessage, param CMIXParams, instance *network.Instance,
 	grp *cyclic.Group, registrar nodes.Registrar,
-	rng *fastRNG.StreamGenerator, events event.Manager,
+	rng *fastRNG.StreamGenerator, events event.Reporter,
 	senderId *id.ID, comms SendCmixCommsInterface) (
 	id.Round, []ephemeral.Id, error) {
 
diff --git a/dummy/utils_test.go b/dummy/utils_test.go
index c6ecaf36b9906501bf1b1c8276c7dd464e2c85ef..73d3c5d0cc28b047ecea26d55e66f44c907069cb 100644
--- a/dummy/utils_test.go
+++ b/dummy/utils_test.go
@@ -8,6 +8,12 @@
 package dummy
 
 import (
+	"io"
+	"math/rand"
+	"sync"
+	"testing"
+	"time"
+
 	"github.com/pkg/errors"
 	"gitlab.com/elixxir/client/cmix/gateway"
 	"gitlab.com/elixxir/client/event"
@@ -25,11 +31,6 @@ import (
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/id/ephemeral"
 	"gitlab.com/xx_network/primitives/ndf"
-	"io"
-	"math/rand"
-	"sync"
-	"testing"
-	"time"
 )
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -143,7 +144,7 @@ func (tnm *testNetworkManager) SendManyCMIX([]message.TargetedCmixMessage, param
 type dummyEventMgr struct{}
 
 func (d *dummyEventMgr) Report(int, string, string, string) {}
-func (tnm *testNetworkManager) GetEventManager() event.Manager {
+func (tnm *testNetworkManager) GetEventManager() event.Reporter {
 	return &dummyEventMgr{}
 }
 
diff --git a/e2e/manager.go b/e2e/manager.go
index cccf2d9694623db93a4c71e9b5491ce8db465fc3..853303bbe20633da76ff329ee6f6f4a99ec769e1 100644
--- a/e2e/manager.go
+++ b/e2e/manager.go
@@ -30,7 +30,7 @@ type manager struct {
 	net         cmix.Client
 	myID        *id.ID
 	rng         *fastRNG.StreamGenerator
-	events      event.Manager
+	events      event.Reporter
 	grp         *cyclic.Group
 	crit        *critical
 	rekeyParams rekey.Params
@@ -70,7 +70,7 @@ func initE2E(kv *versioned.KV, myID *id.ID, privKey *cyclic.Int,
 // You can use a memkv for an ephemeral e2e id
 func Load(kv *versioned.KV, net cmix.Client, myID *id.ID,
 	grp *cyclic.Group, rng *fastRNG.StreamGenerator,
-	events event.Manager) (Handler, error) {
+	events event.Reporter) (Handler, error) {
 	kv = kv.Prefix(makeE2ePrefix(myID))
 	return loadE2E(kv, net, myID, grp, rng, events)
 }
@@ -83,7 +83,7 @@ func Load(kv *versioned.KV, net cmix.Client, myID *id.ID,
 // You can use a memkv for an ephemeral e2e id
 func LoadLegacy(kv *versioned.KV, net cmix.Client, myID *id.ID,
 	grp *cyclic.Group, rng *fastRNG.StreamGenerator,
-	events event.Manager, params rekey.Params) (Handler, error) {
+	events event.Reporter, params rekey.Params) (Handler, error) {
 
 	// Marshal the passed params data
 	rekeyParamsData, err := json.Marshal(params)
@@ -114,7 +114,7 @@ func LoadLegacy(kv *versioned.KV, net cmix.Client, myID *id.ID,
 
 func loadE2E(kv *versioned.KV, net cmix.Client, myDefaultID *id.ID,
 	grp *cyclic.Group, rng *fastRNG.StreamGenerator,
-	events event.Manager) (Handler, error) {
+	events event.Reporter) (Handler, error) {
 
 	m := &manager{
 		Switchboard: receive.New(),
diff --git a/e2e/params.go b/e2e/params.go
index ef54d50ee7cd1148a553055f04c53c4c2cbc9f92..52dd2d7b59f7ad6dffe999f56af84b75ed252bba 100644
--- a/e2e/params.go
+++ b/e2e/params.go
@@ -27,6 +27,9 @@ type Params struct {
 	// system within e2e will be used which preserves privacy
 	CMIX cmix.CMIXParams
 
+	// cMix network params
+	Network cmix.Params
+
 	//Authorizes the message to use a key reserved for rekeying. Do not use
 	//unless sending a rekey
 	Rekey bool
diff --git a/e2e/rekey/rekey.go b/e2e/rekey/rekey.go
index 91209bd741f62d039fc9a46276d13ab7727a2a92..8de7ef2daff692cc41914f67c3d8ea7974bb84c9 100644
--- a/e2e/rekey/rekey.go
+++ b/e2e/rekey/rekey.go
@@ -27,7 +27,7 @@ import (
 )
 
 func CheckKeyExchanges(instance *commsNetwork.Instance, grp *cyclic.Group,
-	sendE2E E2eSender, events event.Manager, manager partner.Manager,
+	sendE2E E2eSender, events event.Reporter, manager partner.Manager,
 	param Params, sendTimeout time.Duration) {
 
 	//get all sessions that may need a key exchange
@@ -45,7 +45,7 @@ func CheckKeyExchanges(instance *commsNetwork.Instance, grp *cyclic.Group,
 // session. They run the same negotiation, the former does it on a newly created
 // session while the latter on an extant session
 func trigger(instance *commsNetwork.Instance, grp *cyclic.Group, sendE2E E2eSender,
-	events event.Manager, manager partner.Manager, inputSession *session.Session,
+	events event.Reporter, manager partner.Manager, inputSession *session.Session,
 	sendTimeout time.Duration, params Params) {
 
 	var negotiatingSession *session.Session
diff --git a/event/event.go b/event/event.go
index 84831d997c79eb44a2d5c11df7ffc55279d84b2f..1b017009e991c089bd9b7be930759bd2a1d3ffec 100644
--- a/event/event.go
+++ b/event/event.go
@@ -31,20 +31,20 @@ func (e reportableEvent) String() string {
 }
 
 // Holds state for the event reporting system
-type eventManager struct {
+type Manager struct {
 	eventCh  chan reportableEvent
 	eventCbs sync.Map
 }
 
-func NewEventManager() Manager {
-	return &eventManager{
+func NewEventManager() *Manager {
+	return &Manager{
 		eventCh: make(chan reportableEvent, 1000),
 	}
 }
 
 // Report reports an event from the client to api users, providing a
 // priority, category, eventType, and details
-func (e *eventManager) Report(priority int, category, evtType, details string) {
+func (e *Manager) Report(priority int, category, evtType, details string) {
 	re := reportableEvent{
 		Priority:  priority,
 		Category:  category,
@@ -62,7 +62,7 @@ func (e *eventManager) Report(priority int, category, evtType, details string) {
 // RegisterEventCallback records the given function to receive
 // ReportableEvent objects. It returns the internal index
 // of the callback so that it can be deleted later.
-func (e *eventManager) RegisterEventCallback(name string,
+func (e *Manager) RegisterEventCallback(name string,
 	myFunc Callback) error {
 	_, existsAlready := e.eventCbs.LoadOrStore(name, myFunc)
 	if existsAlready {
@@ -74,18 +74,18 @@ func (e *eventManager) RegisterEventCallback(name string,
 
 // UnregisterEventCallback deletes the callback identified by the
 // index. It returns an error if it fails.
-func (e *eventManager) UnregisterEventCallback(name string) {
+func (e *Manager) UnregisterEventCallback(name string) {
 	e.eventCbs.Delete(name)
 }
 
-func (e *eventManager) EventService() (stoppable.Stoppable, error) {
+func (e *Manager) EventService() (stoppable.Stoppable, error) {
 	stop := stoppable.NewSingle("EventReporting")
 	go e.reportEventsHandler(stop)
 	return stop, nil
 }
 
 // reportEventsHandler reports events to every registered event callback
-func (e *eventManager) reportEventsHandler(stop *stoppable.Single) {
+func (e *Manager) reportEventsHandler(stop *stoppable.Single) {
 	jww.DEBUG.Print("reportEventsHandler routine started")
 	for {
 		select {
diff --git a/event/event_test.go b/event/event_test.go
index 302c0422453aece8e57b8484444ee65593b27939..d657206bac2cbf2ed761ab454e6728484931a6f6 100644
--- a/event/event_test.go
+++ b/event/event_test.go
@@ -26,7 +26,7 @@ func TestEventReporting(t *testing.T) {
 	}
 
 	evtMgr := NewEventManager()
-	stop, _ := evtMgr.eventService()
+	stop, _ := evtMgr.EventService()
 	// Register a callback
 	err := evtMgr.RegisterEventCallback("test", myCb)
 	if err != nil {
diff --git a/event/interface.go b/event/interface.go
index 9de7af0741b16ca1bbd484a3504df6b351ae9e49..867e4dd9c11760474240c27a3661b910b8fe061d 100644
--- a/event/interface.go
+++ b/event/interface.go
@@ -7,13 +7,10 @@
 
 package event
 
-import "gitlab.com/elixxir/client/stoppable"
-
 // Callback defines the callback functions for client event reports
 type Callback func(priority int, category, evtType, details string)
 
-// Manager reporting api (used internally)
-type Manager interface {
+// Reporter reporting api (used internally)
+type Reporter interface {
 	Report(priority int, category, evtType, details string)
-	EventService() (stoppable.Stoppable, error)
 }
diff --git a/groupChat/utils_test.go b/groupChat/utils_test.go
index afbb0ec0604330cb27b35227dcacb93ff0a7f2aa..002dbb17f28fb5170d511b66126b926280beeb53 100644
--- a/groupChat/utils_test.go
+++ b/groupChat/utils_test.go
@@ -9,6 +9,11 @@ package groupChat
 
 import (
 	"encoding/base64"
+	"math/rand"
+	"sync"
+	"testing"
+	"time"
+
 	"github.com/cloudflare/circl/dh/sidh"
 	"github.com/pkg/errors"
 	"gitlab.com/elixxir/client/catalog"
@@ -34,10 +39,6 @@ import (
 	"gitlab.com/xx_network/primitives/id/ephemeral"
 	"gitlab.com/xx_network/primitives/ndf"
 	"gitlab.com/xx_network/primitives/netTime"
-	"math/rand"
-	"sync"
-	"testing"
-	"time"
 )
 
 // newTestManager creates a new Manager for testing.
@@ -359,7 +360,7 @@ func (*testNetworkManager) DeleteService(clientID *id.ID, toDelete message.Servi
 type dummyEventMgr struct{}
 
 func (d *dummyEventMgr) Report(int, string, string, string) {}
-func (tnm *testNetworkManager) GetEventManager() event.Manager {
+func (tnm *testNetworkManager) GetEventManager() event.Reporter {
 	return &dummyEventMgr{}
 }
 
diff --git a/ud/utils_test.go b/ud/utils_test.go
index 425d22d9ae31775bc13b2efe6391037ba3a63f93..7d3b3626c3b479e0a14d87746ac707f970a7327e 100644
--- a/ud/utils_test.go
+++ b/ud/utils_test.go
@@ -15,6 +15,9 @@
 package ud
 
 import (
+	"testing"
+	"time"
+
 	"gitlab.com/elixxir/client/cmix/gateway"
 	"gitlab.com/elixxir/client/event"
 	"gitlab.com/elixxir/client/interfaces"
@@ -28,8 +31,6 @@ import (
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/id/ephemeral"
 	"gitlab.com/xx_network/primitives/ndf"
-	"testing"
-	"time"
 )
 
 func newTestNetworkManager(t *testing.T) interfaces.NetworkManager {
@@ -76,7 +77,7 @@ func (tnm *testNetworkManager) SendManyCMIX([]message.TargetedCmixMessage, param
 type dummyEventMgr struct{}
 
 func (d *dummyEventMgr) Report(int, string, string, string) {}
-func (tnm *testNetworkManager) GetEventManager() event.Manager {
+func (tnm *testNetworkManager) GetEventManager() event.Reporter {
 	return &dummyEventMgr{}
 }