diff --git a/bindings/ud.go b/bindings/ud.go
index 89ae1d9dbb47d3f0faa515812d9ee507d255659b..8170f87bfd8f154e2733a3f13b26ea6280ed00b9 100644
--- a/bindings/ud.go
+++ b/bindings/ud.go
@@ -105,6 +105,29 @@ type UdNetworkStatus interface {
 // Manager functions                                                          //
 ////////////////////////////////////////////////////////////////////////////////
 
+// IsRegisteredWithUD is a function which checks the internal state
+// files to determine if a user has registered with UD in the past.
+//
+// Parameters:
+//  - e2eID -  REQUIRED. The tracked e2e object ID. This can be retrieved using [E2e.GetID].
+//
+// Returns:
+//   - bool - A boolean representing true if the user has been registered with UD already
+//            or false if it has not been registered already.
+//  - error - An error should only be returned if the internal tracker failed to retrieve an
+//            E2e object given the e2eId. If an error was returned, the registration state check
+//            was not performed properly, and the boolean returned should be ignored.
+func IsRegisteredWithUD(e2eId int) (bool, error) {
+
+	// Get user from singleton
+	user, err := e2eTrackerSingleton.get(e2eId)
+	if err != nil {
+		return false, err
+	}
+
+	return ud.IsRegistered(user.api.GetStorage().GetKV()), nil
+}
+
 // NewOrLoadUd loads an existing UserDiscovery from storage or creates a new
 // UserDiscovery if there is no storage data. Regardless of storage state,
 // the UserDiscovery object returned will be registered with the
diff --git a/ud/manager.go b/ud/manager.go
index 75380113f86a7632db15d99b830e47c2e855181b..1f2301050e12503412dadcd9139c27e71cf70934 100644
--- a/ud/manager.go
+++ b/ud/manager.go
@@ -90,7 +90,7 @@ func NewOrLoad(user udE2e, comms Comms, follower udNetworkStatus,
 	}
 
 	// If already registered, return
-	if m.isRegistered() {
+	if IsRegistered(m.getKv()) {
 		return m, nil
 	}
 
@@ -223,7 +223,7 @@ func (m *Manager) getCmix() udCmix {
 	return m.user.GetCmix()
 }
 
-// getKv returns a versioned.KV used for isRegistered and setRegistered.
+// getKv returns a versioned.KV used for IsRegistered and setRegistered.
 // This is separated from store operations as store's kv
 // has a different prefix which breaks backwards compatibility.
 func (m *Manager) getKv() *versioned.KV {
diff --git a/ud/registered.go b/ud/registered.go
index 06dba95886e3d92717ae9d8143fbd3ca8bd3189c..77742fc17923e1b0a30c03622db40e797e76ec36 100644
--- a/ud/registered.go
+++ b/ud/registered.go
@@ -11,10 +11,10 @@ import (
 const isRegisteredKey = "isRegisteredKey"
 const isRegisteredVersion = 0
 
-// isRegistered loads from storage if the user is registered with user
+// IsRegistered loads from storage if the user is registered with user
 // discovery.
-func (m *Manager) isRegistered() bool {
-	_, err := m.getKv().Get(isRegisteredKey, isRegisteredVersion)
+func IsRegistered(kv *versioned.KV) bool {
+	_, err := kv.Get(isRegisteredKey, isRegisteredVersion)
 	if err != nil {
 		return false
 	}