diff --git a/cmd/ud.go b/cmd/ud.go
index 22c4c918727be7491dc2d2d9ab43aeffb62281a8..10d423889ff8c1dcc2a363ad821af820db76beaa 100644
--- a/cmd/ud.go
+++ b/cmd/ud.go
@@ -10,7 +10,6 @@ package cmd
 
 import (
 	"fmt"
-	"strings"
 	"time"
 
 	"gitlab.com/elixxir/client/single"
@@ -62,21 +61,12 @@ var udCmd = &cobra.Command{
 		jww.TRACE.Printf("[UD] Connected!")
 
 		// Make user discovery manager
-		rng := user.GetRng()
 		userToRegister := viper.GetString(udRegisterFlag)
 		jww.TRACE.Printf("[UD] Registering identity %v...", userToRegister)
-		userDiscoveryMgr, err := ud.NewManager(user, user.GetComms(),
+		userDiscoveryMgr, err := ud.LoadOrNewManager(user, user.GetComms(),
 			user.NetworkFollowerStatus, userToRegister, nil)
 		if err != nil {
-			if strings.Contains(err.Error(), ud.IsRegisteredErr) {
-				userDiscoveryMgr, err = ud.LoadManager(user, user.GetComms())
-				if err != nil {
-					jww.FATAL.Panicf("Failed to load UD manager: %+v", err)
-				}
-			} else {
-				jww.FATAL.Panicf("Failed to create new UD manager: %+v", err)
-
-			}
+			jww.FATAL.Panicf("Failed to load or create new UD manager: %+v", err)
 		}
 		jww.INFO.Printf("[UD] Registered user %v", userToRegister)
 
@@ -145,13 +135,11 @@ var udCmd = &cobra.Command{
 				printContact(newContact)
 			}
 
-			stream := rng.GetStream()
 			_, _, err = ud.Lookup(user,
 				udContact, cb, lookupID, single.GetDefaultRequestParams())
 			if err != nil {
 				jww.WARN.Printf("Failed UD lookup: %+v", err)
 			}
-			stream.Close()
 
 			time.Sleep(31 * time.Second)
 		}
diff --git a/ud/manager.go b/ud/manager.go
index 6c5817abcd05d9c27f935a1847539bc067339b34..212920a0f8c5cdb568943c77ea876dcc14cea331 100644
--- a/ud/manager.go
+++ b/ud/manager.go
@@ -18,12 +18,6 @@ import (
 	"gitlab.com/xx_network/primitives/id"
 )
 
-const (
-	IsRegisteredErr = "NewManager is already registered. " +
-		"NewManager is meant for the first instantiation. Use LoadManager " +
-		"for all other calls"
-)
-
 // Manager is the control structure for the contacting the user discovery service.
 type Manager struct {
 
@@ -48,19 +42,22 @@ type Manager struct {
 	// alternativeUd is an alternate User discovery service to circumvent
 	// production. This is for testing with a separately deployed UD service.
 	alternativeUd *alternateUd
-
-	// registrationValidationSignature for the ReceptionID
-	// Optional, depending on UD configuration
-	registrationValidationSignature []byte
 }
 
-// NewManager builds a new user discovery manager.
-// It requires that an updated
-// NDF is available and will error if one is not.
-// registrationValidationSignature may be set to nil
-func NewManager(user udE2e, comms Comms, follower udNetworkStatus,
-	username string, registrationValidationSignature []byte) (*Manager, error) {
-	jww.INFO.Println("ud.NewManager()")
+// LoadOrNewManager loads an existing Manager from storage or creates a
+// new one if there is no extant storage information.
+//
+// Params
+//  - user is an interface that adheres to the xxdk.E2e object.
+//  - comms is an interface that adheres to client.Comms object.
+//  - follower is a method off of xxdk.Cmix which returns the network follower's status.
+//  - username is the name of the user as it is registered with UD. This will be what the end user
+//  provides if through the bindings.
+//  - networkValidationSig is a signature provided by the network (i.e. the client registrar). This may
+//  be nil, however UD may return an error in some cases (e.g. in a production level environment).
+func LoadOrNewManager(user udE2e, comms Comms, follower udNetworkStatus,
+	username string, networkValidationSig []byte) (*Manager, error) {
+	jww.INFO.Println("ud.LoadOrNewManager()")
 
 	if follower() != xxdk.Running {
 		return nil, errors.New(
@@ -69,13 +66,18 @@ func NewManager(user udE2e, comms Comms, follower udNetworkStatus,
 
 	// Initialize manager
 	m := &Manager{
-		user:                            user,
-		comms:                           comms,
-		registrationValidationSignature: registrationValidationSignature,
+		user:  user,
+		comms: comms,
 	}
 
 	if m.isRegistered() {
-		return nil, errors.Errorf(IsRegisteredErr)
+		// Load manager if already registered
+		var err error
+		m.store, err = store.NewOrLoadStore(m.getKv())
+		if err != nil {
+			return nil, errors.Errorf("Failed to initialize store: %v", err)
+		}
+		return m, nil
 	}
 
 	// Initialize store
@@ -95,7 +97,7 @@ func NewManager(user udE2e, comms Comms, follower udNetworkStatus,
 	// Register with user discovery
 	stream := m.getRng().GetStream()
 	defer stream.Close()
-	err = m.register(username, stream, m.comms, udHost)
+	err = m.register(username, networkValidationSig, stream, m.comms, udHost)
 	if err != nil {
 		return nil, errors.Errorf("Failed to register: %v", err)
 	}
@@ -185,29 +187,6 @@ func InitStoreFromBackup(kv *versioned.KV,
 	return nil
 }
 
-// LoadManager loads the state of the Manager
-// from disk. This is meant to be called after any the first
-// instantiation of the manager by NewUserDiscovery.
-func LoadManager(user udE2e, comms Comms) (*Manager, error) {
-	m := &Manager{
-		user:  user,
-		comms: comms,
-	}
-
-	if !m.isRegistered() {
-		return nil, errors.Errorf("LoadManager could not detect that " +
-			"the user has been registered. Has a manager been initiated before?")
-	}
-
-	var err error
-	m.store, err = store.NewOrLoadStore(m.getKv())
-	if err != nil {
-		return nil, errors.Errorf("Failed to initialize store: %v", err)
-	}
-
-	return m, err
-}
-
 // GetFacts returns a list of fact.Fact objects that exist within the
 // Store's registeredFacts map.
 func (m *Manager) GetFacts() []fact.Fact {
diff --git a/ud/register.go b/ud/register.go
index 66aa812b13f5f057113c5aa619c207e8a3556b89..f41532bd5605ae7d45ddf90baea152293c489d3e 100644
--- a/ud/register.go
+++ b/ud/register.go
@@ -14,8 +14,8 @@ import (
 
 // register initiates registration with user discovery given a specified
 // username. Provided a comms sub-interface to facilitate testing.
-func (m *Manager) register(username string, rng csprng.Source,
-	comm registerUserComms, udHost *connect.Host) error {
+func (m *Manager) register(username string, networkSignature []byte,
+	rng csprng.Source, comm registerUserComms, udHost *connect.Host) error {
 
 	var err error
 	identity := m.user.GetReceptionIdentity()
@@ -35,7 +35,7 @@ func (m *Manager) register(username string, rng csprng.Source,
 
 	// Construct the user registration message
 	msg := &pb.UDBUserRegistration{
-		PermissioningSignature: m.registrationValidationSignature,
+		PermissioningSignature: networkSignature,
 		RSAPublicPem:           string(rsa.CreatePublicKeyPem(privKey.GetPublic())),
 		IdentityRegistration: &pb.Identity{
 			Username: username,
diff --git a/ud/register_test.go b/ud/register_test.go
index a5bd09bcb5f5bca1386547c1cb8959edc7a3a2d1..3a521042c31d8703e752efd439a1456ce8b789af 100644
--- a/ud/register_test.go
+++ b/ud/register_test.go
@@ -34,13 +34,15 @@ func TestManager_register(t *testing.T) {
 	c := &testRegisterComm{}
 	prng := NewPrng(42)
 
-	err = m.register("testUser", prng, c, udHost)
+	mockSig := []byte("mock")
+
+	err = m.register("testUser", mockSig, prng, c, udHost)
 	if err != nil {
 		t.Errorf("register() returned an error: %+v", err)
 	}
 
 	// Check if the UDBUserRegistration contents are correct
-	isCorrect("testUser", c.msg, m, t)
+	isCorrect("testUser", mockSig, c.msg, m, t)
 
 	// Verify the signed identity data
 	pubKeyPem := m.user.GetReceptionIdentity().RSAPrivatePem
@@ -66,10 +68,10 @@ func TestManager_register(t *testing.T) {
 
 // isCorrect checks if the UDBUserRegistration has all the expected fields minus
 // any signatures.
-func isCorrect(username string, msg *pb.UDBUserRegistration, m *Manager, t *testing.T) {
-	if !bytes.Equal(m.registrationValidationSignature, msg.PermissioningSignature) {
+func isCorrect(username string, mockSig []byte, msg *pb.UDBUserRegistration, m *Manager, t *testing.T) {
+	if !bytes.Equal(mockSig, msg.PermissioningSignature) {
 		t.Errorf("PermissioningSignature incorrect.\n\texpected: %v\n\treceived: %v",
-			m.registrationValidationSignature, msg.PermissioningSignature)
+			mockSig, msg.PermissioningSignature)
 	}
 
 	identity := m.user.GetReceptionIdentity()