diff --git a/bindings/collective_test.go b/bindings/collective_test.go
index 1404c0cc34f446a33f3192ffb1f91d518b04c390..bfe136fa546da94d17f56cce7c879ce2ece94510 100644
--- a/bindings/collective_test.go
+++ b/bindings/collective_test.go
@@ -12,7 +12,11 @@ import (
 	"encoding/json"
 	"fmt"
 	"math/rand"
+	"sync"
 	"testing"
+
+	"github.com/stretchr/testify/require"
+	"gitlab.com/xx_network/primitives/netTime"
 )
 
 const (
@@ -196,32 +200,52 @@ func TestGetChannelInfo(t *testing.T) {
 // 	return txLog
 // }
 
-// type mockRemote struct {
-// 	lck  sync.Mutex
-// 	data map[string][]byte
-// }
+type mockRemote struct {
+	lck  sync.Mutex
+	data map[string][]byte
+	t    *testing.T
+}
 
-// func (m *mockRemote) Read(path string) ([]byte, error) {
-// 	m.lck.Lock()
-// 	defer m.lck.Unlock()
-// 	return m.data[path], nil
-// }
+func (m *mockRemote) Read(path string) ([]byte, error) {
+	m.lck.Lock()
+	defer m.lck.Unlock()
+	return m.data[path], nil
+}
 
-// func (m *mockRemote) Write(path string, data []byte) error {
-// 	m.lck.Lock()
-// 	defer m.lck.Unlock()
-// 	m.data[path] = append(m.data[path], data...)
-// 	return nil
-// }
+func (m *mockRemote) Write(path string, data []byte) error {
+	m.lck.Lock()
+	defer m.lck.Unlock()
+	m.data[path] = append(m.data[path], data...)
+	return nil
+}
 
-// func (m *mockRemote) ReadDir(path string) ([]string, error) {
-// 	panic("unimplemented")
-// }
+func (m *mockRemote) ReadDir(path string) ([]byte, error) {
+	dirs := []string{
+		"hello",
+		"these",
+		"are",
+		"directory",
+		"names",
+	}
 
-// func (m mockRemote) GetLastModified(path string) (time.Time, error) {
-// 	return netTime.Now(), nil
-// }
+	data, err := json.Marshal(dirs)
+	m.t.Logf("Data: %s", data)
+	return data, err
+}
 
-// func (m mockRemote) GetLastWrite() (time.Time, error) {
-// 	return netTime.Now(), nil
-// }
+func (m *mockRemote) GetLastModified(path string) ([]byte, error) {
+	return netTime.Now().MarshalBinary()
+}
+
+func (m *mockRemote) GetLastWrite() ([]byte, error) {
+	return netTime.Now().MarshalBinary()
+}
+
+func TestReadDir(t *testing.T) {
+	mRemote := newRemoteStoreFileSystemWrapper(
+		&mockRemote{t: t, data: make(map[string][]byte)})
+
+	dirs, err := mRemote.ReadDir("test")
+	require.NoError(t, err)
+	t.Logf("%+v", dirs)
+}
diff --git a/storage/regStatus.go b/storage/regStatus.go
index 49a506c62095e721c76a86b36b8e872136a0df68..1e458a580c24b37d7f3d37a3e215e8507e630b43 100644
--- a/storage/regStatus.go
+++ b/storage/regStatus.go
@@ -10,6 +10,7 @@ package storage
 import (
 	"encoding/binary"
 	"fmt"
+
 	"github.com/pkg/errors"
 	"gitlab.com/elixxir/client/v4/storage/versioned"
 	"gitlab.com/xx_network/primitives/netTime"
@@ -67,7 +68,7 @@ func (s *session) newRegStatus() error {
 		Data:      s.regStatus.marshalBinary(),
 	}
 
-	err := s.Set(registrationStatusKey, &obj)
+	err := s.syncKV.Set(registrationStatusKey, &obj)
 	if err != nil {
 		return errors.WithMessagef(err, "Failed to store new "+
 			"registration status")
@@ -78,7 +79,7 @@ func (s *session) newRegStatus() error {
 
 // loads registration status from disk.
 func (s *session) loadRegStatus() error {
-	obj, err := s.Get(registrationStatusKey)
+	obj, err := s.syncKV.Get(registrationStatusKey, currentSessionVersion)
 	if err != nil {
 		return errors.WithMessage(err, "Failed to load registration status")
 	}
@@ -105,8 +106,7 @@ func (s *session) ForwardRegistrationStatus(regStatus RegistrationStatus) error
 		Timestamp: now,
 		Data:      regStatus.marshalBinary(),
 	}
-
-	err := s.Set(registrationStatusKey, &obj)
+	err := s.syncKV.Set(registrationStatusKey, &obj)
 	if err != nil {
 		return errors.WithMessagef(err, "Failed to store registration status")
 	}
diff --git a/storage/session.go b/storage/session.go
index 3197c82223b34c85cdd327a0ff43d919a210102a..86dbad9617f5f975f690b0d62e3c88d09f4937b9 100644
--- a/storage/session.go
+++ b/storage/session.go
@@ -17,6 +17,7 @@ import (
 
 	"gitlab.com/elixxir/crypto/diffieHellman"
 
+	"gitlab.com/elixxir/client/v4/collective"
 	"gitlab.com/elixxir/client/v4/storage/utility"
 	"gitlab.com/xx_network/crypto/large"
 
@@ -74,7 +75,8 @@ type Session interface {
 }
 
 type session struct {
-	kv versioned.KV
+	kv     versioned.KV
+	syncKV versioned.KV
 
 	// memoized data
 	mux       sync.RWMutex
@@ -95,11 +97,17 @@ func New(storage versioned.KV, u user.Info,
 	currentVersion version.Version,
 	cmixGrp, e2eGrp *cyclic.Group) (Session, error) {
 
+	remote, err := storage.Prefix(collective.StandardRemoteSyncPrefix)
+	if err != nil {
+		return nil, errors.Wrapf(err, "create new session")
+	}
+
 	s := &session{
-		kv: storage,
+		kv:     storage,
+		syncKV: remote,
 	}
 
-	err := s.newRegStatus()
+	err = s.newRegStatus()
 	if err != nil {
 		return nil, errors.WithMessage(err,
 			"Create new session")
@@ -114,12 +122,15 @@ func New(storage versioned.KV, u user.Info,
 	}
 
 	s.clientVersion, err = clientVersion.NewStore(currentVersion, s.kv)
+	if err != nil {
+		return nil, err
+	}
 
-	if err = utility.StoreGroup(s.kv, cmixGrp, cmixGroupKey); err != nil {
+	if err = utility.StoreGroup(s.syncKV, cmixGrp, cmixGroupKey); err != nil {
 		return nil, err
 	}
 
-	if err = utility.StoreGroup(s.kv, e2eGrp, e2eGroupKey); err != nil {
+	if err = utility.StoreGroup(s.syncKV, e2eGrp, e2eGroupKey); err != nil {
 		return nil, err
 	}
 
@@ -132,11 +143,17 @@ func New(storage versioned.KV, u user.Info,
 func Load(storage versioned.KV,
 	currentVersion version.Version) (Session, error) {
 
+	remote, err := storage.Prefix(collective.StandardRemoteSyncPrefix)
+	if err != nil {
+		return nil, errors.Wrapf(err, "create new session")
+	}
+
 	s := &session{
-		kv: storage,
+		kv:     storage,
+		syncKV: remote,
 	}
 
-	err := s.loadRegStatus()
+	err = s.loadRegStatus()
 	if err != nil {
 		if !ekv.Exists(err) {
 			return nil, errors.Errorf(
@@ -163,12 +180,12 @@ func Load(storage versioned.KV,
 		return nil, errors.WithMessage(err, "Failed to load Session")
 	}
 
-	s.cmixGroup, err = utility.LoadGroup(s.kv, cmixGroupKey)
+	s.cmixGroup, err = utility.LoadGroup(s.syncKV, cmixGroupKey)
 	if err != nil {
 		return nil, errors.WithMessage(err, "Failed to load Session")
 	}
 
-	s.e2eGroup, err = utility.LoadGroup(s.kv, e2eGroupKey)
+	s.e2eGroup, err = utility.LoadGroup(s.syncKV, e2eGroupKey)
 	if err != nil {
 		return nil, errors.WithMessage(err, "Failed to load Session")
 	}
diff --git a/storage/user/user.go b/storage/user/user.go
index 39bbcd6cc311462280943f8a9d886ca74c5424ed..d647b49beed02c5044824b414c026f707bea8ec7 100644
--- a/storage/user/user.go
+++ b/storage/user/user.go
@@ -8,11 +8,11 @@
 package user
 
 import (
-	"gitlab.com/elixxir/client/v4/collective"
 	"sync"
 	"time"
 
 	"github.com/pkg/errors"
+	"gitlab.com/elixxir/client/v4/collective"
 	"gitlab.com/elixxir/client/v4/storage/versioned"
 	"gitlab.com/elixxir/crypto/cyclic"
 	"gitlab.com/elixxir/crypto/rsa"
@@ -44,8 +44,10 @@ func NewUser(kv versioned.KV, transmissionID, receptionID *id.ID, transmissionSa
 		return nil, err
 	}
 
-	ci := newCryptographicIdentity(transmissionID, receptionID, transmissionSalt,
-		receptionSalt, transmissionRsa, receptionRsa, isPrecanned, e2eDhPrivateKey, e2eDhPublicKey, remote)
+	ci := newCryptographicIdentity(transmissionID, receptionID,
+		transmissionSalt, receptionSalt, transmissionRsa,
+		receptionRsa, isPrecanned,
+		e2eDhPrivateKey, e2eDhPublicKey, remote)
 
 	return &User{CryptographicIdentity: ci, kv: remote}, nil
 }