diff --git a/go.mod b/go.mod
index 7b732085c5ae630d5ef1cca6c40e3af43f7b5d70..fa815c2b5b6203c9e57afe3f6d8840b1462f1098 100644
--- a/go.mod
+++ b/go.mod
@@ -6,8 +6,10 @@ require (
 	github.com/cloudflare/circl v1.2.0
 	github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3
 	github.com/golang/protobuf v1.5.2
+	github.com/hack-pad/go-indexeddb v0.2.0
 	github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
 	github.com/pkg/errors v0.9.1
+	github.com/pkg/profile v1.6.0
 	github.com/spf13/cobra v1.5.0
 	github.com/spf13/jwalterweatherman v1.1.0
 	github.com/spf13/viper v1.12.0
@@ -39,7 +41,6 @@ require (
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/pelletier/go-toml v1.9.5 // indirect
 	github.com/pelletier/go-toml/v2 v2.0.2 // indirect
-	github.com/pkg/profile v1.6.0 // indirect
 	github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
 	github.com/spf13/afero v1.9.2 // indirect
 	github.com/spf13/cast v1.5.0 // indirect
diff --git a/go.sum b/go.sum
index f7e6a7f3bd583b9e23004c714f103b137a2cd4aa..d18f43d3f51104a293784a2d27462cec5d7fbfc1 100644
--- a/go.sum
+++ b/go.sum
@@ -226,6 +226,8 @@ github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK
 github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/hack-pad/go-indexeddb v0.2.0 h1:QHDM6gLrtCJvHdHUK8UdibJu4xWQlIDs4+l8L65AUdA=
+github.com/hack-pad/go-indexeddb v0.2.0/go.mod h1:NH8CaojufPNcKYDhy5JkjfyBXE/72oJPeiywlabN/lM=
 github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0=
 github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
diff --git a/ud/manager.go b/ud/manager.go
index 5ab902fbb9f21059cb0538f900debc6d69b3e7bf..89edc765fa7820e761dd824b56dd4fb85cfdec4a 100644
--- a/ud/manager.go
+++ b/ud/manager.go
@@ -114,9 +114,7 @@ func NewOrLoad(user udE2e, comms Comms, follower udNetworkStatus,
 		return nil, err
 	}
 
-	err = m.store.StoreUsername(usernameFact)
-
-	return m, nil
+	return m, m.store.StoreUsername(usernameFact)
 }
 
 // NewManagerFromBackup builds a new user discover manager from a backup.
diff --git a/ud/store/facts.go b/ud/store/facts.go
index 37ad17b4f7f60cb54a4d708a2f0c8c5ac70c342f..4721b864ead28fb44a6e2a3c7bd7b87196d4c9f8 100644
--- a/ud/store/facts.go
+++ b/ud/store/facts.go
@@ -55,7 +55,7 @@ func (s *Store) StoreUsername(f fact.Fact) error {
 
 	s.confirmedFacts[f] = struct{}{}
 
-	return s.saveUnconfirmedFacts()
+	return s.saveConfirmedFacts()
 }
 
 // GetUsername retrieves the username from the Store object.
diff --git a/ud/store/facts_test.go b/ud/store/facts_test.go
index 9e3143139af82972f958e21d188cb38f84f190c2..3155d383b36e7eb95d218f3389fa62e0ba9be0b6 100644
--- a/ud/store/facts_test.go
+++ b/ud/store/facts_test.go
@@ -20,9 +20,9 @@ func TestNewStore(t *testing.T) {
 
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	_, err := NewStore(kv)
+	_, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 }
@@ -32,9 +32,9 @@ func TestStore_RestoreFromBackUp(t *testing.T) {
 
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	s, err := NewStore(kv)
+	s, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	expected := fact.Fact{
@@ -61,9 +61,9 @@ func TestStore_RestoreFromBackUp_StatefulStore(t *testing.T) {
 
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	s, err := NewStore(kv)
+	s, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	confirmId := "confirm"
@@ -90,9 +90,9 @@ func TestStore_RestoreFromBackUp_StatefulStore(t *testing.T) {
 func TestStore_ConfirmFact(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	expectedStore, err := NewStore(kv)
+	expectedStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	confirmId := "confirm"
@@ -128,9 +128,9 @@ func TestStore_ConfirmFact(t *testing.T) {
 func TestStore_StoreUnconfirmedFact(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	expectedStore, err := NewStore(kv)
+	expectedStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	confirmId := "confirm"
@@ -156,9 +156,9 @@ func TestStore_StoreUnconfirmedFact(t *testing.T) {
 func TestStore_DeleteFact(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	expectedStore, err := NewStore(kv)
+	expectedStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	expected := fact.Fact{
@@ -188,9 +188,9 @@ func TestStore_DeleteFact(t *testing.T) {
 func TestStore_BackUpMissingFacts(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	expectedStore, err := NewStore(kv)
+	expectedStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	email := fact.Fact{
@@ -228,9 +228,9 @@ func TestStore_BackUpMissingFacts(t *testing.T) {
 func TestStore_BackUpMissingFacts_DuplicateFactType(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	expectedStore, err := NewStore(kv)
+	expectedStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	email := fact.Fact{
@@ -270,9 +270,9 @@ func TestStore_BackUpMissingFacts_DuplicateFactType(t *testing.T) {
 func TestStore_GetFacts(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	testStore, err := NewStore(kv)
+	testStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	emailFact := fact.Fact{
@@ -324,9 +324,9 @@ func TestStore_GetFacts(t *testing.T) {
 func TestStore_GetFactStrings(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	testStore, err := NewStore(kv)
+	testStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	emailFact := fact.Fact{
diff --git a/ud/store/store.go b/ud/store/store.go
index f2083eb8371675d5f17f84b2c736375d83a6147d..ef8f9debd350b3648d8c7ff6a8f7a637280d1440 100644
--- a/ud/store/store.go
+++ b/ud/store/store.go
@@ -48,8 +48,8 @@ type Store struct {
 	mux              sync.RWMutex
 }
 
-// NewStore creates a new, empty Store object.
-func NewStore(kv *versioned.KV) (*Store, error) {
+// newStore creates a new, empty Store object.
+func newStore(kv *versioned.KV) (*Store, error) {
 	kv = kv.Prefix(prefix)
 
 	s := &Store{
@@ -130,14 +130,11 @@ func (s *Store) saveUnconfirmedFacts() error {
 func NewOrLoadStore(kv *versioned.KV) (*Store, error) {
 
 	s := &Store{
-		confirmedFacts:   make(map[fact.Fact]struct{}, 0),
-		unconfirmedFacts: make(map[string]fact.Fact, 0),
-		kv:               kv.Prefix(prefix),
+		kv: kv.Prefix(prefix),
 	}
-
 	if err := s.load(); err != nil {
 		if !s.kv.Exists(err) {
-			return s, s.save()
+			return newStore(kv)
 		} else {
 			return nil, err
 		}
@@ -250,10 +247,11 @@ func (s *Store) unmarshalConfirmedFacts(data []byte) (map[fact.Fact]struct{}, er
 
 	// Deserialize the list into a map
 	confirmedFacts := make(map[fact.Fact]struct{}, 0)
-	for _, fStr := range fStrings {
+	for i := range fStrings {
+		fStr := fStrings[i]
 		f, err := fact.UnstringifyFact(fStr)
 		if err != nil {
-			return nil, errors.WithMessage(err, malformedFactErr)
+			return confirmedFacts, errors.WithMessage(err, malformedFactErr)
 		}
 
 		confirmedFacts[f] = struct{}{}
diff --git a/ud/store/store_test.go b/ud/store/store_test.go
index 33485b43e06dedc59b362410b2378ba535f55ce7..a319d81284e122e420c89efc3a3828826c95ae3a 100644
--- a/ud/store/store_test.go
+++ b/ud/store/store_test.go
@@ -20,9 +20,9 @@ import (
 func TestNewOrLoadStore_LoadStore(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	expectedStore, err := NewStore(kv)
+	expectedStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	receivedStore, err := NewOrLoadStore(kv)
@@ -66,9 +66,9 @@ func TestNewOrLoadStore_NewStore(t *testing.T) {
 func TestStore_MarshalUnmarshal_ConfirmedFacts(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	expectedStore, err := NewStore(kv)
+	expectedStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	data, err := expectedStore.kv.Get(confirmedFactKey, version)
@@ -82,7 +82,7 @@ func TestStore_MarshalUnmarshal_ConfirmedFacts(t *testing.T) {
 	}
 
 	if !bytes.Equal(expectedData, data.Data) {
-		t.Errorf("NewStore() returned incorrect Store."+
+		t.Errorf("newStore() returned incorrect Store."+
 			"\nexpected: %+v\nreceived: %+v", expectedData,
 			data.Data)
 	}
@@ -102,9 +102,9 @@ func TestStore_MarshalUnmarshal_ConfirmedFacts(t *testing.T) {
 func TestStore_MarshalUnmarshal_UnconfirmedFacts(t *testing.T) {
 	kv := versioned.NewKV(ekv.MakeMemstore())
 
-	expectedStore, err := NewStore(kv)
+	expectedStore, err := newStore(kv)
 	if err != nil {
-		t.Errorf("NewStore() produced an error: %v", err)
+		t.Errorf("newStore() produced an error: %v", err)
 	}
 
 	data, err := expectedStore.kv.Get(unconfirmedFactKey, version)
@@ -118,7 +118,7 @@ func TestStore_MarshalUnmarshal_UnconfirmedFacts(t *testing.T) {
 	}
 
 	if !bytes.Equal(expectedData, data.Data) {
-		t.Errorf("NewStore() returned incorrect Store."+
+		t.Errorf("newStore() returned incorrect Store."+
 			"\nexpected: %+v\nreceived: %+v", expectedData,
 			data.Data)
 	}