diff --git a/ud/channelIDTracking.go b/ud/channelIDTracking.go
index 0dd16e16f096ee1e9261aa8918611f46e1731907..328b1d4dd2ee26258ff272ee7b1820b4bd65c533 100644
--- a/ud/channelIDTracking.go
+++ b/ud/channelIDTracking.go
@@ -59,6 +59,7 @@ func saveRegistrationDisk(kv *versioned.KV, reg registrationDisk) error {
 type registrationDisk struct {
 	rwmutex sync.RWMutex
 
+	Registered bool
 	PublicKey  ed25519.PublicKey
 	PrivateKey ed25519.PrivateKey
 	Lease      int64
@@ -76,12 +77,20 @@ func newRegistrationDisk(publicKey ed25519.PublicKey, privateKey ed25519.Private
 	}
 }
 
+func (r registrationDisk) IsRegistered() bool {
+	r.rwmutex.RLock()
+	defer r.rwmutex.RUnlock()
+
+	return r.Registered
+}
+
 // Update updates the registrationDisk that is currently
 // stored on the kv with a new lease and lease signature.
 func (r registrationDisk) Update(lease int64, signature []byte) {
 	r.rwmutex.Lock()
 	defer r.rwmutex.Unlock()
 
+	r.Registered = true
 	r.Lease = lease
 	r.Signature = signature
 }
@@ -182,12 +191,15 @@ func newclientIDTracker(comms channelLeaseComms, host *connect.Host, username st
 		if err != nil {
 			jww.FATAL.Panic(err)
 		}
+	} else if err != nil {
+		jww.FATAL.Panic(err)
+	}
+
+	if !reg.IsRegistered() {
 		err = c.register()
 		if err != nil {
 			jww.FATAL.Panic(err)
 		}
-	} else if err != nil {
-		jww.FATAL.Panic(err)
 	}
 
 	c := &clientIDTracker{