diff --git a/backup/backup.go b/backup/backup.go
index c7d8b8dca75c37dc4d07b12486fc8657c5237a38..866aa394ea525f7fd2af89a486365d7fa8579c10 100644
--- a/backup/backup.go
+++ b/backup/backup.go
@@ -111,7 +111,7 @@ func initializeBackup(password string, updateBackupCb UpdateBackupFn,
 	// Setting backup trigger in client
 	b.backupContainer.SetBackup(b.TriggerBackup)
 
-	b.backupContainer.TriggerBackup("initializeBackup")
+	b.TriggerBackup("initializeBackup")
 	jww.INFO.Print("Initialized backup with new user key.")
 
 	return b, nil
@@ -199,7 +199,13 @@ func (b *Backup) TriggerBackup(reason string) {
 	jww.INFO.Printf("Backup triggered: %s", reason)
 
 	// Send backup on callback
-	go b.updateBackupCb(encryptedBackup)
+	b.mux.RLock()
+	defer b.mux.RUnlock()
+	if b.updateBackupCb != nil {
+		go b.updateBackupCb(encryptedBackup)
+	} else {
+		jww.WARN.Printf("could not call backup callback, stopped...")
+	}
 }
 
 // StopBackup stops the backup processes and deletes the user's password, key,
diff --git a/backup/backup_test.go b/backup/backup_test.go
index fc80163e64f39fd19882fb563f7a586b1d14c2bf..2cf59bd022cb81bfbe3b3d2c58e1fdc84278fbc1 100644
--- a/backup/backup_test.go
+++ b/backup/backup_test.go
@@ -9,15 +9,16 @@ package backup
 
 import (
 	"bytes"
+	"reflect"
+	"strings"
+	"testing"
+	"time"
+
 	"gitlab.com/elixxir/client/interfaces"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/crypto/backup"
 	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/xx_network/crypto/csprng"
-	"reflect"
-	"strings"
-	"testing"
-	"time"
 )
 
 // Tests that Backup.initializeBackup returns a new Backup with a copy of the
@@ -196,6 +197,11 @@ func TestBackup_TriggerBackup_NoKey(t *testing.T) {
 	cbChan := make(chan []byte)
 	cb := func(encryptedBackup []byte) { cbChan <- encryptedBackup }
 	b := newTestBackup("MySuperSecurePassword", cb, t)
+	select {
+	case <-cbChan:
+	case <-time.After(10 * time.Millisecond):
+		t.Errorf("backup not called")
+	}
 
 	err := deleteBackup(b.store.GetKV())
 	if err != nil {
@@ -209,6 +215,7 @@ func TestBackup_TriggerBackup_NoKey(t *testing.T) {
 		t.Errorf("Callback received when it should not have been called: %q", r)
 	case <-time.After(10 * time.Millisecond):
 	}
+
 }
 
 // Tests that Backup.StopBackup prevents the callback from triggering and that
@@ -217,6 +224,11 @@ func TestBackup_StopBackup(t *testing.T) {
 	cbChan := make(chan []byte)
 	cb := func(encryptedBackup []byte) { cbChan <- encryptedBackup }
 	b := newTestBackup("MySuperSecurePassword", cb, t)
+	select {
+	case <-cbChan:
+	case <-time.After(1000 * time.Millisecond):
+		t.Errorf("backup not called")
+	}
 
 	err := b.StopBackup()
 	if err != nil {