diff --git a/bindings/ud.go b/bindings/ud.go
index dffd1ed43eeafee882b893d74421f7de6bae348a..da1b196a2a08810620dc0d0a68c93b9ec16637ae 100644
--- a/bindings/ud.go
+++ b/bindings/ud.go
@@ -124,16 +124,67 @@ func LoadOrNewUserDiscovery(e2eID int, follower UdNetworkStatus,
 		return nil, err
 	}
 
+	// Construct callback
 	UdNetworkStatusFn := func() xxdk.Status {
 		return xxdk.Status(follower.UdNetworkStatus())
 	}
 
+	// Build manager
 	u, err := ud.LoadOrNewManager(user.api, user.api.GetComms(),
 		UdNetworkStatusFn, username, registrationValidationSignature)
 	if err != nil {
 		return nil, err
 	}
 
+	// Track and return manager
+	return udTrackerSingleton.make(u), nil
+}
+
+// LoadOrNewAlternateUserDiscovery loads an existing Manager from storage or creates a
+// new one if there is no extant storage information. This is different from LoadOrNewManager
+// in that it allows the user to provide alternate User Discovery contact information.
+// These parameters may be used to contact a separate UD server than the one run by the
+// xx network team, one the user or a third-party may operate.
+//
+// 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).
+//  - altCert is the TLS certificate for the alternate UD server.
+//  - altAddress is the IP address of the alternate UD server.
+//  - marshalledContact is the data within a marshalled contact.Contact.
+//
+// Returns
+//  - A Manager object which is registered to the specified alternate UD service.
+func LoadOrNewAlternateUserDiscovery(e2eID int, follower UdNetworkStatus,
+	username string, registrationValidationSignature,
+	altCert, altAddress, marshalledContact []byte) (
+	*UserDiscovery, error) {
+
+	// Get user from singleton
+	user, err := e2eTrackerSingleton.get(e2eID)
+	if err != nil {
+		return nil, err
+	}
+
+	// Construct callback
+	UdNetworkStatusFn := func() xxdk.Status {
+		return xxdk.Status(follower.UdNetworkStatus())
+	}
+
+	// Build manager
+	u, err := ud.LoadOrNewAlternateUserDiscovery(user.api, user.api.GetComms(),
+		UdNetworkStatusFn, username, registrationValidationSignature,
+		altCert, altAddress, marshalledContact)
+	if err != nil {
+		return nil, err
+	}
+
+	// Track and return manager
 	return udTrackerSingleton.make(u), nil
 }
 
@@ -263,18 +314,9 @@ func (ud *UserDiscovery) RemoveFact(factJson []byte) error {
 	return ud.api.RemoveFact(f)
 }
 
-// SetAlternativeUserDiscovery sets the alternativeUd object within manager.
-// Once set, any user discovery operation will go through the alternative
-// user discovery service.
-//
-// To undo this operation, use UnsetAlternativeUserDiscovery.
-func (ud *UserDiscovery) SetAlternativeUserDiscovery(
-	altCert, altAddress, contactFile []byte) error {
-	return ud.api.SetAlternativeUserDiscovery(altCert, altAddress, contactFile)
-}
-
 // UnsetAlternativeUserDiscovery clears out the information from the Manager
 // object.
+// todo: should this be removed as well?
 func (ud *UserDiscovery) UnsetAlternativeUserDiscovery() error {
 	return ud.api.UnsetAlternativeUserDiscovery()
 }