diff --git a/cmd/ud.go b/cmd/ud.go
index dfc9f5e20f8c4c04628818ff5e532e566a1910ba..439178602125d5ce2015c937aa20657f3dff6352 100644
--- a/cmd/ud.go
+++ b/cmd/ud.go
@@ -37,14 +37,14 @@ var udCmd = &cobra.Command{
 		cmixParams, e2eParams := initParams()
 		authCbs := makeAuthCallbacks(
 			viper.GetBool(unsafeChannelCreationFlag), e2eParams)
-		client := initE2e(cmixParams, e2eParams, authCbs)
+		messenger := initE2e(cmixParams, e2eParams, authCbs)
 
 		// get user and save contact to file
-		user := client.GetReceptionIdentity()
+		user := messenger.GetReceptionIdentity()
 		jww.INFO.Printf("[UD]User: %s", user.ID)
 		writeContact(user.GetContact())
 
-		err := client.StartNetworkFollower(50 * time.Millisecond)
+		err := messenger.StartNetworkFollower(50 * time.Millisecond)
 		if err != nil {
 			jww.FATAL.Panicf("%+v", err)
 		}
@@ -53,7 +53,7 @@ var udCmd = &cobra.Command{
 
 		// Wait until connected or crash on timeout
 		connected := make(chan bool, 10)
-		client.GetCmix().AddHealthCallback(
+		messenger.GetCmix().AddHealthCallback(
 			func(isconnected bool) {
 				connected <- isconnected
 			})
@@ -62,14 +62,14 @@ var udCmd = &cobra.Command{
 		jww.TRACE.Printf("[UD] Connected!")
 
 		// Make user discovery manager
-		rng := client.GetRng()
+		rng := messenger.GetRng()
 		userToRegister := viper.GetString(udRegisterFlag)
 		jww.TRACE.Printf("[UD] Registering user %v...", userToRegister)
-		userDiscoveryMgr, err := ud.NewManager(client, client.GetComms(),
-			client.NetworkFollowerStatus, userToRegister, nil)
+		userDiscoveryMgr, err := ud.NewManager(messenger, messenger.GetComms(),
+			messenger.NetworkFollowerStatus, userToRegister, nil)
 		if err != nil {
 			if strings.Contains(err.Error(), ud.IsRegisteredErr) {
-				userDiscoveryMgr, err = ud.LoadManager(client, client.GetComms())
+				userDiscoveryMgr, err = ud.LoadManager(messenger, messenger.GetComms())
 				if err != nil {
 					jww.FATAL.Panicf("Failed to load UD manager: %+v", err)
 				}
@@ -146,8 +146,7 @@ var udCmd = &cobra.Command{
 			}
 
 			stream := rng.GetStream()
-			_, _, err = ud.Lookup(client.GetCmix(),
-				stream, client.GetE2E().GetGroup(),
+			_, _, err = ud.Lookup(messenger,
 				udContact, cb, lookupID, single.GetDefaultRequestParams())
 			if err != nil {
 				jww.WARN.Printf("Failed UD lookup: %+v", err)
@@ -166,13 +165,13 @@ var udCmd = &cobra.Command{
 			}
 			jww.INFO.Printf("[UD] BATCHADD: Running")
 			restored, _, _, err := xxmutils.RestoreContactsFromBackup(
-				idListFile, client, userDiscoveryMgr, nil)
+				idListFile, messenger, userDiscoveryMgr, nil)
 			if err != nil {
 				jww.FATAL.Panicf("%+v", err)
 			}
 			for i := 0; i < len(restored); i++ {
 				uid := restored[i]
-				for !client.GetE2E().HasAuthenticatedChannel(uid) {
+				for !messenger.GetE2E().HasAuthenticatedChannel(uid) {
 					time.Sleep(time.Second)
 				}
 				jww.INFO.Printf("[UD] Authenticated channel established for %s", uid)
@@ -225,7 +224,7 @@ var udCmd = &cobra.Command{
 		}
 
 		if len(facts) == 0 {
-			err = client.StopNetworkFollower()
+			err = messenger.StopNetworkFollower()
 			if err != nil {
 				jww.WARN.Print(err)
 			}
@@ -241,19 +240,15 @@ var udCmd = &cobra.Command{
 			}
 		}
 
-		stream := rng.GetStream()
-		defer stream.Close()
 		jww.INFO.Printf("[UD] Search: %v", facts)
-		_, _, err = ud.Search(client.GetCmix(),
-			client.GetEventReporter(),
-			stream, client.GetE2E().GetGroup(),
+		_, _, err = ud.Search(messenger,
 			udContact, cb, facts, single.GetDefaultRequestParams())
 		if err != nil {
 			jww.FATAL.Panicf("%+v", err)
 		}
 
 		time.Sleep(91 * time.Second)
-		err = client.StopNetworkFollower()
+		err = messenger.StopNetworkFollower()
 		if err != nil {
 			jww.WARN.Print(err)
 		}
diff --git a/ud/lookup.go b/ud/lookup.go
index 6f23a8ccd91ac4eb7c76f1c3a71787717695e0b3..d87d68218cdf1e9b15560b413d4011d0efd96bcb 100644
--- a/ud/lookup.go
+++ b/ud/lookup.go
@@ -22,12 +22,17 @@ type lookupCallback func(contact.Contact, error)
 
 // Lookup returns the public key of the passed ID as known by the user discovery
 // system or returns by the timeout.
-func Lookup(net udCmix,
-	rng csprng.Source, grp *cyclic.Group,
+func Lookup(messenger udE2e,
 	udContact contact.Contact, callback lookupCallback,
 	uid *id.ID, p single.RequestParams) ([]id.Round,
 	receptionID.EphemeralIdentity, error) {
 
+	// Extract information from messenger
+	net := messenger.GetCmix()
+	grp := messenger.GetE2E().GetGroup()
+	rng := messenger.GetRng().GetStream()
+	defer rng.Close()
+
 	jww.INFO.Printf("ud.Lookup(%s, %s)", uid, p.Timeout)
 	return lookup(net, rng, uid, grp, udContact, callback, p)
 }
diff --git a/ud/lookup_test.go b/ud/lookup_test.go
index 662ac8552c4bb2409944fddcc61f27f4b3288371..d89e5b6d671d19e1568b2527847ad1300e425891 100644
--- a/ud/lookup_test.go
+++ b/ud/lookup_test.go
@@ -87,8 +87,7 @@ func TestManager_Lookup(t *testing.T) {
 	}
 
 	// Run the lookup
-	_, _, err = Lookup(m.getCmix(), prng,
-		grp, udContact, callback, uid, p)
+	_, _, err = Lookup(m.messenger, udContact, callback, uid, p)
 	if err != nil {
 		t.Errorf("Lookup() returned an error: %+v", err)
 	}
diff --git a/ud/search.go b/ud/search.go
index 473ba7a7fabfb754669726c92063fda1cec52658..e04acde7cda71782e95394faa1bb6018eccbe0b5 100644
--- a/ud/search.go
+++ b/ud/search.go
@@ -13,7 +13,6 @@ import (
 	"gitlab.com/elixxir/crypto/cyclic"
 	"gitlab.com/elixxir/crypto/factID"
 	"gitlab.com/elixxir/primitives/fact"
-	"gitlab.com/xx_network/crypto/csprng"
 	"gitlab.com/xx_network/primitives/id"
 )
 
@@ -28,8 +27,7 @@ type searchCallback func([]contact.Contact, error)
 // used to search for multiple users at once; that can have a privacy reduction.
 // Instead, it is intended to be used to search for a user where multiple pieces
 // of information is known.
-func Search(net udCmix, events event.Reporter,
-	rng csprng.Source, grp *cyclic.Group,
+func Search(messenger udE2e,
 	udContact contact.Contact, callback searchCallback,
 	list fact.FactList,
 	params single.RequestParams) ([]id.Round,
@@ -46,6 +44,14 @@ func Search(net udCmix, events event.Reporter,
 			errors.WithMessage(err, "Failed to form outgoing search request.")
 	}
 
+	// Extract information from messenger
+	net := messenger.GetCmix()
+	events := messenger.GetEventReporter()
+	grp := messenger.GetE2E().GetGroup()
+	rng := messenger.GetRng().GetStream()
+	defer rng.Close()
+
+	// Build response handler
 	response := searchResponse{
 		cb:       callback,
 		services: net,
@@ -54,6 +60,7 @@ func Search(net udCmix, events event.Reporter,
 		factMap:  factMap,
 	}
 
+	// Send message
 	rndId, ephId, err := single.TransmitRequest(udContact, SearchTag,
 		requestMarshaled,
 		response, params, net, rng, grp)
diff --git a/ud/search_test.go b/ud/search_test.go
index 9276aece3c7b46ad6dbf0c18659e6c6846d72b4c..9a0bacb0af27744e12000141716a6561386a242b 100644
--- a/ud/search_test.go
+++ b/ud/search_test.go
@@ -71,7 +71,7 @@ func TestManager_Search(t *testing.T) {
 		CmixParams:          cmix.GetDefaultCMIXParams(),
 	}
 
-	_, _, err = Search(m.getCmix(), m.getEventReporter(), prng, m.messenger.GetE2E().GetGroup(),
+	_, _, err = Search(m.messenger,
 		udContact, callback, factList, p)
 	if err != nil {
 		t.Fatalf("Search() returned an error: %+v", err)
diff --git a/xxmutils/restoreContacts.go b/xxmutils/restoreContacts.go
index 0ec8e38c00b8b2a7693921f88651c633ad643525..e1f261442a4b8530c57d9600dc1ec1aa65fc1842 100644
--- a/xxmutils/restoreContacts.go
+++ b/xxmutils/restoreContacts.go
@@ -243,10 +243,8 @@ func LookupContact(userID *id.ID, messenger *xxdk.E2e, udContact contact.Contact
 	waiter.Lock()
 
 	// in MS, so 90 seconds
-	stream := messenger.GetRng().GetStream()
-	defer stream.Close()
-	_, _, err = ud.Lookup(messenger.GetCmix(), stream, messenger.GetE2E().GetGroup(),
-		udContact, lookupCB, userID, single.GetDefaultRequestParams())
+	_, _, err = ud.Lookup(messenger, udContact, lookupCB, userID,
+		single.GetDefaultRequestParams())
 
 	// Now force a wait for callback to exit
 	waiter.Lock()