diff --git a/ud/addFact_test.go b/ud/addFact_test.go
index 7fecfc4d6d59a3a15666e662cbb149af52c6795d..3ed67bc62a02c8141324fcf0adae1b80b60f36b5 100644
--- a/ud/addFact_test.go
+++ b/ud/addFact_test.go
@@ -2,13 +2,9 @@ package ud
 
 import (
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/storage"
-	"gitlab.com/elixxir/comms/client"
 	pb "gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/primitives/fact"
 	"gitlab.com/xx_network/comms/connect"
-	"gitlab.com/xx_network/crypto/csprng"
-	"gitlab.com/xx_network/crypto/signature/rsa"
 	"gitlab.com/xx_network/primitives/id"
 	"os"
 	"testing"
@@ -31,28 +27,8 @@ func (rFC *testAFC) SendRegisterFact(*connect.Host, *pb.FactRegisterRequest) (
 
 // Test that the addFact function completes successfully
 func TestAddFact(t *testing.T) {
-	isReg := uint32(1)
 
-	// Create a new Private Key to use for signing the Fact
-	rng := csprng.NewSystemRNG()
-	cpk, err := rsa.GenerateKey(rng, 2048)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	comms, err := client.NewClientComms(nil, nil, nil, nil)
-	if err != nil {
-		t.Errorf("Failed to start client comms: %+v", err)
-	}
-
-	// Create our Manager object
-	m := Manager{
-		comms:      comms,
-		net:        newTestNetworkManager(t),
-		privKey:    cpk,
-		registered: &isReg,
-		storage:    storage.InitTestingSession(t),
-	}
+	m := newTestManager(t)
 
 	// Create our test fact
 	USCountryCode := "US"
@@ -68,7 +44,7 @@ func TestAddFact(t *testing.T) {
 	tAFC := testAFC{}
 	uid := &id.ID{}
 	// Run addFact and see if it returns without an error!
-	_, err = m.addFact(f, uid, &tAFC)
+	_, err := m.addFact(f, uid, &tAFC)
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/ud/confirmFact_test.go b/ud/confirmFact_test.go
index 4b9789b40d07d4ea3689d2caa5c90752ca1fea46..6034192a78d2a0596958a6cef0c1cd1685211c27 100644
--- a/ud/confirmFact_test.go
+++ b/ud/confirmFact_test.go
@@ -1,12 +1,17 @@
 package ud
 
 import (
+	"gitlab.com/elixxir/client/event"
 	"gitlab.com/elixxir/client/storage"
-	"gitlab.com/elixxir/comms/client"
+	"gitlab.com/elixxir/client/storage/versioned"
+	store "gitlab.com/elixxir/client/ud/store"
 	pb "gitlab.com/elixxir/comms/mixmessages"
+	"gitlab.com/elixxir/crypto/fastRNG"
+	"gitlab.com/elixxir/ekv"
 	"gitlab.com/elixxir/primitives/fact"
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/comms/messages"
+	"gitlab.com/xx_network/crypto/csprng"
 	"reflect"
 	"testing"
 )
@@ -22,19 +27,24 @@ func (t *testComm) SendConfirmFact(_ *connect.Host, message *pb.FactConfirmReque
 
 // Happy path.
 func TestManager_confirmFact(t *testing.T) {
-	isReg := uint32(1)
+	storageSess := storage.InitTestingSession(t)
 
-	comms, err := client.NewClientComms(nil, nil, nil, nil)
+	kv := versioned.NewKV(ekv.Memstore{})
+	udStore, err := store.NewOrLoadStore(kv)
 	if err != nil {
-		t.Errorf("Failed to start client comms: %+v", err)
+		t.Fatalf("Failed to initialize store %v", err)
 	}
 
-	// Set up manager
+	// Create our Manager object
 	m := &Manager{
-		comms:      comms,
-		net:        newTestNetworkManager(t),
-		registered: &isReg,
-		storage:    storage.InitTestingSession(t),
+		services: newTestNetworkManager(t),
+		e2e:      mockE2e{},
+		events:   event.NewEventManager(),
+		user:     storageSess,
+		comms:    &mockComms{},
+		store:    udStore,
+		kv:       kv,
+		rng:      fastRNG.NewStreamGenerator(1, 1, csprng.NewSystemRNG),
 	}
 
 	c := &testComm{}
@@ -45,7 +55,7 @@ func TestManager_confirmFact(t *testing.T) {
 	}
 
 	// Set up store for expected state
-	err = m.storage.GetUd().StoreUnconfirmedFact(expectedRequest.ConfirmationID, fact.Fact{})
+	err = m.store.StoreUnconfirmedFact(expectedRequest.ConfirmationID, fact.Fact{})
 	if err != nil {
 		t.Fatalf("StoreUnconfirmedFact error: %v", err)
 	}
diff --git a/ud/manager_test.go b/ud/manager_test.go
index 1dcb6c273df1c6ec7ed92980b15fc8990cfab01a..bb84a3cbcf16beb39cba2f145462705311f98488 100644
--- a/ud/manager_test.go
+++ b/ud/manager_test.go
@@ -8,9 +8,6 @@
 package ud
 
 import (
-	"gitlab.com/elixxir/comms/client"
-	"gitlab.com/xx_network/crypto/csprng"
-	"gitlab.com/xx_network/crypto/signature/rsa"
 	"testing"
 )
 
@@ -53,30 +50,10 @@ EnretBzQkeKeBwoB2u6NTiOmUjk=
 var testContact = `<xxc(2)LF2ccT+sdqh0AIKlFFeDOJdnxzbQQYhGStgxhOXmijIDkAZiB9kZo+Dl3bRSbBi5pXZ82rOu2IQXz9+5sspChvoccZqgC/dXGhlesmiNy/EbKxWtptTF4tcNyQxtnmCXg1p/HwKey4G2XDekTw86lq6Lpmj72jozvRWlQisqvWz/5deiPaeFGKDKC0OrrDFnIib7WnKqdYt4XyTKdmObnmbvdCbliZq0zBl7J40qKy5FypYXGlZjStIm0R1qtD4XHMZMsrMJEGxdM55zJdSzknXbR8MNahUrGMyUOTivXLHzojYLht0gFQifKMVWhrDjUoVQV43KOLPmdBwY/2Kc5KvVloDeuDXYY0i7tD63gNIp9JA3gJQUJymDdwqbS13riT1DMHHkdTzKEyGdHS+v2l7AVSlJBiTKuyM00FBNuXhhIcFR7ONFCf8cRPOPPBx3Q6iHNsvsca3KPNhwOJBgaQvHSkjIMsudiR954QbwG9rbi2vxVobIgWYMl5j6vlBS/9rfbE/uLdTEQZfNsLKDCIVCCI4I1bYZxZrDLPrfXTrN6W0sCLE7a/kRBQAAAgA7+LwJqiv9O1ogLnS4TYkSEg==xxc>`
 
 func TestManager_SetAlternativeUserDiscovery(t *testing.T) {
-	isReg := uint32(1)
-
-	// Create a new Private Key to use for signing the Fact
-	rng := csprng.NewSystemRNG()
-	cpk, err := rsa.GenerateKey(rng, 2048)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	comms, err := client.NewClientComms(nil, nil, nil, nil)
-	if err != nil {
-		t.Errorf("Failed to start client comms: %+v", err)
-	}
-
-	// Create our Manager object
-	m := Manager{
-		comms:      comms,
-		net:        newTestNetworkManager(t),
-		privKey:    cpk,
-		registered: &isReg,
-	}
+	m := newTestManager(t)
 
 	altAddr := "0.0.0.0:11420"
-	err = m.SetAlternativeUserDiscovery([]byte(testCert), []byte(altAddr), []byte(testContact))
+	err := m.SetAlternativeUserDiscovery([]byte(testCert), []byte(altAddr), []byte(testContact))
 	if err != nil {
 		t.Fatalf("Unexpected error in SetAlternativeUserDiscovery: %v", err)
 	}
diff --git a/ud/register_test.go b/ud/register_test.go
index 0bdd3ef54f664235549b98e40f380f7bc21585c3..df7cb0c732a9f0ba4c77b227ef6b320434c34e4c 100644
--- a/ud/register_test.go
+++ b/ud/register_test.go
@@ -2,16 +2,12 @@ package ud
 
 import (
 	"bytes"
-	"gitlab.com/elixxir/client/storage"
-	"gitlab.com/elixxir/comms/client"
 	pb "gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/crypto/factID"
-	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/elixxir/crypto/hash"
 	"gitlab.com/elixxir/primitives/fact"
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/comms/messages"
-	"gitlab.com/xx_network/crypto/csprng"
 	"gitlab.com/xx_network/crypto/signature/rsa"
 	"reflect"
 	"testing"
@@ -28,34 +24,25 @@ func (t *testRegisterComm) SendRegisterUser(_ *connect.Host, msg *pb.UDBUserRegi
 
 // Happy path.
 func TestManager_register(t *testing.T) {
-	isReg := uint32(0)
+	m := newTestManager(t)
 
-	comms, err := client.NewClientComms(nil, nil, nil, nil)
+	udHost, err := m.getOrAddUdHost()
 	if err != nil {
-		t.Errorf("Failed to start client comms: %+v", err)
-	}
-
-	// Set up manager
-	m := &Manager{
-		comms:      comms,
-		net:        newTestNetworkManager(t),
-		rng:        fastRNG.NewStreamGenerator(12, 3, csprng.NewSystemRNG),
-		storage:    storage.InitTestingSession(t),
-		registered: &isReg,
+		t.Fatalf("Failed to get/add ud host: %+v", err)
 	}
 
 	c := &testRegisterComm{}
 
-	err = m.register("testUser", c)
+	err = m.register("testUser", c, udHost)
 	if err != nil {
 		t.Errorf("register() returned an error: %+v", err)
 	}
 
 	// Check if the UDBUserRegistration contents are correct
-	m.isCorrect("testUser", c.msg, t)
+	isCorrect("testUser", c.msg, m, t)
 
 	// Verify the signed identity data
-	pubKey := m.storage.User().GetCryptographicIdentity().GetTransmissionRSA().GetPublic()
+	pubKey := m.user.PortableUserInfo().ReceptionRSA.GetPublic()
 	err = rsa.Verify(pubKey, hash.CMixHash, c.msg.IdentityRegistration.Digest(),
 		c.msg.IdentitySignature, nil)
 	if err != nil {
@@ -73,18 +60,19 @@ func TestManager_register(t *testing.T) {
 
 // isCorrect checks if the UDBUserRegistration has all the expected fields minus
 // any signatures.
-func (m *Manager) isCorrect(username string, msg *pb.UDBUserRegistration, t *testing.T) {
-	user := m.storage.User()
-	cryptoUser := m.storage.User().GetCryptographicIdentity()
+func isCorrect(username string, msg *pb.UDBUserRegistration, m *Manager, t *testing.T) {
+	userInfo := m.user.PortableUserInfo()
 
-	if !bytes.Equal(user.GetTransmissionRegistrationValidationSignature(), msg.PermissioningSignature) {
+	if !bytes.Equal(m.user.GetReceptionRegistrationValidationSignature(), msg.PermissioningSignature) {
 		t.Errorf("PermissioningSignature incorrect.\n\texpected: %v\n\treceived: %v",
-			user.GetTransmissionRegistrationValidationSignature(), msg.PermissioningSignature)
+			m.user.GetReceptionRegistrationValidationSignature(), msg.PermissioningSignature)
 	}
 
-	if string(rsa.CreatePublicKeyPem(cryptoUser.GetTransmissionRSA().GetPublic())) != msg.RSAPublicPem {
+	if string(rsa.CreatePublicKeyPem(userInfo.TransmissionRSA.GetPublic())) !=
+		msg.RSAPublicPem {
 		t.Errorf("RSAPublicPem incorrect.\n\texpected: %v\n\treceived: %v",
-			string(rsa.CreatePublicKeyPem(cryptoUser.GetTransmissionRSA().GetPublic())), msg.RSAPublicPem)
+			string(rsa.CreatePublicKeyPem(userInfo.TransmissionRSA.GetPublic())),
+			msg.RSAPublicPem)
 	}
 
 	if username != msg.IdentityRegistration.Username {
@@ -92,19 +80,19 @@ func (m *Manager) isCorrect(username string, msg *pb.UDBUserRegistration, t *tes
 			username, msg.IdentityRegistration.Username)
 	}
 
-	if !bytes.Equal(m.storage.E2e().GetDHPublicKey().Bytes(), msg.IdentityRegistration.DhPubKey) {
+	if !bytes.Equal(userInfo.E2eDhPublicKey.Bytes(), msg.IdentityRegistration.DhPubKey) {
 		t.Errorf("IdentityRegistration DhPubKey incorrect.\n\texpected: %#v\n\treceived: %#v",
-			m.storage.E2e().GetDHPublicKey().Bytes(), msg.IdentityRegistration.DhPubKey)
+			userInfo.E2eDhPublicKey.Bytes(), msg.IdentityRegistration.DhPubKey)
 	}
 
-	if !bytes.Equal(cryptoUser.GetTransmissionSalt(), msg.IdentityRegistration.Salt) {
+	if !bytes.Equal(userInfo.TransmissionSalt, msg.IdentityRegistration.Salt) {
 		t.Errorf("IdentityRegistration Salt incorrect.\n\texpected: %#v\n\treceived: %#v",
-			cryptoUser.GetTransmissionSalt(), msg.IdentityRegistration.Salt)
+			userInfo.TransmissionSalt, msg.IdentityRegistration.Salt)
 	}
 
-	if !bytes.Equal(cryptoUser.GetTransmissionID().Marshal(), msg.Frs.UID) {
+	if !bytes.Equal(userInfo.TransmissionID.Marshal(), msg.Frs.UID) {
 		t.Errorf("Frs UID incorrect.\n\texpected: %v\n\treceived: %v",
-			cryptoUser.GetTransmissionID().Marshal(), msg.Frs.UID)
+			userInfo.TransmissionID.Marshal(), msg.Frs.UID)
 	}
 
 	if !reflect.DeepEqual(&pb.Fact{Fact: username}, msg.Frs.Fact) {
diff --git a/ud/utils_test.go b/ud/utils_test.go
index 7d3b3626c3b479e0a14d87746ac707f970a7327e..969b93e780e2540cffe31365286de634c1d70c66 100644
--- a/ud/utils_test.go
+++ b/ud/utils_test.go
@@ -15,17 +15,37 @@
 package ud
 
 import (
+	"github.com/cloudflare/circl/dh/sidh"
+	"gitlab.com/elixxir/client/catalog"
+	"gitlab.com/elixxir/client/cmix"
+	"gitlab.com/elixxir/client/cmix/identity"
+	cmixMsg "gitlab.com/elixxir/client/cmix/message"
+	"gitlab.com/elixxir/client/cmix/rounds"
+	"gitlab.com/elixxir/client/e2e"
+	"gitlab.com/elixxir/client/e2e/ratchet/partner"
+	"gitlab.com/elixxir/client/e2e/ratchet/partner/session"
+	"gitlab.com/elixxir/client/e2e/receive"
+	"gitlab.com/elixxir/client/event"
+	"gitlab.com/elixxir/client/storage/user"
+	"gitlab.com/elixxir/client/storage/versioned"
+	store "gitlab.com/elixxir/client/ud/store"
+	pb "gitlab.com/elixxir/comms/mixmessages"
+	"gitlab.com/elixxir/comms/testkeys"
+	"gitlab.com/elixxir/crypto/cyclic"
+	e2eCrypto "gitlab.com/elixxir/crypto/e2e"
+	"gitlab.com/elixxir/crypto/fastRNG"
+	"gitlab.com/elixxir/ekv"
+	"gitlab.com/xx_network/comms/messages"
+	"gitlab.com/xx_network/crypto/csprng"
+	"gitlab.com/xx_network/crypto/large"
+	"gitlab.com/xx_network/crypto/signature/rsa"
+	"gitlab.com/xx_network/primitives/utils"
 	"testing"
 	"time"
 
 	"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/stoppable"
 	"gitlab.com/elixxir/comms/network"
-	"gitlab.com/elixxir/crypto/e2e"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/primitives/id"
@@ -33,7 +53,60 @@ import (
 	"gitlab.com/xx_network/primitives/ndf"
 )
 
-func newTestNetworkManager(t *testing.T) interfaces.NetworkManager {
+func newTestManager(t *testing.T) *Manager {
+
+	keyData, err := utils.ReadFile(testkeys.GetNodeKeyPath())
+	if err != nil {
+		t.Fatalf("Could not load private key: %v", err)
+	}
+
+	key, err := rsa.LoadPrivateKeyFromPem(keyData)
+	if err != nil {
+		t.Fatalf("Could not load public key")
+	}
+
+	kv := versioned.NewKV(ekv.Memstore{})
+	udStore, err := store.NewOrLoadStore(kv)
+	if err != nil {
+		t.Fatalf("Failed to initialize store %v", err)
+	}
+
+	// Create our Manager object
+	m := &Manager{
+		services: newTestNetworkManager(t),
+		e2e:      mockE2e{},
+		events:   event.NewEventManager(),
+		user:     mockUser{testing: t, key: key},
+		store:    udStore,
+		comms:    &mockComms{},
+		kv:       kv,
+		rng:      fastRNG.NewStreamGenerator(1, 1, csprng.NewSystemRNG),
+	}
+
+	netDef := m.services.GetInstance().GetPartialNdf().Get()
+	// Unmarshal UD ID from the NDF
+	udID, err := id.Unmarshal(netDef.UDB.ID)
+	if err != nil {
+		t.Fatalf("failed to "+
+			"unmarshal UD ID from NDF: %+v", err)
+	}
+
+	params := connect.GetDefaultHostParams()
+	params.AuthEnabled = false
+	params.SendTimeout = 20 * time.Second
+
+	// Add a new host and return it if it does not already exist
+	_, err = m.comms.AddHost(udID, netDef.UDB.Address,
+		[]byte(netDef.UDB.Cert), params)
+	if err != nil {
+		t.Fatalf("User Discovery host " +
+			"object could not be constructed.")
+	}
+
+	return m
+}
+
+func newTestNetworkManager(t *testing.T) cmix.Client {
 	instanceComms := &connect.ProtoComms{
 		Manager: connect.NewManagerTesting(t),
 	}
@@ -49,52 +122,369 @@ func newTestNetworkManager(t *testing.T) interfaces.NetworkManager {
 	}
 }
 
+func getGroup() *cyclic.Group {
+	return cyclic.NewGroup(
+		large.NewIntFromString("E2EE983D031DC1DB6F1A7A67DF0E9A8E5561DB8E8D4941"+
+			"3394C049B7A8ACCEDC298708F121951D9CF920EC5D146727AA4AE535B0922C688"+
+			"B55B3DD2AEDF6C01C94764DAB937935AA83BE36E67760713AB44A6337C20E7861"+
+			"575E745D31F8B9E9AD8412118C62A3E2E29DF46B0864D0C951C394A5CBBDC6ADC"+
+			"718DD2A3E041023DBB5AB23EBB4742DE9C1687B5B34FA48C3521632C4A530E8FF"+
+			"B1BC51DADDF453B0B2717C2BC6669ED76B4BDD5C9FF558E88F26E5785302BEDBC"+
+			"A23EAC5ACE92096EE8A60642FB61E8F3D24990B8CB12EE448EEF78E184C7242DD"+
+			"161C7738F32BF29A841698978825B4111B4BC3E1E198455095958333D776D8B2B"+
+			"EEED3A1A1A221A6E37E664A64B83981C46FFDDC1A45E3D5211AAF8BFBC072768C"+
+			"4F50D7D7803D2D4F278DE8014A47323631D7E064DE81C0C6BFA43EF0E6998860F"+
+			"1390B5D3FEACAF1696015CB79C3F9C2D93D961120CD0E5F12CBB687EAB045241F"+
+			"96789C38E89D796138E6319BE62E35D87B1048CA28BE389B575E994DCA7554715"+
+			"84A09EC723742DC35873847AEF49F66E43873", 16),
+		large.NewIntFromString("2", 16))
+}
+
+type mockUser struct {
+	testing *testing.T
+	key     *rsa.PrivateKey
+}
+
+func (m mockUser) PortableUserInfo() user.Info {
+
+	return user.Info{
+		TransmissionID:        id.NewIdFromString("test", id.User, m.testing),
+		TransmissionSalt:      []byte("test"),
+		TransmissionRSA:       m.key,
+		ReceptionID:           id.NewIdFromString("test", id.User, m.testing),
+		ReceptionSalt:         []byte("test"),
+		ReceptionRSA:          m.key,
+		Precanned:             false,
+		RegistrationTimestamp: 0,
+		E2eDhPrivateKey:       getGroup().NewInt(5),
+		E2eDhPublicKey:        getGroup().NewInt(6),
+	}
+}
+
+func (m mockUser) GetReceptionRegistrationValidationSignature() []byte {
+	return []byte("test")
+}
+
 // testNetworkManager is a test implementation of NetworkManager interface.
 type testNetworkManager struct {
 	instance *network.Instance
 }
 
-func (tnm *testNetworkManager) SendE2E(message.Send, params.E2E, *stoppable.Single) ([]id.Round, e2e.MessageID, time.Time, error) {
-	return nil, e2e.MessageID{}, time.Time{}, nil
+func (tnm *testNetworkManager) GetInstance() *network.Instance {
+	return tnm.instance
 }
 
-func (tnm *testNetworkManager) SendUnsafe(message.Send, params.Unsafe) ([]id.Round, error) {
-	return nil, nil
+func (tnm *testNetworkManager) GetVerboseRounds() string {
+	//TODO implement me
+	panic("implement me")
 }
 
-func (tnm *testNetworkManager) GetVerboseRounds() string {
-	return ""
+func (tnm *testNetworkManager) Follow(report cmix.ClientErrorReport) (stoppable.Stoppable, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) GetMaxMessageLength() int {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) Send(recipient *id.ID, fingerprint format.Fingerprint, service cmixMsg.Service, payload, mac []byte, cmixParams cmix.CMIXParams) (id.Round, ephemeral.Id, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, p cmix.CMIXParams) (id.Round, []ephemeral.Id, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) RemoveIdentity(id *id.ID) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) GetIdentity(get *id.ID) (identity.TrackedID, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, mp cmixMsg.Processor) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) DeleteFingerprint(identity *id.ID, fingerprint format.Fingerprint) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) DeleteClientFingerprints(identity *id.ID) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) AddService(clientID *id.ID, newService cmixMsg.Service, response cmixMsg.Processor) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) DeleteService(clientID *id.ID, toDelete cmixMsg.Service, processor cmixMsg.Processor) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) DeleteClientService(clientID *id.ID) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) TrackServices(tracker cmixMsg.ServicesTracker) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) CheckInProgressMessages() {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) IsHealthy() bool {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) WasHealthy() bool {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) AddHealthCallback(f func(bool)) uint64 {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) RemoveHealthCallback(u uint64) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) HasNode(nid *id.ID) bool {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) NumRegisteredNodes() int {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) TriggerNodeRegistration(nid *id.ID) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) GetRoundResults(timeout time.Duration, roundCallback cmix.RoundEventCallback, roundList ...id.Round) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) LookupHistoricalRound(rid id.Round, callback rounds.RoundResultCallback) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) SendToAny(sendFunc func(host *connect.Host) (interface{}, error), stop *stoppable.Single) (interface{}, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) SendToPreferred(targets []*id.ID, sendFunc gateway.SendToPreferredFunc, stop *stoppable.Single, timeout time.Duration) (interface{}, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) SetGatewayFilter(f gateway.Filter) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) GetHostParams() connect.HostParams {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) GetAddressSpace() uint8 {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) RegisterAddressSpaceNotification(tag string) (chan uint8, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (tnm *testNetworkManager) UnregisterAddressSpaceNotification(tag string) {
+	//TODO implement me
+	panic("implement me")
+}
+
+type mockUserStore struct{}
+
+func (m mockUserStore) PortableUserInfo() user.Info {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockUserStore) GetUsername() (string, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockUserStore) GetReceptionRegistrationValidationSignature() []byte {
+	//TODO implement me
+	panic("implement me")
+}
+
+type mockComms struct {
+	udHost *connect.Host
+}
+
+func (m mockComms) SendRegisterUser(host *connect.Host, message *pb.UDBUserRegistration) (*messages.Ack, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockComms) SendRegisterFact(host *connect.Host, message *pb.FactRegisterRequest) (*pb.FactRegisterResponse, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockComms) SendConfirmFact(host *connect.Host, message *pb.FactConfirmRequest) (*messages.Ack, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockComms) SendRemoveFact(host *connect.Host, message *pb.FactRemovalRequest) (*messages.Ack, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockComms) SendRemoveUser(host *connect.Host, message *pb.FactRemovalRequest) (*messages.Ack, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m *mockComms) AddHost(hid *id.ID, address string, cert []byte, params connect.HostParams) (host *connect.Host, err error) {
+	h, err := connect.NewHost(hid, address, cert, params)
+	if err != nil {
+		return nil, err
+	}
+
+	m.udHost = h
+	return h, nil
 }
 
-func (tnm *testNetworkManager) SendCMIX(format.Message, *id.ID, params.CMIX) (id.Round, ephemeral.Id, error) {
-	return 0, ephemeral.Id{}, nil
+func (m mockComms) GetHost(hostId *id.ID) (*connect.Host, bool) {
+	return m.udHost, true
 }
 
-func (tnm *testNetworkManager) SendManyCMIX([]message.TargetedCmixMessage, params.CMIX) (id.Round, []ephemeral.Id, error) {
-	return 0, nil, nil
+type mockE2e struct{}
+
+func (m mockE2e) SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, params e2e.Params) ([]id.Round, e2eCrypto.MessageID, time.Time, error) {
+	//TODO implement me
+	panic("implement me")
 }
 
-type dummyEventMgr struct{}
+func (m mockE2e) RegisterListener(senderID *id.ID, messageType catalog.MessageType, newListener receive.Listener) receive.ListenerID {
+	//TODO implement me
+	panic("implement me")
+}
 
-func (d *dummyEventMgr) Report(int, string, string, string) {}
-func (tnm *testNetworkManager) GetEventManager() event.Reporter {
-	return &dummyEventMgr{}
+func (m mockE2e) RegisterFunc(name string, senderID *id.ID, messageType catalog.MessageType, newListener receive.ListenerFunc) receive.ListenerID {
+	//TODO implement me
+	panic("implement me")
 }
 
-func (tnm *testNetworkManager) GetInstance() *network.Instance             { return tnm.instance }
-func (tnm *testNetworkManager) GetHealthTracker() interfaces.HealthTracker { return nil }
-func (tnm *testNetworkManager) Follow(interfaces.ClientErrorReport) (stoppable.Stoppable, error) {
-	return nil, nil
+func (m mockE2e) SendUnsafe(mt catalog.MessageType, recipient *id.ID, payload []byte, params e2e.Params) ([]id.Round, time.Time, error) {
+	//TODO implement me
+	panic("implement me")
 }
-func (tnm *testNetworkManager) CheckGarbledMessages()        {}
-func (tnm *testNetworkManager) InProgressRegistrations() int { return 0 }
-func (tnm *testNetworkManager) GetSender() *gateway.Sender   { return nil }
-func (tnm *testNetworkManager) GetAddressSize() uint8        { return 0 }
-func (tnm *testNetworkManager) RegisterAddressSizeNotification(string) (chan uint8, error) {
-	return nil, nil
+
+func (m mockE2e) StartProcesses() (stoppable.Stoppable, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) RegisterChannel(name string, senderID *id.ID, messageType catalog.MessageType, newListener chan receive.Message) receive.ListenerID {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) Unregister(listenerID receive.ListenerID) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) AddPartner(partnerID *id.ID, partnerPubKey, myPrivKey *cyclic.Int, partnerSIDHPubKey *sidh.PublicKey, mySIDHPrivKey *sidh.PrivateKey, sendParams, receiveParams session.Params) (partner.Manager, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) GetPartner(partnerID *id.ID) (partner.Manager, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) DeletePartner(partnerId *id.ID) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) GetAllPartnerIDs() []*id.ID {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) AddService(tag string, processor cmixMsg.Processor) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) RemoveService(tag string) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) EnableUnsafeReception() {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) GetGroup() *cyclic.Group {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) GetHistoricalDHPubkey() *cyclic.Int {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) GetHistoricalDHPrivkey() *cyclic.Int {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) GetReceptionID() *id.ID {
+	//TODO implement me
+	panic("implement me")
 }
-func (tnm *testNetworkManager) UnregisterAddressSizeNotification(string) {}
-func (tnm *testNetworkManager) SetPoolFilter(gateway.Filter)             {}
 
 func getNDF() *ndf.NetworkDefinition {
 	return &ndf.NetworkDefinition{